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");
144 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
148 APostEquPostNodeOffset(-1),
149 APostEquRNodeOffset(-1),
150 AREquPostNodeOffset(-1),
151 AREquRNodeOffset(-1),
152 f_PostEquPostNodePtr(0),
153 f_PostEquRNodePtr(0),
154 f_REquPostNodePtr(0),
211 const std::vector<int> & extLIDVecRef )
216 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
218 Xyce::dout() << std::endl << section_divider << std::endl;
219 Xyce::dout() <<
" SynapseInstance::registerLIDs" << std::endl;
220 Xyce::dout() <<
" name = " <<
getName() << std::endl;
230 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
232 Xyce::dout() <<
" li_Prev = " <<
li_Prev << std::endl;
233 Xyce::dout() <<
" li_Post = " <<
li_Post << std::endl;
238 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) )
240 Xyce::dout() << section_divider << std::endl;
311 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
330 bool bsuccess =
true;
346 double vPre = (*solVecPtr)[
li_Prev];
347 double vPost = (*solVecPtr)[
li_Post];
348 double rVar = (*solVecPtr)[
li_rVar];
352 Sacado::Fad::SFad<double,2> vPostVar( 2, 0, vPost );
353 Sacado::Fad::SFad<double,2> rVarS( 2, 1, rVar);
356 Sacado::Fad::SFad<double,2> gMaxVar(
model_.
gMax );
357 Sacado::Fad::SFad<double,2> eRevVar(
model_.
eRev );
359 Sacado::Fad::SFad<double,2> resultFad;
361 ipost = resultFad.val();
363 didr = resultFad.dx(1);
366 Sacado::Fad::SFad<double,2> vPreVar( 2, 0, vPre );
367 Sacado::Fad::SFad<double,2> rVarS( 2, 1, rVar);
370 Sacado::Fad::SFad<double,2> alphaVar(
model_.
alpha );
371 Sacado::Fad::SFad<double,2> betaVar(
model_.
beta );
372 Sacado::Fad::SFad<double,2> tMaxVar(
model_.
tMax );
373 Sacado::Fad::SFad<double,2> vPVar(
model_.
vP );
375 Sacado::Fad::SFad<double,2> resultFad;
376 resultFad =
rEquF( vPreVar, rVarS, alphaVar, betaVar, tMaxVar, vPVar);
377 rFval = resultFad.val();
379 drFdr = resultFad.dx(1);
432 double rVar = (*solVecPtr)[
li_rVar];
526 bool bsuccess =
true;
555 std::vector<Instance*>::iterator iter;
559 for (iter=first; iter!=last; ++iter)
561 (*iter)->processParams();
579 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
615 std::vector<Instance*>::iterator iter;
619 for (iter=first; iter!=last; ++iter)
635 std::vector<Instance*>::const_iterator iter;
642 os <<
"Number of Synapse2 Instances: " << isize << std::endl;
643 os <<
" name model name Parameters" << std::endl;
644 for (i=0, iter=first; iter!=last; ++iter, ++i)
646 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
671 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
690 (*it)->updateIntermediateVars();
718 .registerDevice(
"synapse", 2)
719 .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)