40 #include <Xyce_config.h>
57 #include <N_IO_ActiveOutput.h>
58 #include <N_IO_CmdParse.h>
59 #include <N_IO_OutputMgr.h>
60 #include <N_IO_PkgOptionsMgr.h>
61 #include <N_LAS_LAFactory.h>
62 #include <N_LAS_Matrix.h>
63 #include <N_LAS_System.h>
64 #include <N_LAS_Vector.h>
74 #include <N_UTL_BreakPoint.h>
75 #include <N_UTL_Diagnostic.h>
76 #include <N_UTL_ExtendedString.h>
77 #include <N_UTL_FeatureTest.h>
78 #include <N_UTL_OptionBlock.h>
79 #include <N_UTL_Stats.h>
80 #include <N_UTL_Timer.h>
105 static const char *
const mode_names[] = {
"Invalid",
"DC OP",
"DC Sweep",
"Transient",
"MPDE",
"HB",
"AC",
"NOISE",
"MOR"};
107 if (mode <
sizeof(mode_names)/
sizeof(mode_names[0]))
108 return mode_names[mode];
110 return mode_names[0];
185 const IO::CmdParse & command_line,
187 Stats::Stat analysis_stat)
192 commandLine_(command_line),
193 netlistFilename_(command_line.getArgumentValue(
"netlist")),
194 outputManagerAdapter_(output_manager_adapter),
195 workingIntgMethod_(0),
196 stepErrorControl_(0),
197 nonlinearEquationLoader_(0),
202 resumeSimulation_(false),
203 blockAnalysisFlag_(false),
204 daeStateDerivFlag_(true),
207 dotOpSpecified_(false),
208 gui_(command_line.argExists(
"-gui")),
210 saveTimeGiven_(false),
211 savedAlready_(false),
213 sweepSourceResetFlag_(true),
214 switchIntegrator_(false),
217 solverStartTime_(0.0),
219 nextOutputTime_(0.0),
222 primaryAnalysisObject_(0),
223 breakPointRestartStep(0),
224 analysisStat_(analysis_stat),
227 IO::setTimeIntegratorDebugLevel(command_line, 1);
303 const unsigned int integration_method)
380 Linear::System & linear_system,
386 int solutionSize = linear_system.getSolutionSize();
387 int stateSize = linear_system.getStateSize();
495 Stats::StatTop _analysisStat(
"Analysis");
496 Stats::TimeBlock _analysisTimer(_analysisStat);
500 Report::UserError0() <<
"No analysis statement in the netlist";
504 bool runStatus =
false;
554 for (CreatorVector::const_iterator it = analysis_registry.
begin(), end = analysis_registry.
end(); it != end; ++it)
568 if (!(*it)->isType<
Step>())
576 if ((*it)->isType<
Step>())
588 if (!(*it)->isType<
ROL>())
596 if ((*it)->isType<
ROL>())
612 Report::UserError() <<
"Analysis mode " <<
analysisMode_ <<
" is not available";
647 const Util::OptionBlock & paramsBlock)
679 bool bsuccess =
true;
700 const std::vector<std::string> & paramNames,
701 const std::vector<double> & paramVals,
702 Linear::Vector * solnVecPtr )
704 bool bsuccess =
true;
708 <<
" AnalysisManager::completeHomotopyStep " << std::endl;
712 bsuccess = bsuccess && bs1;
738 <<
" AnalysisManager::failHomotopyStep " << std::endl;
874 Report::DevelFatal0().in(
"AnalysisManager::simulationComplete")
875 <<
"Called for non-transient run, not currently valid";
1062 return (return1 || return2);
1145 const std::list<IndexPair> & solGIDList,
1146 const std::list<IndexPair> & staGIDList)
1194 Parallel::Communicator * comm,
1213 Parallel::Communicator * comm,
1228 std::vector<double> & varData )
const
1244 std::vector<double> & varData )
const
1258 std::vector<double> & varData )
const
1271 const std::vector<double> & varData )
1285 const std::vector<double> & varData )
1299 const std::vector<double> & varData )
1362 double initial_time)
bool setNextSolVectorPtr(Linear::Vector *solVecPtr)
IO::OutputMgr & getOutputManager()
virtual ~AnalysisManager()
bool getTransientFlag() const
Linear::Vector * lastSolutionPtr
void allocateAnalysisObject(AnalysisCreatorRegistry &analysis_registry)
Creates the primary analysis and driving analysis (.STEP, dakota).
virtual const TimeIntg::TIAParams & getTIAParams() const =0
const char * analysisModeName(Mode mode)
Returns the name of the analysis mode given by mode.
bool run()
Runs the top level analysis.
void notify(const StepEvent &step_event)
Notification that there is a StepEvent.
double getTotalLinearSolutionTime() const
Registry::const_iterator begin() const
bool getStateVarData(const int &gid, std::vector< double > &varData) const
bool dumpRestartData(char *buf, int bsize, int &pos, N_PDS_Comm *comm, bool pack)
const std::string netlistFilename_
Netlist file name.
Util::ListenerAutoSubscribe< AnalysisEvent > AnalysisEventListener
bool updateStateDataArrays()
bool getDoubleDCOPEnabled() const
TimeIntg::DataStore * dataStore_
Data store object.
Pure virtual class to augment a linear system.
Linear::Vector * nextSolutionDerivPtr
double getFinalTime() const
bool dumpRestartData(char *buf, int bsize, int &pos, Parallel::Communicator *comm, bool pack)
Registry::const_iterator end() const
bool resetAll(double absolute_error_tolerance, double relative_error_tolerance)
void pushActiveAnalysis(AnalysisBase *analysis)
double getTotalLinearSolutionTime() const
bool isSimulationComplete()
Linear::Vector * tmpStaVectorPtr
double getPauseTime() const
void updateDerivsBlock(const std::list< IndexPair > &solGIDList, const std::list< IndexPair > &staGIDList)
const Analysis::SweepVector & getDCSweepVector() const
Linear::Vector * lastStatePtr
Linear::Vector * tmpSolVectorPtr
void setTranStepNumber(int step)
void setBeginningIntegrationFlag(bool bif)
void createTimeIntegratorMethod(const TimeIntg::TIAParams &tia_params, const unsigned int integration_method)
int getRestartDataSize(bool pack) const
virtual int getDoubleDCOPStep() const
void outputHomotopy(const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals, Linear::Vector &solnVecPtr)
const AnalysisBase & getAnalysisObject() const
std::vector< AnalysisBase * > currentAnalysisStack_
Util::ListenerAutoSubscribe< StepEvent > StepEventListener
Parallel::Machine getComm() const
Linear::Vector * currStatePtr
void obtainCorrectorDeriv()
virtual bool isAnalysis(int analysis_type) const
bool getBeginningIntegrationFlag() const
void setIntegrationMethod(int im)
void computeDividedDifferences()
bool getTranOPFlag() const
TimeIntg::StepErrorControl * stepErrorControl_
Pointer to the TIA step-error control object.
const Loader & getLoader() const
Linear::Vector * daeQVectorPtr
void setConstantHistory()
Util::Timer * elapsedTimerPtr_
Xyce timing utility for timing the transient simulation CPU time.
bool registerParallelServices(Parallel::Manager *pds_tmp)
std::vector< ProcessorBase * > analysisVector_
void setStepNumber(int step)
Linear::Vector * tmpStaDerivPtr
void setBeginningIntegrationFlag(bool bif)
bool restoreRestartData(char *buf, int bsize, int &pos, Parallel::Communicator *comm, bool pack)
void setStepNumber(int step)
Linear::Vector * deviceErrorWeightMask_
TimeIntg::WorkingIntegrationMethod * workingIntgMethod_
Working integration method.
bool initializeSolverSystem(const TimeIntg::TIAParams &tia_params, Loader::Loader &loader, Linear::System &linear_system, Nonlinear::Manager &nonlinear_manager, Device::DeviceMgr &device_manager)
Initializes the solver system.
bool restoreRestartData(char *buf, int bsize, int &pos, N_PDS_Comm *comm, bool pack, double &initial_time)
bool getSolnVarData(const int &gid, std::vector< double > &varData) const
Linear::Vector * daeFVectorPtr
Util::Notifier< StepEvent > StepEventNotifier
bool daeStateDerivFlag_
.OPTIONS TIMEINT DAESTATEDERIV=
bool setStoreVarData(const int &gid, const std::vector< double > &varData)
virtual bool getDCOPFlag() const =0
void setPauseTime(double pauseTime, double initial_time)
bool getStateVarData(const int &gid, std::vector< double > &varData)
bool getStoreVarData(const int &gid, std::vector< double > &varData) const
int getIntegrationMethod()
void setTranStepNumber(int step)
Nonlinear::AnalysisMode nonlinearAnalysisMode(Mode mode)
Returns the nonlinear analysis mode given the analysis mode.
bool setStateVarData(const int &gid, const std::vector< double > &varData)
void setBreakPoint(const Util::BreakPoint &breakpoint, double initial_time)
bool completeOPStartStep()
void homotopyStepFailure()
bool getInitTranFlag() const
CreatorVector analysisCreatorVector_
AnalysisBase * analysisObject_
.STEP, Dakota
Linear::Matrix * dFdxMatrixPtr
double getTotalJacobianLoadTime() const
Linear::Matrix * JMatrixPtr
void printParams(std::ostream &os, int analysis) const
CreatorSet processorCreatorSet_
double getTotalResidualLoadTime() const
virtual bool loadDeviceErrorWeightMask(Linear::Vector *deviceMask) const
Linear::Vector * nextStatePtr
Util::Notifier< AnalysisEvent > AnalysisEventNotifier
virtual bool printLoopInfo(int start, int finish)
Linear::Vector * dFdxdVpVectorPtr
bool setSolnVarData(const int &gid, const std::vector< double > &varData)
void homotopyStepSuccess(const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals)
double pauseTime
Time step value at which to "pause" the simulation.
int getStepNumber() const
const TimeIntg::TIAParams & getTIAParams() const
bool setOPAnalysisParams(const Util::OptionBlock ¶msBlock)
bool getSolnVarData(const int &gid, std::vector< double > &varData)
bool registerElapsedTimer(Util::Timer *)
bool setSolnVarData(const int &gid, const std::vector< double > &varData)
Linear::Vector * tmpStaDivDiffPtr
Loader::NonlinearEquationLoader * nonlinearEquationLoader_
Pointer to the nonlinear equation loader.
bool updateDerivsBlock(const std::list< IndexPair > &solGIDList, const std::list< IndexPair > &staGIDList)
bool setSensOptions(const Util::OptionBlock &OB)
Linear::Vector * nextSolutionPtr
Linear::Vector * RHSVectorPtr
void createTimeIntegMethod(int type, const TIAParams &tia_params, StepErrorControl &step_error_control, DataStore &data_store)
DCOPType getDCOPSolve() const
double getTotalResidualLoadTime() const
OutputMgrAdapter & outputManagerAdapter_
Output manager adapter.
bool setStateVarData(const int &gid, const std::vector< double > &varData)
Linear::Vector * dQdxdVpVectorPtr
Stats::Stat analysisStat_
bool getDoubleDCOPEnabled() const
AnalysisManager(const IO::CmdParse &command_line, OutputMgrAdapter &output_manager_adapter, Stats::Stat analysis_stat)
Constructs the analysis manager.
bool completeHomotopyStep(Loader::NonlinearEquationLoader &loader, const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals, Linear::Vector *solnVecPtr)
int getRestartDataSize(bool pack)
virtual bool getLimiterFlag()
bool failHomotopyStep(Loader::NonlinearEquationLoader &loader)
double solverStartTime_
Xyce timing utility for timing elapsed run time.
bool setNextSolVectorPtr(Linear::Vector *solVecPtr)
bool dotOpSpecified_
Set if .OP.
int getIntegrationMethod() const
Linear::Vector * currSolutionPtr
Util::Timer xyceTranTimerPtr_
bool getDCSweepFlag() const
const Analysis::SweepVector & getStepSweepVector() const
bool getBlockAnalysisFlag() const
Return true if primary analysis is HB or MPDE.
bool setStoreVarData(const int &gid, const std::vector< double > &varData)
int getDoubleDCOPStep() const
Linear::Vector * nextStateDerivPtr
double getTotalJacobianLoadTime() const
bool registerPkgOptionsMgr(AnalysisManager &analysis_manager, IO::PkgOptionsMgr &options_manager)
bool getStoreVarData(const int &gid, std::vector< double > &varData)
Parallel::Manager * parallelManager_
Pointer to the parallel services manager.
Linear::Matrix * dQdxMatrixPtr
AnalysisBase * primaryAnalysisObject_
.TRAN, .AC, .HB, ...
Linear::Vector * flagSolutionPtr
const char * getName() const
Linear::Vector * daeBVectorPtr
double getInitialTime() const
bool printLoopInfo(int start, int finish)
void computeDivDiffsBlock(const std::list< IndexPair > &solGIDList, const std::list< IndexPair > &staGIDList)