47 #include <Xyce_config.h>
49 #include <N_ERH_ErrorMgr.h>
54 #include <N_UTL_FeatureTest.h>
61 typedef std::map<int, std::pair<const char *, Factory> >
Registry;
66 static Registry s_registry;
76 std::pair<Registry::iterator, bool> result = getRegistry().insert(Registry::value_type(type, std::pair<const char *, Factory>(name, factory)));
77 if (!result.second && name != (*result.first).second.first)
78 Report::DevelFatal0() <<
"Time integration factory " << type <<
" named " << name <<
" already registered with name " << (*result.first).second.first;
81 TimeIntegrationMethod *
88 Registry::const_iterator it = getRegistry().find(type);
89 if (it == getRegistry().end())
92 return (*(*it).second.second)(tia_params, step_error_control, data_store);
98 Registry::const_iterator it = getRegistry().find(type);
99 if (it == getRegistry().end())
102 return (*it).second.first;
114 : timeIntegrationMethod_(0),
117 timeIntegratorStat_(
"Time integrator", parent_stat),
118 predictorStat_(
"Predictor", timeIntegratorStat_),
119 completeStepStat_(
"Successful Step", timeIntegratorStat_),
120 rejectStepStat_(
"Failed Step", timeIntegratorStat_),
121 updateCoefStat_(
"Update Coef", timeIntegratorStat_),
122 residualStat_(
"Load Residual", timeIntegratorStat_),
123 jacobianStat_(
"Load Jacobian", timeIntegratorStat_),
124 initializeStat_(
"Initialize", timeIntegratorStat_),
125 updateLeadStat_(
"Lead Currents", timeIntegratorStat_)
163 Report::DevelFatal0().in(
"WorkingIntegrationMethod::createTimeIntegMethod") <<
"Invalid integration method " << type <<
" specified";
325 Linear::Vector * solnVecPtr,
326 const std::vector<double> & fastTimes )
329 outputManagerAdapter, time, solnVecPtr, fastTimes );
335 Linear::Vector * solnVecPtr,
336 const std::vector<double> & fastTimes,
340 outputManagerAdapter, time, solnVecPtr, fastTimes, phiGID );
347 Linear::Vector * solnVecPtr,
348 const bool doNotInterpolate,
349 const std::vector<double> & outputInterpolationTimes,
350 bool skipPrintLineOutput )
354 outputManagerAdapter, tia_params, time, solnVecPtr, doNotInterpolate, outputInterpolationTimes, skipPrintLineOutput) ;
360 Linear::Vector * solnVecPtr,
361 const double saveTime,
362 const bool doNotInterpolate)
365 outputManagerAdapter, tia_params, solnVecPtr, saveTime, doNotInterpolate);
virtual void obtainPredictor()=0
Stats::Stat residualStat_
int getNumberOfSteps() const
virtual void obtainCorrectorDeriv()=0
virtual void updateDerivsBlock(const std::list< IndexPair > &solGIDList, const std::list< IndexPair > &staGIDList)=0
virtual const char * getName() const =0
virtual int getOrder() const =0
Stats::Stat predictorStat_
Stats::Stat updateCoefStat_
virtual bool printMPDEOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const double time, Linear::Vector *solnVecPtr, const std::vector< double > &fastTimes)
virtual void rejectStepForHabanero()
Stats::Stat rejectStepStat_
virtual void updateLeadCurrentVec()
Pure virtual class to augment a linear system.
virtual void getTwoLevelError(TwoLevelError &tle) const =0
virtual int getNumberOfSteps() const =0
void updateDerivsBlock(const std::list< IndexPair > &solGIDList, const std::list< IndexPair > &staGIDList)
virtual void initialize(const TIAParams &tia_params)=0
TimeIntegrationMethod * timeIntegrationMethod_
Pointer to the integration method.
bool isTimeIntegrationMethodCreated()
Stats::Stat completeStepStat_
double partialTimeDeriv() const
virtual bool printWaMPDEOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const double time, Linear::Vector *solnVecPtr, const std::vector< double > &fastTimes, const int phiGID)
Stats::Stat updateLeadStat_
virtual void completeStep(const TIAParams &tia_params)=0
const char * getTimeIntegrationName(int type)
void obtainCorrectorDeriv()
TimeIntegrationMethod * createTimeIntegrationMethod(int type, const TIAParams &tia_params, StepErrorControl &step_error_control, DataStore &data_store)
bool saveOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const TIAParams &tia_params, Linear::Vector *solnVecPtr, const double saveTime, const bool doNotInterpolate)
void registerFactory(int type, const char *name, Factory factory)
void completeStep(const TIAParams &tia_params)
virtual int getUsedOrder() const =0
virtual double computeErrorEstimate() const =0
void getTwoLevelError(TwoLevelError &tle) const
void getInitialQnorm(TwoLevelError &tle) const
virtual void applyJacobian(const Linear::Vector &input, Linear::Vector &result)
bool printMPDEOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const double time, Linear::Vector *solnVecPtr, const std::vector< double > &fastTimes)
void rejectStep(const TIAParams &tia_params)
virtual void obtainJacobian()
void loadFinalSensitivityDerivatives()
virtual void obtainPredictorDeriv()=0
virtual ~WorkingIntegrationMethod()
virtual void updateCoeffs()
virtual double partialTimeDeriv() const =0
virtual void getInitialQnorm(TwoLevelError &tle) const =0
virtual bool printOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const TIAParams &tia_params, const double time, Linear::Vector *solnVecPtr, const bool doNotInterpolate, const std::vector< double > &outputInterpolationTimes, bool skipPrintLineOutput)=0
WorkingIntegrationMethod(Stats::Stat parent_stat)
TimeIntegrationMethod *(* Factory)(const TIAParams &tia_params, StepErrorControl &step_error_control, DataStore &data_store)
void obtainSensitivityResiduals()
virtual void updateLeadCurrent()
void createTimeIntegMethod(int type, const TIAParams &tia_params, StepErrorControl &step_error_control, DataStore &data_store)
virtual void setTwoLevelTimeInfo(const TimeIntInfo &tiInfo)=0
virtual int getNscsco() const =0
virtual void obtainResidual()=0
void obtainPredictorDeriv()
void rejectStepForHabanero()
Stats::Stat initializeStat_
void applyJacobian(const Linear::Vector &input, Linear::Vector &result)
virtual void loadFinalSensitivityDerivatives()=0
bool printWaMPDEOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const double time, Linear::Vector *solnVecPtr, const std::vector< double > &fastTimes, const int phiGID)
virtual bool saveOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const TIAParams &tia_params, Linear::Vector *solnVecPtr, const double saveTime, const bool doNotInterpolate)=0
bool printOutputSolution(Analysis::OutputMgrAdapter &outputManagerAdapter, const TIAParams &tia_params, const double time, Linear::Vector *solnVecPtr, const bool doNotInterpolate, const std::vector< double > &outputInterpolationTimes, bool skipPrintLineOutput)
std::vector< Factory< void > * > Registry
Registry of factories.
void setTwoLevelTimeInfo(const TimeIntInfo &tiInfo)
void initialize(const TIAParams &tia_params)
Stats::Stat jacobianStat_
virtual void obtainSensitivityResiduals()=0
virtual void rejectStep(const TIAParams &tia_params)=0
double computeErrorEstimate() const
virtual void updateStateDeriv()