46 #include <Xyce_config.h>
61 #include <N_ERH_ErrorMgr.h>
63 #include <N_LAS_Matrix.h>
64 #include <N_LAS_Vector.h>
65 #include <N_UTL_FeatureTest.h>
83 .setDescription(
"Maximal Synaptic Conductance");
87 .setDescription(
"Reversal Potential");
91 .setDescription(
"Forward rate constant for receptor opening");
95 .setDescription(
"Backward rate constant for receptor opening");
99 .setDescription(
"Presynaptic voltage at which neurotransmitter concentration is half-maximal");
104 .setDescription(
"Steepness parameter for neurotransmitter concentration");
107 .setDescription(
"Maximal neurotransmitter concentration");
148 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
152 APostEquPostNodeOffset(-1),
153 APostEquRNodeOffset(-1),
154 AREquPostNodeOffset(-1),
155 AREquRNodeOffset(-1),
156 f_PostEquPostNodePtr(0),
157 f_PostEquRNodePtr(0),
158 f_REquPostNodePtr(0),
215 const std::vector<int> & extLIDVecRef )
220 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
222 Xyce::dout() << std::endl << section_divider << std::endl;
223 Xyce::dout() <<
" SynapseInstance::registerLIDs" << std::endl;
224 Xyce::dout() <<
" name = " <<
getName() << std::endl;
234 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
236 Xyce::dout() <<
" li_Prev = " <<
li_Prev << std::endl;
237 Xyce::dout() <<
" li_Post = " <<
li_Post << std::endl;
242 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
244 Xyce::dout() << section_divider << std::endl;
315 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
334 bool bsuccess =
true;
338 double vPre = (*solVecPtr)[
li_Prev];
339 double vPost = (*solVecPtr)[
li_Post];
340 double rVar = (*solVecPtr)[
li_rVar];
344 Sacado::Fad::SFad<double,2> vPostVar( 2, 0, vPost );
345 Sacado::Fad::SFad<double,2> rVarS( 2, 1, rVar);
348 Sacado::Fad::SFad<double,2> gMaxVar(
model_.
gMax );
349 Sacado::Fad::SFad<double,2> eRevVar(
model_.
eRev );
351 Sacado::Fad::SFad<double,2> resultFad;
353 ipost = resultFad.val();
355 didr = resultFad.dx(1);
358 Sacado::Fad::SFad<double,2> vPreVar( 2, 0, vPre );
359 Sacado::Fad::SFad<double,2> rVarS( 2, 1, rVar);
362 Sacado::Fad::SFad<double,2> alphaVar(
model_.
alpha );
363 Sacado::Fad::SFad<double,2> betaVar(
model_.
beta );
364 Sacado::Fad::SFad<double,2> tMaxVar(
model_.
tMax );
365 Sacado::Fad::SFad<double,2> vPVar(
model_.
vP );
366 Sacado::Fad::SFad<double,2> kPVar(
model_.
kP );
368 Sacado::Fad::SFad<double,2> resultFad;
369 resultFad =
rEquF( vPreVar, rVarS, alphaVar, betaVar, tMaxVar, vPVar, kPVar);
370 rFval = resultFad.val();
372 drFdr = resultFad.dx(1);
423 double rVar = (*solVecPtr)[
li_rVar];
500 bool bsuccess =
true;
531 std::vector<Instance*>::iterator iter;
535 for (iter=first; iter!=last; ++iter)
537 (*iter)->processParams();
555 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
590 std::vector<Instance*>::iterator iter;
594 for (iter=first; iter!=last; ++iter)
610 std::vector<Instance*>::const_iterator iter;
617 os <<
"Number of Synapse Instances: " << isize << std::endl;
618 os <<
" name model name Parameters" << std::endl;
619 for (i=0, iter=first; iter!=last; ++iter, ++i)
621 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
646 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
665 (*it)->updateIntermediateVars();
693 .registerDevice(
"synapse", 1)
694 .registerModelType(
"synapse", 1);
const InstanceName & getName() const
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.
bool updateDependentParameters()
double * f_REquPostNodePtr
const DeviceOptions & deviceOptions_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
double * f_PostEquPostNodePtr
Linear::Vector * nextSolVectorPtr
Linear::Vector * daeQVectorPtr
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 registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
bool updateIntermediateVars()
InstanceVector::const_iterator getInstanceEnd() const
Returns an iterator to the ending of the vector of all instances created for this device...
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
bool updatePrimaryState()
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
InstanceVector::const_iterator getInstanceBegin() const
Returns an iterator to the beginning of the vector of all instances created for this device...
std::vector< Param > params
Parameters from the line.
double * f_PostEquRNodePtr
void setParams(const std::vector< Param > ¶ms)
const std::string & getName() const
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)
std::vector< Instance * > instanceContainer
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
Linear::Matrix * dFdxMatrixPtr
static std::vector< std::vector< int > > jacStamp
The Device class is an interface for device implementations.
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
static ScalarT rEquF(const ScalarT V, const ScalarT r, const ScalarT alpha, const ScalarT beta, const ScalarT Tmax, const ScalarT Vthres, const ScalarT Kp)
const SolverState & solverState_
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 void loadModelParameters(ParametricData< Model > &model_parameters)
Linear::Vector * daeFVectorPtr
const std::vector< std::vector< int > > & jacobianStamp() const
virtual std::ostream & printOutInstances(std::ostream &os) const
const ExternData & extData
ModelBlock represents a .MODEL line from the netlist.
Manages parameter binding for class C.
int APostEquPostNodeOffset
InstanceBlock represent a device instance line from the netlist.
std::vector< Param > params
Linear::Matrix * dQdxMatrixPtr
bool updateSecondaryState()
void setModParams(const std::vector< Param > ¶ms)