46 #include <Xyce_config.h>
50 #include <N_UTL_Math.h>
60 #include <N_ERH_ErrorMgr.h>
62 #include <N_LAS_Matrix.h>
63 #include <N_LAS_Vector.h>
64 #include <N_UTL_FeatureTest.h>
74 .setDescription(
"Device temperature");
79 .setDescription(
"Device area");
86 .setDescription(
"Flicker noise exponent");
91 .setDescription(
"Doping tail parameter (level 1)");
96 .setDescription(
"Transconductance parameter");
102 .setDescription(
"Zero-bias gate-source junction capacitance");
108 .setDescription(
"Zero-bias gate-drain junction capacitance");
113 .setDescription(
"Coefficient for forward-bias depletion capacitance");
118 .setDescription(
"Gate junction saturation current");
122 .setDescription(
"Flicker noise coefficient");
127 .setDescription(
"Channel length modulation");
132 .setDescription(
"Gate junction potential");
138 .setDescription(
"Drain ohmic resistance");
144 .setDescription(
"Source ohmic resistance");
149 .setDescription(
"Parameter measurement temperature");
154 .setDescription(
"Threshold voltage");
159 .setDescription(
"Saturation voltage parrameter (level 2)");
164 .setDescription(
"Mobility modulation parameter (level 2)");
198 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
260 std::vector<Instance*>::iterator iter;
264 for (iter=first; iter!=last; ++iter)
282 std::vector<Instance*>::const_iterator iter;
289 os <<
"Number of JFET Instances: " << isize << std::endl;
290 os <<
" name model name Parameters" << std::endl;
292 for (i=0, iter=first; iter!=last; ++iter, ++i)
294 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
320 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
350 std::vector<Instance*>::iterator iter;
354 for (iter=first; iter!=last; ++iter)
356 (*iter)->processParams();
377 :
DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
385 temp(getDeviceOptions().temp.getImmutableValue<double>()),
446 ADrainEquDrainNodeOffset(-1),
447 ADrainEquDrainPrimeNodeOffset(-1),
449 AGateEquGateNodeOffset(-1),
450 AGateEquDrainPrimeNodeOffset(-1),
451 AGateEquSourcePrimeNodeOffset(-1),
453 ASourceEquSourceNodeOffset(-1),
454 ASourceEquSourcePrimeNodeOffset(-1),
456 ADrainPrimeEquDrainNodeOffset(-1),
457 ADrainPrimeEquGateNodeOffset(-1),
458 ADrainPrimeEquDrainPrimeNodeOffset(-1),
459 ADrainPrimeEquSourcePrimeNodeOffset(-1),
461 ASourcePrimeEquGateNodeOffset(-1),
462 ASourcePrimeEquSourceNodeOffset(-1),
463 ASourcePrimeEquDrainPrimeNodeOffset(-1),
464 ASourcePrimeEquSourcePrimeNodeOffset(-1),
469 f_DrainEquDrainNodePtr(0),
470 f_DrainEquDrainPrimeNodePtr(0),
472 f_GateEquGateNodePtr(0),
473 f_GateEquDrainPrimeNodePtr(0),
474 f_GateEquSourcePrimeNodePtr(0),
476 f_SourceEquSourceNodePtr(0),
477 f_SourceEquSourcePrimeNodePtr(0),
479 f_DrainPrimeEquDrainNodePtr(0),
480 f_DrainPrimeEquGateNodePtr(0),
481 f_DrainPrimeEquDrainPrimeNodePtr(0),
482 f_DrainPrimeEquSourcePrimeNodePtr(0),
484 f_SourcePrimeEquGateNodePtr(0),
485 f_SourcePrimeEquSourceNodePtr(0),
486 f_SourcePrimeEquDrainPrimeNodePtr(0),
487 f_SourcePrimeEquSourcePrimeNodePtr(0),
491 q_DrainEquDrainNodePtr(0),
492 q_DrainEquDrainPrimeNodePtr(0),
494 q_GateEquGateNodePtr(0),
495 q_GateEquDrainPrimeNodePtr(0),
496 q_GateEquSourcePrimeNodePtr(0),
498 q_SourceEquSourceNodePtr(0),
499 q_SourceEquSourcePrimeNodePtr(0),
501 q_DrainPrimeEquDrainNodePtr(0),
502 q_DrainPrimeEquGateNodePtr(0),
503 q_DrainPrimeEquDrainPrimeNodePtr(0),
504 q_DrainPrimeEquSourcePrimeNodePtr(0),
506 q_SourcePrimeEquGateNodePtr(0),
507 q_SourcePrimeEquSourceNodePtr(0),
508 q_SourcePrimeEquDrainPrimeNodePtr(0),
509 q_SourcePrimeEquSourcePrimeNodePtr(0),
623 const std::vector<int> & extLIDVecRef )
630 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
632 Xyce::dout() << std::endl << section_divider << std::endl;
633 Xyce::dout() <<
" Instance::registerLIDs. name = " <<
getName() << std::endl;
634 Xyce::dout() <<
" number of internal variables: " <<
numIntVars << std::endl;
635 Xyce::dout() <<
" number of external variables: " <<
numExtVars << std::endl;
662 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
664 Xyce::dout() <<
"\n variable local indices:\n";
665 Xyce::dout() <<
" li_Drain = " <<
li_Drain << std::endl;
666 Xyce::dout() <<
" li_DrainPrime = " <<
li_DrainPrime << std::endl;
667 Xyce::dout() <<
" li_Source = " <<
li_Source << std::endl;
668 Xyce::dout() <<
" li_SourcePrime = " <<
li_SourcePrime << std::endl;
669 Xyce::dout() <<
" li_Gate = " <<
li_Gate << std::endl;
671 Xyce::dout() << section_divider << std::endl;
712 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
714 Xyce::dout() << std::endl;
715 Xyce::dout() << section_divider << std::endl;
716 Xyce::dout() <<
" In Instance::registerStateLIDs. name = " <<
getName() << std::endl;
717 Xyce::dout() <<
" Number of State LIDs: " <<
numStateVars << std::endl;
732 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
734 Xyce::dout() <<
" State local indices:" << std::endl;
735 Xyce::dout() << std::endl;
737 Xyce::dout() <<
" li_state_qgs = " <<
li_state_qgs << std::endl;
740 Xyce::dout() <<
" li_state_gcgd = " <<
li_state_gcgd << std::endl;;
742 Xyce::dout() << section_divider << std::endl;
805 std::vector<int> map;
806 std::vector< std::vector<int> > map2;
866 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
958 double czgdf2, czgsf2;
964 double A, B, C, B12, C12, D;
968 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
970 Xyce::dout() << subsection_divider << std::endl;
971 Xyce::dout() <<
" Instance::updateIntermediateVars. name = " <<
getName() << std::endl;
972 Xyce::dout() <<
" Model name = " <<
model_.
getName() << std::endl;
973 Xyce::dout() << std::endl;
974 Xyce::dout().width(25); Xyce::dout().precision(17); Xyce::dout().setf(std::ios::scientific);
993 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
995 Xyce::dout() <<
" " << std::endl;
996 Xyce::dout() <<
" Vg = " <<
Vg << std::endl;
997 Xyce::dout() <<
" Vd = " <<
Vd << std::endl;
998 Xyce::dout() <<
" Vs = " <<
Vs << std::endl;
999 Xyce::dout() <<
" Vdp = " <<
Vdp << std::endl;
1000 Xyce::dout() <<
" Vsp = " <<
Vsp << std::endl;
1028 if ((*flagSolVectorPtr)[
li_Drain] == 0 || (*flagSolVectorPtr)[
li_Gate] == 0 ||
1071 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1073 Xyce::dout() <<
" before limiting: " << std::endl;
1074 Xyce::dout() <<
" vgs = " <<
vgs <<
" vgs_old = " <<
vgs_old << std::endl;
1075 Xyce::dout() <<
" vgd = " << vgd <<
" vgd_old = " <<
vgd_old << std::endl;
1082 if (ichk1 == 1) {icheck=1;}
1089 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1091 Xyce::dout() <<
" After limiting: " << std::endl;
1092 Xyce::dout() <<
" vgs = " <<
vgs << std::endl;
1093 Xyce::dout() <<
" vgd = " << vgd << std::endl;
1094 Xyce::dout() <<
" " << std::endl;
1098 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1100 Xyce::dout() <<
"vgs = " <<
vgs << std::endl;
1101 Xyce::dout() <<
"vgd = " << vgd << std::endl;
1102 Xyce::dout() <<
"vds = " <<
vds << std::endl;
1103 Xyce::dout() <<
"Vddp = " <<
Vddp << std::endl;
1104 Xyce::dout() <<
"Vssp = " <<
Vssp << std::endl;
1105 Xyce::dout() <<
"Vgsp = " << Vgsp << std::endl;
1106 Xyce::dout() <<
"Vgdp = " << Vgdp << std::endl;
1107 Xyce::dout() <<
"Vdpsp = " <<
Vdpsp << std::endl;
1108 Xyce::dout() <<
" " << std::endl;
1113 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1117 Xyce::dout() <<
getName() <<
" Something modified the voltages. " << std::endl;
1121 Xyce::dout() <<
getName() <<
" No voltages were limited. " << std::endl;
1123 Xyce::dout() <<
" Voltage before after diff " << std::endl;
1127 Xyce::dout() <<
" " << std::endl;
1200 gm=betap*
vds*(apart+3.0*Bfac*vgst);;
1247 gm=betap*
vds*(apart+3.0*Bfac*vgdt);;
1287 if(A != 0) B = (A-vgst)/A;
1289 if(B >= 0) B12 = sqrt(B);
1296 if(A != 0) C = (
vds - tDelta*
vds/Vdsat + A-vgst)/A;
1298 if(C >= 0) C12 = sqrt(C);
1302 if( dtype*
Vd <= Vdsat )
1309 + betap*tDelta*(1-C12)*
vds/(Vdsat*Vdsat);
1311 + betap*(1-(1-C12)*tDelta/Vdsat-C12);
1319 cdrain = betap*(vgst - (2*A/3)*(1 - B*B12));
1346 if(A != 0) B = (A-vgdt)/A;
1348 if(B >= 0) B12 = sqrt(B);
1355 if(A != 0) C = (-
vds + tDelta*
vds/Vdsat + A-vgdt)/A;
1357 if(C >= 0) C12 = sqrt(C);
1361 if( dtype*
Vs <= Vdsat )
1368 gm += betap*(1-C12)*tDelta*
vds/(Vdsat*Vdsat);
1369 gds = betap*(1 - (1-C12)*tDelta/Vdsat - C12)
1379 cdrain = -betap*(vgdt - (2*A/3)*(1 - B*B12));
1399 if (
vgs < corDepCap)
1402 qgs = twop*czgs*(1-sarg);
1408 +(
vgs*
vgs - fcpb2)/(2*twop));
1421 if (vgd < corDepCap)
1423 sarg=sqrt(1-vgd/
tPB);
1424 qgd = twop*czgd*(1-sarg);
1430 +(vgd*vgd - fcpb2)/(2*twop) );
1445 Xyce::dout() <<
" Done with Instance::updateIntermediateVars. name = " <<
getName() << std::endl;
1446 Xyce::dout() <<
" mode = " <<
mode << std::endl;
1447 Xyce::dout() <<
" tBeta = " <<
tBeta << std::endl;
1448 Xyce::dout() <<
" Idrain = " <<
Idrain << std::endl;
1449 Xyce::dout() <<
" Isource = " <<
Isource << std::endl;
1450 Xyce::dout() <<
" gds = " <<
gds << std::endl;
1451 Xyce::dout() <<
" gm = " <<
gm << std::endl;
1522 double ceqgd = Dtype*(
qgd);
1524 double cdreq = Dtype*(((-
qgd)+
qgd));
1528 double cdreq_Jdxp = 0.0;
1530 qVec[
li_Gate ] += ( ceqgs+ceqgd);
1536 dQdxdVp[
li_Gate ] -= ( ceqgs_Jdxp+ceqgd_Jdxp);
1579 double ceqgd = Dtype*(
cgd);
1580 double ceqgs = Dtype*((
cg-
cgd));
1581 double cdreq = Dtype*((
cd+
cgd));
1598 fVec[
li_Gate ] += (ceqgs+ceqgd);
1604 dFdxdVp[
li_Gate ] -= ( ceqgs_Jdxp+ceqgd_Jdxp);
1737 bool bsuccess =
true;
1741 double fact1, fact2;
1744 double egfet, egfet1;
1746 double cjfact, cjfact1;
1747 double gmanew, gmaold;
1752 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1755 Xyce::dout() <<
" Instance::Begin of updateTemperature. name = " <<
getName() << std::endl;
1756 Xyce::dout() << std::endl;
1760 if (temp_tmp != -999.0)
temp = temp_tmp;
1784 egfet1 = 1.16 - (7.02e-4*tnom*tnom)/(tnom + 1108);
1786 pbfact = -2.0*vtnom*(1.5*log(fact1) +
CONSTQ*arg1);
1787 pbo = (Pb - pbfact)/fact1;
1788 gmaold = (Pb - pbo)/pbo;
1789 cjfact = 1.0/(1.0 + 0.5*(4e-4*(tnom -
CONSTREFTEMP) - gmaold));
1792 Xyce::dout() <<
"Depletion cap. coeff. FC too large, limited to .95";
1793 Xyce::dout() << std::endl;
1806 ratio1 = ratio - 1.0;
1812 arg = -egfet/(2.0*kt) + 1.1150877/(CONSTboltz*2.0*CONSTREFTEMP);
1813 pbfact = -2.0*
vt*(1.5*log(fact2) +
CONSTQ*arg);
1814 tPB = fact2*pbo + pbfact;
1815 gmanew = (tPB - pbo)/pbo;
1821 f1 = tPB*(1.0 - exp((0.5)*xfc))/(0.5);
1835 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1837 Xyce::dout() << std::endl;
1838 Xyce::dout() <<
"temp = "<<
temp << std::endl;
1839 Xyce::dout() <<
"tnom = " << tnom << std::endl;
1840 Xyce::dout() <<
"ratio = " << ratio << std::endl;
1841 Xyce::dout() <<
"vt = " <<
vt << std::endl;
1842 Xyce::dout() <<
"kt = " << kt << std::endl;
1843 Xyce::dout() <<
"fact2 = " << fact2 << std::endl;
1844 Xyce::dout() <<
"egfet = " << egfet << std::endl;
1845 Xyce::dout() <<
"arg = " << arg << std::endl;
1846 Xyce::dout() <<
"pbfact = " << pbfact << std::endl;
1847 Xyce::dout() <<
"pbo = " << pbo << std::endl;
1848 Xyce::dout() <<
"f2 = " <<
f2 << std::endl;
1849 Xyce::dout() <<
"f3 = " <<
f3 << std::endl;
1850 Xyce::dout() <<
"corDepCap = " <<
corDepCap << std::endl;
1851 Xyce::dout() <<
"tBeta = " <<
tBeta << std::endl;
1852 Xyce::dout() <<
"tvt0 = " <<
tvt0 << std::endl;
1853 Xyce::dout() <<
"tPB = " << tPB << std::endl;
1854 Xyce::dout() <<
"tJFETb = " <<
tJFETb << std::endl;
1855 Xyce::dout() <<
"tLambda = " <<
tLambda << std::endl;
1856 Xyce::dout() <<
"tDelta = " <<
tDelta << std::endl;
1857 Xyce::dout() <<
"tTheta = " <<
tTheta << std::endl;
1858 Xyce::dout() <<
"tRD = " <<
tRD << std::endl;
1859 Xyce::dout() <<
"tRS = " <<
tRS << std::endl;
1860 Xyce::dout() <<
" " << std::endl;
1896 bool bsuccess =
true;
1902 bsuccess = bsuccess && btmp;
1922 bool Master::loadDAEVectors (
double * solVec,
double * fVec,
double *qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ,
double * leadF,
double * leadQ,
double * junctionV)
1933 double f_ceqgd = Dtype*(ji.
cgd);
1934 double f_ceqgs = Dtype*((ji.
cg-ji.
cgd));
1935 double f_cdreq = Dtype*((ji.
cd+ji.
cgd));
1952 fVec[ji.
li_Gate ] += (f_ceqgs+f_ceqgd);
1958 dFdxdVp[ji.
li_Gate ] -= ( f_ceqgs_Jdxp+f_ceqgd_Jdxp);
1966 double q_ceqgd = Dtype*(ji.
qgd);
1967 double q_ceqgs = Dtype*(((ji.
qgs+ji.
qgd)-ji.
qgd));
1968 double q_cdreq = Dtype*(((-ji.
qgd)+ji.
qgd));
1972 double q_cdreq_Jdxp = 0.0;
1974 qVec[ji.
li_Gate ] += ( q_ceqgs+q_ceqgd);
1980 dQdxdVp[ji.
li_Gate ] -= ( q_ceqgs_Jdxp+q_ceqgd_Jdxp);
2012 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
2094 int sizeInstances = instanceContainer_.size();
2096 for (
int i=0; i<sizeInstances; ++i)
2098 Instance & ji = *(instanceContainer_.at(i));
2168 .registerDevice(
"j", 1)
2169 .registerDevice(
"j", 2)
2170 .registerModelType(
"pjf", 1)
2171 .registerModelType(
"njf", 1)
2172 .registerModelType(
"pjf", 2)
2173 .registerModelType(
"njf", 2);
const InstanceName & getName() const
double * q_SourcePrimeEquSourceNodePtr
double * q_SourcePrimeEquGateNodePtr
static void initThermalModel(ParametricData< T > ¶metric_data)
Add the parameter "TEMPMODEL" to the parametric_data.
double * currStoVectorRawPtr
int ASourceEquSourceNodeOffset
bool updateDependentParameters()
const DeviceOptions & deviceOptions_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
double * daeQVectorRawPtr
Instance(const Configuration &configuration, const InstanceBlock &instance_block, Model &model, const FactoryBlock &factory_block)
double * dFdxdVpVectorRawPtr
static std::vector< int > jacMap_SC
bool updateTemperature(const double &temp_tmp)
double pnjlim(double vnew, double vold, double vt, double vcrit, int *icheck)
std::vector< int > devConMap
double * q_SourceEquSourceNodePtr
bool given(const std::string ¶meter_name) const
double * q_DrainEquDrainPrimeNodePtr
int ASourcePrimeEquSourcePrimeNodeOffset
Pure virtual class to augment a linear system.
double * f_SourceEquSourceNodePtr
virtual std::ostream & printOutInstances(std::ostream &os) const
Parameter may be specified as time dependent expression from netlist.
void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
double * q_DrainPrimeEquGateNodePtr
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
int ASourceEquSourcePrimeNodeOffset
static std::vector< std::vector< int > > jacStamp
double * f_SourceEquSourcePrimeNodePtr
void setNumStoreVars(int num_store_vars)
double * f_DrainPrimeEquSourcePrimeNodePtr
double * q_GateEquDrainPrimeNodePtr
InstanceVector::const_iterator getInstanceEnd() const
Returns an iterator to the ending of the vector of all instances created for this device...
static std::vector< int > jacMap_DC
Parameter is subject to being set to minimum junction capacitance.
static std::vector< std::vector< int > > jacStamp_SC
static std::vector< std::vector< int > > jacStamp_DC
double * q_SourcePrimeEquDrainPrimeNodePtr
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
Parameter is subject to being set to minimum lead resistance.
int AGateEquDrainPrimeNodeOffset
double fetlim(double vnew, double vold, double vto)
int ADrainEquDrainPrimeNodeOffset
double tnom
nominal temperature for device params.
double * storeLeadCurrQCompRawPtr
double * q_SourceEquSourcePrimeNodePtr
double * f_DrainPrimeEquDrainPrimeNodePtr
int getNumStoreVars() const
InstanceVector::const_iterator getInstanceBegin() const
Returns an iterator to the beginning of the vector of all instances created for this device...
std::vector< Instance * > instanceContainer
std::vector< Param > params
Parameters from the line.
void setParams(const std::vector< Param > ¶ms)
int ADrainPrimeEquDrainPrimeNodeOffset
double * f_SourcePrimeEquSourceNodePtr
const std::string & getName() const
double * daeFVectorRawPtr
int ADrainPrimeEquGateNodeOffset
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
int ADrainEquDrainNodeOffset
void registerStoreLIDs(const std::vector< int > &stoLIDVecRef)
double * q_SourcePrimeEquSourcePrimeNodePtr
virtual bool loadDAEVectors(double *solVec, double *fVec, double *qVec, double *bVec, double *storeLeadF, double *storeLeadQ, double *leadF, double *leadQ, double *junctionV)
Populates the device's ExternData object with these pointers.
const DeviceOptions & getDeviceOptions() const
double * nextStoVectorRawPtr
double * f_SourcePrimeEquGateNodePtr
double * f_DrainPrimeEquDrainNodePtr
static std::vector< std::vector< int > > jacMap2_DC
double * q_DrainPrimeEquDrainPrimeNodePtr
double * q_DrainEquDrainNodePtr
bool processParams()
processParams
static void loadModelParameters(ParametricData< Model > &model_parameters)
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
Linear::Matrix * dFdxMatrixPtr
static std::vector< std::vector< int > > jacMap2_DC_SC
The Device class is an interface for device implementations.
void addStoreNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
const std::vector< std::vector< int > > & jacobianStamp() const
static std::vector< std::vector< int > > jacStamp_DC_SC
static std::vector< int > jacMap
double * f_GateEquGateNodePtr
const SolverState & solverState_
double * dQdxdVpVectorRawPtr
Class Configuration contains device configuration data.
virtual bool loadDAEMatrices(Linear::Matrix &dFdx, Linear::Matrix &dQdx)
Populates the device's Jacobian object with these pointers.
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
double * q_GateEquGateNodePtr
static std::vector< int > jacMap_DC_SC
bool interpolateTNOM(double)
void jacStampMap(const JacobianStamp &stamp_parent, IdVector &map_parent, JacobianStamp &map2_parent, JacobianStamp &stamp, IdVector &map, JacobianStamp &map2, int from, int to, int original_size)
const SolverState & getSolverState() const
double * f_GateEquDrainPrimeNodePtr
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
int AGateEquSourcePrimeNodeOffset
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
bool processInstanceParams()
processInstanceParams
double * q_GateEquSourcePrimeNodePtr
double * nextStaVectorRawPtr
bool updateIntermediateVars()
#define Xyce_NONPOINTER_MATRIX_LOAD
int ADrainPrimeEquSourcePrimeNodeOffset
double * f_SourcePrimeEquSourcePrimeNodePtr
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
const std::string & getType() const
double gmin
minimum allowed conductance.
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
double * f_GateEquSourcePrimeNodePtr
double * f_DrainEquDrainNodePtr
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
double * q_DrainPrimeEquDrainNodePtr
const ExternData & extData
ModelBlock represents a .MODEL line from the netlist.
double * f_SourcePrimeEquDrainPrimeNodePtr
Manages parameter binding for class C.
InstanceBlock represent a device instance line from the netlist.
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
int AGateEquGateNodeOffset
Util::Param temp
operating temperature of ckt.
int ADrainPrimeEquDrainNodeOffset
std::vector< Param > params
Linear::Matrix * dQdxMatrixPtr
int ASourcePrimeEquGateNodeOffset
int ASourcePrimeEquDrainPrimeNodeOffset
double * q_DrainPrimeEquSourcePrimeNodePtr
static std::vector< std::vector< int > > jacMap2
Linear::Vector * flagSolVectorPtr
double * f_DrainEquDrainPrimeNodePtr
void setModParams(const std::vector< Param > ¶ms)
bool updatePrimaryState()
double * nextSolVectorRawPtr
int numLeadCurrentStoreVars
int ASourcePrimeEquSourceNodeOffset
static std::vector< std::vector< int > > jacMap2_SC
double * f_DrainPrimeEquGateNodePtr