46 #include <Xyce_config.h>
61 #include <N_ERH_ErrorMgr.h>
65 #include <N_LAS_Matrix.h>
66 #include <N_LAS_Vector.h>
67 #include <N_UTL_FeatureTest.h>
88 .setDescription(
"Maximal Synaptic Conductance");
92 .setDescription(
"Reversal Potential");
96 .setDescription(
"Forward rate constant for receptor opening");
100 .setDescription(
"Backward rate constant for receptor opening");
104 .setDescription(
"Presynaptic voltage that activates postsynaptic current");
107 .setDescription(
"Maximal neurotransmitter concentration");
147 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
151 APostEquPostNodeOffset(-1),
152 APostEquRNodeOffset(-1),
153 AREquPostNodeOffset(-1),
154 AREquRNodeOffset(-1),
155 f_PostEquPostNodePtr(0),
156 f_PostEquRNodePtr(0),
157 f_REquPostNodePtr(0),
216 const std::vector<int> & extLIDVecRef )
221 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
223 Xyce::dout() << std::endl << section_divider << std::endl;
224 Xyce::dout() <<
" SynapseInstance::registerLIDs" << std::endl;
225 Xyce::dout() <<
" name = " <<
getName() << std::endl;
235 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
237 Xyce::dout() <<
" li_Prev = " <<
li_Prev << std::endl;
238 Xyce::dout() <<
" li_Post = " <<
li_Post << std::endl;
243 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
245 Xyce::dout() << section_divider << std::endl;
316 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
335 bool bsuccess =
true;
351 double vPre = (*solVecPtr)[
li_Prev];
352 double vPost = (*solVecPtr)[
li_Post];
353 double rVar = (*solVecPtr)[
li_rVar];
357 Sacado::Fad::SFad<double,2> vPostVar( 2, 0, vPost );
358 Sacado::Fad::SFad<double,2> rVarS( 2, 1, rVar);
361 Sacado::Fad::SFad<double,2> gMaxVar(
model_.
gMax );
362 Sacado::Fad::SFad<double,2> eRevVar(
model_.
eRev );
364 Sacado::Fad::SFad<double,2> resultFad;
366 ipost = resultFad.val();
368 didr = resultFad.dx(1);
371 Sacado::Fad::SFad<double,2> vPreVar( 2, 0, vPre );
372 Sacado::Fad::SFad<double,2> rVarS( 2, 1, rVar);
375 Sacado::Fad::SFad<double,2> alphaVar(
model_.
alpha );
376 Sacado::Fad::SFad<double,2> betaVar(
model_.
beta );
377 Sacado::Fad::SFad<double,2> tMaxVar(
model_.
tMax );
378 Sacado::Fad::SFad<double,2> vPVar(
model_.
vP );
380 Sacado::Fad::SFad<double,2> resultFad;
381 resultFad =
rEquF( vPreVar, rVarS, alphaVar, betaVar, tMaxVar, vPVar);
382 rFval = resultFad.val();
384 drFdr = resultFad.dx(1);
437 double rVar = (*solVecPtr)[
li_rVar];
531 bool bsuccess =
true;
560 std::vector<Instance*>::iterator iter;
564 for (iter=first; iter!=last; ++iter)
566 (*iter)->processParams();
584 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
620 std::vector<Instance*>::iterator iter;
624 for (iter=first; iter!=last; ++iter)
640 std::vector<Instance*>::const_iterator iter;
647 os <<
"Number of Synapse2 Instances: " << isize << std::endl;
648 os <<
" name model name Parameters" << std::endl;
649 for (i=0, iter=first; iter!=last; ++iter, ++i)
651 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
676 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
695 (*it)->updateIntermediateVars();
723 .registerDevice(
"synapse", 2)
724 .registerModelType(
"synapse", 2);
const InstanceName & getName() const
bool updateDependentParameters()
const DeviceOptions & deviceOptions_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
Linear::Vector * nextSolVectorPtr
int APostEquPostNodeOffset
bool processParams()
processParams
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)
std::vector< Instance * > instanceContainer
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
double * f_PostEquPostNodePtr
double * f_PostEquRNodePtr
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
InstanceVector::const_iterator getInstanceEnd() const
Returns an iterator to the ending of the vector of all instances created for this device...
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
static ScalarT PostCurrentEqu(const ScalarT Vpost, const ScalarT r, const ScalarT g, const ScalarT Erev)
void registerStateLIDs(const std::vector< int > &staLIDVecRef)
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.
Instance(const Configuration &configuration, const InstanceBlock &IB, Model &Riter, const FactoryBlock &factory_block)
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...
bool processInstanceParams()
processInstanceParams
static ScalarT rEquF(const ScalarT V, const ScalarT r, const ScalarT alpha, const ScalarT beta, const ScalarT Tmax, const ScalarT Vthres)
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
Linear::Matrix * dFdxMatrixPtr
The Device class is an interface for device implementations.
virtual bool updateSecondaryState(double *staDeriv, double *stoVec)
Updates the devices secondary state information.
virtual std::ostream & printOutInstances(std::ostream &os) const
const SolverState & solverState_
Class Configuration contains device configuration data.
static std::vector< std::vector< int > > jacStamp
const SolverState & getSolverState() const
bool updateSecondaryState()
double * f_REquPostNodePtr
Linear::Vector * daeFVectorPtr
bool updatePrimaryState()
static void loadModelParameters(ParametricData< Model > &model_parameters)
const ExternData & extData
bool updateIntermediateVars()
ModelBlock represents a .MODEL line from the netlist.
const std::vector< std::vector< int > > & jacobianStamp() const
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.
Linear::Matrix * dQdxMatrixPtr
bool updateTemperature(const double &temp_tmp)
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
void setModParams(const std::vector< Param > ¶ms)