46 #include <Xyce_config.h>
59 #include <N_ERH_ErrorMgr.h>
61 #include <N_LAS_Vector.h>
62 #include <N_LAS_Matrix.h>
63 #include <N_UTL_FeatureTest.h>
73 .setOriginalValueStored(
true)
75 .setDescription(
"DC Current");
80 .setDescription(
"Offset Current");
84 .setDescription(
"Initial Current");
88 .setDescription(
"Pulsed Current");
92 .setDescription(
"Delay");
96 .setDescription(
"Rise Time");
100 .setDescription(
"Fall Time");
104 .setDescription(
"Pulse Width");
108 .setDescription(
"Period");
111 .setDescription(
"Scale Factor -- smooth pulse only");
116 .setDescription(
"Amplitude");
120 .setDescription(
"Frequency");
123 .setDescription(
"Theta");
126 .setDescription(
"Phase");
131 .setDescription(
"Rise Delay Time");
135 .setDescription(
"Rise Time Constant");
139 .setDescription(
"Fall Delay Time");
143 .setDescription(
"Fall Time Constant");
148 .setDescription(
"Amplitude");
151 .setDescription(
"Phase");
156 .setDescription(
"Carrier Frequency");
160 .setDescription(
"Signal Frequency");
163 .setDescription(
"Modulation Index");
168 .setDescription(
"Repeat Time");
172 .setDescription(
"Time");
176 .setDescription(
"Current");
211 :
SourceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
234 TRANSIENTSOURCETYPEgiven(false),
236 ACSOURCETYPEgiven(false),
238 DCSOURCETYPEgiven(false),
389 const std::vector<int> & extLIDVecRef)
394 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
396 Xyce::dout() << std::endl << section_divider << std::endl;
397 Xyce::dout() <<
" ISRCInstance::registerLIDs" << std::endl;
398 Xyce::dout() <<
" name = " <<
getName() << std::endl;
411 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
413 Xyce::dout() <<
" li_Pos = " <<
li_Pos << std::endl;
414 Xyce::dout() <<
" li_Neg = " <<
li_Neg << std::endl;
415 Xyce::dout() << section_divider << std::endl;
538 bVecReal[
li_Pos] -= source;
539 bVecReal[
li_Neg] += source;
547 bVecImag[
li_Pos] -= source;
548 bVecImag[
li_Neg] += source;
593 bool bsuccess =
true;
642 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
657 std::vector<Instance*>::iterator iter;
661 for (iter=first; iter!=last; ++iter)
693 std::vector<Instance*>::iterator iter;
697 for (iter=first; iter!=last; ++iter)
699 (*iter)->processParams();
717 std::vector<Instance*>::const_iterator iter;
723 os <<
" name modelName Parameters" << std::endl;
724 for (i=0, iter=first; iter!=last; ++iter, ++i)
726 os <<
" " << i <<
": " << (*iter)->getName() <<
" ";
729 if ( (*iter)->tranSourceData_ != 0 )
731 (*iter)->tranSourceData_->printOutParams ();
734 if ( (*iter)->dcSourceData_ != 0 )
736 (*iter)->dcSourceData_->printOutParams ();
739 if ( (*iter)->acSourceData_ != 0 )
741 (*iter)->acSourceData_->printOutParams ();
766 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
795 bool Master::loadDAEVectors (
double * solVec,
double * fVec,
double *qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ,
double * leadF,
double * leadQ,
double * junctionV)
813 bVec[inst.
li_Pos] -= source;
814 bVec[inst.
li_Neg] += source;
850 .registerDevice(
"i", 1);
const InstanceName & getName() const
virtual bool processParams()
processParams
bool updateDependentParameters()
virtual bool loadDAEMatrices(Linear::Matrix &dFdx, Linear::Matrix &dQdx)
Populates the device's Jacobian object with these pointers.
const SolverState & solverState_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
void registerBranchDataLIDs(const std::vector< int > &branchLIDVecRef)
Register the local store IDs.
Pure virtual class to augment a linear system.
static void loadModelParameters(ParametricData< Model > &model_parameters)
Instance(const Configuration &configuration, const InstanceBlock &instance_block, Model &model, const FactoryBlock &factory_block)
bool updatePrimaryState()
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...
int li_branch_data
Index for lead current and junction voltage (for power calculations)
double * nextJunctionVCompRawPtr
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
int getNumStoreVars() const
InstanceVector::const_iterator getInstanceBegin() const
Returns an iterator to the beginning of the vector of all instances created for this device...
bool TRANSIENTSOURCETYPEgiven
void setParams(const std::vector< Param > ¶ms)
const std::string & getName() const
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
const DeviceOptions & getDeviceOptions() const
SourceData * tranSourceData_
double * nextStoVectorRawPtr
bool loadBVectorsforAC(double *bVecReal, double *bVecImag)
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
virtual std::ostream & printOutInstances(std::ostream &os) const
const DeviceOptions & deviceOptions_
int numBranchDataVarsIfAllocated
virtual void getParams(double *)
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
SourceData * acSourceData_
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
The Device class is an interface for device implementations.
void addStoreNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
static std::vector< std::vector< int > > jacStamp
Class Configuration contains device configuration data.
std::vector< Instance * > instanceContainer
virtual void setRealFlag(bool flag)
void registerStoreLIDs(const std::vector< int > &stoLIDVecRef)
const SolverState & getSolverState() const
double * nextLeadCurrFCompRawPtr
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
virtual bool processInstanceParams()
processInstanceParams
void setNumBranchDataVars(int num_branch_data_vars)
double * daeBVectorRawPtr
virtual bool updateSource()=0
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.
SourceData * dcSourceData_
virtual void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
const std::vector< std::vector< int > > & jacobianStamp() const
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
virtual void setParams(double *)
int getNumBranchDataVars() const
const SolverState & getSolverState() const
Returns the solver state given during device construction.
double * nextSolVectorRawPtr
int numLeadCurrentStoreVars