Add null-pointer checks to some code that crashed when trying

to .print results from a non-existent analysis.  Also remove the
troublesome .plot and .print lines from two examples.
This commit is contained in:
Giles Atkinson 2023-11-08 11:52:12 +00:00
parent 4228ba6e8a
commit f6f7319792
3 changed files with 25 additions and 14 deletions

View File

@ -19,10 +19,10 @@ q4 7 7 9 qnl
rbias 7 8 20k
.model qnl npn(bf=80 rb=100 ccs=2pf tf=0.3ns tr=6ns cje=3pf cjc=2pf
+ va=50)
.print dc v(4) v(5)
.plot dc v(5)
.print ac vm(5) vp(5)
.plot ac vm(5) vp(5)
*.print dc v(4) v(5)
*.plot dc v(5)
*.print ac vm(5) vp(5)
*.plot ac vm(5) vp(5)
.print tran v(4) v(5)
.plot tran v(5)
.end

View File

@ -21,7 +21,7 @@ m11 8 4 0 0 mod w=250u l=5u
m12 9 9 8 0 mod w=5u l=5u
.model mod nmos(vto=0.5 phi=0.7 kp=1.0e-6 gamma=1.83 lambda=0.115
+ level=1 cgso=1u cgdo=1u cbd=50p cbs=50p)
.print dc v(5) v(6)
.plot dc v(6)
*.print dc v(5) v(6)
*.plot dc v(6)
.plot tran v(6) v(5) v(7) v(1) v(2)
.end

View File

@ -57,11 +57,18 @@ CKTacct(CKTcircuit *ckt, JOB *anal, int which, IFvalue *val)
case OPT_FILLNZ:
if ( ckt->CKTmatrix != NULL ) {
#ifdef KLU
if (ckt->CKTmatrix->CKTkluMODE)
val->iValue = ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->lnz + ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->unz
- (int)ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNZ ;
else
if (ckt->CKTmatrix->CKTkluMODE) {
if (!ckt->CKTmatrix->SMPkluMatrix ||
!ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric) {
return -1;
}
val->iValue =
ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->lnz +
ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->unz -
(int)ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNZ ;
} else {
val->iValue = spFillinCount(ckt->CKTmatrix->SPmatrix);
}
#else
val->iValue = spFillinCount(ckt->CKTmatrix->SPmatrix);
#endif
@ -72,10 +79,14 @@ CKTacct(CKTcircuit *ckt, JOB *anal, int which, IFvalue *val)
case OPT_TOTALNZ:
if ( ckt->CKTmatrix != NULL ) {
#ifdef KLU
if (ckt->CKTmatrix->CKTkluMODE)
val->iValue = ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->lnz + ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->unz ;
else
val->iValue = spElementCount(ckt->CKTmatrix->SPmatrix);
if (ckt->CKTmatrix->CKTkluMODE && ckt->CKTmatrix->SMPkluMatrix &&
ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric) {
val->iValue =
ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->lnz +
ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNumeric->unz ;
} else {
val->iValue = 0;
}
#else
val->iValue = spElementCount(ckt->CKTmatrix->SPmatrix);
#endif