48 #include <Xyce_config.h>
55 #include <N_IO_CmdParse.h>
56 #include <N_IO_PkgOptionsMgr.h>
58 #include <N_ERH_ErrorMgr.h>
59 #include <N_UTL_Diagnostic.h>
60 #include <N_UTL_ExtendedString.h>
61 #include <N_UTL_FeatureTest.h>
67 const IO::CmdParse & command_line)
69 return command_line.getArgumentIntValue(
"-maxord", 5);
83 : initialOutputTime(0.0),
84 initialOutputTimeGiven(false),
87 initialTimeStep(1.0e-10),
89 maxTimeStepGiven(false),
91 minTimeStepGiven(false),
92 constantTimeStepFlag(false),
93 useDeviceTimeStepMaxFlag(true),
96 minTimeStepsBPGiven(false),
103 errorAnalysisOptionResetCount(0),
104 timestepsReversal(false),
105 testFirstStep(false),
108 relErrorTolGiven(false),
109 errTolAcceptance(1.0),
111 restartTimeStepScale(0.005),
116 interpOutputFlag(true),
117 minTimeStepRecoveryCounter(0)
141 os <<
"\n" << std::endl;
142 os << Xyce::section_divider << std::endl;
143 os <<
"\n***** Time Integration solver options:\n" << std::endl;
147 os <<
"\tAnalysis:\t\t\tTRANSIENT" << std::endl
148 <<
"\tInitial Time (sec):\t\t" <<
initialTime << std::endl
149 <<
"\tFinal Time (sec):\t\t" <<
finalTime << std::endl
156 << (
constantTimeStepFlag ?
"\tUsing Constant Step Size" :
"\tUsing Variable Step Size") << std::endl
157 << (
useDeviceTimeStepMaxFlag ?
"\tUsing Device specified maximum stepsize" :
"\tNOT using Device specified maximum stepsize") << std::endl;
163 os <<
"\tAnalysis:\t\t\tDC SWEEP" << std::endl;
166 os <<
"\tabsErrorTol:\t\t\t" <<
absErrorTol << std::endl
167 <<
"\trelErrorTol:\t\t\t" <<
relErrorTol << std::endl
168 <<
"\tMaximum Order:\t\t\t" <<
maxOrder << std::endl
169 <<
"\tMinimum Order:\t\t\t" <<
minOrder << std::endl
170 <<
"\tInterpolated Output Flag:\t\t " << (
interpOutputFlag ?
"true":
"false") << std::endl;
186 os << Xyce::section_divider << std::endl;
198 : initialOutputTime(right.initialOutputTime),
199 initialOutputTimeGiven(right.initialOutputTimeGiven),
200 initialTime(right.initialTime),
201 finalTime(right.finalTime),
202 initialTimeStep(right.initialTimeStep),
203 maxTimeStep(right.maxTimeStep),
204 maxTimeStepGiven(right.maxTimeStepGiven),
205 minTimeStep(right.minTimeStep),
206 minTimeStepGiven(right.minTimeStepGiven),
207 constantTimeStepFlag(right.constantTimeStepFlag),
208 useDeviceTimeStepMaxFlag(right.useDeviceTimeStepMaxFlag),
209 errorAnalysisOption(right.errorAnalysisOption),
210 errorAnalysisOptionResetCount(right.errorAnalysisOptionResetCount),
211 bpEnable(right.bpEnable),
212 restartTimeStepScale(right.restartTimeStepScale),
213 relErrorTol(right.relErrorTol),
214 absErrorTol(right.absErrorTol),
215 errTolAcceptance(right.errTolAcceptance),
216 jacLimitFlag(right.jacLimitFlag),
217 jacLimit(right.jacLimit),
219 minOrder(right.minOrder),
220 interpOutputFlag(right.interpOutputFlag)
269 else if (max_order > 5)
284 const Util::Param & param)
319 Report::UserError() <<
".options timeint NLMIN = " <<
NLmin <<
" > " <<
NLmax <<
" = NLMAX!";
324 Report::UserError() <<
".options timeint NLMIN = " <<
NLmin <<
" > " <<
NLmax <<
" = NLMAX!";
327 if (newLte < 0 || newLte > 3)
328 Report::UserError() <<
"Unsupported NEWLTE type";
349 const Util::Param & param)
364 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
366 dout() <<
"setting maxTimeStep = " <<
maxTimeStep << std::endl;
374 IO::PkgOptionsMgr &options_manager)
377 Util::ParamMap ¶meters = options_manager.addOptionsMetadataMap(
"TIMEINT");
379 parameters.insert(Util::ParamMap::value_type(
"METHOD", Util::Param(
"METHOD", 1)));
381 parameters.insert(Util::ParamMap::value_type(
"CONSTSTEP", Util::Param(
"CONSTSTEP", 0)));
382 parameters.insert(Util::ParamMap::value_type(
"USEDEVICEMAX", Util::Param(
"USEDEVICEMAX", 1)));
383 parameters.insert(Util::ParamMap::value_type(
"RELTOL", Util::Param(
"RELTOL", 1.0E-2)));
384 parameters.insert(Util::ParamMap::value_type(
"ABSTOL", Util::Param(
"ABSTOL", 1.0E-6)));
385 parameters.insert(Util::ParamMap::value_type(
"RESTARTSTEPSCALE", Util::Param(
"RESTARTSTEPSCALE", .005)));
387 parameters.insert(Util::ParamMap::value_type(
"NLNEARCONV", Util::Param(
"NLNEARCONV", 0)));
388 parameters.insert(Util::ParamMap::value_type(
"NLSMALLUPDATE", Util::Param(
"NLSMALLUPDATE", 1)));
389 parameters.insert(Util::ParamMap::value_type(
"DOUBLEDCOP", Util::Param(
"DOUBLEDCOP",
"")));
390 parameters.insert(Util::ParamMap::value_type(
"RESETTRANNLS", Util::Param(
"RESETTRANNLS", 1)));
391 parameters.insert(Util::ParamMap::value_type(
"BPENABLE", Util::Param(
"BPENABLE", 1)));
392 parameters.insert(Util::ParamMap::value_type(
"EXITTIME", Util::Param(
"EXITTIME", 0.0)));
393 parameters.insert(Util::ParamMap::value_type(
"EXITSTEP", Util::Param(
"EXITSTEP", 0)));
394 parameters.insert(Util::ParamMap::value_type(
"ERROPTION", Util::Param(
"ERROPTION", 0)));
395 parameters.insert(Util::ParamMap::value_type(
"DEBUGLEVEL", Util::Param(
"DEBUGLEVEL", 0)));
396 parameters.insert(Util::ParamMap::value_type(
"JACLIMITFLAG", Util::Param(
"JACLIMITFLAG", 0)));
397 parameters.insert(Util::ParamMap::value_type(
"JACLIMIT", Util::Param(
"JACLIMIT", 1.0e17)));
398 parameters.insert(Util::ParamMap::value_type(
"DAESTATEDERIV", Util::Param(
"DAESTATEDERIV", 0)));
399 parameters.insert(Util::ParamMap::value_type(
"TESTFIRSTSTEP", Util::Param(
"TESTFIRSTSTEP", 0)));
400 parameters.insert(Util::ParamMap::value_type(
"DTMIN", Util::Param(
"DTMIN", 0.0)));
401 parameters.insert(Util::ParamMap::value_type(
"NEWBPSTEPPING", Util::Param(
"NEWBPSTEPPING", 0)));
402 parameters.insert(Util::ParamMap::value_type(
"MINTIMESTEPSBP", Util::Param(
"MINTIMESTEPSBP", 10)));
403 parameters.insert(Util::ParamMap::value_type(
"NEWLTE", Util::Param(
"NEWLTE", 1)));
404 parameters.insert(Util::ParamMap::value_type(
"MAXORD", Util::Param(
"MAXORD", 5)));
405 parameters.insert(Util::ParamMap::value_type(
"MINORD", Util::Param(
"MINORD", 1)));
406 parameters.insert(Util::ParamMap::value_type(
"OUTPUTINTERPMPDE", Util::Param(
"OUTPUTINTERPMPDE", 1)));
407 parameters.insert(Util::ParamMap::value_type(
"INTERPOUTPUT", Util::Param(
"INTERPOUTPUT", 1)));
408 parameters.insert(Util::ParamMap::value_type(
"CONDTEST", Util::Param(
"CONDTEST", 0)));
409 parameters.insert(Util::ParamMap::value_type(
"CONDTESTDEVICENAME", Util::Param(
"CONDTESTDEVICENAME",
"dev_name")));
410 parameters.insert(Util::ParamMap::value_type(
"ISOCONDTEST", Util::Param(
"ISOCONDTEST", 0)));
411 parameters.insert(Util::ParamMap::value_type(
"ISOCONDTESTDEVICENAME", Util::Param(
"ISOCONDTESTDEVICENAME",
"dev_name")));
412 parameters.insert(Util::ParamMap::value_type(
"PASSNLSTALL", Util::Param(
"PASSNLSTALL",
false)));
413 parameters.insert(Util::ParamMap::value_type(
"NLMIN", Util::Param(
"NLMIN", 3)));
414 parameters.insert(Util::ParamMap::value_type(
"NLMAX", Util::Param(
"NLMAX", 8)));
415 parameters.insert(Util::ParamMap::value_type(
"DELMAX", Util::Param(
"DELMAX", 1.0e+99)));
416 parameters.insert(Util::ParamMap::value_type(
"TIMESTEPSREVERSAL", Util::Param(
"TIMESTEPSREVERSAL",
false)));
417 parameters.insert(Util::ParamMap::value_type(
"MINTIMESTEPRECOVERY", Util::Param(
"MINTIMESTEPRECOVERY", 0)));
418 parameters.insert(Util::ParamMap::value_type(
"HISTORYTRACKINGDEPTH", Util::Param(
"HISTORYTRACKINGDEPTH", 50)));
bool setAnalysisOption(const Util::Param ¶m)
double initialTimeStep
User specified initial time step.
bool setTimeIntegratorOption(const Util::Param ¶m)
Pure virtual class to augment a linear system.
int errorAnalysisOptionResetCount
Iteration count down to reset errorAnalysisOption to LOCAL_TRUNCATED_ESTIMATES.
int errorAnalysisOption
Error analysis option.
double finalTime
End time for simulation.
void setValue(ParameterBase &entity, const Descriptor &descriptor, const T &value)
Sets the value of the parameter.
double maxTimeStep
User specified maximum time step.
void setMaxOrder(int max_order)
double minTimeStep
User specified minimum time step.
bool constantTimeStepFlag
Constant time step integration flag.
int minTimeStepsBP
User specified mininum number of steps between breakpoints.
int minTimeStepRecoveryCounter
bool bpEnable
Enable breakpoints flag.
double restartTimeStepScale
Time step is scaled coming out of a breakpoint (StepErrorControl)
bool initialOutputTimeGiven
void printParams(std::ostream &os, int analysis) const
int maxOrder(const IO::CmdParse &command_line)
double initialOutputTime
Time at which output starts (StepErrorControl)
double initialTime
Beginning time for the time integrator (StepErrorControl, integrators access from StepErrorControl) ...
bool useDeviceTimeStepMaxFlag
True if devices impose a time step maximum.
TIAParams & operator=(const TIAParams &right)
static void populateMetadata(IO::PkgOptionsMgr &options_manager)