Fixed some bugs, implemented '.options use_device_gmin' switch and assigned DEVloadKCL initializers

This commit is contained in:
Francesco Lannutti 2014-08-29 17:02:03 +02:00
parent 20ef481ec5
commit 845c018576
57 changed files with 239 additions and 104 deletions

View File

@ -116,12 +116,12 @@ struct CKTcircuit {
double *CKTrhs; /* current rhs value - being loaded */
double *CKTrhsOld; /* previous rhs value for convergence
testing */
double **CKTdiag ;
#ifdef KIRCHHOFF
double *CKTfvk ; /* KCL Verification array */
int *CKTnodeIsLinear ; /* Flag to indicate if a node is linear or non-linear */
CKTmkCurKCLnode **CKTmkCurKCLarray ; /* Array of KCL Currents */
double **CKTdiag ;
#endif
double *CKTrhsSpare; /* spare rhs value for reordering */
@ -295,6 +295,7 @@ struct CKTcircuit {
contains only linear elements */
unsigned int CKTnoopac:1; /* flag to indicate that OP will not be evaluated
during AC simulation */
unsigned int CKTuseDeviceGmin : 1 ;
};

View File

@ -120,6 +120,8 @@ typedef struct {
#define OPT_NOOPAC 68
#define OPT_USEDEVICEGMIN 69
#ifdef XSPICE
/* gtri - begin - wbk - add new options */
#define OPT_ENH_NOOPALTER 100

View File

@ -66,6 +66,7 @@ struct TSKtask {
double TSKabsDv; /* abs limit for iter-iter voltage change */
double TSKrelDv; /* rel limit for iter-iter voltage change */
unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */
unsigned int TSKuseDeviceGmin : 1 ;
};
#endif

View File

@ -120,8 +120,14 @@ NIconvTest (CKTcircuit *ckt)
ptr = ptr->next ;
}
if (maximum < fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]))
maximum = fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) ;
if (ckt->CKTuseDeviceGmin)
{
if (maximum < fabs (ckt->CKTgmin * ckt->CKTrhsOld [i]))
maximum = fabs (ckt->CKTgmin * ckt->CKTrhsOld [i]) ;
} else {
if (maximum < fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]))
maximum = fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) ;
}
#ifdef STEPDEBUG
@ -130,12 +136,23 @@ NIconvTest (CKTcircuit *ckt)
#endif
/* Check Convergence */
if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
if (ckt->CKTuseDeviceGmin)
{
ckt->CKTtroubleNode = i ;
ckt->CKTtroubleElt = NULL ;
if (fabs (ckt->CKTfvk [i] + ckt->CKTgmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
{
ckt->CKTtroubleNode = i ;
ckt->CKTtroubleElt = NULL ;
return 1 ;
return 1 ;
}
} else {
if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
{
ckt->CKTtroubleNode = i ;
ckt->CKTtroubleElt = NULL ;
return 1 ;
}
}
}
}

View File

@ -21,11 +21,7 @@ Author: 1985 Thomas L. Quarles
int
NIreinit( CKTcircuit *ckt)
{
int size;
#if defined(PREDICTOR) || defined(KIRCHHOFF)
int i;
#endif
int i, size ;
size = SMPmatSize(ckt->CKTmatrix);
CKALLOC(CKTrhs,size+1,double);
@ -34,6 +30,9 @@ NIreinit( CKTcircuit *ckt)
CKALLOC(CKTirhs,size+1,double);
CKALLOC(CKTirhsOld,size+1,double);
CKALLOC(CKTirhsSpare,size+1,double);
CKALLOC(CKTdiag,size+1,double*);
for (i = 0 ; i <= size ; i++)
ckt->CKTdiag [i] = NULL ;
#ifdef KIRCHHOFF
CKALLOC(CKTfvk,size+1,double);
@ -43,9 +42,6 @@ NIreinit( CKTcircuit *ckt)
CKALLOC(CKTmkCurKCLarray,size+1,CKTmkCurKCLnode*);
for (i = 0 ; i <= size ; i++)
ckt->CKTmkCurKCLarray [i] = NULL ;
CKALLOC(CKTdiag,size+1,double*);
for (i = 0 ; i <= size ; i++)
ckt->CKTdiag [i] = NULL ;
#endif
#ifdef PREDICTOR

View File

@ -103,6 +103,7 @@ CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task)
ckt->CKTtroubleNode = 0;
ckt->CKTtroubleElt = NULL;
ckt->CKTnoopac = task->TSKnoopac && ckt->CKTisLinear;
ckt->CKTuseDeviceGmin = task->TSKuseDeviceGmin ;
#ifdef NEWTRUNC
ckt->CKTlteReltol = task->TSKlteReltol;
ckt->CKTlteAbstol = task->TSKlteAbstol;

View File

@ -79,16 +79,19 @@ CKTload(CKTcircuit *ckt)
}
}
#ifdef KIRCHHOFF
/* GMIN Stepping */
for (i = 1 ; i <= size ; i++)
{
if (ckt->CKTdiag [i] != NULL)
{
*(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ;
if (ckt->CKTuseDeviceGmin)
{
*(ckt->CKTdiag [i]) += ckt->CKTgmin ;
} else {
*(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ;
}
}
}
#endif
#ifdef XSPICE
/* gtri - add - wbk - 11/26/90 - reset the MIF init flags */
@ -199,19 +202,22 @@ ZeroNoncurRow(SMPmatrix *matrix, CKTnode *nodes, int rownum)
return currents;
}
#ifdef KIRCHHOFF
int
CKTloadKCL (CKTcircuit *ckt)
{
/* for (i = 0 ; i < DEVmaxnum ; i++)
int error, i ;
for (i = 0 ; i < DEVmaxnum ; i++)
{
if (DEVices[i] && DEVices[i]->DEVload && ckt->CKThead[i])
if (DEVices[i] && DEVices[i]->DEVloadKCL && ckt->CKThead[i])
{
error = DEVices[i]->DEVload (ckt->CKThead[i], ckt) ;
error = DEVices[i]->DEVloadKCL (ckt->CKThead[i], ckt) ;
if (error)
return (error) ;
}
}*/
DEVices[10]->DEVloadKCL (ckt->CKThead[10], ckt) ;
}
return (OK) ;
}
#endif

View File

@ -155,11 +155,21 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
factor = ckt->CKTgminFactor;
OldGmin = 1e-2;
gtarget = MAX (ckt->CKTgmin, ckt->CKTgshunt);
ckt->CKTdiagGmin = OldGmin / factor;
if (ckt->CKTuseDeviceGmin)
{
ckt->CKTgmin = OldGmin / factor ;
} else {
ckt->CKTdiagGmin = OldGmin / factor ;
}
success = failed = 0;
while ((!success) && (!failed)) {
fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin);
if (ckt->CKTuseDeviceGmin)
{
fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTgmin) ;
} else {
fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin) ;
}
ckt->CKTnoncon = 1;
iters = ckt->CKTstat->STATnumIter;
@ -171,35 +181,70 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
SPfrontEnd->IFerror (ERR_INFO,
"One successful gmin step", NULL);
if (ckt->CKTdiagGmin <= gtarget) {
success = 1;
} else {
i = 0;
for (n = ckt->CKTnodes; n; n = n->next) {
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
i++;
}
for (i = 0; i < ckt->CKTnumStates; i++) {
OldCKTstate0[i] = ckt->CKTstate0[i];
}
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) {
factor *= sqrt (factor);
if (factor > ckt->CKTgminFactor)
factor = ckt->CKTgminFactor;
}
if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4))
factor = sqrt (factor);
OldGmin = ckt->CKTdiagGmin;
if ((ckt->CKTdiagGmin) < (factor * gtarget)) {
factor = ckt->CKTdiagGmin / gtarget;
ckt->CKTdiagGmin = gtarget;
if (ckt->CKTuseDeviceGmin)
{
if (ckt->CKTgmin <= gtarget) {
success = 1;
} else {
ckt->CKTdiagGmin /= factor;
i = 0;
for (n = ckt->CKTnodes; n; n = n->next) {
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
i++;
}
for (i = 0; i < ckt->CKTnumStates; i++) {
OldCKTstate0[i] = ckt->CKTstate0[i];
}
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) {
factor *= sqrt (factor);
if (factor > ckt->CKTgminFactor)
factor = ckt->CKTgminFactor;
}
if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4))
factor = sqrt (factor);
OldGmin = ckt->CKTgmin;
if ((ckt->CKTgmin) < (factor * gtarget)) {
factor = ckt->CKTgmin / gtarget;
ckt->CKTgmin = gtarget;
} else {
ckt->CKTgmin /= factor;
}
}
} else {
if (ckt->CKTdiagGmin <= gtarget) {
success = 1;
} else {
i = 0;
for (n = ckt->CKTnodes; n; n = n->next) {
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
i++;
}
for (i = 0; i < ckt->CKTnumStates; i++) {
OldCKTstate0[i] = ckt->CKTstate0[i];
}
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) {
factor *= sqrt (factor);
if (factor > ckt->CKTgminFactor)
factor = ckt->CKTgminFactor;
}
if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4))
factor = sqrt (factor);
OldGmin = ckt->CKTdiagGmin;
if ((ckt->CKTdiagGmin) < (factor * gtarget)) {
factor = ckt->CKTdiagGmin / gtarget;
ckt->CKTdiagGmin = gtarget;
} else {
ckt->CKTdiagGmin /= factor;
}
}
}
} else {
@ -213,7 +258,12 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
"Further gmin increment",
NULL);
factor = sqrt (sqrt (factor));
ckt->CKTdiagGmin = OldGmin / factor;
if (ckt->CKTuseDeviceGmin)
{
ckt->CKTgmin = OldGmin / factor ;
} else {
ckt->CKTdiagGmin = OldGmin / factor ;
}
i = 0;
for (n = ckt->CKTnodes; n; n = n->next) {

View File

@ -79,6 +79,14 @@ CKTsetup(CKTcircuit *ckt)
if(error) return(error);
}
}
if (ckt->CKTuseDeviceGmin)
{
fprintf (stderr, "Using Device Gmin Stepping...\n") ;
} else {
fprintf (stderr, "Using Diag Gmin Stepping...\n") ;
}
for(i=0;i<=MAX(2,ckt->CKTmaxOrder)+1;i++) { /* dctran needs 3 states as minimum */
CKALLOC(ckt->CKTstates[i],ckt->CKTnumStates,double);
}
@ -128,7 +136,6 @@ CKTsetup(CKTcircuit *ckt)
/* gtri - end - Setup for adding rshunt option resistors */
#endif
#ifdef KIRCHHOFF
CKTnode *node ;
node = ckt->CKTnodes ;
@ -142,6 +149,7 @@ CKTsetup(CKTcircuit *ckt)
}
}
#ifdef KIRCHHOFF
/** Marking node as Non-Linear when needed
* By default every node is Linear
*/

View File

@ -161,6 +161,10 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val)
case OPT_NOOPAC:
task->TSKnoopac = (val->iValue != 0);
break;
case OPT_USEDEVICEGMIN:
task->TSKuseDeviceGmin = (val->iValue != 0) ;
break ;
/* gtri - begin - wbk - add new options */
#ifdef XSPICE
case OPT_EVT_MAX_OP_ALTER:
@ -313,7 +317,8 @@ static IFparm OPTtbl[] = {
{ "reldv", OPT_RELDV, IF_SET|IF_REAL,
"Maximum relative iter-iter node voltage change" },
{ "noopac", OPT_NOOPAC, IF_SET|IF_FLAG,
"No op calculation in ac if circuit is linear" }
"No op calculation in ac if circuit is linear" },
{ "use_device_gmin", OPT_USEDEVICEGMIN, IF_SET|IF_FLAG, "Use Device Gmin Stepping, instead of Diag Gmin Stepping" }
};
int OPTcount = NUMELEMS(OPTtbl);

View File

@ -76,7 +76,8 @@ SPICEdev ASRCinfo = {
/* DEVmodSize */ &ASRCmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear
/* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev BJTinfo = { /* description from struct IFdevice */
/* DEVmodSize */ &BJTmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ BJTnodeIsNonLinear
/* DEVnodeIsNonLinear */ BJTnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev B1info = {
/* DEVmodSize */ &B1mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ B1nodeIsNonLinear
/* DEVnodeIsNonLinear */ B1nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev B2info = {
/* DEVmodSize */ &B2mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ B2nodeIsNonLinear
/* DEVnodeIsNonLinear */ B2nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -74,7 +74,8 @@ SPICEdev BSIM3info = {
/* DEVmodSize */ &BSIM3mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear
/* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -72,7 +72,8 @@ SPICEdev B3SOIDDinfo = {
/* DEVmodSize */ &B3SOIDDmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear
/* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -73,7 +73,8 @@ SPICEdev B3SOIFDinfo = {
/* DEVmodSize*/ &B3SOIFDmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear
/* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -74,7 +74,8 @@ SPICEdev B3SOIPDinfo = {
/* DEVmodSize*/ &B3SOIPDmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear
/* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -73,7 +73,8 @@ SPICEdev B3v0info = {
/* DEVmodSize */ &BSIM3v0mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear
/* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -73,7 +73,8 @@ SPICEdev BSIM3v1info = {
/* DEVmodSize */ &BSIM3v1mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear
/* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -74,7 +74,8 @@ SPICEdev BSIM3v32info = {
/* DEVmodSize */ &BSIM3v32mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear
/* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev BSIM4v4info = {
&BSIM4v4mSize, /* DEVmodSize */
#ifdef KIRCHHOFF
BSIM4v4nodeIsNonLinear /* DEVnodeIsNonLinear */
BSIM4v4nodeIsNonLinear, /* DEVnodeIsNonLinear */
NULL /* DEVloadKCL */
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev BSIM4v5info = {
&BSIM4v5mSize, /* DEVmodSize */
#ifdef KIRCHHOFF
BSIM4v5nodeIsNonLinear /* DEVnodeIsNonLinear */
BSIM4v5nodeIsNonLinear, /* DEVnodeIsNonLinear */
NULL /* DEVloadKCL */
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev BSIM4v6info = {
&BSIM4v6mSize, /* DEVmodSize */
#ifdef KIRCHHOFF
BSIM4v6nodeIsNonLinear /* DEVnodeIsNonLinear */
BSIM4v6nodeIsNonLinear, /* DEVnodeIsNonLinear */
NULL /* DEVloadKCL */
#endif
};

View File

@ -73,7 +73,8 @@ SPICEdev B4SOIinfo = {
/* DEVmodSize */ &B4SOImSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear
/* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -74,7 +74,8 @@ SPICEdev CAPinfo = {
/* DEVmodSize */ &CAPmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ CAPnodeIsNonLinear
/* DEVnodeIsNonLinear */ CAPnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -74,7 +74,8 @@ SPICEdev CCCSinfo = {
/* DEVmodSize */ &CCCSmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev CCVSinfo = {
/* DEVmodSize */ &CCVSmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev CPLinfo = {
/* DEVmodSize */ &CPLmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -77,7 +77,8 @@ SPICEdev CSWinfo = {
/* DEVmodSize */ &CSWmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -76,7 +76,8 @@ SPICEdev DIOinfo = {
/* DEVmodSize */ &DIOmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ DIOnodeIsNonLinear
/* DEVnodeIsNonLinear */ DIOnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev HFETAinfo = {
/* DEVmodSize */ &HFETAmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear
/* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev HFET2info = {
/* DEVmodSize */ &HFET2mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear
/* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -73,7 +73,8 @@ SPICEdev HSM2info = {
/* DEVmodSize */ &HSM2mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear
/* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -73,7 +73,8 @@ SPICEdev HSMHVinfo = {
/* DEVmodSize */ &HSMHVmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear
/* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -74,7 +74,8 @@ SPICEdev INDinfo = {
/* DEVmodSize */ &INDmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ INDnodeIsNonLinear
/* DEVnodeIsNonLinear */ INDnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};
@ -147,7 +148,8 @@ SPICEdev MUTinfo = {
/* DEVmodSize */ &MUTmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev ISRCinfo = {
/* DEVmodSize */ &ISRCmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev JFETinfo = {
/* DEVmodSize */ &JFETmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ JFETnodeIsNonLinear
/* DEVnodeIsNonLinear */ JFETnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev JFET2info = {
/* DEVmodSize */ &JFET2mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear
/* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev LTRAinfo = {
/* DEVmodSize */ &LTRAmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MESinfo = {
/* DEVmodSize */ &MESmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MESnodeIsNonLinear
/* DEVnodeIsNonLinear */ MESnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MESAinfo = {
/* DEVmodSize */ &MESAmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MESAnodeIsNonLinear
/* DEVnodeIsNonLinear */ MESAnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MOS1info = {
/* DEVmodSize */ &MOS1mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear
/* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MOS2info = {
/* DEVmodSize */ &MOS2mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear
/* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MOS3info = {
/* DEVmodSize */ &MOS3mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear
/* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MOS6info = {
/* DEVmodSize */ &MOS6mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear
/* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev MOS9info = {
/* DEVmodSize */ &MOS9mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear
/* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev RESinfo = {
/* DEVmodSize */ &RESmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ RESnodeIsNonLinear
/* DEVnodeIsNonLinear */ RESnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev SOI3info = {
/* DEVmodSize */ &SOI3mSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear
/* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -76,7 +76,8 @@ SPICEdev SWinfo = {
/* DEVmodSize */ &SWmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev TRAinfo = {
/* DEVmodSize */ &TRAmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -80,7 +80,8 @@ SPICEdev TXLinfo = {
/* DEVmodSize */ &TXLmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev URCinfo = {
/* DEVmodSize */ &URCmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -80,7 +80,8 @@ SPICEdev VBICinfo = {
&VBICmSize, /* DEVmodSize */
#ifdef KIRCHHOFF
VBICnodeIsNonLinear /* DEVnodeIsNonLinear */
VBICnodeIsNonLinear, /* DEVnodeIsNonLinear */
NULL /* DEVloadKCL */
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev VCCSinfo = {
/* DEVmodSize */ &VCCSmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev VCVSinfo = {
/* DEVmodSize */ &VCVSmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ NULL
/* DEVnodeIsNonLinear */ NULL,
/* DEVloadKCL */ NULL
#endif
};

View File

@ -75,7 +75,8 @@ SPICEdev VSRCinfo = {
/* DEVmodSize */ &VSRCmSize,
#ifdef KIRCHHOFF
/* DEVnodeIsNonLinear */ VSRCnodeIsNonLinear
/* DEVnodeIsNonLinear */ VSRCnodeIsNonLinear,
/* DEVloadKCL */ NULL
#endif
};