From 4e8f387f57116e2aa99bc492c1c833bf25141be8 Mon Sep 17 00:00:00 2001 From: Francesco Lannutti Date: Sat, 17 Oct 2020 21:49:38 +0200 Subject: [PATCH] Added the KLU support to Noise Analysis --- src/spicelib/analysis/noisean.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/spicelib/analysis/noisean.c b/src/spicelib/analysis/noisean.c index d4824ce49..f6ecf3a11 100644 --- a/src/spicelib/analysis/noisean.c +++ b/src/spicelib/analysis/noisean.c @@ -21,6 +21,10 @@ Modified: 2001 AlansFixes #include "vsrc/vsrcdefs.h" #include "isrc/isrcdefs.h" +#ifdef KLU +#include "ngspice/devdefs.h" +#endif + // fixme // ugly hack to work around missing api to specify the "type" of signals extern int fixme_onoise_type; @@ -130,6 +134,18 @@ NOISEan (CKTcircuit *ckt, int restart) return(E_BADPARM); } +#ifdef KLU + if (ckt->CKTmatrix->CKTkluMODE) + { + /* Conversion from Complex Matrix to Real Matrix */ + for (i = 0 ; i < DEVmaxnum ; i++) + if (DEVices [i] && DEVices [i]->DEVbindCSCComplexToReal && ckt->CKThead [i]) + DEVices [i]->DEVbindCSCComplexToReal (ckt->CKThead [i], ckt) ; + + ckt->CKTmatrix->SMPkluMatrix->KLUmatrixIsComplex = KLUmatrixReal ; + } +#endif + /* error = DCop(ckt); */ error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, @@ -238,6 +254,21 @@ NOISEan (CKTcircuit *ckt, int restart) data->lstFreq = data->freq; +#ifdef KLU + if (ckt->CKTmatrix->CKTkluMODE) + { + /* Conversion from Real Matrix to Complex Matrix */ + if (!ckt->CKTmatrix->SMPkluMatrix->KLUmatrixIsComplex) + { + for (i = 0 ; i < DEVmaxnum ; i++) + if (DEVices [i] && DEVices [i]->DEVbindCSCComplex && ckt->CKThead [i]) + DEVices [i]->DEVbindCSCComplex (ckt->CKThead [i], ckt) ; + + ckt->CKTmatrix->SMPkluMatrix->KLUmatrixIsComplex = KLUMatrixComplex ; + } + } +#endif + /* do the noise analysis over all frequencies */ while (data->freq <= job->NstopFreq + freqTol) {