45 #include <Xyce_config.h>
52 #include <N_IO_FourierMgr.h>
53 #include <N_IO_InitialConditions.h>
54 #include <N_IO_MeasureManager.h>
55 #include <N_IO_Objective.h>
56 #include <N_IO_OutputMgr.h>
57 #include <N_IO_OutputROM.h>
58 #include <N_IO_RestartMgr.h>
73 Parallel::Machine comm,
74 IO::OutputMgr & output_manager,
75 IO::Measure::Manager & measure_manager,
76 IO::FourierMgr & fourier_manager,
77 IO::ObjectiveManager & objective_manager,
80 outputManager_(output_manager),
81 measureManager_(measure_manager),
82 fourierManager_(fourier_manager),
83 objectiveManager_(objective_manager),
85 tempOp_(new Device::ArtificialParameterOp(
"TEMP",
deviceManager_, *(*
deviceManager_.getArtificialParameterMap().find(
"TEMP")).second,
"TEMP")),
88 stepAnalysisStepNumber_(0),
89 stepAnalysisMaxSteps_(0),
90 dcAnalysisStepNumber_(0),
91 dcAnalysisMaxSteps_(0)
126 Parallel::Communicator & parallel_communicator,
127 Topo::Topology & topology,
129 const std::string & job_name,
131 double current_time)
const
134 parallel_communicator,
147 Linear::Vector & currSolutionPtr,
148 Linear::Vector & stateVecPtr,
149 Linear::Vector & storeVecPtr,
150 Linear::Vector & lead_current_vector,
151 Linear::Vector & junction_voltage_vector,
152 Linear::Vector & lead_current_dqdt_vector,
153 std::vector<double> & objectiveVec_,
154 std::vector<double> & dOdpVec_,
155 std::vector<double> & dOdpAdjVec_,
156 std::vector<double> & scaled_dOdpVec_,
157 std::vector<double> & scaled_dOdpAdjVec_,
158 bool skipPrintLineOutput)
160 fourierManager_.updateFourierData(
comm_, time, &currSolutionPtr, &stateVecPtr, &storeVecPtr, &lead_current_vector, &junction_voltage_vector, &lead_current_dqdt_vector);
162 measureManager_.updateTranMeasures(
comm_, time, &currSolutionPtr, &stateVecPtr, &storeVecPtr, &lead_current_vector, &junction_voltage_vector, &lead_current_dqdt_vector);
165 Util::Op::OpData op_data;
166 double temp = (*tempOp_)(
comm_, op_data).real();
172 currSolutionPtr, stateVecPtr, storeVecPtr, lead_current_vector, junction_voltage_vector, lead_current_dqdt_vector, objectiveVec_,
173 dOdpVec_, dOdpAdjVec_, scaled_dOdpVec_, scaled_dOdpAdjVec_,
174 skipPrintLineOutput);
186 Linear::Vector & currSolutionPtr,
187 Linear::Vector & stateVecPtr,
188 Linear::Vector & storeVecPtr,
189 Linear::Vector & lead_current_vector,
190 Linear::Vector & junction_voltage_vector,
191 Linear::Vector & lead_current_dqdt_vector,
192 std::vector<double> & objectiveVec_,
193 std::vector<double> & dOdpVec_,
194 std::vector<double> & dOdpAdjVec_,
195 std::vector<double> & scaled_dOdpVec_,
196 std::vector<double> & scaled_dOdpAdjVec_)
198 measureManager_.updateDCMeasures(
comm_,
dcSweepVector_, &currSolutionPtr, &stateVecPtr, &storeVecPtr, &lead_current_vector, &junction_voltage_vector, &lead_current_dqdt_vector);
200 Util::Op::OpData op_data;
201 double temp = (*tempOp_)(
comm_, op_data).real();
207 currSolutionPtr, stateVecPtr, storeVecPtr, lead_current_vector, junction_voltage_vector, lead_current_dqdt_vector, objectiveVec_,
208 dOdpVec_, dOdpAdjVec_, scaled_dOdpVec_, scaled_dOdpAdjVec_);
231 const std::vector<double> & fast_time_points,
232 const Linear::BlockVector & solution_vector)
239 const std::vector<double> & timePoints,
240 const std::vector<double> & freqPoints,
241 const Linear::BlockVector & timeDomainSolutionVec,
242 const Linear::BlockVector & freqDomainSolutionVecReal,
243 const Linear::BlockVector & freqDomainSolutionVecImaginary,
244 const Linear::BlockVector & timeDomainStoreVec,
245 const Linear::BlockVector & freqDomainStoreVecReal,
246 const Linear::BlockVector & freqDomainStoreVecImaginary,
247 const Linear::BlockVector & timeDomainLeadCurrentVec,
248 const Linear::BlockVector & freqDomainLeadCurrentVecReal,
249 const Linear::BlockVector & freqDomainLeadCurrentVecImaginary,
250 const Linear::BlockVector & timeDomainJunctionVoltageVec,
251 const Linear::BlockVector & freqDomainJunctionVoltageVecReal,
252 const Linear::BlockVector & freqDomainJunctionVoltageVecImaginary )
258 timePoints, freqPoints,
259 timeDomainSolutionVec, freqDomainSolutionVecReal, freqDomainSolutionVecImaginary,
260 timeDomainStoreVec, freqDomainStoreVecReal, freqDomainStoreVecImaginary,
261 timeDomainLeadCurrentVec, freqDomainLeadCurrentVecReal, freqDomainLeadCurrentVecImaginary,
262 timeDomainJunctionVoltageVec, freqDomainJunctionVoltageVecReal, freqDomainJunctionVoltageVecImaginary );
268 const Linear::Vector & solnVecRealPtr,
269 const Linear::Vector & solnVecImaginaryPtr)
279 double totalOutputNoiseDens_,
double totalInputNoiseDens_,
280 const std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec_)
284 totalOutputNoiseDens_, totalInputNoiseDens_, noiseDataVec_);
313 const IO::IntervalVector &
321 const std::vector<std::string> & paramNames,
322 const std::vector<double> & paramVals,
323 Linear::Vector & solnVecPtr )
int dcAnalysisStepNumber_
IO::ObjectiveManager & objectiveManager_
int stepAnalysisStepNumber_
void outputAC(double freq, const Linear::Vector &solnVecRealPtr, const Linear::Vector &solnVecImaginaryPtr)
Pure virtual class to augment a linear system.
void dumpRestart(Parallel::Communicator ¶llel_communicator, Topo::Topology &topology, Analysis::AnalysisManager &analysis_manager, const std::string &job_name, bool pack, double current_time) const
OutputMgrAdapter(Parallel::Machine comm, IO::OutputMgr &output_manager, IO::Measure::Manager &measure_manager, IO::FourierMgr &fourier_manager, IO::ObjectiveManager &objective_manager, Device::DeviceMgr &device_manager)
void outputHomotopy(const std::vector< std::string > ¶mNames, const std::vector< double > ¶mVals, Linear::Vector &solnVecPtr)
void setStepSweepVector(const Analysis::SweepVector &sweep_vector)
Analysis::SweepVector dcSweepVector_
void outputMPDE(double time, const std::vector< double > &fast_time_points, const Linear::BlockVector &solution_vector)
Device::DeviceMgr & deviceManager_
void notify(const StepEvent &event)
IO::OutputMgr & outputManager_
IO::FourierMgr & fourierManager_
void setDCSweepVector(const Analysis::SweepVector &sweep_vector)
int stepAnalysisMaxSteps_
Util::Op::Operator * tempOp_
Device::DeviceMgr & deviceManager_
Analysis::SweepVector stepSweepVector_
void dcOutput(int dcStepNumber, Linear::Vector &currSolutionPtr, Linear::Vector &stateVecPtr, Linear::Vector &storeVecPtr, Linear::Vector &lead_current_vector, Linear::Vector &junction_voltage_vector, Linear::Vector &lead_current_dqdt_vector, std::vector< double > &objectiveVec_, std::vector< double > &dOdpVec_, std::vector< double > &dOdpAdjVec_, std::vector< double > &scaled_dOdpVec_, std::vector< double > &scaled_dOdpAdjVec_)
double getInitialOutputInterval() const
virtual ~OutputMgrAdapter()
std::vector< SweepParam > SweepVector
const IO::IntervalVector & getOutputIntervals() const
void outputNoise(double freq, double totalOutputNoiseDens_, double totalInputNoiseDens_, const std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec_)
void outputHB(const std::vector< double > &timePoints, const std::vector< double > &freqPoints, const Linear::BlockVector &timeDomainSolnVec, const Linear::BlockVector &freqDomainSolnVecReal, const Linear::BlockVector &freqDomainSolnVecImaginary, const Linear::BlockVector &timeDomainStoreVec, const Linear::BlockVector &freqDomainStoreVecReal, const Linear::BlockVector &freqDomainStoreVecImaginary, const Linear::BlockVector &timeDomainLeadCurrentVec, const Linear::BlockVector &freqDomainLeadCurrentVecReal, const Linear::BlockVector &freqDomainLeadCurrentVecImaginary, const Linear::BlockVector &timeDomainJunctionVoltageVec, const Linear::BlockVector &freqDomainJunctionVoltageVecReal, const Linear::BlockVector &freqDomainJunctionVoltageVecImaginary)
IO::Measure::Manager & measureManager_
void tranOutput(double time, Linear::Vector &currSolutionPtr, Linear::Vector &stateVecPtr, Linear::Vector &storeVecPtr, Linear::Vector &lead_current_vector, Linear::Vector &junction_voltage_vector, Linear::Vector &lead_current_dqdt_vector, std::vector< double > &objectiveVec_, std::vector< double > &dOdpVec_, std::vector< double > &dOdpAdjVec_, std::vector< double > &scaled_dOdpVec_, std::vector< double > &scaled_dOdpAdjVec_, bool skipPrintLineOutput=false)