You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
4.7 KiB
176 lines
4.7 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
**********/
|
|
/*
|
|
*/
|
|
|
|
/*
|
|
* CKTacct
|
|
* get the specified accounting item into 'value' in the
|
|
* given circuit 'ckt'.
|
|
*/
|
|
|
|
#include "ngspice/ngspice.h"
|
|
#include "ngspice/const.h"
|
|
#include "ngspice/optdefs.h"
|
|
#include "ngspice/ifsim.h"
|
|
#include "ngspice/cktdefs.h"
|
|
#include "ngspice/spmatrix.h"
|
|
|
|
#ifdef KLU
|
|
#include "ngspice/klu.h"
|
|
#endif
|
|
|
|
/* Francesco Lannutti
|
|
* If ACCT is called before NIinit, the new SMPmatrix structure is not allocated
|
|
* so the control must be performed on the CKTmatrix pointer to the SMPmatrix structure
|
|
*/
|
|
|
|
/* ARGSUSED */
|
|
int
|
|
CKTacct(CKTcircuit *ckt, JOB *anal, int which, IFvalue *val)
|
|
{
|
|
NG_IGNORE(anal);
|
|
|
|
switch(which) {
|
|
|
|
case OPT_EQNS:
|
|
val->iValue = ckt->CKTmaxEqNum;
|
|
break;
|
|
case OPT_ORIGNZ:
|
|
if ( ckt->CKTmatrix != NULL ) {
|
|
|
|
#ifdef KLU
|
|
if (ckt->CKTkluMODE)
|
|
val->iValue = (int)ckt->CKTmatrix->SMPkluMatrix->KLUmatrixNZ ;
|
|
else
|
|
val->iValue = spOriginalCount (ckt->CKTmatrix->SPmatrix) ;
|
|
#else
|
|
val->iValue = spOriginalCount(ckt->CKTmatrix->SPmatrix);
|
|
#endif
|
|
|
|
} else {
|
|
val->iValue = 0;
|
|
}
|
|
break;
|
|
case OPT_FILLNZ:
|
|
if ( ckt->CKTmatrix != NULL ) {
|
|
#ifdef KLU
|
|
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
|
|
} else {
|
|
val->iValue = 0;
|
|
}
|
|
break;
|
|
case OPT_TOTALNZ:
|
|
if ( ckt->CKTmatrix != NULL ) {
|
|
#ifdef KLU
|
|
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
|
|
} else {
|
|
val->iValue = 0;
|
|
}
|
|
break;
|
|
case OPT_ITERS:
|
|
val->iValue = ckt->CKTstat->STATnumIter;
|
|
break;
|
|
case OPT_TRANIT:
|
|
val->iValue = ckt->CKTstat->STATtranIter;
|
|
break;
|
|
case OPT_TRANCURITER:
|
|
val->iValue = ckt->CKTstat->STATnumIter - ckt->CKTstat->STAToldIter;
|
|
break;
|
|
case OPT_TRANPTS:
|
|
val->iValue = ckt->CKTstat->STATtimePts;
|
|
break;
|
|
case OPT_TRANACCPT:
|
|
val->iValue = ckt->CKTstat->STATaccepted;
|
|
break;
|
|
case OPT_TRANRJCT:
|
|
val->iValue = ckt->CKTstat->STATrejected;
|
|
break;
|
|
case OPT_TOTANALTIME:
|
|
val->rValue = ckt->CKTstat->STATtotAnalTime;
|
|
break;
|
|
case OPT_TRANTIME:
|
|
val->rValue = ckt->CKTstat->STATtranTime;
|
|
break;
|
|
case OPT_ACTIME:
|
|
val->rValue = ckt->CKTstat->STATacTime;
|
|
break;
|
|
case OPT_LOADTIME:
|
|
val->rValue = ckt->CKTstat->STATloadTime;
|
|
break;
|
|
case OPT_SYNCTIME:
|
|
val->rValue = ckt->CKTstat->STATsyncTime;
|
|
break;
|
|
case OPT_REORDTIME:
|
|
val->rValue = ckt->CKTstat->STATreorderTime;
|
|
break;
|
|
case OPT_DECOMP:
|
|
val->rValue = ckt->CKTstat->STATdecompTime;
|
|
break;
|
|
case OPT_SOLVE:
|
|
val->rValue = ckt->CKTstat->STATsolveTime;
|
|
break;
|
|
case OPT_TRANLOAD:
|
|
val->rValue = ckt->CKTstat->STATtranLoadTime;
|
|
break;
|
|
case OPT_TRANSYNC:
|
|
val->rValue = ckt->CKTstat->STATtranSyncTime;
|
|
break;
|
|
case OPT_TRANDECOMP:
|
|
val->rValue = ckt->CKTstat->STATtranDecompTime;
|
|
break;
|
|
case OPT_TRANSOLVE:
|
|
val->rValue = ckt->CKTstat->STATtranSolveTime;
|
|
break;
|
|
case OPT_TRANTRUNC:
|
|
val->rValue = ckt->CKTstat->STATtranTruncTime;
|
|
break;
|
|
case OPT_ACLOAD:
|
|
val->rValue = ckt->CKTstat->STATacLoadTime;
|
|
break;
|
|
case OPT_ACSYNC:
|
|
val->rValue = ckt->CKTstat->STATacSyncTime;
|
|
break;
|
|
case OPT_ACDECOMP:
|
|
val->rValue = ckt->CKTstat->STATacDecompTime;
|
|
break;
|
|
case OPT_ACSOLVE:
|
|
val->rValue = ckt->CKTstat->STATacSolveTime;
|
|
break;
|
|
case OPT_TEMP:
|
|
val->rValue = ckt->CKTtemp - CONSTCtoK;
|
|
break;
|
|
case OPT_TNOM:
|
|
val->rValue = ckt->CKTnomTemp - CONSTCtoK;
|
|
break;
|
|
default:
|
|
return(-1);
|
|
}
|
|
return(0);
|
|
}
|