From 2e8bd0cea62913254f007b5275662f2c3c5d8376 Mon Sep 17 00:00:00 2001 From: Vogt Date: Thu, 1 Aug 2024 13:28:08 +0200 Subject: [PATCH 1/9] Note directed to stdout --- src/spicelib/analysis/cktsetup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spicelib/analysis/cktsetup.c b/src/spicelib/analysis/cktsetup.c index d858fca55..b5045c99d 100644 --- a/src/spicelib/analysis/cktsetup.c +++ b/src/spicelib/analysis/cktsetup.c @@ -182,7 +182,7 @@ CKTsetup(CKTcircuit *ckt) #endif } else { - fprintf (stderr, "Using SPARSE 1.3 as Direct Linear Solver\n") ; + fprintf (stdout, "Using SPARSE 1.3 as Direct Linear Solver\n") ; } #endif From f95e8c2e3afdd8c87f6096ba6f0555bc10d7c4f3 Mon Sep 17 00:00:00 2001 From: Vogt Date: Thu, 1 Aug 2024 13:28:32 +0200 Subject: [PATCH 2/9] Error and warning messages to stderr --- src/ciderlib/support/misc.c | 6 +++--- src/frontend/inp.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ciderlib/support/misc.c b/src/ciderlib/support/misc.c index e96ed0ff0..3ef34ec17 100644 --- a/src/ciderlib/support/misc.c +++ b/src/ciderlib/support/misc.c @@ -134,16 +134,16 @@ foundError(int error) switch( error ) { /* Removed for Spice3e1 Compatibility case spSMALL_PIVOT: - printf( "Warning: LU Decomposition Problem - SMALL PIVOT\n" ); + fprintf(stderr, "Warning: LU Decomposition Problem - SMALL PIVOT\n" ); matrixError = FALSE; break; */ case spPANIC: - printf( "Error: LU Decomposition Failed - PANIC\n" ); + fprintf(stderr, "Error: LU Decomposition Failed - PANIC\n" ); matrixError = TRUE; break; case spSINGULAR: - printf( "Error: LU Decomposition Failed - SINGULAR\n" ); + fprintf(stderr, "Error: LU Decomposition Failed - SINGULAR\n" ); matrixError = TRUE; break; /* Removed for Spice3e1 Compatibility diff --git a/src/frontend/inp.c b/src/frontend/inp.c index 0df4e6eaa..682400818 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -1107,8 +1107,8 @@ inp_spsource(FILE *fp, bool comfile, char *filename, bool intfile) strstr(dd->line, " rms ") || strstr(dd->line, " integ ")) { - printf("Warning: .OPTION AUTOSTOP will not be effective because one of 'max|min|avg|rms|integ' is used in .meas\n"); - printf(" AUTOSTOP being disabled...\n"); + fprintf(stderr, "Warning: .OPTION AUTOSTOP will not be effective because one of 'max|min|avg|rms|integ' is used in .meas\n"); + fprintf(stderr, " AUTOSTOP being disabled...\n"); cp_remvar("autostop"); } } From 7bfaefada4e226b2b3d35932c5d7327dc0e219b6 Mon Sep 17 00:00:00 2001 From: Vogt Date: Thu, 1 Aug 2024 13:36:44 +0200 Subject: [PATCH 3/9] Don't dereference a NULL pointer. --- src/spicelib/analysis/cktsetup.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/spicelib/analysis/cktsetup.c b/src/spicelib/analysis/cktsetup.c index b5045c99d..67e4f886b 100644 --- a/src/spicelib/analysis/cktsetup.c +++ b/src/spicelib/analysis/cktsetup.c @@ -171,10 +171,12 @@ CKTsetup(CKTcircuit *ckt) BindNode.CSC = NULL ; BindNode.CSC_Complex = NULL ; matched = (BindElement *) bsearch (&BindNode, BindStruct, nz, sizeof (BindElement), BindCompare) ; - if (matched == NULL) { - printf ("Ptr %p not found in BindStruct Table\n", ckt->enh->rshunt_data.diag [i]) ; + if (!matched) { + fprintf (stderr, "Error: Ptr %p not found in BindStruct Table\n", ckt->enh->rshunt_data.diag [i]) ; + ckt->enh->rshunt_data.diag[i] = NULL; } - ckt->enh->rshunt_data.diag [i] = matched->CSC ; + else + ckt->enh->rshunt_data.diag [i] = matched->CSC ; i++; } } From 3af65f1d28bc4a5a0d6f68a1c66e1944c563c019 Mon Sep 17 00:00:00 2001 From: Vogt Date: Thu, 1 Aug 2024 13:39:18 +0200 Subject: [PATCH 4/9] Notes go to stdout. --- src/spicelib/analysis/cktsetup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spicelib/analysis/cktsetup.c b/src/spicelib/analysis/cktsetup.c index 67e4f886b..8b5141f50 100644 --- a/src/spicelib/analysis/cktsetup.c +++ b/src/spicelib/analysis/cktsetup.c @@ -151,7 +151,7 @@ CKTsetup(CKTcircuit *ckt) #ifdef KLU if (ckt->CKTmatrix->CKTkluMODE) { - fprintf (stderr, "Using KLU as Direct Linear Solver\n") ; + fprintf (stdout, "Using KLU as Direct Linear Solver\n") ; /* Convert the COO Storage to CSC for KLU and Fill the Binding Table */ SMPconvertCOOtoCSC (matrix) ; From ee9a8462ea07f28f980333942ac70524abe12dc8 Mon Sep 17 00:00:00 2001 From: dwarning Date: Fri, 2 Aug 2024 16:32:47 +0200 Subject: [PATCH 5/9] add missing klu bindings --- src/spicelib/devices/vbic/vbicbindCSC.c | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/spicelib/devices/vbic/vbicbindCSC.c b/src/spicelib/devices/vbic/vbicbindCSC.c index 90403845d..189cc519a 100644 --- a/src/spicelib/devices/vbic/vbicbindCSC.c +++ b/src/spicelib/devices/vbic/vbicbindCSC.c @@ -223,6 +223,25 @@ VBICbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt) CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempSubsPtr, VBICtempSubsBinding, VBICtempNode, VBICsubsNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); + + if (here->VBIC_excessPhase) { + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1Xf1Ptr , VBICxf1Xf1Binding , VBICxf1Node , VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1Xf2Ptr , VBICxf1Xf2Binding , VBICxf1Node , VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node , VBICcollCINode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node , VBICbaseBINode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node , VBICemitEINode); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf2Xf2Ptr , VBICxf2Xf2Binding , VBICxf2Node , VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf2Xf1Ptr , VBICxf2Xf1Binding , VBICxf2Node , VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICbaseBIXf2Ptr, VBICbaseBIXf2Binding, VBICbaseBINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1IbrPtr , VBICxf1IbrBinding , VBICxf1Node , VBICbrEq); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf2IbrPtr , VBICxf2IbrBinding , VBICxf2Node , VBICbrEq); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICibrXf2Ptr , VBICibrXf2Binding , VBICbrEq , VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICibrXf1Ptr , VBICibrXf1Binding , VBICbrEq , VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICibrIbrPtr , VBICibrIbrBinding , VBICbrEq , VBICbrEq); + } + } } } @@ -321,6 +340,25 @@ VBICbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt) CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); } + + if (here->VBIC_excessPhase) { + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf1Ptr , VBICxf1Xf1Binding , VBICxf1Node , VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf2Ptr , VBICxf1Xf2Binding , VBICxf1Node , VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node , VBICcollCINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node , VBICbaseBINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node , VBICemitEINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf2Ptr , VBICxf2Xf2Binding , VBICxf2Node , VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf1Ptr , VBICxf2Xf1Binding , VBICxf2Node , VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICbaseBIXf2Ptr, VBICbaseBIXf2Binding, VBICbaseBINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1IbrPtr , VBICxf1IbrBinding , VBICxf1Node , VBICbrEq); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2IbrPtr , VBICxf2IbrBinding , VBICxf2Node , VBICbrEq); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICibrXf2Ptr , VBICibrXf2Binding , VBICbrEq , VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICibrXf1Ptr , VBICibrXf1Binding , VBICbrEq , VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICibrIbrPtr , VBICibrIbrBinding , VBICbrEq , VBICbrEq); + } + } } From 11cf603ac036c371f58e616781fe7413c7432b21 Mon Sep 17 00:00:00 2001 From: dwarning Date: Sat, 3 Aug 2024 08:00:00 +0200 Subject: [PATCH 6/9] extend unwanted output list --- tests/bin/check.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/bin/check.sh b/tests/bin/check.sh index 6551f01e6..7abb2fd26 100644 --- a/tests/bin/check.sh +++ b/tests/bin/check.sh @@ -17,7 +17,7 @@ fi SPICE=$1 TEST=$2 -FILTER="CPU|Dynamic|Note|Circuit|Trying|Reference|Date|Doing|---|v-sweep|time|est|Error|Warning|Data|Index|trans|acan|oise|nalysis|ole|Total|memory|urrent|Got|Added|BSIM|bsim|B4SOI|b4soi|codemodel|^binary raw file|^ngspice.*done|Operating" +FILTER="SPARSE|KLU|CPU|Dynamic|Note|Circuit|Trying|Reference|Date|Doing|---|v-sweep|time|est|Error|Warning|Data|Index|trans|acan|oise|nalysis|ole|Total|memory|urrent|Got|Added|BSIM|bsim|B4SOI|b4soi|codemodel|^binary raw file|^ngspice.*done|Operating" testname=`basename $TEST .cir` testdir=`dirname $TEST` From 90a3e28037533d60016e99dd3421bee59d933fbd Mon Sep 17 00:00:00 2001 From: dwarning Date: Sat, 3 Aug 2024 08:00:40 +0200 Subject: [PATCH 7/9] git ignore vcd files --- tests/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/.gitignore b/tests/.gitignore index 663d85c5a..323656295 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,6 +1,7 @@ *.test *.log *.out +*.vcd ngspiceCkt hspiceCkt From 8fa02c02b6703a1a5c167dc8c8081df26c28b0f2 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sat, 3 Aug 2024 16:06:58 +0200 Subject: [PATCH 8/9] Copy the correct spinit to ngspice/visualc --- visualc/make-install-vngspice.bat | 3 ++- visualc/make-install-vngspiced.bat | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/visualc/make-install-vngspice.bat b/visualc/make-install-vngspice.bat index 3891a718e..4f37bba02 100644 --- a/visualc/make-install-vngspice.bat +++ b/visualc/make-install-vngspice.bat @@ -27,6 +27,7 @@ if "%2" == "fftw" goto copy2 if "%3" == "fftw" goto copy2 copy %1\ngspice.exe %dst%\bin\ +copy .\spinitr .\spinit goto end :copy2 @@ -56,6 +57,7 @@ if "%2" == "fftw" goto copy2-64 if "%3" == "fftw" goto copy2-64 copy %1\ngspice.exe %dst%\bin\ +copy .\spinitr64 .\spinit goto end :copy2-64 @@ -65,7 +67,6 @@ copy ..\..\fftw-3.3-dll64\libfftw3-3.dll %dst%\bin\ :end mkdir %dst%\share\ngspice\scripts\src\ngspice copy .\spinit_all %dst%\share\ngspice\scripts\spinit -copy .\spinitr .\spinit cd ..\src copy ciderinit %dst%\share\ngspice\scripts copy devaxis %dst%\share\ngspice\scripts diff --git a/visualc/make-install-vngspiced.bat b/visualc/make-install-vngspiced.bat index 3de5fc68a..af00c4f0a 100644 --- a/visualc/make-install-vngspiced.bat +++ b/visualc/make-install-vngspiced.bat @@ -27,6 +27,7 @@ if "%2" == "fftw" goto copy2 if "%3" == "fftw" goto copy2 copy %1\ngspice.exe %dst%\bin\ +copy .\spinitd .\spinit goto end :copy2 @@ -56,6 +57,7 @@ if "%2" == "fftw" goto copy2-64 if "%3" == "fftw" goto copy2-64 copy %1\ngspice.exe %dst%\bin\ +copy .\spinitd64 .\spinit goto end :copy2-64 @@ -65,7 +67,7 @@ copy ..\..\fftw-3.3-dll64\libfftw3-3.dll %dst%\bin\ :end mkdir %dst%\share\ngspice\scripts\src\ngspice copy .\spinit_all %dst%\share\ngspice\scripts\spinit -copy .\spinitr .\spinit + cd ..\src copy ciderinit %dst%\share\ngspice\scripts copy devaxis %dst%\share\ngspice\scripts From 6ea6f8d9a8ee056737219664cb93fe0222ab8834 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sat, 3 Aug 2024 16:08:41 +0200 Subject: [PATCH 9/9] Add a comment --- src/maths/ni/niiter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/maths/ni/niiter.c b/src/maths/ni/niiter.c index f3e546c5a..e7c115836 100644 --- a/src/maths/ni/niiter.c +++ b/src/maths/ni/niiter.c @@ -55,7 +55,7 @@ NIiter(CKTcircuit *ckt, int maxIter) #endif if (ckt->CKTniState & NIUNINITIALIZED) { - error = NIreinit(ckt); + error = NIreinit(ckt); /* always returns 0 */ if (error) { #ifdef STEPDEBUG printf("re-init returned error \n");