Xyce  6.1
N_ANP_OutputMgrAdapter.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // Copyright Notice
3 //
4 // Copyright 2002 Sandia Corporation. Under the terms
5 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
6 // Government retains certain rights in this software.
7 //
8 // Xyce(TM) Parallel Electrical Simulator
9 // Copyright (C) 2002-2015 Sandia Corporation
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //-----------------------------------------------------------------------------
24 //-----------------------------------------------------------------------------
25 // Filename : $RCSfile: N_ANP_OutputMgrAdapter.h,v $
26 //
27 // Purpose :
28 //
29 // Special Notes :
30 //
31 // Creator : Richard Schiek, SNL, Electrical and Microsystem Modeling
32 //
33 // Creation Date : 01/24/08
34 //
35 // Revision Information:
36 // ---------------------
37 //
38 // Revision Number: $Revision: 1.75.2.1 $
39 //
40 // Revision Date : $Date: 2015/04/02 18:20:06 $
41 //
42 // Current Owner : $Author: tvrusso $
43 //-----------------------------------------------------------------------------
44 
45 #ifndef Xyce_N_ANP_OutputMgrAdapter_h
46 #define Xyce_N_ANP_OutputMgrAdapter_h
47 
48 #include <Teuchos_SerialDenseMatrix.hpp>
49 
50 #include <N_ANP_fwd.h>
51 #include <N_DEV_fwd.h>
52 #include <N_IO_fwd.h>
53 #include <N_LAS_fwd.h>
54 #include <N_PDS_fwd.h>
55 #include <N_TOP_fwd.h>
56 #include <N_UTL_fwd.h>
57 
58 #include <N_UTL_Listener.h>
59 #include <N_ANP_StepEvent.h>
60 #include <N_LAS_BlockVector.h>
61 
62 namespace Xyce {
63 namespace Analysis {
64 
65 //-------------------------------------------------------------------------
66 // Class : OutputMgrAdapter
67 // Purpose : Inteface class for the output manager
68 // Special Notes :
69 // Creator : Richard Schiek, SNL, Electrical and Microsystem Modeling
70 // Creation Date : 01/24/08
71 //-------------------------------------------------------------------------
72 class OutputMgrAdapter : public Util::Listener<StepEvent>
73 {
74 public:
76  Parallel::Machine comm,
77  IO::OutputMgr & output_manager,
78  IO::Measure::Manager & measure_manager,
79  IO::FourierMgr & fourier_manager,
80  IO::ObjectiveManager & objective_manager,
81  IO::InitialConditionsManager & initial_conditions_manager,
82  Device::DeviceMgr & device_manager,
83  Topo::Topology & topology,
84  IO::RestartMgr & restart_manager);
85 
86  virtual ~OutputMgrAdapter();
87 
88  void notify(const StepEvent &event);
89 
90  void addOutputResults(const Util::OptionBlock & option_block);
91  void addOutputResponse(const Util::OptionBlock & option_block);
92 
93  void setStepSweepVector(const Analysis::SweepVector &sweep_vector);
94 
95  void setDCSweepVector(const Analysis::SweepVector &sweep_vector);
96 
98  {
99  return stepSweepVector_;
100  }
101 
103  {
104  return dcSweepVector_;
105  }
106 
107  // accessor methods
109  {
111  }
112 
114  {
115  return dcAnalysisStepNumber_;
116  }
117 
119  {
120  return dcAnalysisMaxSteps_;
121  }
122 
123  IO::OutputMgr &getOutputManager()
124  {
125  return outputManager_;
126  }
127 
128  IO::InitialConditionsManager &getInitialConditionsManager()
129  {
131  }
132 
133  void setDCAnalysisStepNumber( int num )
134  {
135  dcAnalysisStepNumber_ = num;
136  }
137 
138  void setDCAnalysisMaxSteps( int num )
139  {
140  dcAnalysisMaxSteps_ = num;
141  }
142 
143  bool isRestart() const;
144 
145  void dumpRestart(Parallel::Communicator &parallel_communicator, Analysis::AnalysisManager &analysis_manager, double current_time) const;
146 
147  void tranOutput(
148  double time, Linear::Vector & currSolutionPtr, Linear::Vector & stateVecPtr, Linear::Vector & storeVecPtr,
149  Linear::Vector & lead_current_vector,
150  Linear::Vector & junction_voltage_vector,
151  std::vector<double> & objectiveVec_,
152  std::vector<double> & dOdpVec_,
153  std::vector<double> & dOdpAdjVec_,
154  std::vector<double> & scaled_dOdpVec_,
155  std::vector<double> & scaled_dOdpAdjVec_,
156  bool skipPrintLineOutput = false);
157 
158  void dcOutput(
159  int dcStepNumber,
160  Linear::Vector & currSolutionPtr, Linear::Vector & stateVecPtr, Linear::Vector & storeVecPtr,
161  Linear::Vector &lead_current_vector,
162  Linear::Vector &junction_voltage_vector,
163  std::vector<double> & objectiveVec_,
164  std::vector<double> & dOdpVec_,
165  std::vector<double> & dOdpAdjVec_,
166  std::vector<double> & scaled_dOdpVec_,
167  std::vector<double> & scaled_dOdpAdjVec_);
168 
169  void outputResult(const Linear::Vector &currSolutionPtr,
170  const Linear::Vector &currStatePtr,
171  const Linear::Vector &currStorePtr,
172  const Linear::Vector &lead_current_vector,
173  const Linear::Vector &junction_voltage_vector );
174 
175  void steppingComplete();
176 
177  void finishOutput();
178 
179  bool setupInitialConditions( Linear::Vector & solnVec, Linear::Vector & flagVec);
180 
181  void outputDCOP(const Linear::Vector &solution);
182 
183  void outputMPDE(double time, const std::vector<double> &fast_time_points, const Linear::BlockVector &solution_vector);
184 
185  void outputHB(
186  const std::vector< double > & timePoints, const std::vector< double > & freqPoints,
187  const Linear::BlockVector & timeDomainSolnVec, const Linear::BlockVector & freqDomainSolnVecReal,
188  const Linear::BlockVector & freqDomainSolnVecImaginary, const Linear::BlockVector & timeDomainStoreVec,
189  const Linear::BlockVector & freqDomainStoreVecReal, const Linear::BlockVector & freqDomainStoreVecImaginary,
190  const Linear::BlockVector & timeDomainLeadCurrentVec, const Linear::BlockVector & freqDomainLeadCurrentVecReal,
191  const Linear::BlockVector & freqDomainLeadCurrentVecImaginary, const Linear::BlockVector & timeDomainJunctionVoltageVec,
192  const Linear::BlockVector & freqDomainJunctionVoltageVecReal, const Linear::BlockVector & freqDomainJunctionVoltageVecImaginary );
193 
194  void outputAC(double freq, const Linear::Vector & solnVecRealPtr, const Linear::Vector & solnVecImaginaryPtr);
195 
196  void outputNoise(
197  double freq, double totalOutputNoiseDens_, double totalInputNoiseDens_,
198  const std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec_);
199 
200  void outputMORTF(bool origSys, double freq, const Teuchos::SerialDenseMatrix<int, std::complex<double> >& H );
201 
202  void resetOutputMORTF();
203 
204  void outputROM(
205  const Teuchos::SerialDenseMatrix<int, double>& Ghat, const Teuchos::SerialDenseMatrix<int, double>& Chat,
206  const Teuchos::SerialDenseMatrix<int, double>& Bhat, const Teuchos::SerialDenseMatrix<int, double>& Lhat );
207 
208  void outputROM(
209  const Linear::Matrix& Ghat, const Linear::Matrix& Chat,
210  const Teuchos::SerialDenseMatrix<int, double>& Bhat,
211  const Teuchos::SerialDenseMatrix<int, double>& Lhat );
212 
213  double getInitialOutputInterval() const;
214 
215  const IO::IntervalVector &getOutputIntervals() const;
216 
217  void outputHomotopy( const std::vector<std::string> & paramNames, const std::vector<double> & paramVals, Linear::Vector & solnVecPtr );
218 
219  const Xyce::NodeNameMap & getAllNodes() const;
220 
221 private:
222  Parallel::Machine comm_;
223  IO::OutputMgr & outputManager_;
224  IO::Measure::Manager & measureManager_;
225  IO::FourierMgr & fourierManager_;
226  IO::ObjectiveManager & objectiveManager_;
227  IO::InitialConditionsManager & initialConditionsManager_;
229  Topo::Topology & topology_;
230  IO::RestartMgr & restartManager_;
231 
232  IO::OutputMOR * outputMOR_;
233  IO::OutputResults * outputResults_;
234  IO::OutputResponse * outputResponse_;
235 
238 
243 };
244 
246 {
247 public:
249  : adapter_(adapter)
250  {}
251 
252  virtual void outputMPDE(double time, const std::vector<double> &fast_time_points, const Linear::Vector *solution_vector)
253  {}
254 
256 };
257 
259 {
260 public:
262  : OutputAdapter(adapter)
263  {}
264 
265  virtual void outputMPDE(double time, const std::vector<double> &fast_time_points, const Linear::Vector *solution_vector)
266  {
267  if (dynamic_cast<const Linear::BlockVector *>(solution_vector))
268  adapter_.outputMPDE(time, fast_time_points, dynamic_cast<const Linear::BlockVector &>(*solution_vector));
269  }
270 };
271 
272 } // namespace Analysis
273 } // namespace Xyce
274 
275 #endif // Xyce_N_ANP_OutputMgrAdapter_h
MPDEOutputAdapter(OutputMgrAdapter &adapter)
void outputResult(const Linear::Vector &currSolutionPtr, const Linear::Vector &currStatePtr, const Linear::Vector &currStorePtr, const Linear::Vector &lead_current_vector, const Linear::Vector &junction_voltage_vector)
IO::InitialConditionsManager & initialConditionsManager_
void outputAC(double freq, const Linear::Vector &solnVecRealPtr, const Linear::Vector &solnVecImaginaryPtr)
OutputAdapter(OutputMgrAdapter &adapter)
Pure virtual class to augment a linear system.
void dcOutput(int dcStepNumber, Linear::Vector &currSolutionPtr, Linear::Vector &stateVecPtr, Linear::Vector &storeVecPtr, Linear::Vector &lead_current_vector, Linear::Vector &junction_voltage_vector, std::vector< double > &objectiveVec_, std::vector< double > &dOdpVec_, std::vector< double > &dOdpAdjVec_, std::vector< double > &scaled_dOdpVec_, std::vector< double > &scaled_dOdpAdjVec_)
const Analysis::SweepVector & getDCSweepVector() const
bool setupInitialConditions(Linear::Vector &solnVec, Linear::Vector &flagVec)
void outputHomotopy(const std::vector< std::string > &paramNames, const std::vector< double > &paramVals, Linear::Vector &solnVecPtr)
void setStepSweepVector(const Analysis::SweepVector &sweep_vector)
void dumpRestart(Parallel::Communicator &parallel_communicator, Analysis::AnalysisManager &analysis_manager, double current_time) const
void outputMPDE(double time, const std::vector< double > &fast_time_points, const Linear::BlockVector &solution_vector)
OutputMgrAdapter(Parallel::Machine comm, IO::OutputMgr &output_manager, IO::Measure::Manager &measure_manager, IO::FourierMgr &fourier_manager, IO::ObjectiveManager &objective_manager, IO::InitialConditionsManager &initial_conditions_manager, Device::DeviceMgr &device_manager, Topo::Topology &topology, IO::RestartMgr &restart_manager)
const Xyce::NodeNameMap & getAllNodes() const
virtual void outputMPDE(double time, const std::vector< double > &fast_time_points, const Linear::Vector *solution_vector)
void notify(const StepEvent &event)
void setDCSweepVector(const Analysis::SweepVector &sweep_vector)
void tranOutput(double time, Linear::Vector &currSolutionPtr, Linear::Vector &stateVecPtr, Linear::Vector &storeVecPtr, Linear::Vector &lead_current_vector, Linear::Vector &junction_voltage_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)
void outputMORTF(bool origSys, double freq, const Teuchos::SerialDenseMatrix< int, std::complex< double > > &H)
void addOutputResults(const Util::OptionBlock &option_block)
virtual void outputMPDE(double time, const std::vector< double > &fast_time_points, const Linear::Vector *solution_vector)
IO::InitialConditionsManager & getInitialConditionsManager()
const Analysis::SweepVector & getStepSweepVector() const
std::vector< SweepParam > SweepVector
Definition: N_ANP_fwd.h:85
const IO::IntervalVector & getOutputIntervals() const
void outputROM(const Teuchos::SerialDenseMatrix< int, double > &Ghat, const Teuchos::SerialDenseMatrix< int, double > &Chat, const Teuchos::SerialDenseMatrix< int, double > &Bhat, const Teuchos::SerialDenseMatrix< int, double > &Lhat)
void outputNoise(double freq, double totalOutputNoiseDens_, double totalInputNoiseDens_, const std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec_)
void outputDCOP(const Linear::Vector &solution)
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)
void addOutputResponse(const Util::OptionBlock &option_block)