46 #ifndef Xyce_N_DEV_Neuron3_h
47 #define Xyce_N_DEV_Neuron3_h
72 static const char *
name() {
return "Neuron";}
115 void registerLIDs(
const std::vector<int> & intLIDVecRef,
116 const std::vector<int> & extLIDVecRef );
121 const std::vector< std::vector<int> > &
jacobianStamp()
const;
122 void registerJacLIDs(
const std::vector< std::vector<int> > & jacLIDVec );
132 void varTypes( std::vector<char> & varTypeVec );
159 template <
typename ScalarT>
160 static ScalarT
alphaN(
const ScalarT & Vn1,
const ScalarT & Vrest)
162 ScalarT vDiff = 1000.0 * (Vn1 - Vrest);
171 (100.0 * ( std::exp( (10.0 - vDiff)/10.0 ) - 1.0 ));
177 template <
typename ScalarT>
178 static ScalarT
betaN(
const ScalarT & Vn1,
const ScalarT & Vrest)
180 ScalarT vDiff = 1000.0 * (Vn1 - Vrest);
181 ScalarT r = 0.125 * std::exp( -vDiff/80.0 );
187 template <
typename ScalarT>
188 static ScalarT
alphaM(
const ScalarT & Vn1,
const ScalarT & Vrest)
190 ScalarT vDiff = 1000.0 * (Vn1 - Vrest);
200 (10.0 * ( std::exp( (25.0 - vDiff)/10.0 ) - 1.0 ));
206 template <
typename ScalarT>
207 static ScalarT
betaM(
const ScalarT & Vn1,
const ScalarT & Vrest)
209 ScalarT vDiff = 1000.0 * (Vn1 - Vrest);
210 ScalarT r = 4.0 * std::exp( -vDiff/18.0 );
216 template <
typename ScalarT>
217 static ScalarT
alphaH(
const ScalarT & Vn1,
const ScalarT & Vrest)
219 ScalarT vDiff = 1000.0 * (Vn1 - Vrest);
220 ScalarT r = 0.07 * std::exp( -vDiff/20.0 );
225 template <
typename ScalarT>
226 static ScalarT
betaH(
const ScalarT & Vn1,
const ScalarT & Vrest)
228 ScalarT vDiff = 1000.0 * (Vn1 - Vrest);
229 ScalarT r = 1.0 / ( std::exp( (30.0 - vDiff)/10.0 ) + 1.0 );
248 template <
typename ScalarT>
249 static ScalarT
kcl1EquF(
const ScalarT& VSeg,
const ScalarT& VSegP,
const ScalarT & VSegN,
const ScalarT& n,
const ScalarT& m,
const ScalarT& h,
250 const ScalarT& gPrev,
const ScalarT& gNext,
const ScalarT& memG,
const ScalarT& restV,
const ScalarT& Kg,
const ScalarT& Ke,
const ScalarT& NaG,
const ScalarT& NaE )
252 ScalarT powN = n * n * n * n;
253 ScalarT powM = m * m * m;
255 ScalarT r = memG * (VSeg - restV) + Kg * powN * (VSeg - Ke ) + NaG * powM * h * (VSeg - NaE )
256 - gNext * (VSegN - VSeg) - gPrev * (VSegP - VSeg);
260 template <
typename ScalarT>
261 static ScalarT
kcl1EquQ(
const ScalarT& VSeg,
const ScalarT& memC )
263 ScalarT r = memC * VSeg;
269 template <
typename ScalarT>
270 static ScalarT
kcl2EquF(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& n,
const ScalarT& m,
const ScalarT& h,
271 const ScalarT& memG,
const ScalarT& restV,
const ScalarT& Kg,
const ScalarT& Ke,
const ScalarT& NaG,
const ScalarT& NaE )
273 ScalarT powN = n * n * n * n;
274 ScalarT powM = m * m * m;
275 ScalarT r = -1.0*(memG * (Vn1 - Vn2 - restV) + Kg * powN * (Vn1 - Vn2 - Ke ) + NaG * powM * h * (Vn1 - Vn2 - NaE ));
280 template <
typename ScalarT>
281 static ScalarT
kcl2EquQ(
const ScalarT& Vn1,
const ScalarT& Vn2,
const ScalarT& memC )
283 ScalarT r = -1.0 * memC * (Vn1 - Vn2);
289 template <
typename ScalarT>
290 static ScalarT
nEquF(
const ScalarT& Vn1,
const ScalarT& n,
const ScalarT& Vrest )
292 ScalarT r = alphaN<ScalarT>( Vn1, Vrest ) * (1.0 - n ) - betaN<ScalarT>( Vn1, Vrest ) * n;
296 template <
typename ScalarT>
297 static ScalarT
nEquQ(
const ScalarT& n )
304 template <
typename ScalarT>
305 static ScalarT
mEquF(
const ScalarT& Vn1,
const ScalarT& m,
const ScalarT& Vrest )
307 ScalarT r = alphaM<ScalarT>( Vn1, Vrest ) * (1.0 - m ) - betaM<ScalarT>( Vn1, Vrest ) * m;
311 template <
typename ScalarT>
312 static ScalarT
mEquQ(
const ScalarT& m )
319 template <
typename ScalarT>
320 static ScalarT
hEquF(
const ScalarT& Vn1,
const ScalarT& h,
const ScalarT& Vrest )
322 ScalarT r = alphaH<ScalarT>( Vn1, Vrest ) * (1.0 - h ) - betaH<ScalarT>( Vn1, Vrest ) * h;
326 template <
typename ScalarT>
327 static ScalarT
hEquQ(
const ScalarT& h )