46 #ifndef Xyce_N_DEV_Synapse_h
47 #define Xyce_N_DEV_Synapse_h
68 static const char *
name() {
return "Synapse";}
123 void registerLIDs(
const std::vector<int> & intLIDVecRef,
124 const std::vector<int> & extLIDVecRef );
137 const std::vector< std::vector<int> > &
jacobianStamp()
const;
138 void registerJacLIDs(
const std::vector< std::vector<int> > & jacLIDVec );
271 virtual bool updateState (
double * solVec,
double * staVec,
double * stoVec);
282 template <
typename ScalarT>
283 static ScalarT
Tsyn(
const ScalarT V,
const ScalarT Tmax,
const ScalarT Vthres,
const ScalarT Kp)
285 ScalarT result = Tmax / (1.0 + std::exp( -(V - Vthres) / Kp ) );
289 template <
typename ScalarT>
290 static ScalarT
PostCurrentEqu(
const ScalarT Vpost,
const ScalarT r,
const ScalarT g,
const ScalarT Erev)
292 ScalarT result = g * r * (Vpost - Erev);
296 template <
typename ScalarT>
297 static ScalarT
rEquF(
const ScalarT V,
const ScalarT r,
const ScalarT alpha,
const ScalarT beta,
298 const ScalarT Tmax,
const ScalarT Vthres,
const ScalarT Kp)
300 ScalarT result = alpha * Tsyn< ScalarT >(V, Tmax, Vthres, Kp) * (1.0 - r) - beta * r;
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
bool updateTemperature(const double &temp_tmp)
virtual bool updateSecondaryState(double *staDeriv, double *stoVec)
Updates the devices secondary state information.
Instance & operator=(const Instance &)
double * f_REquPostNodePtr
static const char * deviceTypeName()
double * f_PostEquPostNodePtr
Pure virtual class to augment a linear system.
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
bool updateIntermediateVars()
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
bool updatePrimaryState()
std::vector< Instance * > InstanceVector
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
double * f_PostEquRNodePtr
DeviceMaster instantiates a device as described by the device traits T.
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
Instance(const Configuration &configuration, const InstanceBlock &IB, Model &Riter, const FactoryBlock &factory_block)
static ScalarT Tsyn(const ScalarT V, const ScalarT Tmax, const ScalarT Vthres, const ScalarT Kp)
std::vector< Instance * > instanceContainer
void addInstance(Instance *instance)
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
static std::vector< std::vector< int > > jacStamp
The Device class is an interface for device implementations.
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
Model & operator=(const Model &)
static ScalarT rEquF(const ScalarT V, const ScalarT r, const ScalarT alpha, const ScalarT beta, const ScalarT Tmax, const ScalarT Vthres, const ScalarT Kp)
Class Configuration contains device configuration data.
bool processInstanceParams()
processInstanceParams
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
static ScalarT PostCurrentEqu(const ScalarT Vpost, const ScalarT r, const ScalarT g, const ScalarT Erev)
bool processParams()
processParams
static const char * name()
static void loadModelParameters(ParametricData< Model > &model_parameters)
const std::vector< std::vector< int > > & jacobianStamp() const
static bool isLinearDevice()
Master(const Configuration &configuration, const FactoryBlock &factory_block, const SolverState &ss1, const DeviceOptions &do1)
virtual std::ostream & printOutInstances(std::ostream &os) const
ModelBlock represents a .MODEL line from the netlist.
The DeviceTraits template describes the configuration of a device.
Manages parameter binding for class C.
int APostEquPostNodeOffset
InstanceBlock represent a device instance line from the netlist.
bool updateSecondaryState()