47 #include <Xyce_config.h>
50 #include <N_UTL_fwd.h>
54 #include <N_DEV_ExternDevice.h>
57 #include <N_PDS_MPI.h>
58 #include <N_PDS_Serial.h>
93 bool overrideOriginal)
109 std::vector<double> & dfdpVec,
110 std::vector<double> & dqdpVec,
111 std::vector<double> & dbdpVec,
112 std::vector<int> & FindicesVec,
113 std::vector<int> & QindicesVec,
114 std::vector<int> & BindicesVec)
const
117 FindicesVec, QindicesVec, BindicesVec);
122 const std::string & name)
const
129 const std::string & name,
136 Linear::Vector * nextSolVectorPtr,
137 Linear::Vector * currSolVectorPtr,
138 Linear::Vector * lastSolVectorPtr,
139 Linear::Vector * nextStaVectorPtr,
140 Linear::Vector * currStaVectorPtr,
141 Linear::Vector * lastStaVectorPtr,
142 Linear::Vector * StateDerivVectorPtr,
143 Linear::Vector * nextStoVectorPtr,
144 Linear::Vector * currStoVectorPtr,
145 Linear::Vector * lastStoVectorPtr,
146 Linear::Vector * QVectorPtr,
147 Linear::Vector * FVectorPtr,
148 Linear::Vector * BVectorPtr,
149 Linear::Vector * dFdxdVpVectorPtr,
150 Linear::Vector * dQdxdVpVectorPtr)
const
181 Linear::Vector * deviceMask)
const
195 Linear::Vector * tmpSolVectorPtr,
196 Linear::Vector * tmpStateVectorPtr,
197 Linear::Vector * tmpStateDerivVectorPtr,
198 Linear::Vector * tmpStoreVectorPtr,
199 Linear::Matrix * tmpdQdxMatrixPtr,
200 Linear::Matrix * tmpdFdxMatrixPtr)
205 tmpStateDerivVectorPtr,
221 Linear::Vector * nextSolVectorPtr,
222 Linear::Vector * currSolVectorPtr,
223 Linear::Vector * lastSolVectorPtr,
224 Linear::Vector * nextStaVectorPtr,
225 Linear::Vector * currStaVectorPtr,
226 Linear::Vector * lastStaVectorPtr,
227 Linear::Vector * StateDerivVectorPtr,
228 Linear::Vector * nextStoVectorPtr,
229 Linear::Vector * currStoVectorPtr,
230 Linear::Vector * lastStoVectorPtr,
231 Linear::Vector * stoLeadCurrQVectorPtr,
232 Linear::Vector * nextLeadFVectorPtr,
233 Linear::Vector * currLeadFVectorPtr,
234 Linear::Vector * lastLeadFVectorPtr,
235 Linear::Vector * nextLeadQVectorPtr,
236 Linear::Vector * nextJunctionVVectorPtr,
237 Linear::Vector * currJunctionVVectorPtr,
238 Linear::Vector * lastJunctionVVectorPtr,
239 Linear::Vector * QVectorPtr,
240 Linear::Vector * FVectorPtr,
241 Linear::Vector * BVectorPtr,
242 Linear::Vector * dFdxdVpVectorPtr,
243 Linear::Vector * dQdxdVpVectorPtr)
256 stoLeadCurrQVectorPtr,
261 nextJunctionVVectorPtr,
262 currJunctionVVectorPtr,
263 lastJunctionVVectorPtr,
282 Linear::Vector * nextSolVectorPtr,
283 Linear::Vector * currSolVectorPtr,
284 Linear::Vector * lastSolVectorPtr,
285 Linear::Vector * nextStaVectorPtr,
286 Linear::Vector * currStaVectorPtr,
287 Linear::Vector * lastStaVectorPtr,
288 Linear::Vector * nextStoVectorPtr,
289 Linear::Vector * currStoVectorPtr,
290 Linear::Vector * lastStoVectorPtr)
313 (Linear::Vector * bVecRealPtr,
314 Linear::Vector * bVecImagPtr)
316 return deviceManager_.loadBVectorsforAC (bVecRealPtr, bVecImagPtr);
355 (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
371 (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
385 std::vector<int>& bMatPosEntriesVec)
612 Parallel::Machine comm)
627 Parallel::Machine comm)
644 for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
646 Device::ExternDevice::Instance &extern_device =
static_cast<Device::ExternDevice::Instance &
>(*(*it));
648 extern_device.stepSuccess(analysis);
664 for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
666 Device::ExternDevice::Instance &extern_device =
static_cast<Device::ExternDevice::Instance &
>(*(*it));
668 extern_device.stepFailure(analysis);
bool setParam(std::string &name, double val, bool overrideOriginal=false)
Device::DeviceMgr & deviceManager_
Device manager.
void setExternalSolverState(const SolverState &ss)
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)
void setupNoiseSources(std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec)
virtual bool getInitialQnorm(std::vector< TimeIntg::TwoLevelError > &tleVec)
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)
virtual bool analyticSensitivitiesAvailable(std::string &name)
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
bool getBMatrixEntriesforMOR(std::vector< int > &bMatEntriesVec, std::vector< int > &bMatPosEntriesVec)
bool loadErrorWeightMask(Linear::Vector *deviceMaskPtr)
Pure virtual class to augment a linear system.
bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec)
bool calcCouplingTerms(int iSubProblem, int iCouple, const Linear::Vector *dxdvPtr)
void setExternalSolverState(const Device::SolverState &ss)
bool loadCouplingRHS(int iSubProblem, int iCouple, Linear::Vector *dfdvPtr)
bool getVoltageLimiterFlag()
bool getBMatrixEntriesforMOR(std::vector< int > &bMatEntriesVec, std::vector< int > &bMatPosEntriesVec)
CktLoader(Device::DeviceMgr &device_manager)
void getNoiseSources(std::vector< Xyce::Analysis::NoiseData * > &noiseDataVec)
bool disablePDEContinuation()
void getNumInterfaceNodes(std::vector< int > &numInterfaceNodes)
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
bool setParam(std::string &name, double val, bool overrideOriginal=false)
bool setICs(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpCurrSolVectorPtr, Linear::Vector *tmpLastSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpCurrStaVectorPtr, Linear::Vector *tmpLasStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Vector *tmpCurrStoVectorPtr, Linear::Vector *tmpLastStoVectorPtr, Linear::Vector *tmpQVectorPtr, Linear::Vector *tmpFVectorPtr, Linear::Vector *tmpBVectorPtr, Linear::Vector *tmpdFdxdVpVectorPtr, Linear::Vector *tmpdQdxdVpVectorPtr)
bool loadCouplingRHS(int iPDEDevice, int iElectrode, Linear::Vector *dfdvPtr)
bool getLinearSystemFlag() const
Device::DeviceMgr & deviceManager_
bool finishOutput() const
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
bool calcCouplingTerms(int iSubProblem, int iElectrode, const Linear::Vector *dxdvPtr)
bool allDevicesConverged(Parallel::Machine comm)
bool setInitialGuess(Linear::Vector *solVectorPtr)
bool loadBVectorsforAC(Linear::Vector *bVecRealPtr, Linear::Vector *bVecImagPtr)
bool setInitialGuess(Linear::Vector *solVectorPtr)
void getNumInterfaceNodes(std::vector< int > &numINodes)
virtual bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec)
int getHomotopyBlockSize() const
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
virtual double getParamAndReduce(const std::string &name) const
bool allDevicesConverged(Parallel::Machine comm) const
const InstanceVector & getExternDevices() const
int enablePDEContinuation()
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
bool loadDAEVectors(Linear::Vector *nextSolVectorPtr, Linear::Vector *currSolVectorPtr, Linear::Vector *lastSolVectorPtr, Linear::Vector *nextStaVectorPtr, Linear::Vector *currStaVectorPtr, Linear::Vector *lastStaVectorPtr, Linear::Vector *StaDerivVectorPtr, Linear::Vector *nextStoVectorPtr, Linear::Vector *currStoVectorPtr, Linear::Vector *lastStoVectorPtr, Linear::Vector *stoLeadCurrQVectorPtr, Linear::Vector *nextLeadFVectorPtr, Linear::Vector *currLeadFVectorPtr, Linear::Vector *lastLeadFVectorPtr, Linear::Vector *nextLeadQVectorPtr, Linear::Vector *nextJunctionVVectorPtr, Linear::Vector *currJunctionVVectorPtr, Linear::Vector *lastJunctionVVectorPtr, Linear::Vector *QVectorPtr, Linear::Vector *FVectorPtr, Linear::Vector *BVectorPtr, Linear::Vector *dFdxdVpVectorPtr, Linear::Vector *dQdxdVpVectorPtr)
bool devicesConverged(Parallel::Machine comm, const InstanceVector &extern_devices)
double getMaxTimeStepSize()
bool loadDAEVectors(Linear::Vector *tmpNextSolVectorPtr, Linear::Vector *tmpCurrSolVectorPtr, Linear::Vector *tmpLastSolVectorPtr, Linear::Vector *tmpNextStaVectorPtr, Linear::Vector *tmpCurrStaVectorPtr, Linear::Vector *tmpLastStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpNextStoVectorPtr, Linear::Vector *tmpCurrStoVectorPtr, Linear::Vector *tmpLastStoVectorPtr, Linear::Vector *tmpStoLeadCurrQCompVectorPtr, Linear::Vector *tmpLeadFCompVectorPtr, Linear::Vector *tmpLastLeadFCompVectorPtr, Linear::Vector *tmpNextLeadFCompVectorPtr, Linear::Vector *tmpLeadQCompVectorPtr, Linear::Vector *tmpJunctionVCompVectorPtr, Linear::Vector *tmpLastJunctionVCompVectorPtr, Linear::Vector *tmpNextJunctionCompVectorPtr, Linear::Vector *tmpQVectorPtr, Linear::Vector *tmpFVectorPtr, Linear::Vector *tmpBVectorPtr, Linear::Vector *tmpdFdxdVpVectorPtr, Linear::Vector *tmpdQdxdVpVectorPtr)
void stepSuccess(Xyce::Analysis::TwoLevelMode analysis)
bool loadDeviceErrorWeightMask(Linear::Vector *deviceMask) const
bool getDoubleDCOPFlag() const
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)
bool analyticSensitivitiesAvailable(const std::string &name)
bool disablePDEContinuation()
bool getLinearSystemFlag()
int enablePDEContinuation()
std::vector< DeviceInstance * > InstanceVector
double getParamAndReduce(const std::string &name) const
bool innerDevicesConverged(Parallel::Machine comm)
void stepFailure(Xyce::Analysis::TwoLevelMode analysis)
int getHomotopyBlockSize() const
bool getInitialQnorm(std::vector< TimeIntg::TwoLevelError > &tleVec)
double getMaxTimeStepSize()
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes) const