Browse Source

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.
pre-master-46
Giles Atkinson 2 years ago
parent
commit
f6f7319792
  1. 8
      examples/xspice/original-examples/diffpair.in
  2. 4
      examples/xspice/original-examples/mosmem.in
  3. 27
      src/spicelib/analysis/cktacct.c

8
examples/xspice/original-examples/diffpair.in

@ -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

4
examples/xspice/original-examples/mosmem.in

@ -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

27
src/spicelib/analysis/cktacct.c

@ -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

Loading…
Cancel
Save