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>
90 bool overrideOriginal)
104 std::vector<double> & dfdpVec,
105 std::vector<double> & dqdpVec,
106 std::vector<double> & dbdpVec,
107 std::vector<int> & FindicesVec,
108 std::vector<int> & QindicesVec,
109 std::vector<int> & BindicesVec)
const
112 FindicesVec, QindicesVec, BindicesVec);
116 Parallel::Machine comm,
117 const std::string & name)
const
123 Linear::Vector * nextSolVectorPtr,
124 Linear::Vector * currSolVectorPtr,
125 Linear::Vector * lastSolVectorPtr,
126 Linear::Vector * nextStaVectorPtr,
127 Linear::Vector * currStaVectorPtr,
128 Linear::Vector * lastStaVectorPtr,
129 Linear::Vector * StateDerivVectorPtr,
130 Linear::Vector * nextStoVectorPtr,
131 Linear::Vector * currStoVectorPtr,
132 Linear::Vector * lastStoVectorPtr,
133 Linear::Vector * QVectorPtr,
134 Linear::Vector * FVectorPtr,
135 Linear::Vector * BVectorPtr,
136 Linear::Vector * dFdxdVpVectorPtr,
137 Linear::Vector * dQdxdVpVectorPtr)
const
167 Linear::Vector * deviceMask)
const
181 Linear::Vector * tmpSolVectorPtr,
182 Linear::Vector * tmpStateVectorPtr,
183 Linear::Vector * tmpStateDerivVectorPtr,
184 Linear::Vector * tmpStoreVectorPtr,
185 Linear::Matrix * tmpdQdxMatrixPtr,
186 Linear::Matrix * tmpdFdxMatrixPtr)
191 tmpStateDerivVectorPtr,
207 Linear::Vector * nextSolVectorPtr,
208 Linear::Vector * currSolVectorPtr,
209 Linear::Vector * lastSolVectorPtr,
210 Linear::Vector * nextStaVectorPtr,
211 Linear::Vector * currStaVectorPtr,
212 Linear::Vector * lastStaVectorPtr,
213 Linear::Vector * StateDerivVectorPtr,
214 Linear::Vector * nextStoVectorPtr,
215 Linear::Vector * currStoVectorPtr,
216 Linear::Vector * lastStoVectorPtr,
217 Linear::Vector * stoLeadCurrQVectorPtr,
218 Linear::Vector * nextLeadFVectorPtr,
219 Linear::Vector * currLeadFVectorPtr,
220 Linear::Vector * lastLeadFVectorPtr,
221 Linear::Vector * nextLeadQVectorPtr,
222 Linear::Vector * nextJunctionVVectorPtr,
223 Linear::Vector * currJunctionVVectorPtr,
224 Linear::Vector * lastJunctionVVectorPtr,
225 Linear::Vector * QVectorPtr,
226 Linear::Vector * FVectorPtr,
227 Linear::Vector * BVectorPtr,
228 Linear::Vector * dFdxdVpVectorPtr,
229 Linear::Vector * dQdxdVpVectorPtr)
242 stoLeadCurrQVectorPtr,
247 nextJunctionVVectorPtr,
248 currJunctionVVectorPtr,
249 lastJunctionVVectorPtr,
266 Linear::Vector * nextSolVectorPtr,
267 Linear::Vector * currSolVectorPtr,
268 Linear::Vector * lastSolVectorPtr,
269 Linear::Vector * nextStaVectorPtr,
270 Linear::Vector * currStaVectorPtr,
271 Linear::Vector * lastStaVectorPtr,
272 Linear::Vector * nextStoVectorPtr,
273 Linear::Vector * currStoVectorPtr,
274 Linear::Vector * lastStoVectorPtr)
297 Linear::Vector * bVecRealPtr,
298 Linear::Vector * bVecImagPtr)
339 (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
353 (std::vector<Xyce::Analysis::NoiseData*> & noiseDataVec)
367 std::vector<int>& bMatPosEntriesVec)
581 Parallel::Machine comm)
596 Parallel::Machine comm)
613 for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
615 Device::ExternDevice::Instance &extern_device =
static_cast<Device::ExternDevice::Instance &
>(*(*it));
617 extern_device.stepSuccess(analysis);
633 for (Device::InstanceVector::const_iterator it = extern_devices.begin(); it != extern_devices.end(); ++it)
635 Device::ExternDevice::Instance &extern_device =
static_cast<Device::ExternDevice::Instance &
>(*(*it));
637 extern_device.stepFailure(analysis);
703 bool beginIntegrationFlag,
bool setParam(std::string &name, double val, bool overrideOriginal=false)
bool setParam(const std::string &name, double val, bool overrideOriginal=false)
Device::DeviceMgr & deviceManager_
Device manager.
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.
const InstanceVector & getDevices(ModelTypeId model_type_id) const
bool calcCouplingTerms(int iSubProblem, int iCouple, const Linear::Vector *dxdvPtr)
bool loadCouplingRHS(int iSubProblem, int iCouple, Linear::Vector *dfdvPtr)
virtual void setVoltageLimiterStatus(bool voltageLimterStatus)
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 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)
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)
virtual bool getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec) const
bool calcCouplingTerms(int iSubProblem, int iElectrode, const Linear::Vector *dxdvPtr)
virtual double getParamAndReduce(Parallel::Machine comm, const std::string &name) const
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)
int getHomotopyBlockSize() const
bool loadDAEMatrices(Linear::Vector *tmpSolVectorPtr, Linear::Vector *tmpStaVectorPtr, Linear::Vector *tmpStaDerivVectorPtr, Linear::Vector *tmpStoVectorPtr, Linear::Matrix *tmpdQdxMatrixPtr, Linear::Matrix *tmpdFdxMatrixPtr)
bool allDevicesConverged(Parallel::Machine comm) const
void setExternalSolverState(bool external_initJctFlag)
int enablePDEContinuation()
bool getBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
void setVoltageLimiterStatus(bool voltageLimterStatus)
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 getVoltageLimiterStatus()
bool startTimeStep(bool beginIntegrationFlag, double nextTimeStep, double nextTime, int currentOrder)
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 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 getInnerLoopErrorSums(std::vector< TimeIntg::TwoLevelError > &tleVec) const
bool getParamAndReduce(Parallel::Machine comm, const DeviceMgr &device_manager, const std::string &name, double &val)
bool analyticSensitivitiesAvailable(const std::string &name)
bool loadBVectorsforAC(Linear::Vector *bVecRealPtr, Linear::Vector *bVecImagPtr)
bool disablePDEContinuation()
void setExternalSolverState(bool external_initJctFlag)
bool startTimeStep(bool beginIntegrationFlag, double nextTimeStep, double nextTime, int currentOrder)
int enablePDEContinuation()
std::vector< DeviceInstance * > InstanceVector
virtual bool getVoltageLimiterStatus()
bool innerDevicesConverged(Parallel::Machine comm)
bool outputPlotFiles() const
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
bool outputPlotFiles(bool force_final_output)