40 #include <Xyce_config.h>
45 #include <N_ERH_Message.h>
46 #include <N_IO_ActiveOutput.h>
50 #include <N_PDS_Comm.h>
51 #include <N_PDS_Manager.h>
56 #include <N_UTL_FeatureTest.h>
57 #include <N_UTL_Diagnostic.h>
74 bool external_initJctFlag)
113 Linear::System & linear_system,
116 bool bsuccess =
true;
129 Report::UserError() <<
"Multi-Level Newton solves only supports DC and Transient analysis";
156 bool bsuccess =
true;
178 const std::vector<std::string> & paramNames,
179 const std::vector<double> & paramVals)
183 <<
" AnalysisManager::homotopyStepSuccess " << std::endl;
211 <<
" AnalysisManager::homotopyStepFailure " << std::endl;
235 <<
" AnalysisManager::stepSuccess " << std::endl;
239 switch (analysisUpper)
244 if (twoLevelTransientAnalysisObject)
250 Report::DevelFatal().in(
"AnalysisManager::stepSuccess") <<
"Failed dynamic_cast of twoLevelAnalysisObject to Transient.";
264 Report::DevelFatal().in(
"AnalysisManager::stepSecondLevelSuccess") <<
"TwoLevelMode " << analysisUpper <<
" is not available";
282 switch (analysisUpper)
287 if (twoLevelTransientAnalysisObject)
293 Report::DevelFatal().in(
"AnalysisManager::stepFailure") <<
"Failed dynamic_cast of twoLevelAnalysisObject to Transient.";
304 Report::DevelFatal().in(
"AnalysisManager::stepSecondLevelFailure") <<
"TwoLevelMode " << analysisUpper <<
" is not available";
336 std::vector<Util::BreakPoint> & breakPointTimes)
const
370 bool beginIntegrationFlag,
377 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
379 Xyce::dout() <<
"AnalysisManager::startTimeStep:" << std::endl;
421 bool dcopFlag =
true;
423 if (twoLevelTransientAnalysisObject) {
424 dcopFlag = twoLevelTransientAnalysisObject->
getDCOPFlag();
427 if (VERBOSE_TIME && !dcopFlag)
bool getSecondLevelBreakPoints(Loader::CktLoader &loader, std::vector< Util::BreakPoint > &breakPointTimes) const
bool usePreviousSolAsPredictor()
Pure virtual class to augment a linear system.
bool finishSecondLevelSolvers()
void stepSecondLevelFailure(TwoLevelMode analysisUpper)
void setTwoLevelTimeInfo()
void setExternalSolverState(Loader::CktLoader &loader, bool external_initJctFlag)
bool getSwitchIntegrator() const
bool runSecondLevelStep(TimeIntg::TwoLevelError &tlError)
void setBeginningIntegrationFlag(bool bif)
int errorAnalysisOption
Error analysis option.
CreatorVector & getCreatorVector()
void createTimeIntegratorMethod(const TimeIntg::TIAParams &tia_params, const unsigned int integration_method)
void outputHomotopy(const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals, Linear::Vector &solnVecPtr)
void stepSecondLevelSuccess(TwoLevelMode analysisUpper)
bool processSuccessfulDCOP()
void setAnalysisMode(AnalysisMode mode)
void obtainCorrectorDeriv()
Parallel::Manager * getPDSManager() const
TimeIntg::StepErrorControl & getStepErrorControl()
void updateSolDataArrays()
const std::string & getNetlistFilename() const
void homotopyStepSuccess(const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals)
int minTimeStepsBP
User specified mininum number of steps between breakpoints.
bool startSecondLevelTimeStep(const TimeIntg::TIAParams &tia_params, Nonlinear::Manager &nonlinear_manager, bool beginIntegrationFlag, double nextTimeStep, double nextTime, int currentOrder)
IO::ActiveOutput * activeOutput_
void setPrimaryAnalysisObject(AnalysisBase *primary)
void getTwoLevelError(TwoLevelError &tle) const
AnalysisBase * twoLevelAnalysisObject_
void getInitialQnorm(TwoLevelError &tle) const
void updateTwoLevelTimeInfo(Parallel::Machine comm, double nextTimeStep, double nextTime, int currentOrder, bool breakpoints_enabled, double initial_time, bool min_time_steps_breakpoint_given, double min_time_steps_breakpoint)
void homotopyStepFailure()
bool bpEnable
Enable breakpoints flag.
Nonlinear::AnalysisMode nonlinearAnalysisMode(Mode mode)
Returns the nonlinear analysis mode given the analysis mode.
void homotopyStepFailure()
virtual void printStepHeader(std::ostream &os)
bool processSuccessfulStep()
OutputMgrAdapter & getOutputManagerAdapter() const
virtual bool twoLevelStep()
void outputTimeInfo(std::ostream &os)
Loader::NonlinearEquationLoader & getNonlinearEquationLoader()
void homotopyStepSuccess(const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals)
const TimeIntg::TIAParams & getTIAParams() const
Mode getAnalysisMode() const
bool getSecondLevelInitialQnorm(TimeIntg::TwoLevelError &tle) const
bool getBeginningIntegrationFlag() const
bool startupSecondLevelSolvers(Linear::System &linear_system, Nonlinear::Manager &nonlinear_manager)
double initialTime
Beginning time for the time integrator (StepErrorControl, integrators access from StepErrorControl) ...
TimeIntg::WorkingIntegrationMethod & getWorkingIntegrationMethod()
void setSwitchIntegrator(bool switch_itegrator)
int getIntegrationMethod() const
TimeIntg::DataStore * getDataStore()
void setExternalSolverState(bool external_initJctFlag)
void setTwoLevelMode(TwoLevelMode two_level_mode)
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes) const