devices/cap: whitespace cleanup
This commit is contained in:
parent
4a1cdf0ada
commit
b63cae8798
|
|
@ -10,49 +10,49 @@ Modified: September 2003 - Paolo Nenzi
|
||||||
#include "ngspice/suffix.h"
|
#include "ngspice/suffix.h"
|
||||||
|
|
||||||
IFparm CAPpTable[] = { /* parameters */
|
IFparm CAPpTable[] = { /* parameters */
|
||||||
IOPAP("capacitance", CAP_CAP, IF_REAL, "Device capacitance"),
|
IOPAP("capacitance", CAP_CAP, IF_REAL, "Device capacitance"),
|
||||||
IOPAP("cap", CAP_CAP, IF_REAL, "Device capacitance"),
|
IOPAP("cap", CAP_CAP, IF_REAL, "Device capacitance"),
|
||||||
IOPAP("c", CAP_CAP, IF_REAL, "Device capacitance"),
|
IOPAP("c", CAP_CAP, IF_REAL, "Device capacitance"),
|
||||||
IOPAU("ic", CAP_IC, IF_REAL, "Initial capacitor voltage"),
|
IOPAU("ic", CAP_IC, IF_REAL, "Initial capacitor voltage"),
|
||||||
IOPZU("temp", CAP_TEMP, IF_REAL, "Instance operating temperature"),
|
IOPZU("temp", CAP_TEMP, IF_REAL, "Instance operating temperature"),
|
||||||
IOPZ( "dtemp", CAP_DTEMP, IF_REAL,
|
IOPZ( "dtemp", CAP_DTEMP, IF_REAL,
|
||||||
"Instance temperature difference from the rest of the circuit"),
|
"Instance temperature difference from the rest of the circuit"),
|
||||||
IOPAU("w", CAP_WIDTH, IF_REAL, "Device width"),
|
IOPAU("w", CAP_WIDTH, IF_REAL, "Device width"),
|
||||||
IOPAU("l", CAP_LENGTH, IF_REAL, "Device length"),
|
IOPAU("l", CAP_LENGTH, IF_REAL, "Device length"),
|
||||||
IOPU( "m", CAP_M, IF_REAL, "Parallel multiplier"),
|
IOPU( "m", CAP_M, IF_REAL, "Parallel multiplier"),
|
||||||
IOPU( "tc1", CAP_TC1, IF_REAL, "First order temp. coefficient"),
|
IOPU( "tc1", CAP_TC1, IF_REAL, "First order temp. coefficient"),
|
||||||
IOPU( "tc2", CAP_TC2, IF_REAL, "Second order temp. coefficient"),
|
IOPU( "tc2", CAP_TC2, IF_REAL, "Second order temp. coefficient"),
|
||||||
IOPU( "scale", CAP_SCALE, IF_REAL, "Scale factor"),
|
IOPU( "scale", CAP_SCALE, IF_REAL, "Scale factor"),
|
||||||
IP( "sens_cap", CAP_CAP_SENS, IF_FLAG, "flag to request sens. WRT cap."),
|
IP( "sens_cap", CAP_CAP_SENS, IF_FLAG, "flag to request sens. WRT cap."),
|
||||||
OP( "i", CAP_CURRENT, IF_REAL, "Device current"),
|
OP( "i", CAP_CURRENT, IF_REAL, "Device current"),
|
||||||
OP( "p", CAP_POWER, IF_REAL, "Instantaneous device power"),
|
OP( "p", CAP_POWER, IF_REAL, "Instantaneous device power"),
|
||||||
OPU( "sens_dc", CAP_QUEST_SENS_DC, IF_REAL, "dc sensitivity "),
|
OPU( "sens_dc", CAP_QUEST_SENS_DC, IF_REAL, "dc sensitivity "),
|
||||||
OPU( "sens_real", CAP_QUEST_SENS_REAL, IF_REAL, "real part of ac sensitivity"),
|
OPU( "sens_real", CAP_QUEST_SENS_REAL, IF_REAL, "real part of ac sensitivity"),
|
||||||
OPU( "sens_imag", CAP_QUEST_SENS_IMAG, IF_REAL,
|
OPU( "sens_imag", CAP_QUEST_SENS_IMAG, IF_REAL,
|
||||||
"dc sens. & imag part of ac sens."),
|
"dc sens. & imag part of ac sens."),
|
||||||
OPU( "sens_mag", CAP_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"),
|
OPU( "sens_mag", CAP_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"),
|
||||||
OPU( "sens_ph", CAP_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"),
|
OPU( "sens_ph", CAP_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"),
|
||||||
OPU( "sens_cplx", CAP_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity")
|
OPU( "sens_cplx", CAP_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity")
|
||||||
};
|
};
|
||||||
|
|
||||||
IFparm CAPmPTable[] = { /* names of model parameters */
|
IFparm CAPmPTable[] = { /* names of model parameters */
|
||||||
IOPA( "cap", CAP_MOD_CAP, IF_REAL, "Model capacitance"),
|
IOPA( "cap", CAP_MOD_CAP, IF_REAL, "Model capacitance"),
|
||||||
IOPA( "cj", CAP_MOD_CJ, IF_REAL, "Bottom Capacitance per area"),
|
IOPA( "cj", CAP_MOD_CJ, IF_REAL, "Bottom Capacitance per area"),
|
||||||
IOPR( "cox", CAP_MOD_CJ, IF_REAL, "Bottom Capacitance per area"),
|
IOPR( "cox", CAP_MOD_CJ, IF_REAL, "Bottom Capacitance per area"),
|
||||||
IOPA( "cjsw", CAP_MOD_CJSW, IF_REAL, "Sidewall capacitance per meter"),
|
IOPA( "cjsw", CAP_MOD_CJSW, IF_REAL, "Sidewall capacitance per meter"),
|
||||||
IOPR( "capsw", CAP_MOD_CJSW, IF_REAL, "Sidewall capacitance per meter"),
|
IOPR( "capsw", CAP_MOD_CJSW, IF_REAL, "Sidewall capacitance per meter"),
|
||||||
IOPX( "defw", CAP_MOD_DEFWIDTH, IF_REAL, "Default width"),
|
IOPX( "defw", CAP_MOD_DEFWIDTH, IF_REAL, "Default width"),
|
||||||
IOPR( "w", CAP_MOD_DEFWIDTH, IF_REAL, "Default width"),
|
IOPR( "w", CAP_MOD_DEFWIDTH, IF_REAL, "Default width"),
|
||||||
IOPX( "defl", CAP_MOD_DEFLENGTH,IF_REAL, "Default length"),
|
IOPX( "defl", CAP_MOD_DEFLENGTH,IF_REAL, "Default length"),
|
||||||
IOPR( "l", CAP_MOD_DEFLENGTH,IF_REAL, "Default length"),
|
IOPR( "l", CAP_MOD_DEFLENGTH,IF_REAL, "Default length"),
|
||||||
IOPA( "narrow", CAP_MOD_NARROW, IF_REAL, "width correction factor"),
|
IOPA( "narrow", CAP_MOD_NARROW, IF_REAL, "width correction factor"),
|
||||||
IOPA( "short", CAP_MOD_SHORT, IF_REAL, "length correction factor"),
|
IOPA( "short", CAP_MOD_SHORT, IF_REAL, "length correction factor"),
|
||||||
IOPA( "tc1", CAP_MOD_TC1, IF_REAL, "First order temp. coefficient"),
|
IOPA( "tc1", CAP_MOD_TC1, IF_REAL, "First order temp. coefficient"),
|
||||||
IOPA( "tc2", CAP_MOD_TC2, IF_REAL, "Second order temp. coefficient"),
|
IOPA( "tc2", CAP_MOD_TC2, IF_REAL, "Second order temp. coefficient"),
|
||||||
IOPXU("tnom", CAP_MOD_TNOM, IF_REAL, "Parameter measurement temperature"),
|
IOPXU("tnom", CAP_MOD_TNOM, IF_REAL, "Parameter measurement temperature"),
|
||||||
IOPA( "di", CAP_MOD_DI, IF_REAL, "Relative dielectric constant"),
|
IOPA( "di", CAP_MOD_DI, IF_REAL, "Relative dielectric constant"),
|
||||||
IOPA( "thick", CAP_MOD_THICK, IF_REAL, "Insulator thickness"),
|
IOPA( "thick", CAP_MOD_THICK, IF_REAL, "Insulator thickness"),
|
||||||
IP( "c", CAP_MOD_C, IF_FLAG, "Capacitor model")
|
IP( "c", CAP_MOD_C, IF_FLAG, "Capacitor model")
|
||||||
};
|
};
|
||||||
|
|
||||||
char *CAPnames[] = {
|
char *CAPnames[] = {
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,10 @@ CAPacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
CAPinstance *here;
|
CAPinstance *here;
|
||||||
|
|
||||||
for( ; model != NULL; model = model->CAPnextModel) {
|
for( ; model != NULL; model = model->CAPnextModel) {
|
||||||
for( here = model->CAPinstances;here != NULL;
|
for( here = model->CAPinstances; here != NULL;
|
||||||
here = here->CAPnextInstance) {
|
here = here->CAPnextInstance) {
|
||||||
|
|
||||||
m = here -> CAPm;
|
m = here->CAPm;
|
||||||
|
|
||||||
val = ckt->CKTomega * here->CAPcapac;
|
val = ckt->CKTomega * here->CAPcapac;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ Modified: September 2003 Paolo Nenzi
|
||||||
#include "ngspice/gendefs.h"
|
#include "ngspice/gendefs.h"
|
||||||
#include "ngspice/cktdefs.h"
|
#include "ngspice/cktdefs.h"
|
||||||
|
|
||||||
/* structures used to describe capacitors */
|
/* structures used to describe capacitors */
|
||||||
|
|
||||||
|
|
||||||
/* information to describe each instance */
|
/* information to describe each instance */
|
||||||
|
|
@ -54,8 +54,8 @@ typedef struct sCAPinstance {
|
||||||
unsigned CAPdtempGiven : 1; /* flag to indicate delta temp given */
|
unsigned CAPdtempGiven : 1; /* flag to indicate delta temp given */
|
||||||
unsigned CAPscaleGiven : 1; /* flag to indicate scale factor given */
|
unsigned CAPscaleGiven : 1; /* flag to indicate scale factor given */
|
||||||
unsigned CAPmGiven : 1; /* flag to indicate parallel multiplier given */
|
unsigned CAPmGiven : 1; /* flag to indicate parallel multiplier given */
|
||||||
unsigned CAPtc1Given : 1; /* flag indicates tc1 was specified */
|
unsigned CAPtc1Given : 1; /* flag indicates tc1 was specified */
|
||||||
unsigned CAPtc2Given : 1; /* flag indicates tc2 was specified */
|
unsigned CAPtc2Given : 1; /* flag indicates tc2 was specified */
|
||||||
int CAPsenParmNo; /* parameter # for sensitivity use;
|
int CAPsenParmNo; /* parameter # for sensitivity use;
|
||||||
set equal to 0 if not a design parameter*/
|
set equal to 0 if not a design parameter*/
|
||||||
|
|
||||||
|
|
@ -64,8 +64,8 @@ typedef struct sCAPinstance {
|
||||||
#define CAPqcap CAPstate /* charge on the capacitor */
|
#define CAPqcap CAPstate /* charge on the capacitor */
|
||||||
#define CAPccap CAPstate+1 /* current through the capacitor */
|
#define CAPccap CAPstate+1 /* current through the capacitor */
|
||||||
#define CAPsensxp CAPstate+2 /* charge sensitivities and their derivatives.
|
#define CAPsensxp CAPstate+2 /* charge sensitivities and their derivatives.
|
||||||
+3 for the derivatives - pointer to the
|
+3 for the derivatives - pointer to the
|
||||||
beginning of the array */
|
beginning of the array */
|
||||||
|
|
||||||
|
|
||||||
/* data per model */
|
/* data per model */
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@ Modified: September 2003 Paolo Nenzi
|
||||||
|
|
||||||
int
|
int
|
||||||
CAPload(GENmodel *inModel, CKTcircuit *ckt)
|
CAPload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
/* actually load the current capacitance value into the
|
/* actually load the current capacitance value into the
|
||||||
* sparse matrix previously provided
|
* sparse matrix previously provided
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
CAPmodel *model = (CAPmodel*)inModel;
|
CAPmodel *model = (CAPmodel*)inModel;
|
||||||
CAPinstance *here;
|
CAPinstance *here;
|
||||||
|
|
@ -32,8 +32,8 @@ CAPload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
cond1=
|
cond1=
|
||||||
( ( (ckt->CKTmode & MODEDC) &&
|
( ( (ckt->CKTmode & MODEDC) &&
|
||||||
(ckt->CKTmode & MODEINITJCT) )
|
(ckt->CKTmode & MODEINITJCT) )
|
||||||
|| ( ( ckt->CKTmode & MODEUIC) &&
|
|| ( ( ckt->CKTmode & MODEUIC) &&
|
||||||
( ckt->CKTmode & MODEINITTRAN) ) ) ;
|
( ckt->CKTmode & MODEINITTRAN) ) ) ;
|
||||||
/* loop through all the capacitor models */
|
/* loop through all the capacitor models */
|
||||||
for( ; model != NULL; model = model->CAPnextModel ) {
|
for( ; model != NULL; model = model->CAPnextModel ) {
|
||||||
|
|
||||||
|
|
@ -41,13 +41,13 @@ CAPload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
for (here = model->CAPinstances; here != NULL ;
|
for (here = model->CAPinstances; here != NULL ;
|
||||||
here=here->CAPnextInstance) {
|
here=here->CAPnextInstance) {
|
||||||
|
|
||||||
m = here->CAPm;
|
m = here->CAPm;
|
||||||
|
|
||||||
if(cond1) {
|
if(cond1) {
|
||||||
vcap = here->CAPinitCond;
|
vcap = here->CAPinitCond;
|
||||||
} else {
|
} else {
|
||||||
vcap = *(ckt->CKTrhsOld+here->CAPposNode) -
|
vcap = *(ckt->CKTrhsOld+here->CAPposNode) -
|
||||||
*(ckt->CKTrhsOld+here->CAPnegNode) ;
|
*(ckt->CKTrhsOld+here->CAPnegNode) ;
|
||||||
}
|
}
|
||||||
if(ckt->CKTmode & (MODETRAN | MODEAC)) {
|
if(ckt->CKTmode & (MODETRAN | MODEAC)) {
|
||||||
#ifndef PREDICTOR
|
#ifndef PREDICTOR
|
||||||
|
|
@ -65,7 +65,7 @@ CAPload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
}
|
}
|
||||||
#endif /* PREDICTOR */
|
#endif /* PREDICTOR */
|
||||||
error = NIintegrate(ckt,&geq,&ceq,here->CAPcapac,
|
error = NIintegrate(ckt,&geq,&ceq,here->CAPcapac,
|
||||||
here->CAPqcap);
|
here->CAPqcap);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
if(ckt->CKTmode & MODEINITTRAN) {
|
if(ckt->CKTmode & MODEINITTRAN) {
|
||||||
*(ckt->CKTstate1+here->CAPccap) =
|
*(ckt->CKTstate1+here->CAPccap) =
|
||||||
|
|
@ -78,7 +78,7 @@ CAPload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(ckt->CKTrhs+here->CAPposNode) -= m * ceq;
|
*(ckt->CKTrhs+here->CAPposNode) -= m * ceq;
|
||||||
*(ckt->CKTrhs+here->CAPnegNode) += m * ceq;
|
*(ckt->CKTrhs+here->CAPnegNode) += m * ceq;
|
||||||
} else
|
} else
|
||||||
*(ckt->CKTstate0+here->CAPqcap) = here->CAPcapac * vcap;
|
*(ckt->CKTstate0+here->CAPqcap) = here->CAPcapac * vcap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,43 +24,43 @@ CAPmAsk(CKTcircuit *ckt, GENmodel *inst, int which, IFvalue *value)
|
||||||
NG_IGNORE(ckt);
|
NG_IGNORE(ckt);
|
||||||
|
|
||||||
switch(which) {
|
switch(which) {
|
||||||
case CAP_MOD_TNOM:
|
case CAP_MOD_TNOM:
|
||||||
value->rValue = here->CAPtnom-CONSTCtoK;
|
value->rValue = here->CAPtnom-CONSTCtoK;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_TC1:
|
case CAP_MOD_TC1:
|
||||||
value->rValue = here->CAPtempCoeff1;
|
value->rValue = here->CAPtempCoeff1;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_TC2:
|
case CAP_MOD_TC2:
|
||||||
value->rValue = here->CAPtempCoeff2;
|
value->rValue = here->CAPtempCoeff2;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_CAP:
|
case CAP_MOD_CAP:
|
||||||
value->rValue = here->CAPmCap;
|
value->rValue = here->CAPmCap;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_CJ:
|
case CAP_MOD_CJ:
|
||||||
value->rValue = here->CAPcj;
|
value->rValue = here->CAPcj;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_CJSW:
|
case CAP_MOD_CJSW:
|
||||||
value->rValue = here->CAPcjsw;
|
value->rValue = here->CAPcjsw;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_DEFWIDTH:
|
case CAP_MOD_DEFWIDTH:
|
||||||
value->rValue = here->CAPdefWidth;
|
value->rValue = here->CAPdefWidth;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_DEFLENGTH:
|
case CAP_MOD_DEFLENGTH:
|
||||||
value->rValue = here->CAPdefLength;
|
value->rValue = here->CAPdefLength;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_NARROW:
|
case CAP_MOD_NARROW:
|
||||||
value->rValue = here->CAPnarrow;
|
value->rValue = here->CAPnarrow;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_SHORT:
|
case CAP_MOD_SHORT:
|
||||||
value->rValue = here->CAPshort;
|
value->rValue = here->CAPshort;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_DI:
|
case CAP_MOD_DI:
|
||||||
value->rValue = here->CAPdi;
|
value->rValue = here->CAPdi;
|
||||||
return(OK);
|
return(OK);
|
||||||
case CAP_MOD_THICK:
|
case CAP_MOD_THICK:
|
||||||
value->rValue = here->CAPthick;
|
value->rValue = here->CAPthick;
|
||||||
return(OK);
|
return(OK);
|
||||||
default:
|
default:
|
||||||
return(E_BADPARM);
|
return(E_BADPARM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,60 +18,60 @@ CAPmParam(int param, IFvalue *value, GENmodel *inModel)
|
||||||
{
|
{
|
||||||
CAPmodel *mod = (CAPmodel*)inModel;
|
CAPmodel *mod = (CAPmodel*)inModel;
|
||||||
switch(param) {
|
switch(param) {
|
||||||
case CAP_MOD_TNOM:
|
case CAP_MOD_TNOM:
|
||||||
mod->CAPtnom = value->rValue+CONSTCtoK;
|
mod->CAPtnom = value->rValue+CONSTCtoK;
|
||||||
mod->CAPtnomGiven = TRUE;
|
mod->CAPtnomGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_TC1:
|
case CAP_MOD_TC1:
|
||||||
mod->CAPtempCoeff1 = value->rValue;
|
mod->CAPtempCoeff1 = value->rValue;
|
||||||
mod->CAPtc1Given = TRUE;
|
mod->CAPtc1Given = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_TC2:
|
case CAP_MOD_TC2:
|
||||||
mod->CAPtempCoeff2 = value->rValue;
|
mod->CAPtempCoeff2 = value->rValue;
|
||||||
mod->CAPtc2Given = TRUE;
|
mod->CAPtc2Given = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_CAP:
|
case CAP_MOD_CAP:
|
||||||
mod->CAPmCap = value->rValue;
|
mod->CAPmCap = value->rValue;
|
||||||
mod->CAPmCapGiven = TRUE;
|
mod->CAPmCapGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_CJ :
|
case CAP_MOD_CJ :
|
||||||
mod->CAPcj = value->rValue;
|
mod->CAPcj = value->rValue;
|
||||||
mod->CAPcjGiven = TRUE;
|
mod->CAPcjGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_CJSW :
|
case CAP_MOD_CJSW :
|
||||||
mod->CAPcjsw = value->rValue;
|
mod->CAPcjsw = value->rValue;
|
||||||
mod->CAPcjswGiven = TRUE;
|
mod->CAPcjswGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_DEFWIDTH:
|
case CAP_MOD_DEFWIDTH:
|
||||||
mod->CAPdefWidth = value->rValue;
|
mod->CAPdefWidth = value->rValue;
|
||||||
mod->CAPdefWidthGiven = TRUE;
|
mod->CAPdefWidthGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_DEFLENGTH:
|
case CAP_MOD_DEFLENGTH:
|
||||||
mod->CAPdefLength = value->rValue;
|
mod->CAPdefLength = value->rValue;
|
||||||
mod->CAPdefLengthGiven = TRUE;
|
mod->CAPdefLengthGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_NARROW:
|
case CAP_MOD_NARROW:
|
||||||
mod->CAPnarrow = value->rValue;
|
mod->CAPnarrow = value->rValue;
|
||||||
mod->CAPnarrowGiven = TRUE;
|
mod->CAPnarrowGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_SHORT:
|
case CAP_MOD_SHORT:
|
||||||
mod->CAPshort = value->rValue;
|
mod->CAPshort = value->rValue;
|
||||||
mod->CAPshortGiven = TRUE;
|
mod->CAPshortGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_DI:
|
case CAP_MOD_DI:
|
||||||
mod->CAPdi = value->rValue;
|
mod->CAPdi = value->rValue;
|
||||||
mod->CAPdiGiven = TRUE;
|
mod->CAPdiGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_THICK:
|
case CAP_MOD_THICK:
|
||||||
mod->CAPthick = value->rValue;
|
mod->CAPthick = value->rValue;
|
||||||
mod->CAPthickGiven = TRUE;
|
mod->CAPthickGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_MOD_C:
|
case CAP_MOD_C:
|
||||||
/* just being reassured by the user that we are a capacitor */
|
/* just being reassured by the user that we are a capacitor */
|
||||||
/* no-op */
|
/* no-op */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return(E_BADPARM);
|
return(E_BADPARM);
|
||||||
}
|
}
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,53 +22,53 @@ CAPparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||||
NG_IGNORE(select);
|
NG_IGNORE(select);
|
||||||
|
|
||||||
switch(param) {
|
switch(param) {
|
||||||
case CAP_CAP:
|
case CAP_CAP:
|
||||||
here->CAPcapac = value->rValue;
|
here->CAPcapac = value->rValue;
|
||||||
if (!here->CAPmGiven)
|
if (!here->CAPmGiven)
|
||||||
here->CAPm = 1.0;
|
here->CAPm = 1.0;
|
||||||
here->CAPcapGiven = TRUE;
|
here->CAPcapGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_IC:
|
case CAP_IC:
|
||||||
here->CAPinitCond = value->rValue;
|
here->CAPinitCond = value->rValue;
|
||||||
here->CAPicGiven = TRUE;
|
here->CAPicGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_TEMP:
|
case CAP_TEMP:
|
||||||
here->CAPtemp = value->rValue + CONSTCtoK;
|
here->CAPtemp = value->rValue + CONSTCtoK;
|
||||||
here->CAPtempGiven = TRUE;
|
here->CAPtempGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_DTEMP:
|
case CAP_DTEMP:
|
||||||
here->CAPdtemp = value->rValue;
|
here->CAPdtemp = value->rValue;
|
||||||
here->CAPdtempGiven = TRUE;
|
here->CAPdtempGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_WIDTH:
|
case CAP_WIDTH:
|
||||||
here->CAPwidth = value->rValue;
|
here->CAPwidth = value->rValue;
|
||||||
here->CAPwidthGiven = TRUE;
|
here->CAPwidthGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_LENGTH:
|
case CAP_LENGTH:
|
||||||
here->CAPlength = value->rValue;
|
here->CAPlength = value->rValue;
|
||||||
here->CAPlengthGiven = TRUE;
|
here->CAPlengthGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_M:
|
case CAP_M:
|
||||||
here->CAPm = value->rValue;
|
here->CAPm = value->rValue;
|
||||||
here->CAPmGiven = TRUE;
|
here->CAPmGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_SCALE:
|
case CAP_SCALE:
|
||||||
here->CAPscale = value->rValue;
|
here->CAPscale = value->rValue;
|
||||||
here->CAPscaleGiven = TRUE;
|
here->CAPscaleGiven = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_CAP_SENS:
|
case CAP_CAP_SENS:
|
||||||
here->CAPsenParmNo = value->iValue;
|
here->CAPsenParmNo = value->iValue;
|
||||||
break;
|
break;
|
||||||
case CAP_TC1:
|
case CAP_TC1:
|
||||||
here->CAPtc1 = value->rValue;
|
here->CAPtc1 = value->rValue;
|
||||||
here->CAPtc1Given = TRUE;
|
here->CAPtc1Given = TRUE;
|
||||||
break;
|
break;
|
||||||
case CAP_TC2:
|
case CAP_TC2:
|
||||||
here->CAPtc2 = value->rValue;
|
here->CAPtc2 = value->rValue;
|
||||||
here->CAPtc2Given = TRUE;
|
here->CAPtc2Given = TRUE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return(E_BADPARM);
|
return(E_BADPARM);
|
||||||
}
|
}
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ CAPsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
for( ; model != NULL; model = model->CAPnextModel ) {
|
for( ; model != NULL; model = model->CAPnextModel ) {
|
||||||
|
|
||||||
/*Default Value Processing for Model Parameters */
|
/*Default Value Processing for Model Parameters */
|
||||||
if (!model->CAPmCapGiven) {
|
if (!model->CAPmCapGiven) {
|
||||||
model->CAPmCap = 0.0;
|
model->CAPmCap = 0.0;
|
||||||
}
|
}
|
||||||
if (!model->CAPcjswGiven){
|
if (!model->CAPcjswGiven){
|
||||||
|
|
@ -37,7 +37,7 @@ CAPsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
if (!model->CAPdefWidthGiven) {
|
if (!model->CAPdefWidthGiven) {
|
||||||
model->CAPdefWidth = 10.e-6;
|
model->CAPdefWidth = 10.e-6;
|
||||||
}
|
}
|
||||||
if (!model->CAPdefLengthGiven) {
|
if (!model->CAPdefLengthGiven) {
|
||||||
model->CAPdefLength = 0.0;
|
model->CAPdefLength = 0.0;
|
||||||
}
|
}
|
||||||
if (!model->CAPnarrowGiven) {
|
if (!model->CAPnarrowGiven) {
|
||||||
|
|
@ -52,27 +52,26 @@ CAPsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
if (!model->CAPtc2Given) {
|
if (!model->CAPtc2Given) {
|
||||||
model->CAPtempCoeff2 = 0.0;
|
model->CAPtempCoeff2 = 0.0;
|
||||||
}
|
}
|
||||||
if (!model->CAPtnomGiven) {
|
if (!model->CAPtnomGiven) {
|
||||||
model->CAPtnom = ckt->CKTnomTemp;
|
model->CAPtnom = ckt->CKTnomTemp;
|
||||||
}
|
}
|
||||||
if (!model->CAPdiGiven) {
|
if (!model->CAPdiGiven) {
|
||||||
model->CAPdi = 0.0;
|
model->CAPdi = 0.0;
|
||||||
}
|
}
|
||||||
if (!model->CAPthickGiven) {
|
if (!model->CAPthickGiven) {
|
||||||
model->CAPthick = 0.0;
|
model->CAPthick = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!model->CAPcjGiven) {
|
if (!model->CAPcjGiven) {
|
||||||
if((model->CAPthickGiven)
|
if((model->CAPthickGiven)
|
||||||
&& (model->CAPthick > 0.0)) {
|
&& (model->CAPthick > 0.0)) {
|
||||||
|
if (model->CAPdiGiven)
|
||||||
if (model->CAPdiGiven)
|
model->CAPcj = (model->CAPdi * CONSTepsZero) / model->CAPthick;
|
||||||
model->CAPcj = (model->CAPdi * CONSTepsZero) / model->CAPthick;
|
else
|
||||||
else
|
model->CAPcj = CONSTepsSiO2 / model->CAPthick;
|
||||||
model->CAPcj = CONSTepsSiO2 / model->CAPthick;
|
} else {
|
||||||
} else {
|
model->CAPcj = 0.0;
|
||||||
model->CAPcj = 0.0;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,9 @@ Modified: September 2003 Paolo Nenzi
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* load the capacitor structure with those pointers needed later
|
/* load the capacitor structure with those pointers needed later
|
||||||
* for fast matrix loading
|
* for fast matrix loading
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ngspice/ngspice.h"
|
#include "ngspice/ngspice.h"
|
||||||
#include "ngspice/cktdefs.h"
|
#include "ngspice/cktdefs.h"
|
||||||
|
|
@ -36,56 +36,56 @@ CAPtemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here=here->CAPnextInstance) {
|
here=here->CAPnextInstance) {
|
||||||
|
|
||||||
/* Default Value Processing for Capacitor Instance */
|
/* Default Value Processing for Capacitor Instance */
|
||||||
if(!here->CAPtempGiven) {
|
if(!here->CAPtempGiven) {
|
||||||
here->CAPtemp = ckt->CKTtemp;
|
here->CAPtemp = ckt->CKTtemp;
|
||||||
if(!here->CAPdtempGiven) here->CAPdtemp = 0.0;
|
if(!here->CAPdtempGiven) here->CAPdtemp = 0.0;
|
||||||
} else { /* CAPtempGiven */
|
} else { /* CAPtempGiven */
|
||||||
here->CAPdtemp = 0.0;
|
here->CAPdtemp = 0.0;
|
||||||
if (here->CAPdtempGiven)
|
if (here->CAPdtempGiven)
|
||||||
printf("%s: Instance temperature specified, dtemp ignored\n",
|
printf("%s: Instance temperature specified, dtemp ignored\n",
|
||||||
here->CAPname);
|
here->CAPname);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!here->CAPwidthGiven) {
|
if (!here->CAPwidthGiven) {
|
||||||
here->CAPwidth = model->CAPdefWidth;
|
here->CAPwidth = model->CAPdefWidth;
|
||||||
}
|
}
|
||||||
if (!here->CAPscaleGiven) here->CAPscale = 1.0;
|
if (!here->CAPscaleGiven) here->CAPscale = 1.0;
|
||||||
if (!here->CAPmGiven) here->CAPm = 1.0;
|
if (!here->CAPmGiven) here->CAPm = 1.0;
|
||||||
|
|
||||||
if (!here->CAPcapGiven) { /* No instance capacitance given */
|
if (!here->CAPcapGiven) { /* No instance capacitance given */
|
||||||
if (!model->CAPmCapGiven){ /* No model capacitange given */
|
if (!model->CAPmCapGiven) { /* No model capacitange given */
|
||||||
here->CAPcapac =
|
here->CAPcapac =
|
||||||
model->CAPcj *
|
model->CAPcj *
|
||||||
(here->CAPwidth - model->CAPnarrow) *
|
(here->CAPwidth - model->CAPnarrow) *
|
||||||
(here->CAPlength - model->CAPshort) +
|
(here->CAPlength - model->CAPshort) +
|
||||||
model->CAPcjsw * 2 * (
|
model->CAPcjsw * 2 * (
|
||||||
(here->CAPlength - model->CAPshort) +
|
(here->CAPlength - model->CAPshort) +
|
||||||
(here->CAPwidth - model->CAPnarrow) );
|
(here->CAPwidth - model->CAPnarrow) );
|
||||||
} else {
|
} else {
|
||||||
here->CAPcapac = model->CAPmCap;
|
here->CAPcapac = model->CAPmCap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
difference = (here->CAPtemp + here->CAPdtemp) - model->CAPtnom;
|
difference = (here->CAPtemp + here->CAPdtemp) - model->CAPtnom;
|
||||||
|
|
||||||
/* instance parameters tc1 and tc2 will override
|
/* instance parameters tc1 and tc2 will override
|
||||||
model parameters tc1 and tc2 */
|
model parameters tc1 and tc2 */
|
||||||
if (here->CAPtc1Given)
|
if (here->CAPtc1Given)
|
||||||
tc1 = here->CAPtc1; /* instance */
|
tc1 = here->CAPtc1; /* instance */
|
||||||
else
|
else
|
||||||
tc1 = model->CAPtempCoeff1; /* model */
|
tc1 = model->CAPtempCoeff1; /* model */
|
||||||
|
|
||||||
if (here->CAPtc2Given)
|
if (here->CAPtc2Given)
|
||||||
tc2 = here->CAPtc2;
|
tc2 = here->CAPtc2;
|
||||||
else
|
else
|
||||||
tc2 = model->CAPtempCoeff2;
|
tc2 = model->CAPtempCoeff2;
|
||||||
|
|
||||||
factor = 1.0 + tc1*difference +
|
factor = 1.0 + tc1*difference +
|
||||||
tc2*difference*difference;
|
tc2*difference*difference;
|
||||||
|
|
||||||
here->CAPcapac = here->CAPcapac * factor * here->CAPscale;
|
here->CAPcapac = here->CAPcapac * factor * here->CAPscale;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue