48 #include <Xyce_config.h>
55 #include <N_UTL_BreakPoint.h>
56 #include <N_UTL_FeatureTest.h>
57 #include <N_UTL_Math.h>
64 std::vector<Param> sourceFcnParamList;
66 sourceFcnParamList.resize(7);
67 sourceFcnParamList[0].set(
"V1", 0.0);
68 sourceFcnParamList[1].set(
"V2", 0.0);
69 sourceFcnParamList[2].set(
"TD", 0.0);
70 sourceFcnParamList[3].set(
"TR", 0.0);
71 sourceFcnParamList[4].set(
"TF", 0.0);
72 sourceFcnParamList[5].set(
"PW", 0.0);
73 sourceFcnParamList[6].set(
"PER", 0.0);
74 sourceFcnMap[
"PULSE" ] = sourceFcnParamList;
76 sourceFcnParamList.resize(6);
77 sourceFcnParamList[0].set(
"V0", 0.0);
78 sourceFcnParamList[1].set(
"VA", 0.0);
79 sourceFcnParamList[2].set(
"FREQ", 0.0);
80 sourceFcnParamList[3].set(
"TD", 0.0);
81 sourceFcnParamList[4].set(
"THETA", 0.0);
82 sourceFcnParamList[5].set(
"PHASE", 0.0);
83 sourceFcnMap[
"SIN" ] = sourceFcnParamList;
85 sourceFcnParamList.resize(6);
86 sourceFcnParamList[0].set(
"V1", 0.0);
87 sourceFcnParamList[1].set(
"V2", 0.0);
88 sourceFcnParamList[2].set(
"TD1", 0.0);
89 sourceFcnParamList[3].set(
"TAU1", 0.0);
90 sourceFcnParamList[4].set(
"TD2", 0.0);
91 sourceFcnParamList[5].set(
"TAU2", 0.0);
92 sourceFcnMap[
"EXP" ] = sourceFcnParamList;
93 sourceFcnParamList.resize(5);
94 sourceFcnParamList[0].set(
"V0", 0.0);
95 sourceFcnParamList[1].set(
"VA", 0.0);
96 sourceFcnParamList[2].set(
"FC", 0.0);
97 sourceFcnParamList[3].set(
"MDI", 0.0);
98 sourceFcnParamList[4].set(
"FS", 0.0);
99 sourceFcnMap[
"SFFM" ] = sourceFcnParamList;
103 sourceFcnParamList.clear();
104 sourceFcnMap[
"PWL" ] = sourceFcnParamList;
106 sourceFcnParamList.resize(8);
107 sourceFcnParamList[0].set(
"V1", 0.0);
108 sourceFcnParamList[1].set(
"V2", 0.0);
109 sourceFcnParamList[2].set(
"TD", 0.0);
110 sourceFcnParamList[3].set(
"TR", 0.0);
111 sourceFcnParamList[4].set(
"TF", 0.0);
112 sourceFcnParamList[5].set(
"PW", 0.0);
113 sourceFcnParamList[6].set(
"PER", 0.0);
114 sourceFcnParamList[7].set(
"SF", 0.0);
115 sourceFcnMap[
"SMOOTHPULSE" ] = sourceFcnParamList;
130 initializeFlag_(false),
137 defaultParamName_(
"") ,
138 fastTimeScaleFlag_(false),
227 double tmpTime = 0.0;
236 Xyce::dout() <<
"SourceData::getTime. time = ";
237 Xyce::dout() << tmpTime << std::endl;
238 Xyce::dout() <<
"SourceData::getTime. currFastTime = ";
240 Xyce::dout() <<
"SourceData::getTime. currTime = ";
262 #define FREQ (((here->VSRCfunctionOrder >=3) && (*(here->VSRCcoeffs+2)))? \
263 (*(here->VSRCcoeffs+2)):(1/ckt->CKTfinalTime))
268 const std::vector<Param> & paramRef,
285 std::vector<Param>::const_iterator iter = paramRef.begin();
286 std::vector<Param>::const_iterator last = paramRef.end();
288 for ( ; iter != last; ++iter)
290 const std::string & tmpname = iter->tag();
292 if (tmpname ==
"V0") {
V0 = iter->getImmutableValue<
double>();
V0given = iter->given();}
293 if (tmpname ==
"VA") {
VA = iter->getImmutableValue<
double>();
VAgiven = iter->given();}
294 if (tmpname ==
"FREQ") {
FREQ = iter->getImmutableValue<
double>();
FREQgiven = iter->given();}
295 if (tmpname ==
"TD") {
TD = iter->getImmutableValue<
double>();
TDgiven = iter->given();}
296 if (tmpname ==
"THETA") {
THETA = iter->getImmutableValue<
double>();
THETAgiven = iter->given();}
297 if (tmpname ==
"PHASE") {
PHASE = iter->getImmutableValue<
double>();
PHASEgiven = iter->given();}
301 UserError(device) <<
"V0, VA and FREQ are required for the SIN source function";
353 Xyce::dout() <<
"SinData:\n";
354 Xyce::dout() <<
"V0 = " <<
V0 << std::endl;
355 Xyce::dout() <<
"VA = " <<
VA << std::endl;
356 Xyce::dout() <<
"FREQ = " <<
FREQ << std::endl;
357 Xyce::dout() <<
"TD = " <<
TD << std::endl;
358 Xyce::dout() <<
"THETA = " <<
THETA << std::endl;
359 Xyce::dout() <<
"PHASE = " <<
PHASE << std::endl;
382 bool bsuccess =
true;
458 if (
FREQ != params[3])
463 if (
THETA != params[4])
468 if (
PHASE != params[5])
491 const std::vector<Param> & paramRef,
509 std::vector<Param>::const_iterator iter = paramRef.begin();
510 std::vector<Param>::const_iterator last = paramRef.end();
512 for ( ; iter != last; ++iter)
514 const std::string & tmpname = iter->tag();
516 if (tmpname ==
"V1") {
V1 = iter->getImmutableValue<
double>();
V1given = iter->given();}
517 if (tmpname ==
"V2") {
V2 = iter->getImmutableValue<
double>();
V2given = iter->given();}
518 if (tmpname ==
"TD1") {
TD1 = iter->getImmutableValue<
double>();
TD1given = iter->given();}
519 if (tmpname ==
"TAU1") {
TAU1 = iter->getImmutableValue<
double>();
TAU1given = iter->given();}
520 if (tmpname ==
"TD2") {
TD2 = iter->getImmutableValue<
double>();
TD2given = iter->given();}
521 if (tmpname ==
"TAU2") {
TAU2 = iter->getImmutableValue<
double>();
TAU2given = iter->given();}
525 UserError(device) <<
"V1 and V2 are required for the EXP source function";
554 Xyce::dout() <<
"ExpData:\n";
556 Xyce::dout() <<
"V1 = " <<
V1 << std::endl;
557 Xyce::dout() <<
"V2 = " <<
V2 << std::endl;
559 Xyce::dout() <<
"TD1 = " <<
TD1 << std::endl;
560 Xyce::dout() <<
"TAU1 = " <<
TAU1 << std::endl;
562 Xyce::dout() <<
"TD2 = " <<
TD2 << std::endl;
563 Xyce::dout() <<
"TAU2 = " <<
TAU2 << std::endl;
610 bool bsuccess =
true;
681 if (
TD1 != params[2])
686 if (
TAU1 != params[3])
691 if (
TD2 != params[4])
696 if (
TAU2 != params[5])
719 const std::vector<Param> & paramRef,
740 std::vector<Param>::const_iterator iter = paramRef.begin();
741 std::vector<Param>::const_iterator last = paramRef.end();
743 for ( ; iter != last; ++iter)
745 const std::string & tmpname = iter->tag();
747 if (tmpname ==
"V1") {
V1 = iter->getImmutableValue<
double>();
V1given = iter->given();}
748 if (tmpname ==
"V2") {
V2 = iter->getImmutableValue<
double>();
V2given = iter->given();}
749 if (tmpname ==
"TD") {
TD = iter->getImmutableValue<
double>();
TDgiven = iter->given();}
750 if (tmpname ==
"TR") {
TR = iter->getImmutableValue<
double>();
TRgiven = iter->given();}
751 if (tmpname ==
"TF") {
TF = iter->getImmutableValue<
double>();
TFgiven = iter->given();}
752 if (tmpname ==
"PW") {
PW = iter->getImmutableValue<
double>();
PWgiven = iter->given();}
753 if (tmpname ==
"PER") {
PER = iter->getImmutableValue<
double>();
PERgiven = iter->given();}
783 Xyce::dout() << std::endl;
784 Xyce::dout() <<
" PulseData::printOutParams\n";
785 Xyce::dout() <<
" V1 = " <<
V1 << std::endl;
786 Xyce::dout() <<
" V2 = " <<
V2 << std::endl;
788 Xyce::dout() <<
" TD = " <<
TD << std::endl;
789 Xyce::dout() <<
" TR = " <<
TR << std::endl;
790 Xyce::dout() <<
" TF = " <<
TF << std::endl;
791 Xyce::dout() <<
" PW = " <<
PW << std::endl;
792 Xyce::dout() <<
" PER = " <<
PER << std::endl;
793 Xyce::dout() << std::endl;
836 bool bsuccess =
true;
843 Xyce::dout() <<
" PulseData::updateSources\n";
855 Xyce::dout() <<
" Time = " <<
time << std::endl;
911 Xyce::dout() <<
" SourceValue = " <<
SourceValue << std::endl;
981 if (
PER != params[6])
1008 (std::vector<Util::BreakPoint> & breakPointTimes )
1010 bool bsuccess =
true;
1012 if (!initializeFlag_) bsuccess = initializeSource ();
1016 int currPeriodIndex = 0;
1019 double basetime = 0.0;
1022 time = getTime_() - TD;
1027 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && solState_.debugTimeFlag)
1029 Xyce::dout() << std::endl;
1030 Xyce::dout() <<
" In PulseData::getBreakPoints\n";
1031 Xyce::dout() <<
" time = " << time << std::endl;
1032 Xyce::dout() <<
" TD = " << TD << std::endl;
1033 Xyce::dout() <<
" PER = " << PER << std::endl;
1041 currPeriodIndex = (
static_cast<int> (floor(time/PER)));
1042 basetime = PER * (
static_cast<double> (currPeriodIndex));
1047 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && solState_.debugTimeFlag)
1049 Xyce::dout() <<
" time = " << time << std::endl;
1050 Xyce::dout() <<
" basetime = " << basetime << std::endl;
1051 Xyce::dout() <<
" currPeriodIndex = " << currPeriodIndex << std::endl;
1052 Xyce::dout() << std::endl;
1060 breakPointTimes.push_back(basetime+TD);
1061 breakPointTimes.push_back(basetime+TD+TR);
1062 breakPointTimes.push_back(basetime+TD+TR+PW);
1063 breakPointTimes.push_back(basetime+TD+TR+PW+TF);
1067 breakPointTimes.push_back(basetime+TD+PER);
1070 breakPointTimes.push_back(basetime+TD+PER+TR);
1071 breakPointTimes.push_back(basetime+TD+PER+TR+PW);
1072 breakPointTimes.push_back(basetime+TD+PER+TR+PW+TF);
1073 breakPointTimes.push_back(basetime+TD+PER+PER);
1098 if (
time <
TD) maxTimeStep = (0.1*
TD );
1099 else maxTimeStep = (0.1*
PER);
1103 Xyce::dout() <<
"\nIn PulseData::getMaxTimeStepSize. ";
1104 Xyce::dout() <<
" maxTimeStep = "<< maxTimeStep;
1105 Xyce::dout() <<
" TD = " <<
TD <<
" PER = " <<
PER;
1106 Xyce::dout() <<
" time = "<<
time << std::endl;
1124 const std::vector<Param> & paramRef,
1135 std::vector<Param>::const_iterator iter = paramRef.begin();
1136 std::vector<Param>::const_iterator last = paramRef.end();
1138 for ( ; iter != last; ++iter)
1140 const std::string & tmpname = iter->tag();
1141 const bool & tmpgiven = iter->given();
1143 if (tmpname ==
"NUM")
NUM = iter->getImmutableValue<
int>();
1144 if (tmpname ==
"R" && tmpgiven ==
true)
1147 REPEATTIME = iter->getImmutableValue<
double>();
1149 if (tmpname ==
"TD")
TD = iter->getImmutableValue<
double>();
1151 if ( tmpname ==
"T" && iter->given() )
1153 time = iter->getImmutableValue<
double>();
1156 TVVEC.push_back(std::pair<double,double>(
time, iter->getImmutableValue<
double>()));
1161 UserError(device) <<
"At least one voltage/time pair must be specified for the PWL source function";
1163 if (REPEATTIME < 0 || REPEATTIME >=
TVVEC[
NUM-1].first)
1164 UserError(device) <<
"PWL source's repeat value (R) must be >= 0 and < last value in Time-Voltage list";
1190 Xyce::dout() << std::endl;
1191 Xyce::dout() <<
" NUM = " <<
NUM << std::endl;
1192 Xyce::dout() <<
" REPEAT = " <<
REPEAT << std::endl;
1193 Xyce::dout() <<
" REPEATTIME = " <<
REPEATTIME << std::endl;
1194 Xyce::dout() <<
" TD = " <<
TD << std::endl;
1195 Xyce::dout() <<
" loc_ = " <<
loc_ << std::endl;
1196 Xyce::dout() <<
" starttime_ = " <<
starttime_ << std::endl;
1198 Xyce::dout() <<
" Time Voltage" << std::endl;
1199 for(
int i = 0; i <
NUM; ++i )
1200 Xyce::dout() <<
" " <<
TVVEC[i].first <<
" " <<
TVVEC[i].second << std::endl;
1202 Xyce::dout() << std::endl;
1218 bool bsuccess =
true;
1224 Xyce::dout() << std::endl;
1225 Xyce::dout() <<
" PWLinData::updateSource\n";
1233 Xyce::dout() << Xyce::section_divider << std::endl;
1234 Xyce::dout() <<
" Time = " <<
time << std::endl;
1237 double time1, time2, voltage1, voltage2;
1238 double simtime =
time;
1246 for(
int i = 0; i <
NUM; ++i )
1269 voltage1 = voltage2 =
TVVEC[
NUM-1].second;
1275 time -= looptime * floor(
time / looptime);
1278 for(
int i = 0; i <
NUM; ++i )
1286 voltage1 = voltage2 =
TVVEC[NUM-1].second;
1293 voltage1 =
TVVEC[NUM-1].second;
1306 if( time1 == time2 )
1310 double length = time2 - time1;
1317 Xyce::dout() <<
"time: " <<
time << std::endl;
1318 Xyce::dout() <<
"time1: " << time1 << std::endl;
1319 Xyce::dout() <<
"time2: " << time2 << std::endl;
1320 Xyce::dout() <<
"voltage1: " << voltage1 << std::endl;
1321 Xyce::dout() <<
"voltage2: " << voltage2 << std::endl;
1322 Xyce::dout() <<
"Src: " <<
SourceValue << std::endl;
1323 Xyce::dout() << Xyce::section_divider << std::endl;
1346 (std::vector<Util::BreakPoint> & breakPointTimes )
1348 bool bsuccess =
true;
1350 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && solState_.debugTimeFlag)
1352 Xyce::dout() <<
" In PWLinData::getBreakPoints\n";
1355 if (!initializeFlag_) bsuccess = initializeSource ();
1357 time = solState_.currTime;
1362 if (REPEAT && time >= TVVEC[NUM - 1].first)
1364 double loopBaseTime = 0.0;
1367 double looptime = TVVEC[NUM-1].first - REPEATTIME;
1368 loopBaseTime = looptime * (1.0 + floor((time - TVVEC[NUM - 1].first) / looptime));
1369 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && solState_.debugTimeFlag)
1371 Xyce::dout() <<
"loopBaseTime: " << loopBaseTime << std::endl;
1372 Xyce::dout() <<
"floor function: " << floor((time - TVVEC[NUM - 1].first) / (TVVEC[NUM - 1].first - REPEATTIME)) << std::endl;
1375 for (
int i = 0; i < NUM; ++i)
1377 bp_time = TVVEC[i].first;
1378 if (bp_time >= REPEATTIME)
1380 breakPointTimes.push_back(bp_time + loopBaseTime + TD);
1381 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && solState_.debugTimeFlag)
1383 Xyce::dout() <<
"bp_time + loopBaseTime + TD: " << bp_time + loopBaseTime + TD << std::endl;
1390 for (
int i = 0; i < NUM; ++i)
1392 double bp_time = TVVEC[i].first;
1393 breakPointTimes.push_back(bp_time+TD);
1394 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && solState_.debugTimeFlag)
1396 Xyce::dout() <<
"bp_time + TD: " << bp_time + TD << std::endl;
1419 const std::vector<Param> & paramRef,
1435 std::vector<Param>::const_iterator iter = paramRef.begin();
1436 std::vector<Param>::const_iterator last = paramRef.end();
1438 for ( ; iter != last; ++iter)
1440 const std::string & tmpname = iter->tag();
1442 if (tmpname ==
"V0") {
V0 = iter->getImmutableValue<
double>();
V0given = iter->given(); }
1443 if (tmpname ==
"VA") {
VA = iter->getImmutableValue<
double>();
VAgiven = iter->given(); }
1444 if (tmpname ==
"FC") {
FC = iter->getImmutableValue<
double>();
FCgiven = iter->given(); }
1445 if (tmpname ==
"MDI") {
MDI = iter->getImmutableValue<
double>();
MDIgiven = iter->given(); }
1446 if (tmpname ==
"FS") {
FS = iter->getImmutableValue<
double>();
FSgiven = iter->given(); }
1450 UserError(device) <<
"V0 and VA are required for the SFFM source function";
1479 Xyce::dout() <<
"SFFMData:\n";
1480 Xyce::dout() <<
"V0 = " <<
V0 << std::endl;
1481 Xyce::dout() <<
"VA = " <<
VA << std::endl;
1482 Xyce::dout() <<
"FC = " <<
FC << std::endl;
1483 Xyce::dout() <<
"MDI = " <<
MDI << std::endl;
1484 Xyce::dout() <<
"FS = " <<
FS << std::endl;
1527 bool bsuccess =
true;
1539 MDI * sin (2 * mpi *
FS * time));
1576 if (
V0 != params[0])
1581 if (
VA != params[1])
1586 if (
FC != params[2])
1591 if (
MDI != params[3])
1596 if (
FS != params[4])
1618 const std::vector<Param> & paramRef,
1627 std::vector<Param>::const_iterator iter = paramRef.begin();
1628 std::vector<Param>::const_iterator last = paramRef.end();
1630 for ( ; iter != last; ++iter)
1632 const std::string & tmpname = iter->tag();
1634 if (tmpname ==
"ACMAG") {
ACMAG = iter->getImmutableValue<
double>();
ACMAGgiven = iter->given();}
1635 if (tmpname ==
"ACPHASE") {
ACPHASE = iter->getImmutableValue<
double>();
ACPHASEgiven = iter->given();}
1665 Xyce::dout() <<
"ACData:\n";
1666 Xyce::dout() <<
"ACMAG = " <<
ACMAG << std::endl;
1667 Xyce::dout() <<
"ACPHASE = " <<
ACPHASE << std::endl;
1682 bool bsuccess =
true;
1697 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
1699 Xyce::dout() <<
" SourceValue = " <<
SourceValue << std::endl;
1733 if (
ACMAG!= params[0])
1761 const std::vector<Param> & paramRef,
1767 std::vector<Param>::const_iterator iter = paramRef.begin();
1768 std::vector<Param>::const_iterator last = paramRef.end();
1770 for ( ; iter != last; ++iter)
1772 const std::string & tmpname = iter->tag();
1773 if (tmpname ==
"DCV0")
1775 V0 = iter->getImmutableValue<
double>();
1807 Xyce::dout() <<
"ConstData:\n";
1808 Xyce::dout() <<
"V0: " <<
V0 << std::endl;
1828 bool bsuccess =
true;
1865 if (
V0 != params[0])
1886 const std::vector<Param> & paramRef,
1897 riseScaleFactor_(0.0),
1898 fallScaleFactor_(0.0),
1899 functionScaleFactor_(20.0),
1907 functionScaleFactorGiven_(false)
1911 std::vector<Param>::const_iterator iter = paramRef.begin();
1912 std::vector<Param>::const_iterator last = paramRef.end();
1914 for ( ; iter != last; ++iter)
1916 const std::string & tmpname = iter->tag();
1918 if (tmpname ==
"V1") {
V1 = iter->getImmutableValue<
double>();
V1given = iter->given();}
1919 if (tmpname ==
"V2") {
V2 = iter->getImmutableValue<
double>();
V2given = iter->given();}
1920 if (tmpname ==
"TD") {
TD = iter->getImmutableValue<
double>();
TDgiven = iter->given();}
1921 if (tmpname ==
"TR") {
TR = iter->getImmutableValue<
double>();
TRgiven = iter->given();}
1922 if (tmpname ==
"TF") {
TF = iter->getImmutableValue<
double>();
TFgiven = iter->given();}
1923 if (tmpname ==
"PW") {
PW = iter->getImmutableValue<
double>();
PWgiven = iter->given();}
1924 if (tmpname ==
"PER") {
PER = iter->getImmutableValue<
double>();
PERgiven = iter->given();}
1957 Xyce::dout() << std::endl;
1958 Xyce::dout() <<
" SmoothPulseData::printOutParams\n";
1959 Xyce::dout() <<
" V1 = " <<
V1 << std::endl;
1960 Xyce::dout() <<
" V2 = " <<
V2 << std::endl;
1962 Xyce::dout() <<
" TD = " <<
TD << std::endl;
1963 Xyce::dout() <<
" TR = " <<
TR << std::endl;
1964 Xyce::dout() <<
" TF = " <<
TF << std::endl;
1965 Xyce::dout() <<
" PW = " <<
PW << std::endl;
1966 Xyce::dout() <<
" PER = " <<
PER << std::endl;
1968 Xyce::dout() << std::endl;
2015 bool bsuccess =
true;
2019 double basetime = 0;
2023 Xyce::dout() <<
" SmoothPulseData::updateSources\n";
2031 Xyce::dout() <<
" Time = " <<
time << std::endl;
2061 else if (
time > 0 &&
2081 Xyce::dout() <<
" SourceValue = " <<
SourceValue << std::endl;
2121 if (
V1 != params[0])
2126 if (
V2 != params[1])
2131 if (
TD != params[2])
2136 if (
TR != params[3])
2141 if (
TF != params[4])
2146 if (
PW != params[5])
2151 if (
PER != params[6])
2176 (std::vector<Util::BreakPoint> & breakPointTimes )
2178 bool bsuccess =
true;
2180 if (!initializeFlag_) bsuccess = initializeSource ();
2200 if (
time <
TD) maxTimeStep = (0.1*
TD );
2201 else maxTimeStep = (0.1*
PER);
2205 Xyce::dout() <<
"\nIn SmoothPulseData::getMaxTimeStepSize. ";
2206 Xyce::dout() <<
" maxTimeStep = "<< maxTimeStep;
2207 Xyce::dout() <<
" TD = " <<
TD <<
" PER = " <<
PER;
2208 Xyce::dout() <<
" time = "<<
time << std::endl;
double functionScaleFactor_
virtual bool updateSource()
virtual bool updateSource()
virtual bool updateSource()
virtual void printOutParams()
Pure virtual class to augment a linear system.
bool functionScaleFactorGiven_
virtual bool updateSource()
std::vector< std::pair< double, double > > TVVEC
const DeviceOptions & devOptions_
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
virtual double getMaxTimeStepSize()
SFFMData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
ExpData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
ACData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
std::string getSourceTypeName()
std::map< std::string, std::vector< Param >, LessNoCase > DeviceParamMap
SinData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
PWLinData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
SmoothPulseData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
virtual bool updateSource()
virtual bool initializeSource()
ConstData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
double defaultMaxTimeStep
virtual bool updateSource()
double getMaxTimeStepSize()
virtual bool updateSource()
const SolverState & solState_
virtual bool updateSource()
double getMaxTimeStepSize()
std::string defaultParamName_
PulseData(const DeviceEntity &device, const std::vector< Param > ¶mRef, const SolverState &ss1, const DeviceOptions &do1)
void sourceFunctionMetadata(DeviceParamMap &map)