46 #ifndef Xyce_N_DEV_Neuron9_h
47 #define Xyce_N_DEV_Neuron9_h
73 static const char *
name() {
return "Neuron";}
117 void registerLIDs(
const std::vector<int> & intLIDVecRef,
118 const std::vector<int> & extLIDVecRef );
123 const std::vector< std::vector<int> > &
jacobianStamp()
const;
124 void registerJacLIDs(
const std::vector< std::vector<int> > & jacLIDVec );
134 void varTypes( std::vector<char> & varTypeVec );
162 template <
typename ScalarT>
163 static ScalarT
alphaN(
const ScalarT & Vn1,
const ScalarT & Vn2,
const ScalarT & Vrest)
165 ScalarT vDiff = 1000.0 * (Vn1 - Vn2);
167 r = 0.032*(15.0 - vDiff +
VT)/( std::exp( (15.0 - vDiff +
VT)/5.0) - 1.0);
172 template <
typename ScalarT>
173 static ScalarT
betaN(
const ScalarT & Vn1,
const ScalarT & Vn2,
const ScalarT & Vrest)
175 ScalarT vDiff = 1000.0 * (Vn1 - Vn2);
177 r = 0.5*( std::exp( (10.0 - vDiff +
VT)/40.0) );
183 template <
typename ScalarT>
184 static ScalarT
alphaM(
const ScalarT & Vn1,
const ScalarT & Vn2,
const ScalarT & Vrest)
186 ScalarT vDiff = 1000.0 * (Vn1 - Vn2);
188 r = 0.32*(13.0 - vDiff +
VT )/( std::exp((13.0 - vDiff +
VT )/4.0) - 1.0);
193 template <
typename ScalarT>
194 static ScalarT
betaM(
const ScalarT & Vn1,
const ScalarT & Vn2,
const ScalarT & Vrest)
196 ScalarT vDiff = 1000.0 * (Vn1 - Vn2);
198 r = 0.28*(vDiff -
VT - 40.0)/( std::exp((vDiff -
VT - 40.0)/5.0) - 1.0);
203 template <
typename ScalarT>
204 static ScalarT
alphaH(
const ScalarT & Vn1,
const ScalarT & Vn2,
const ScalarT & Vrest)
206 ScalarT vDiff = 1000.0 * (Vn1 - Vn2);
208 r = 0.128 * std::exp( (17.0 - vDiff +
VT)/18.0 );
213 template <
typename ScalarT>
214 static ScalarT
betaH(
const ScalarT & Vn1,
const ScalarT & Vn2,
const ScalarT & Vrest)
216 ScalarT vDiff = 1000.0 * (Vn1 - Vn2);
218 r = 4.0/( 1.0 + std::exp( (40.0 - vDiff +
VT)/5.0) );
225 template <
typename ScalarT>
226 static ScalarT
kcl1EquF(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& n,
const ScalarT& m,
const ScalarT& h,
227 const ScalarT& memG,
const ScalarT& leakE,
const ScalarT& Kg,
const ScalarT& Ke,
const ScalarT& NaG,
const ScalarT& NaE )
229 ScalarT powN = n * n * n * n;
230 ScalarT powM = m * m * m;
231 ScalarT r = memG * (Vn1 - Vn2 - leakE) + Kg * powN * (Vn1 - Vn2 - Ke ) + NaG * powM * h * (Vn1 - Vn2 - NaE );
235 template <
typename ScalarT>
236 static ScalarT
kcl1EquQ(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& memC )
238 ScalarT r = memC * (Vn1 - Vn2);
243 template <
typename ScalarT>
244 static ScalarT
kcl2EquF(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& n,
const ScalarT& m,
const ScalarT& h,
245 const ScalarT& memG,
const ScalarT& leakE,
const ScalarT& Kg,
const ScalarT& Ke,
const ScalarT& NaG,
const ScalarT& NaE )
247 ScalarT powN = n * n * n * n;
248 ScalarT powM = m * m * m;
249 ScalarT r = -1.0*(memG * (Vn1 - Vn2 - leakE) + Kg * powN * (Vn1 - Vn2 - Ke ) + NaG * powM * h * (Vn1 - Vn2 - NaE ));
253 template <
typename ScalarT>
254 static ScalarT
kcl2EquQ(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& memC )
256 ScalarT r = -1.0 * memC * (Vn1 - Vn2);
261 template <
typename ScalarT>
262 static ScalarT
nEquF(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& n,
const ScalarT& Vrest )
264 ScalarT r = alphaN<ScalarT>( Vn1, Vn2, Vrest ) * (1.0 - n ) - betaN<ScalarT>( Vn1, Vn2, Vrest ) * n;
268 template <
typename ScalarT>
269 static ScalarT
nEquQ(
const ScalarT& n )
276 template <
typename ScalarT>
277 static ScalarT
mEquF(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& m,
const ScalarT& Vrest )
279 ScalarT r = alphaM<ScalarT>( Vn1, Vn2, Vrest ) * (1.0 - m ) - betaM<ScalarT>( Vn1, Vn2, Vrest ) * m;
283 template <
typename ScalarT>
284 static ScalarT
mEquQ(
const ScalarT& m )
291 template <
typename ScalarT>
292 static ScalarT
hEquF(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& h,
const ScalarT& Vrest )
294 ScalarT r = alphaH<ScalarT>( Vn1, Vn2, Vrest ) * (1.0 - h ) - betaH<ScalarT>( Vn1, Vn2, Vrest ) * h;
298 template <
typename ScalarT>
299 static ScalarT
hEquQ(
const ScalarT& h )
318 static const double VT;
473 virtual bool updateState (
double * solVec,
double * staVec,
double * stoVec);