diff --git a/src/maths/KLU/klusmp.c b/src/maths/KLU/klusmp.c index 7816bfe06..1725fc8da 100644 --- a/src/maths/KLU/klusmp.c +++ b/src/maths/KLU/klusmp.c @@ -473,6 +473,16 @@ SMPdestroy (SMPmatrix *Matrix) free (Matrix->CKTdiag_CSC) ; free (Matrix->CKTkluAx_Complex) ; free (Matrix->CKTkluIntermediate_Complex) ; + Matrix->CKTkluNumeric = NULL ; + Matrix->CKTkluSymbolic = NULL ; + Matrix->CKTkluAp = NULL ; + Matrix->CKTkluAi = NULL ; + Matrix->CKTkluAx = NULL ; + Matrix->CKTkluIntermediate = NULL ; + Matrix->CKTbindStruct = NULL ; + Matrix->CKTdiag_CSC = NULL ; + Matrix->CKTkluAx_Complex = NULL ; + Matrix->CKTkluIntermediate_Complex = NULL ; } } diff --git a/src/spicelib/analysis/cktsens.c b/src/spicelib/analysis/cktsens.c index dce4be602..b24e1b2ca 100644 --- a/src/spicelib/analysis/cktsens.c +++ b/src/spicelib/analysis/cktsens.c @@ -375,20 +375,23 @@ int sens_sens(CKTcircuit *ckt, int restart) if (error) return error; -//#ifdef KLU -// if (ckt->CKTmatrix->CKTkluMODE) -// { -// /* Conversion from Real Matrix to Complex Matrix */ -// if (!ckt->CKTmatrix->CKTkluMatrixIsComplex) -// { -// for (i = 0; i < DEVmaxnum; i++) -// if (DEVices [i] && DEVices [i]->DEVbindCSCComplex && ckt->CKThead [i]) -// DEVices [i]->DEVbindCSCComplex (ckt->CKThead [i], ckt); -// -// ckt->CKTmatrix->CKTkluMatrixIsComplex = CKTkluMatrixComplex; -// } -// } -//#endif +#ifdef KLU + if (ckt->CKTmatrix->CKTkluMODE) + { + /* ReOrder */ + error = SMPpreOrder (ckt->CKTmatrix); + + /* Conversion from Real Matrix to Complex Matrix */ + if (!ckt->CKTmatrix->CKTkluMatrixIsComplex) + { + for (i = 0; i < DEVmaxnum; i++) + if (DEVices [i] && DEVices [i]->DEVbindCSCComplex && ckt->CKThead [i]) + DEVices [i]->DEVbindCSCComplex (ckt->CKThead [i], ckt); + + ckt->CKTmatrix->CKTkluMatrixIsComplex = CKTkluMatrixComplex; + } + } +#endif error = NIacIter(ckt); if (error)