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>
57 #include <N_UTL_FeatureTest.h>
58 #include <N_UTL_Diagnostic.h>
98 Xyce::dout() <<
"AnalysisManager::runStep:" << std::endl
99 <<
"nextTime = " << tiInfo.
nextTime << std::endl
108 Report::DevelFatal().in(
"AnalysisManager::runSecondLevelStep")
132 Linear::System & linear_system,
135 bool bsuccess =
true;
148 Report::UserError() <<
"Multi-Level Newton solves only supports DC and Transient analysis";
175 bool bsuccess =
true;
197 const std::vector<std::string> & paramNames,
198 const std::vector<double> & paramVals)
202 <<
" AnalysisManager::homotopyStepSuccess " << std::endl;
230 <<
" AnalysisManager::homotopyStepFailure " << std::endl;
254 <<
" AnalysisManager::stepSuccess " << std::endl;
258 switch (analysisUpper)
263 if (twoLevelTransientAnalysisObject)
269 Report::DevelFatal().in(
"AnalysisManager::stepSuccess") <<
"Failed dynamic_cast of twoLevelAnalysisObject to Transient.";
280 Report::DevelFatal().in(
"AnalysisManager::stepSecondLevelSuccess") <<
"TwoLevelMode " << analysisUpper <<
" is not available";
298 switch (analysisUpper)
303 if (twoLevelTransientAnalysisObject)
309 Report::DevelFatal().in(
"AnalysisManager::stepFailure") <<
"Failed dynamic_cast of twoLevelAnalysisObject to Transient.";
320 Report::DevelFatal().in(
"AnalysisManager::stepSecondLevelFailure") <<
"TwoLevelMode " << analysisUpper <<
" is not available";
351 std::vector<Util::BreakPoint> & breakPointTimes)
const
395 if (DEBUG_ANALYSIS && isActive(Diag::TIME_PARAMETERS))
397 Xyce::dout() <<
"AnalysisManager::startTimeStep:" << std::endl;
437 bool dcopFlag =
true;
439 if (twoLevelTransientAnalysisObject) {
440 dcopFlag = twoLevelTransientAnalysisObject->
getDCOPFlag();
443 if (VERBOSE_TIME && !dcopFlag)
Loader::Loader & getLoader()
bool usePreviousSolAsPredictor()
Pure virtual class to augment a linear system.
bool finishSecondLevelSolvers()
void stepSecondLevelFailure(TwoLevelMode analysisUpper)
void updateTwoLevelTimeInfo(Parallel::Machine comm, const TimeIntInfo &tiInfo, bool breakpoints_enabled, double initial_time, bool min_time_steps_breakpoint_given, double min_time_steps_breakpoint)
bool getSwitchIntegrator() const
void setBeginningIntegrationFlag(bool bif)
int errorAnalysisOption
Error analysis option.
CreatorVector & getCreatorVector()
void createTimeIntegratorMethod(const TimeIntg::TIAParams &tia_params, const unsigned int integration_method)
double nextTimeStep
Step error control next time step.
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.
IO::ActiveOutput * activeOutput_
void setPrimaryAnalysisObject(AnalysisBase *primary)
double nextTime
Step error control next time.
void getTwoLevelError(TwoLevelError &tle) const
AnalysisBase * twoLevelAnalysisObject_
void getInitialQnorm(TwoLevelError &tle) const
bool beginIntegrationFlag
Analysis.
bool runSecondLevelStep(const TimeIntg::TimeIntInfo &tiInfo, TimeIntg::TwoLevelError &tlError)
void setExternalSolverState(const Device::SolverState &ss)
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()
void setTwoLevelMode(TwoLevelMode current_mode)
bool startSecondLevelTimeStep(const TimeIntg::TIAParams &tia_params, Nonlinear::Manager &nonlinear_manager, const TimeIntg::TimeIntInfo &tiInfo)
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) ...
bool getSecondLevelBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes) const
TimeIntg::WorkingIntegrationMethod & getWorkingIntegrationMethod()
void setSwitchIntegrator(bool switch_itegrator)
int getIntegrationMethod() const
TimeIntg::DataStore * getDataStore()
virtual void setExternalSolverState(const Device::SolverState &ss)
void setTwoLevelTimeInfo(const TimeIntInfo &tiInfo)
virtual bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes) const