46 #ifndef Xyce_N_DEV_MOSFET_B3_h
47 #define Xyce_N_DEV_MOSFET_B3_h
70 static const char *
name() {
return "BSIM3";}
261 void registerLIDs(
const std::vector<int> & intLIDVecRef,
262 const std::vector<int> & extLIDVecRef );
268 const std::vector< std::vector<int> > &
jacobianStamp()
const;
269 void registerJacLIDs(
const std::vector< std::vector<int> > & jacLIDVec );
769 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
922 static std::vector< std::vector<int> >
jacMap2;
1501 virtual bool updateState (
double * solVec,
double * staVec,
double * stoVec);
1504 virtual bool loadDAEVectors (
double * solVec,
double * fVec,
double * qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ,
double * leadF,
double * leadQ,
double * junctionV);
1507 virtual bool loadDAEMatrices (Linear::Matrix & dFdx, Linear::Matrix & dQdx);
Instance(const Configuration &configuration, const InstanceBlock &IB, Model &Miter, const FactoryBlock &factory_block)
double * q_GateEquDrainPrimeNodePtr
static const char * name()
double jctSidewallSatCurDensity
int ASourcePrimeEquChargeVarOffset
double unitAreaJctCapTemp
double * q_SourcePrimeEquSourcePrimeNodePtr
int ASourcePrimeEquBulkNodeOffset
double * q_GateEquChargeVarPtr
std::vector< int > jacSpecialMap
double * f_BulkEquSourcePrimeNodePtr
double * f_SourceEquIgsPtr
static std::vector< std::vector< int > > jacMap2
double * q_DrainPrimeEquSourcePrimeNodePtr
double unitLengthGateSidewallJctCapTemp
double * q_SourcePrimeEquGateNodePtr
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
int AChargeEquBulkNodeOffset
double * q_BulkEquBulkNodePtr
void registerStoreLIDs(const std::vector< int > &stoLIDVecRef)
int AChargeEquChargeVarOffset
static std::vector< int > jacMap_DC
double * f_SourceEquSourcePrimeNodePtr
int ABulkEquChargeVarOffset
Pure virtual class to augment a linear system.
double StrongInversionNoiseEval(double Vds, double freq, double temp)
double * q_BulkEquChargeVarPtr
bool setupCapacitors_oldDAE()
std::list< SizeDependParam * > sizeDependParamList
int ADrainPrimeEquBulkNodeOffset
std::vector< int > jacSpecialMergedMap
int ASourcePrimeEquDrainPrimeNodeOffset
double unitLengthSidewallJctCapTemp
double * q_SourceEquSourcePrimeNodePtr
double * f_DrainPrimeEquSourcePrimeNodePtr
static std::vector< std::vector< int > > jacMap2_DC_SC
double * f_icVGSEquIgsPtr
double * q_SourceEquIdsPtr
static std::vector< int > jacMap_SC
double * f_SourcePrimeEquChargeVarPtr
SizeDependParam * paramPtr
int ABulkEquSourcePrimeNodeOffset
double * q_DrainPrimeEquDrainPrimeNodePtr
bool clearTemperatureData()
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
int AChargeEquSourcePrimeNodeOffset
double * q_icVBSEquIbsPtr
bool updateTemperatureCalled_
std::vector< Instance * > instanceContainer
int ADrainEquDrainPrimeNodeOffset
double * q_icVDSEquIdsPtr
int AGateEquBulkNodeOffset
double * f_SourceEquIbsPtr
int ASourceEquSourceNodeOffset
double * f_DrainPrimeEquChargeVarPtr
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
Model & model_
Owning model.
static void loadModelParameters(ParametricData< Model > &model_parameters)
double * f_ChargeEquBulkNodePtr
double * f_SourcePrimeEquGateNodePtr
void getNoiseSources(Xyce::Analysis::NoiseData &noiseData)
void setupNoiseSources(Xyce::Analysis::NoiseData &noiseData)
Model & operator=(const Model &)
double * q_DrainPrimeEquChargeVarPtr
double sidewallJctPotential
static std::vector< std::vector< int > > jacStamp_DC_SC
double * q_SourceEquIgsPtr
int ADrainPrimeEquSourcePrimeNodeOffset
double * f_BulkEquChargeVarPtr
DeviceMaster instantiates a device as described by the device traits T.
double * f_GateEquChargeVarPtr
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
std::vector< Instance * > InstanceVector
double * q_DrainEquIdsPtr
double unitLengthGateSidewallJctCap
int ADrainPrimeEquDrainNodeOffset
double * q_ChargeEquChargeVarPtr
double bulkJctGateSideGradingCoeff
double * f_SourceEquSourceNodePtr
virtual std::ostream & printOutInstances(std::ostream &os) const
int AChargeEquDrainPrimeNodeOffset
double * f_GateEquGateNodePtr
double * f_DrainPrimeEquBulkNodePtr
double * f_ChargeEquChargeVarPtr
bool updateTemperature(const double &temp_tmp)
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
double * q_BulkEquDrainPrimeNodePtr
bool updatePrimaryState()
void addInstance(Instance *instance)
const std::vector< std::vector< int > > & jacobianStamp() const
double referenceTemperature
bool setupCapacitors_newDAE()
bool processInstanceParams()
processInstanceParams
The Device class is an interface for device implementations.
bool updateIntermediateVars()
double * f_icVBSEquIbsPtr
int AChargeEquGateNodeOffset
int ASourcePrimeEquGateNodeOffset
static bool modelRequired()
double jctTempSatCurDensity
int ASourceEquSourcePrimeNodeOffset
double * q_DrainPrimeEquBulkNodePtr
Instance & operator=(const Instance &)
int ADrainPrimeEquChargeVarOffset
double bulkJctSideGradingCoeff
double GatesidewallJctPotential
double * f_GateEquBulkNodePtr
static std::vector< std::vector< int > > jacMap2_SC
double * f_SourceEquIdsPtr
double * q_ChargeEquSourcePrimeNodePtr
double * q_DrainEquDrainPrimeNodePtr
std::vector< std::vector< int > > jacSpecialMap2
int ABulkEquDrainPrimeNodeOffset
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
Class Configuration contains device configuration data.
bool processParams()
processParams
std::vector< std::vector< int > > jacSpecialMergedMap2
double * f_SourcePrimeEquBulkNodePtr
double * f_DrainEquIdsPtr
double * q_BulkEquGateNodePtr
double * f_ChargeEquGateNodePtr
double * q_SourceEquSourceNodePtr
int ABulkEquBulkNodeOffset
static std::vector< int > jacMap
double * f_SourcePrimeEquSourcePrimeNodePtr
double * q_DrainEquDrainNodePtr
double * f_GateEquSourcePrimeNodePtr
double * q_SourcePrimeEquDrainPrimeNodePtr
double * q_SourceEquIbsPtr
double unitLengthSidewallJctCap
double * q_DrainPrimeEquGateNodePtr
double * q_BulkEquSourcePrimeNodePtr
int ABulkEquGateNodeOffset
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.
double * f_DrainEquDrainNodePtr
double * q_ChargeEquDrainPrimeNodePtr
std::vector< std::vector< int > > jacStampSpecial
std::vector< std::vector< int > > jacStampSpecialMerged
int ADrainEquDrainNodeOffset
double jctSidewallTempSatCurDensity
double * f_BulkEquBulkNodePtr
double * q_icVGSEquIgsPtr
bool ChargeComputationNeeded
Master(const Configuration &configuration, const FactoryBlock &factory_block, const SolverState &ss1, const DeviceOptions &do1)
double * q_ChargeEquGateNodePtr
double * q_SourcePrimeEquBulkNodePtr
double * q_DrainPrimeEquDrainNodePtr
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
int AGateEquSourcePrimeNodeOffset
double * f_BulkEquDrainPrimeNodePtr
static std::vector< std::vector< int > > jacStamp_SC
double * q_ChargeEquBulkNodePtr
static bool isLinearDevice()
static std::vector< int > jacMap_DC_SC
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
double * f_GateEquDrainPrimeNodePtr
double * f_SourcePrimeEquDrainPrimeNodePtr
double * q_SourcePrimeEquChargeVarPtr
int ASourcePrimeEquSourceNodeOffset
static std::vector< std::vector< int > > jacStamp_DC
ModelBlock represents a .MODEL line from the netlist.
static std::vector< std::vector< int > > jacStamp
The DeviceTraits template describes the configuration of a device.
double * f_BulkEquGateNodePtr
Manages parameter binding for class C.
int getNumNoiseSources() const
double * q_GateEquBulkNodePtr
InstanceBlock represent a device instance line from the netlist.
int AGateEquGateNodeOffset
double * q_GateEquGateNodePtr
int ADrainPrimeEquGateNodeOffset
virtual bool loadDAEMatrices(Linear::Matrix &dFdx, Linear::Matrix &dQdx)
Populates the device's Jacobian object with these pointers.
static std::vector< std::vector< int > > jacMap2_DC
double * f_DrainPrimeEquGateNodePtr
double * f_SourcePrimeEquSourceNodePtr
double bulkJctBotGradingCoeff
bool auxChargeCalculations()
int AGateEquChargeVarOffset
static const char * deviceTypeName()
double * f_ChargeEquDrainPrimeNodePtr
int AGateEquDrainPrimeNodeOffset
double * f_ChargeEquSourcePrimeNodePtr
double * f_DrainPrimeEquDrainNodePtr
int ASourcePrimeEquSourcePrimeNodeOffset
double * q_SourcePrimeEquSourceNodePtr
double * f_DrainPrimeEquDrainPrimeNodePtr
double * f_DrainEquDrainPrimeNodePtr
int ADrainPrimeEquDrainPrimeNodeOffset
double * f_icVDSEquIdsPtr
double * q_GateEquSourcePrimeNodePtr