45 #include <Xyce_config.h>
58 #include <N_ERH_ErrorMgr.h>
60 #include <N_LAS_Vector.h>
61 #include <N_LAS_Matrix.h>
62 #include <N_UTL_BreakPoint.h>
63 #include <N_UTL_FeatureTest.h>
73 .setOriginalValueStored(
true)
75 .setDescription(
"DC Voltage")
76 .setAnalyticSensitivityAvailable(
true)
83 .setDescription(
"Offset Voltage");
88 .setDescription(
"Initial Voltage");
93 .setDescription(
"Pulsed Voltage");
98 .setDescription(
"Delay");
103 .setDescription(
"Rise Time");
108 .setDescription(
"Fall Time");
113 .setDescription(
"Pulse Width");
118 .setDescription(
"Period");
123 .setDescription(
"Scale Factor -- smooth pulse only");
129 .setDescription(
"Amplitude");
134 .setDescription(
"Frequency");
139 .setDescription(
"Theta");
144 .setDescription(
"Phase");
150 .setDescription(
"Rise Delay Time");
155 .setDescription(
"Rise Time Constant");
160 .setDescription(
"Fall Delay Time");
165 .setDescription(
"Fall Time Constant");
171 .setDescription(
"Amplitude");
176 .setDescription(
"Phase");
182 .setDescription(
"Carrier Frequency");
187 .setDescription(
"Signal Frequency");
192 .setDescription(
"Modulation Index");
198 .setDescription(
"Repeat Time");
203 .setDescription(
"Time");
208 .setDescription(
"Voltage");
215 .setDescription(
"" );
221 .setDescription(
"" );
227 .setDescription(
"" );
232 .setDescription(
"" );
257 :
SourceInstance(IB, configuration.getInstanceParameters(), factory_block),
285 TRANSIENTSOURCETYPEgiven(false),
287 ACSOURCETYPEgiven(false),
289 DCSOURCETYPEgiven(false),
297 ABraEquPosNodeOffset(-1),
298 ABraEquNegNodeOffset(-1),
299 APosEquBraVarOffset(-1),
300 ANegEquBraVarOffset(-1),
301 ABraEquBraVarOffset(-1),
302 APosEquPosNodeOffset(-1),
303 ANegEquNegNodeOffset(-1),
306 fBraEquPosNodePtr(0),
307 fBraEquNegNodePtr(0),
310 fPosEquPosNodePtr(0),
311 fNegEquNegNodePtr(0),
492 const std::vector<int> & extLIDVecRef)
496 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
498 Xyce::dout() << std::endl << section_divider << std::endl;
499 Xyce::dout() <<
" VsrcInstance::registerLIDs" << std::endl;
500 Xyce::dout() <<
" name = " <<
getName() << std::endl;
505 int numInt = intLIDVecRef.size();
506 int numExt = extLIDVecRef.size();
510 DevelFatal0(*this).in(
"Instance::registerLIDs") <<
"numInt != numIntVars";
515 DevelFatal0(*this).in(
"Instance::registerLIDs") <<
"numExt != numExtVars";
530 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
532 Xyce::dout() <<
" li_Pos = " <<
li_Pos << std::endl;
533 Xyce::dout() <<
" li_Neg = " <<
li_Neg << std::endl;
534 Xyce::dout() <<
" li_Bra = " <<
li_Bra << std::endl;
535 Xyce::dout() << section_divider << std::endl;
659 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
875 double maxStep = 1.0e+100;
893 varTypeVec.resize(1);
911 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
926 std::vector<Instance*>::iterator iter;
930 for (iter=first; iter!=last; ++iter)
948 std::vector<Instance*>::const_iterator iter;
954 os <<
" name model name Parameters" << std::endl;
955 for (i=0, iter=first; iter!=last; ++iter, ++i)
957 os <<
" " << i <<
": " << (*iter)->getName() <<
" ";
983 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1049 double new_scale = fabs(vi.
i_bra) * vi.
scale;
1071 bool Master::loadDAEVectors (
double * solVec,
double * fVec,
double *qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ,
double * leadF,
double * leadQ,
double * junctionV)
1106 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
1130 .registerDevice(
"v", 1);
1144 const std::string & name,
1145 std::vector<double> & dfdp,
1146 std::vector<double> & dqdp,
1147 std::vector<double> & dbdp,
1148 std::vector<int> & Findices,
1149 std::vector<int> & Qindices,
1150 std::vector<int> & Bindices
1159 Bindices[0] = in->
li_Bra;
const InstanceName & getName() const
Master(const Configuration &configuration, const FactoryBlock &factory_block, const SolverState &solver_state, const DeviceOptions &device_options)
bool updateDependentParameters()
const DeviceOptions & deviceOptions_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
virtual std::ostream & printOutInstances(std::ostream &os) const
Pure virtual class to augment a linear system.
void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
void addBranchDataNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
InstanceVector::const_iterator getInstanceEnd() const
Returns an iterator to the ending of the vector of all instances created for this device...
Base class for all parameters.
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
double * nextJunctionVCompRawPtr
bool loadBVectorsforAC(double *bVecReal, double *bVecImag)
InstanceVector::const_iterator getInstanceBegin() const
Returns an iterator to the beginning of the vector of all instances created for this device...
double * fNegEquBraVarPtr
virtual void operator()(const ParameterBase &entity, const std::string &name, std::vector< double > &dfdp, std::vector< double > &dqdp, std::vector< double > &dbdp, std::vector< int > &Findices, std::vector< int > &Qindices, std::vector< int > &Bindices) const
void setParams(const std::vector< Param > ¶ms)
DeviceMaster instantiates a device as described by the device traits T.
const std::string & getName() const
double * daeFVectorRawPtr
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
Device::DeviceMgr & deviceManager_
virtual bool loadDAEVectors(double *solVec, double *fVec, double *qVec, double *bVec, double *storeLeadF, double *storeLeadQ, double *leadF, double *leadQ, double *junctionV)
Populates the device's ExternData object with these pointers.
const DeviceOptions & getDeviceOptions() const
SourceData * tranSourceData_
double * fBraEquNegNodePtr
bool TRANSIENTSOURCETYPEgiven
virtual double getMaxTimeStepSize()
int numBranchDataVarsIfAllocated
virtual void getParams(double *)
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
void varTypes(std::vector< char > &varTypeVec)
Linear::Matrix * dFdxMatrixPtr
const DeviceOptions & getDeviceOptions() const
Returns the device options given during device construction.
SourceData * acSourceData_
The Device class is an interface for device implementations.
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
virtual bool loadDAEMatrices(Linear::Matrix &dFdx, Linear::Matrix &dQdx)
Populates the device's Jacobian object with these pointers.
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
void registerBranchDataLIDs(const std::vector< int > &branchLIDVecRef)
Register the local store IDs.
static std::vector< std::vector< int > > jacStampPDE
const SolverState & solverState_
double * fBraEquPosNodePtr
double * fPosEquBraVarPtr
Class Configuration contains device configuration data.
virtual void setRealFlag(bool flag)
std::vector< Instance * > instanceContainer
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
const SolverState & getSolverState() const
double * nextLeadCurrFCompRawPtr
static std::vector< std::vector< int > > jacStamp
void setNumBranchDataVars(int num_branch_data_vars)
double * daeBVectorRawPtr
#define Xyce_NONPOINTER_MATRIX_LOAD
virtual bool updateSource()=0
SourceData * dcSourceData_
int li_branch_data
Index for Lead Current and junction voltage (for power calculations)
double getMaxTimeStepSize()
double scale_src
scaling for source loads
static void loadModelParameters(ParametricData< Model > &model_parameters)
const ExternData & extData
ModelBlock represents a .MODEL line from the netlist.
Manages parameter binding for class C.
InstanceBlock represent a device instance line from the netlist.
std::vector< Param > params
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
virtual void setParams(double *)
static dcVsrcSensitivity dcv0Sens
const std::vector< std::vector< int > > & jacobianStamp() const
bool updatePrimaryState()
Instance(const Configuration &configuration, const InstanceBlock &IB, Model &Viter, const FactoryBlock &factory_block)
bool updateIntermediateVars()
int getNumBranchDataVars() const
const SolverState & getSolverState() const
Returns the solver state given during device construction.
double * nextSolVectorRawPtr
void registerStateLIDs(const std::vector< int > &staLIDVecRef)