48 #include <Xyce_config.h>
55 #include <N_IO_CmdParse.h>
57 #include <N_ERH_ErrorMgr.h>
58 #include <N_UTL_Diagnostic.h>
59 #include <N_UTL_ExtendedString.h>
60 #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)
285 const Util::Param & param)
287 if (DEBUG_ANALYSIS && param.uTag() ==
"CONSTSTEP")
291 else if (param.uTag() ==
"USEDEVICEMAX")
295 else if (param.uTag() ==
"RELTOL")
300 else if (param.uTag() ==
"ABSTOL")
304 else if (param.uTag() ==
"BPENABLE" )
306 bpEnable =
static_cast<bool> (param.getImmutableValue<
int>());
308 else if (param.uTag() ==
"RESTARTSTEPSCALE" )
312 else if (param.uTag() ==
"MINTIMESTEPSBP")
317 else if (param.uTag() ==
"ERROPTION" )
329 else if (param.uTag() ==
"JACLIMITFLAG" )
331 jacLimitFlag=
static_cast<bool> (param.getImmutableValue<
int>());
333 else if (param.uTag() ==
"JACLIMIT" )
335 jacLimit = param.getImmutableValue<
double>();
337 else if (param.uTag() ==
"MAXORD" )
339 maxOrder = param.getImmutableValue<
int>();
341 else if (param.uTag() ==
"MINORD" )
343 minOrder = param.getImmutableValue<
int>();
345 else if (param.uTag() ==
"TIMESTEPSREVERSAL" )
349 else if (param.uTag() ==
"TESTFIRSTSTEP" )
351 testFirstStep =
static_cast<bool> (param.getImmutableValue<
int>());
353 else if (param.uTag() ==
"DELMAX" )
355 delmax = param.getImmutableValue<
double>();
358 else if (param.uTag() ==
"NLMIN" )
360 NLmin = param.getImmutableValue<
int>();
363 Report::UserError() <<
".options timeint NLMIN = " <<
NLmin <<
" > " <<
NLmax <<
" = NLMAX!";
366 else if (param.uTag() ==
"NLMAX" )
368 NLmax = param.getImmutableValue<
int>();
371 Report::UserError() <<
".options timeint NLMIN = " <<
NLmin <<
" > " <<
NLmax <<
" = NLMAX!";
374 else if (param.uTag() ==
"NEWLTE")
376 newLte = param.getImmutableValue<
double>();
381 else if (param.uTag() ==
"NEWBPSTEPPING")
385 else if (param.uTag() ==
"INTERPOUTPUT")
389 else if (param.uTag() ==
"DTMIN")
394 else if (param.uTag() ==
"MINTIMESTEPRECOVERY")
417 const Util::Param & param)
419 if (param.uTag() ==
"TSTART")
424 else if (param.uTag() ==
"TSTOP")
426 finalTime = param.getImmutableValue<
double>();
428 else if (param.uTag() ==
"TSTEP")
432 else if (param.uTag() ==
"DTMAX")
436 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
438 dout() <<
"setting maxTimeStep = " <<
maxTimeStep << std::endl;
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.
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)