38 #include <Xyce_config.h>
43 #include <N_ERH_Message.h>
47 #include <N_PDS_Comm.h>
51 #include <N_UTL_FeatureTest.h>
52 #include <N_UTL_MachDepParams.h>
53 #include <N_UTL_OptionBlock.h>
59 : successfulStepsTaken_(0),
60 successStepsThisParameter_(0),
61 failedStepsAttempted_(0),
62 jacobiansEvaluated_(0),
63 iterationMatrixFactorizations_(0),
65 failedLinearSolves_(0),
67 residualEvaluations_(0),
68 nonlinearConvergenceFailures_(0),
69 linearSolutionTime_(0.0),
70 residualLoadTime_(0.0),
71 jacobianLoadTime_(0.0)
98 json << Util::JSON::open
103 << Util::nameValuePair(
"linearSolves", s.
linearSolves_) << Util::JSON::sep
105 << Util::nameValuePair(
"linearIters", s.
linearIters_) << Util::JSON::sep
108 << Util::nameValuePair(
"residualLoadTime", s.
residualLoadTime_) << Util::JSON::sep
109 << Util::nameValuePair(
"jacobianLoadTime", s.
jacobianLoadTime_) << Util::JSON::sep
111 << Util::JSON::close;
126 beginningIntegration(true),
127 baseIntegrationMethod_(TimeIntg::NoTimeIntegration::type),
131 doubleDCOPEnabled_(false),
136 saveStatCountsVector_(),
154 Stats::StatTop _analysis(
name_);
162 Stats::StatTop _analysis(
name_);
284 bool bsuccess =
true;
286 if (t1 == 0 && t2 == 0)
313 if (newton_convergence_status <= 0) {
338 const Util::Param & param)
340 if (param.uTag() ==
"DOUBLEDCOP") {
341 const std::string &double_dcop_options = param.stringValue();
342 if (equal_nocase(double_dcop_options,
"NL_POISSON,DRIFT_DIFFUSION")) {
348 else if (equal_nocase(double_dcop_options,
"NL_POISSON")) {
354 else if (equal_nocase(double_dcop_options,
"DRIFT_DIFFUSION")) {
361 Report::UserError0() <<
"Unknown DOUBLEDCOP option " << double_dcop_options;
unsigned int successStepsThisParameter_
unsigned int successfulStepsTaken_
Number of consecutive successful time-integration steps.
bool beginningIntegration
unsigned int tranStepNumber
virtual bool doProcessSuccessfulStep()=0
Pure virtual class to augment a linear system.
unsigned int iterationMatrixFactorizations_
int doubleDCOPStep_
current step in the DCOP loop.
virtual int getNumLinearSolves()
bool resetForStepAnalysis()
unsigned int stepNumber
Time-integration step number counter.
double linearSolutionTime_
unsigned int linearSolves_
void gatherStepStatistics(StatCounts &stats, Nonlinear::NonLinearSolver &nonlinear_solver, int newton_convergence_status)
virtual double getTotalLinearSolveTime()
Util::JSON & operator<<(Util::JSON &json, const StatCounts &s)
virtual bool doHandlePredictor()=0
virtual double getTotalResidualLoadTime()
unsigned int failedStepsAttempted_
Total number of failed time-integration steps.
StatCounts & operator+=(const StatCounts &stats)
bool setDCOPOption(const Util::Param ¶m)
virtual unsigned int getTotalNumLinearIters()
virtual int getNumJacobianLoads()
bool processSuccessfulStep()
virtual bool doProcessFailedStep()=0
virtual bool printLoopInfo(int start, int finish)
StatCounts operator-(const StatCounts &s0, const StatCounts &s1)
unsigned int jacobiansEvaluated_
virtual double getTotalJacobianLoadTime()
unsigned int linearIters_
unsigned int failedLinearSolves_
virtual int getNumFailedLinearSolves()
AnalysisBase(AnalysisManager &analysis_manager, const char *name)
virtual int getNumJacobianFactorizations()
unsigned int nonlinearConvergenceFailures_
unsigned int residualEvaluations_
std::vector< StatCounts > saveStatCountsVector_
virtual int getNumResidualLoads()
virtual bool doFinish()=0