46 #ifndef Xyce_LOA_HBLoader_H
47 #define Xyce_LOA_HBLoader_H
51 #include <Teuchos_RCP.hpp>
54 #include <N_LAS_fwd.h>
55 #include <N_PDS_fwd.h>
57 #include <N_UTL_DFTInterfaceDecl.hpp>
62 class N_MPDE_Discretization;
78 const Teuchos::RCP<const N_MPDE_Discretization> discPtr,
80 Linear::Builder & builder);
88 Linear::Vector * dSdt,
89 Linear::Vector * Store,
90 Linear::Matrix * dQdx,
91 Linear::Matrix * dFdx );
96 Linear::Vector * dSdt,
97 Linear::Vector * Store,
98 Linear::Matrix * dQdx,
99 Linear::Matrix * dFdx );
104 Linear::Vector * dSdt,
105 Linear::Vector * Store,
106 const Linear::Vector & V,
107 Linear::Vector * dQdxV,
108 Linear::Vector * dFdxV );
115 Linear::Vector * currX,
116 Linear::Vector * lastX,
118 Linear::Vector * currS,
119 Linear::Vector * lastS,
120 Linear::Vector * dSdt,
121 Linear::Vector * Store,
122 Linear::Vector * currStore,
123 Linear::Vector * lastStore,
124 Linear::Vector * storeLeadCurrQ,
125 Linear::Vector * nextLeadFVectorPtr,
126 Linear::Vector * currLeadFVectorPtr,
127 Linear::Vector * lastLeadFVectorPtr,
128 Linear::Vector * nextLeadQVectorPtr,
129 Linear::Vector * nextJunctionVVectorPtr,
130 Linear::Vector * currJunctionVVectorPtr,
131 Linear::Vector * lastJunctionVVectorPtr,
135 Linear::Vector * dFdxdVp,
136 Linear::Vector * dQdxdVp );
138 bool updateState( Linear::Vector * nextSolVectorPtr,
139 Linear::Vector * currSolVectorPtr,
140 Linear::Vector * lastSolVectorPtr,
141 Linear::Vector * nextStaVectorPtr,
142 Linear::Vector * currStaVectorPtr,
143 Linear::Vector * lastStaVectorPtr,
144 Linear::Vector * nextStoVectorPtr,
145 Linear::Vector * currStoVectorPtr,
146 Linear::Vector * lastStoVectorPtr
151 Linear::Vector * currSolVectorPtr,
152 Linear::Vector * lastSolVectorPtr,
153 Linear::Vector * nextStaVectorPtr,
154 Linear::Vector * currStaVectorPtr,
155 Linear::Vector * lastStaVectorPtr,
156 Linear::Vector * StateDerivVectorPtr,
157 Linear::Vector * nextStoVectorPtr,
158 Linear::Vector * currStoVectorPtr,
159 Linear::Vector * lastStoVectorPtr,
160 Linear::Vector * QVectorPtr,
161 Linear::Vector * FVectorPtr,
162 Linear::Vector * BVectorPtr,
163 Linear::Vector * dFdxdVpVectorPtr,
164 Linear::Vector * dQdxdVpVectorPtr)
const
179 Linear::BlockVector & permlindQdxV,
180 Linear::BlockVector & permlindFdxV );
191 void setHBFreqs(
const std::vector<double> & freqs);
202 void permutedFFT(
const Linear::BlockVector & xt, Linear::BlockVector * xf);
204 void permutedIFT(
const Linear::BlockVector & xf, Linear::BlockVector * xt,
int numTimePts_= 0);
218 std::vector<double> & dfdpVec,
219 std::vector<double> & dqdpVec,
220 std::vector<double> & dbdpVec,
221 std::vector<int> & FindicesVec,
222 std::vector<int> & QindicesVec,
223 std::vector<int> & BindicesVec)
const
226 virtual bool setParam (std::string & name,
double val,
bool overrideOriginal=
false) {
return false; }
227 virtual double getParamAndReduce(Parallel::Machine comm,
const std::string & name)
const {
return 0.0; }
303 #endif // Xyce_LOA_HBLoader_H
HBLoader(const Teuchos::RCP< const N_MPDE_Discretization > discPtr, Device::DeviceMgr &device_manager, Linear::Builder &builder)
Teuchos::RCP< Linear::Vector > appLastStaVecPtr_
virtual void setVoltageLimiterStatus(bool voltageLimterStatus)
virtual bool analyticSensitivitiesAvailable(std::string &name)
Teuchos::RCP< Linear::Vector > appCurrStoVecPtr_
Teuchos::RCP< Linear::BlockMatrix > bmdFdxPtr_
Linear::Builder & builder_
Teuchos::RCP< Linear::Matrix > & getStoreLindQdx()
std::vector< double > periodicTimes_
virtual bool initializeProblem(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *StateDerivVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr, Linear::Vector *QVectorPtr, Linear::Vector *FVectorPtr, Linear::Vector *BVectorPtr, Linear::Vector *dFdxdVpVectorPtr, Linear::Vector *dQdxdVpVectorPtr) const
Pure virtual class to augment a linear system.
void registerDFTInterface(const Teuchos::RCP< N_UTL_DFTInterfaceDecl< std::vector< double > > > &dftInterface)
void setFastTimes(const std::vector< double > ×)
bool updateState(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr)
Device::DeviceMgr & deviceManager_
void permutedIFT(const Linear::BlockVector &xf, Linear::BlockVector *xt, int numTimePts_=0)
bool loadDAEMatrices(Linear::Vector *X, Linear::Vector *S, Linear::Vector *dSdt, Linear::Vector *Store, Linear::Matrix *dQdx, Linear::Matrix *dFdx)
Teuchos::RCP< Loader > appLoaderPtr_
Actually a CktLoader.
Teuchos::RCP< const N_MPDE_Discretization > fastTimeDiscPtr_
Teuchos::RCP< Linear::Matrix > appdQdxPtr_
Teuchos::RCP< Linear::Vector > appStoLeadCurrQVecPtr_
std::vector< Teuchos::RCP< Linear::Matrix > > & getStoreNLdFdx()
void permutedFFT(const Linear::BlockVector &xt, Linear::BlockVector *xf)
Teuchos::RCP< Linear::Vector > appCurrStaVecPtr_
Teuchos::RCP< Linear::HBBuilder > hbBuilderPtr_
virtual void getAnalyticSensitivities(std::string &name, std::vector< double > &dfdpVec, std::vector< double > &dqdpVec, std::vector< double > &dbdpVec, std::vector< int > &FindicesVec, std::vector< int > &QindicesVec, std::vector< int > &BindicesVec) const
void setMatrixFreeFlag(bool matrixFreeFlag)
Teuchos::RCP< Linear::Matrix > linAppdFdxPtr_
Teuchos::RCP< Linear::Vector > appCurrLeadFVecPtr_
Teuchos::RCP< Linear::BlockVector > bXtPtr_
Teuchos::RCP< Linear::Matrix > & getStoreLindFdx()
Teuchos::RCP< Linear::BlockVector > bLeadCurrentVecFreqPtr_
Teuchos::RCP< Linear::BlockVector > & getLeadCurrentVecFreqPtr()
Teuchos::RCP< Linear::BlockVector > bStoreVecFreqPtr_
Teuchos::RCP< Linear::BlockVector > bVtPtr_
Teuchos::RCP< Linear::Vector > appNextJunctionVVecPtr_
virtual double getParamAndReduce(Parallel::Machine comm, const std::string &name) const
Teuchos::RCP< Linear::BlockVector > bStoreLeadCurrQVecFreqPtr_
Teuchos::RCP< Linear::BlockMatrix > bmdQdxPtr_
bool applyLinearMatrices(const Linear::BlockVector &bVf, Linear::BlockVector &permlindQdxV, Linear::BlockVector &permlindFdxV)
void setHBFreqs(const std::vector< double > &freqs)
void registerHBBuilder(Teuchos::RCP< Linear::HBBuilder > hbBuilderPtr)
virtual bool getVoltageLimiterStatus()
Teuchos::RCP< N_UTL_DFTInterfaceDecl< std::vector< double > > > dftInterface_
Teuchos::RCP< Linear::Vector > appLeadQVecPtr_
std::vector< Teuchos::RCP< Linear::Matrix > > vecNLAppdQdxPtr_
Teuchos::RCP< Linear::BlockVector > & getStoreVecFreqPtr()
Teuchos::RCP< Linear::Vector > appLastLeadFVecPtr_
bool loadTimeDepDAEMatrices(Linear::Vector *X, Linear::Vector *S, Linear::Vector *dSdt, Linear::Vector *Store, Linear::Matrix *dQdx, Linear::Matrix *dFdx)
Teuchos::RCP< Linear::Matrix > appdFdxPtr_
bool applyDAEMatrices(Linear::Vector *X, Linear::Vector *S, Linear::Vector *dSdt, Linear::Vector *Store, const Linear::Vector &V, Linear::Vector *dQdxV, Linear::Vector *dFdxV)
std::vector< double > times_
Teuchos::RCP< Linear::Vector > appLastStoVecPtr_
std::vector< Teuchos::RCP< Linear::Matrix > > & getStoreNLdQdx()
std::vector< Teuchos::RCP< Linear::Matrix > > vecNLAppdFdxPtr_
Teuchos::RCP< Linear::BlockVector > bLeadCurrentQVecFreqPtr_
Teuchos::RCP< Linear::Vector > appNextLeadFVecPtr_
virtual bool setParam(std::string &name, double val, bool overrideOriginal=false)
Teuchos::RCP< Linear::Vector > appLastJunctionVVecPtr_
std::vector< double > freqs_
Teuchos::RCP< Linear::Vector > appVecPtr_
Teuchos::RCP< Linear::Matrix > linAppdQdxPtr_
bool loadDAEVectors(Linear::Vector *X, Linear::Vector *currX, Linear::Vector *lastX, Linear::Vector *S, Linear::Vector *currS, Linear::Vector *lastS, Linear::Vector *dSdt, Linear::Vector *Store, Linear::Vector *currStore, Linear::Vector *lastStore, Linear::Vector *storeLeadCurrQ, Linear::Vector *nextLeadFVectorPtr, Linear::Vector *currLeadFVectorPtr, Linear::Vector *lastLeadFVectorPtr, Linear::Vector *nextLeadQVectorPtr, Linear::Vector *nextJunctionVVectorPtr, Linear::Vector *currJunctionVVectorPtr, Linear::Vector *lastJunctionVVectorPtr, Linear::Vector *Q, Linear::Vector *F, Linear::Vector *B, Linear::Vector *dFdxdVp, Linear::Vector *dQdxdVp)
Teuchos::RCP< Linear::Vector > appCurrJunctionVVecPtr_
Teuchos::RCP< Linear::Vector > appNextStoVecPtr_
void registerAppLoader(Teuchos::RCP< Loader > appLoaderPtr)
Teuchos::RCP< Linear::Vector > appNextStaVecPtr_
bool loadDeviceErrorWeightMask(Linear::Vector *deviceMask) const