46 #include <Xyce_config.h>
57 #include <N_ERH_ErrorMgr.h>
59 #include <N_LAS_Matrix.h>
60 #include <N_LAS_Vector.h>
62 #include <N_UTL_BreakPoint.h>
63 #include <N_UTL_FeatureTest.h>
64 #include <N_UTL_Functors.h>
65 #include <N_UTL_MachDepParams.h>
75 .setDescription(
"Characteristic Impedance");
79 .setDescription(
"Characteristic Impedance");
83 .setDescription(
"Time delay");
87 .setDescription(
"Frequency");
90 .setDescription(
"Length in wavelengths");
113 :
DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
131 APos1EquPos1NodeOffset(-1),
132 APos1EquInt1NodeOffset(-1),
133 AInt1EquPos1NodeOffset(-1),
134 AInt1EquInt1NodeOffset(-1),
135 AInt1EquIbr1NodeOffset(-1),
136 ANeg1EquIbr1NodeOffset(-1),
137 AIbr1EquInt1NodeOffset(-1),
138 AIbr1EquNeg1NodeOffset(-1),
139 APos2EquPos2NodeOffset(-1),
140 APos2EquInt2NodeOffset(-1),
141 AInt2EquPos2NodeOffset(-1),
142 AInt2EquInt2NodeOffset(-1),
143 AInt2EquIbr2NodeOffset(-1),
144 ANeg2EquIbr2NodeOffset(-1),
145 AIbr2EquInt2NodeOffset(-1),
146 AIbr2EquNeg2NodeOffset(-1),
147 AIbr1EquPos2NodeOffset(-1),
148 AIbr1EquNeg2NodeOffset(-1),
149 AIbr1EquIbr2NodeOffset(-1),
150 AIbr2EquPos1NodeOffset(-1),
151 AIbr2EquNeg1NodeOffset(-1),
152 AIbr2EquIbr1NodeOffset(-1),
153 first_BP_call_done(false),
157 newBreakPoint(false),
158 newBreakPointTime(0.0)
233 UserError0(*
this) <<
"Invalid (zero or negative) impedance given.";
239 UserError0(*
this) <<
"Neither time delay (TD) nor frequency (F) given.";
243 UserError0(*
this) <<
"Both time delay (TD) and frequency (F) given. Pick one.";
250 else if (!
given(
"TD"))
252 UserError0(*
this) <<
"Zero or negative frequency given.";
262 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
264 Xyce::dout() <<
" Z0 = " <<
Z0 << std::endl;
265 Xyce::dout() <<
" td = " <<
td << std::endl;
266 Xyce::dout() <<
" freq = " <<
freq << std::endl;
267 Xyce::dout() <<
" NL = " <<
NL << std::endl;
281 bool bsuccess =
true;
308 const std::vector<int> & extLIDVecRef )
313 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
315 Xyce::dout() << std::endl << section_divider << std::endl;
316 Xyce::dout() <<
"In Instance::registerLIDs\n\n";
317 Xyce::dout() <<
"name = " <<
getName() << std::endl;
318 Xyce::dout() <<
"number of internal variables: " <<
numIntVars << std::endl;
319 Xyce::dout() <<
"number of external variables: " <<
numExtVars << std::endl;
341 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
343 Xyce::dout() <<
" VARIABLE Indicies " << std::endl;
344 Xyce::dout() <<
"li_Pos1 = " <<
li_Pos1 << std::endl;
345 Xyce::dout() <<
"li_Neg1 = " <<
li_Neg1 << std::endl;
346 Xyce::dout() <<
"li_Int1 = " <<
li_Int1 << std::endl;
347 Xyce::dout() <<
"li_Ibr1 = " <<
li_Ibr1 << std::endl;
348 Xyce::dout() <<
"li_Pos2 = " <<
li_Pos2 << std::endl;
349 Xyce::dout() <<
"li_Neg2 = " <<
li_Neg2 << std::endl;
350 Xyce::dout() <<
"li_Int2 = " <<
li_Int2 << std::endl;
351 Xyce::dout() <<
"li_Ibr2 = " <<
li_Ibr2 << std::endl;
353 Xyce::dout() <<
"\nEnd of Instance::register LIDs\n";
354 Xyce::dout() << section_divider << std::endl;
481 bool bsuccess =
true;
494 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
496 Xyce::dout() << subsection_divider << std::endl;
497 Xyce::dout() <<
" Instance::loadDAEFVector" << std::endl;
498 Xyce::dout() <<
" name = " <<
getName() <<std::endl;
603 Xyce::dout() << subsection_divider << std::endl;
604 Xyce::dout() <<
" name = " <<
getName() << std::endl;
666 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
667 Xyce::dout() << subsection_divider << std::endl;
682 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
684 Xyce::dout() << std::endl << subsection_divider << std::endl;
685 Xyce::dout() <<
"In TRA::updatePrimaryState\n";
686 Xyce::dout() <<
" last_t is " <<
last_t << std::endl;
687 Xyce::dout() <<
" v1 is " <<
v1 << std::endl;
688 Xyce::dout() <<
" v2 is " <<
v2 << std::endl;
706 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
708 Xyce::dout() << std::endl << subsection_divider << std::endl;
709 Xyce::dout() <<
" In ::updateIntermediateVars\n\n";
723 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
725 Xyce::dout() <<
" Vpos1 = " <<
Vpos1 << std::endl;
726 Xyce::dout() <<
" Vneg1 = " <<
Vneg1 << std::endl;
727 Xyce::dout() <<
" Vint1 = " <<
Vint1 << std::endl;
728 Xyce::dout() <<
" Ibr1 = " <<
Ibr1 << std::endl;
729 Xyce::dout() <<
" Vpos2 = " <<
Vpos2 << std::endl;
730 Xyce::dout() <<
" Vneg2 = " <<
Vneg2 << std::endl;
731 Xyce::dout() <<
" Vint2 = " <<
Vint2 << std::endl;
732 Xyce::dout() <<
" Ibr2 = " <<
Ibr2 << std::endl;
743 Xyce::dout() <<
"DC Mode, V1 = " <<
v1 <<
", V2 = " <<
v2 << std::endl;
749 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
752 Xyce::dout() <<
" Time is " << currentTime << std::endl;
771 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
773 Xyce::dout() <<
"Transient, first time, T = ";
774 Xyce::dout() << currentTime;
775 Xyce::dout() <<
", V1 = " <<
v1;
776 Xyce::dout() <<
", V2 = " <<
v2 << std::endl;
781 double delayedTime = currentTime-
td;
786 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
788 Xyce::dout() <<
" Done with interpolation to delayedTime=";
789 Xyce::dout() << delayedTime;
790 Xyce::dout() <<
", have v1="<<
v1 <<
" and v2=" <<
v2 << std::endl;
791 Xyce::dout() <<
" INTERP " << delayedTime <<
" " <<
v1 <<
" " <<
v2 << std::endl;
792 Xyce::dout() <<
" Set last_t to " << currentTime << std::endl;
805 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
807 Xyce::dout() <<
"second or later iteration, t is " << currentTime;
808 Xyce::dout() <<
" have last_t = " <<
last_t <<
" v1="<<
v1 <<
" and v2=" <<
v2 << std::endl;
833 std::vector<History>::iterator first =
history.begin();
834 std::vector<History>::iterator it1;
835 std::vector<History>::iterator last =
history.end();
839 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
841 Xyce::dout() << Xyce::section_divider << std::endl;
842 Xyce::dout() <<
"Pruning for time t1="<<t1 << std::endl;
843 Xyce::dout() <<
" Oldest in list is t="<<first->t<<
" v1 = "<<first->v1 <<
844 " v2="<<first->v2 << std::endl;
845 Xyce::dout() <<
" latest in list is t="<<last->t<<
" v1 = "<<last->v1
846 <<
" v2="<<last->v2 << std::endl;
849 for (it1 = first, i = 0; it1->t < t1 && it1 != last; ++it1, ++i)
851 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
853 Xyce::dout() <<
"i = " << i <<
" t = " << it1->t;
854 Xyce::dout() <<
" v1 = " << it1->v1;
855 Xyce::dout() <<
" v2 = " << it1->v2 << std::endl;
859 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
861 Xyce::dout() <<
" i ="<<i << std::endl;
867 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
869 Xyce::dout() <<
"Need to prune. Keeping " << it1->t << std::endl;
874 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
876 Xyce::dout() <<
" Keeping " << it1->t << std::endl;
880 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
882 Xyce::dout() <<
" Keeping " << it1->t << std::endl;
888 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
890 Xyce::dout() << Xyce::section_divider << std::endl;
907 std::vector<History>::iterator first =
history.begin();
908 std::vector<History>::iterator it1;
909 std::vector<History>::iterator last =
history.end();
912 double v11,v21,v12,v22,v13,v23;
913 double dt12,dt13,dt23;
919 msg=
"Instance::InterpV1V2FromHistory called but history list is"
920 " empty. Might be due to trying to restart this netlist.\n"
921 "Restarts of netlists with transmission lines does not work yet.\n";
922 N_ERH_ErrorMgr::report( N_ERH_ErrorMgr::DEV_FATAL, msg);
929 if (t - first->t < -Util::MachineDependentParams::MachinePrecision()
930 || t - last->t > Util::MachineDependentParams::MachinePrecision() )
932 UserError(*
this) <<
"Cannot interpolate to a time (" << t <<
") prior to oldest("
933 << first->t <<
") or after newest(" << last->t <<
") in history";
937 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
939 Xyce::dout() <<
" interpolating for t = " << t << std::endl;
944 if ( fabs(t-first->t)<Util::MachineDependentParams::MachinePrecision())
949 else if ( fabs(t-last->t)<Util::MachineDependentParams::MachinePrecision())
957 LessThan<History,double> lessFunct;
975 Xyce::dout() <<
"Using time t3="<<t3<<
" v1(t3)="<<v13<<
" v2(t3)="<<v23 << std::endl;
976 Xyce::dout() <<
"Using time t2="<<t2<<
" v1(t2)="<<v12<<
" v2(t2)="<<v22 << std::endl;
977 Xyce::dout() <<
"Using time t1="<<t1<<
" v1(t1)="<<v11<<
" v2(t1)="<<v21 << std::endl;
1025 *v1p = f1*v11+f2*v12+f3*v13;
1026 *v2p = f1*v21+f2*v22+f3*v23;
1048 bool bsuccess =
true;
1066 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1068 Xyce::dout() <<
" In Instance::getBreakPoints "<<std::endl;
1069 Xyce::dout() <<
" First time step, I don't get to set breakpoints. Time is ";
1070 Xyce::dout() << currentTime << std::endl;
1098 double d11, d21, d12, d22;
1103 std::vector<History>::iterator last =
history.end();
1109 double oVp1,oVp2,oVn1,oVn2,oI1,oI2;
1111 double tmp_v1,tmp_v2, tmp_t;
1114 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1116 Xyce::dout() <<
" In Instance::acceptStep "<<std::endl;
1117 Xyce::dout() <<
"I want breakpoints. Time is " << currentTime << std::endl;
1118 Xyce::dout() <<
" timeOld is " <<
timeOld << std::endl;
1138 oVp1 = (*theSolVectorPtr)[
li_Pos1];
1139 oVn1 = (*theSolVectorPtr)[
li_Neg1];
1140 oI1 = (*theSolVectorPtr)[
li_Ibr1];
1141 oVp2 = (*theSolVectorPtr)[
li_Pos2];
1142 oVn2 = (*theSolVectorPtr)[
li_Neg2];
1143 oI2 = (*theSolVectorPtr)[
li_Ibr2];
1147 ov1=(oVp2-oVn2)+
Z0*oI2;
1148 ov2=(oVp1-oVn1)+
Z0*oI1;
1152 oVi1 = (*theSolVectorPtr)[
li_Int1];
1153 oVi2 = (*theSolVectorPtr)[
li_Int2];
1157 Xyce::dout() <<
" ----- New time step -----" << std::endl;
1158 Xyce::dout() <<
" Last solution : " << std::endl;
1159 Xyce::dout() <<
" vpos1 = " << oVp1 << std::endl;
1160 Xyce::dout() <<
" vneg1 = " << oVn1 << std::endl;
1161 Xyce::dout() <<
" vint1 = " << oVi1 << std::endl;
1162 Xyce::dout() <<
" ibr1 = " << oI1 << std::endl;
1163 Xyce::dout() <<
" vpos2 = " << oVp2 << std::endl;
1164 Xyce::dout() <<
" vneg2 = " << oVn2 << std::endl;
1165 Xyce::dout() <<
" vint2 = " << oVi2 << std::endl;
1166 Xyce::dout() <<
" ibr2 = " << oI2 << std::endl;
1167 Xyce::dout() <<
"in set breakpoints, saving for time=" << currentTime <<
", V1 = " << ov1 <<
", V2 = " << ov2 << std::endl;
1168 Xyce::dout() <<
" V1V2DBG " << currentTime <<
" " << ov1 <<
" " << ov2 << std::endl;
1177 tmp_v1 = last->v1; tmp_v2 = last->v2; tmp_t = last->t;
1179 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1181 Xyce::dout() <<
"tmp_t=" << tmp_t <<
" last->t =" << last->t << std::endl;
1182 Xyce::dout() <<
"tmp_v1=" << tmp_v1 <<
" last->v1=" << last->v1 << std::endl;
1183 Xyce::dout() <<
"tmp_v2=" << tmp_v2 <<
" last->v2=" << last->v2 << std::endl;
1185 d11 = (tmp_v1-last->v1)/(tmp_t-last->t);
1186 d12 = (tmp_v2-last->v2)/(tmp_t-last->t);
1187 tmp_v1 = last->v1; tmp_v2 = last->v2; tmp_t = last->t;
1191 Xyce::dout() <<
"tmp_t=" << tmp_t <<
" last->t =" << last->t << std::endl;
1192 Xyce::dout() <<
"tmp_v1=" << tmp_v1 <<
" last->v1=" << last->v1 << std::endl;
1193 Xyce::dout() <<
"tmp_v2=" << tmp_v2 <<
" last->v2=" << last->v2 << std::endl;
1195 d21 = (tmp_v1-last->v1)/(tmp_t-last->t);
1196 d22 = (tmp_v2-last->v2)/(tmp_t-last->t);
1199 Xyce::dout() <<
"Derivs are " << d11 <<
" " << d21 << std::endl;
1200 Xyce::dout() <<
" and " << d12 <<
" " <<d22 << std::endl;
1201 Xyce::dout() <<
" fabs(d11-d21) = " << fabs(d11-d21) << std::endl;
1202 Xyce::dout() <<
" fabs(d12-d22) = " << fabs(d12-d22) << std::endl;
1203 Xyce::dout() <<
"D1D2DBG " << currentTime <<
" " << d11 <<
" " << d12 << std::endl;
1206 if ((fabs(d11-d21) >= .99*std::max(fabs(d11),fabs(d21))+1) ||
1207 (fabs(d12-d22) >= .99*std::max(fabs(d12),fabs(d22))+1))
1209 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1211 Xyce::dout() <<
"Derivative is changing enough, I want to set a break point ";
1212 Xyce::dout() <<
td <<
" ahead of discontinuity, which is ";
1213 Xyce::dout() << tmp_t+
td<<std::endl;
1245 for (i=0;i<hsize;++i)
1253 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1255 Xyce::dout() << Xyce::section_divider
1257 Xyce::dout() <<
" In Instance::getInternalState " << std::endl;
1258 Xyce::dout() <<
" name=" <<
getName() << std::endl;
1259 Xyce::dout() <<
" history size = " << hsize << std::endl;
1260 Xyce::dout() <<
" history data: " << std::endl;
1261 for (i = 0 ; i < hsize ; ++i)
1263 Xyce::dout() <<
" (" <<
history[i].t <<
", " <<
history[i].v1 <<
", "
1264 <<
history[i].v2 <<
")"<< std::endl;
1267 Xyce::dout() <<
" DeviceState ID = " << myState->
ID << std::endl;
1268 Xyce::dout() <<
" DeviceState data size " << myState->
data.size() << std::endl;
1269 Xyce::dout() <<
" Device State data: " << std::endl;
1270 for (i = 0 ; i < myState->
data.size() ; ++i)
1272 Xyce::dout() <<
" " << myState->
data[i] << std::endl;
1274 Xyce::dout() << Xyce::section_divider
1293 int dsize=state.
data.size();
1295 if (
getName().getEncodedName() != state.
ID)
1297 DevelFatal(*this).in(
"TRA::Instance::setInternal") <<
"ID(" << state.
ID <<
") from restart does not match my name (" <<
getName() <<
")";
1303 UserError(*
this) <<
"Data size from restart (" << dsize <<
") not a multiple of 3";
1310 for ( i=0; i<hsize; ++i)
1318 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1320 Xyce::dout() << Xyce::section_divider
1322 Xyce::dout() <<
" In Instance::setInternalState " << std::endl;
1323 Xyce::dout() <<
" name=" <<
getName() << std::endl;
1324 Xyce::dout() <<
" history size = " << hsize << std::endl;
1325 Xyce::dout() <<
" history data: " << std::endl;
1326 for (i = 0 ; i < hsize ; ++i)
1328 Xyce::dout() <<
" (" <<
history[i].t <<
", " <<
history[i].v1 <<
", "
1329 <<
history[i].v2 <<
")"<< std::endl;
1332 Xyce::dout() <<
" DeviceState ID = " << state.
ID << std::endl;
1333 Xyce::dout() <<
" DeviceState data size " << state.
data.size() << std::endl;
1334 Xyce::dout() <<
" Device State data: " << std::endl;
1335 for (i = 0 ; i < state.
data.size() ; ++i)
1337 Xyce::dout() <<
" " << state.
data[i] << std::endl;
1339 Xyce::dout() << Xyce::section_divider
1372 std::vector<Instance*>::iterator iter;
1376 for (iter=first; iter!=last; ++iter)
1378 (*iter)->processParams();
1396 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
1411 std::vector<Instance*>::iterator iter;
1415 for (iter=first; iter!=last; ++iter)
1431 std::vector<Instance*>::const_iterator iter;
1437 os <<
" name model name Parameters" << std::endl;
1438 for (i=0, iter=first; iter!=last; ++iter, ++i)
1440 os <<
" " << i <<
": " << (*iter)->getName() <<
" ";
1444 os <<
"Z0 = " << (*iter)->Z0 << std::endl;
1445 os <<
"G0 = " << (*iter)->G0 << std::endl;
1446 os <<
"TD = " << (*iter)->td << std::endl;
1447 os <<
"FREQ = " << (*iter)->freq << std::endl;
1448 os <<
"NL = " << (*iter)->NL << std::endl;
1473 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1528 : t(right.t),v1(right.v1),v2(right.v2)
1554 .registerDevice(
"t", 1);
const InstanceName & getName() const
int AInt1EquInt1NodeOffset
void InterpV1V2FromHistory(double t, double *v1p, double *v2p)
bool updateDependentParameters()
const SolverState & solverState_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
Linear::Vector * nextSolVectorPtr
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
std::vector< int > devConMap
bool given(const std::string ¶meter_name) const
Pure virtual class to augment a linear system.
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
int APos2EquPos2NodeOffset
void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
const std::string & getEncodedName() const
Return the instance name encoded as: [s:]*xname [s:]*Ytype!name [s:]*Utype!name!count.
bool updatePrimaryState()
DeviceState * getInternalState()
int AInt1EquIbr1NodeOffset
void pruneHistory(double t)
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
int AIbr1EquPos2NodeOffset
virtual std::ostream & printOutInstances(std::ostream &os) const
int AIbr1EquNeg2NodeOffset
bool getInstanceBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
int getNumStoreVars() const
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
void setParams(const std::vector< Param > ¶ms)
int AIbr2EquNeg2NodeOffset
const std::string & getName() const
bool processInstanceParams()
processInstanceParams
double * daeFVectorRawPtr
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
int AIbr2EquInt2NodeOffset
const std::vector< std::vector< int > > & jacobianStamp() const
int AIbr2EquIbr1NodeOffset
double * nextStoVectorRawPtr
double getMaxTimeStepSize()
bool setInternalState(const DeviceState &state)
Instance(const Configuration &configuration, const InstanceBlock &instance_block, Model &model, const FactoryBlock &factory_block)
int APos1EquInt1NodeOffset
const DeviceOptions & deviceOptions_
std::vector< Instance * > instanceContainer
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
int AIbr2EquNeg1NodeOffset
int AInt2EquInt2NodeOffset
static std::vector< std::vector< int > > jacStamp
Linear::Matrix * dFdxMatrixPtr
int AInt1EquPos1NodeOffset
int ANeg1EquIbr1NodeOffset
The Device class is an interface for device implementations.
void registerStoreLIDs(const std::vector< int > &st0LIDVecRef)
void addStoreNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
int timeStepNumber_
Memristor, LTRA, TRA, testing if debug or jacobian for testing.
std::vector< double > data
Class Configuration contains device configuration data.
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
int AInt2EquPos2NodeOffset
const SolverState & getSolverState() const
int APos2EquInt2NodeOffset
bool updateIntermediateVars()
int ANeg2EquIbr2NodeOffset
int AInt2EquIbr2NodeOffset
std::vector< History > history
bool processParams()
processParams
int AIbr1EquIbr2NodeOffset
const ExternData & extData
static void loadModelParameters(ParametricData< Model > &model_parameters)
ModelBlock represents a .MODEL line from the netlist.
Manages parameter binding for class C.
InstanceBlock represent a device instance line from the netlist.
double currTime_
DeviceEntity for expression time, breakpoints DeviceMgr for dependent parameters, breakpoints...
std::vector< Param > params
int AIbr1EquNeg1NodeOffset
int AIbr1EquInt1NodeOffset
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
int AIbr2EquPos1NodeOffset
double * nextSolVectorRawPtr
int numLeadCurrentStoreVars
int APos1EquPos1NodeOffset