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:
parent
4228ba6e8a
commit
f6f7319792
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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…
Reference in New Issue