46 #include <Xyce_config.h>
51 #include <N_UTL_Misc.h>
61 #include <N_ERH_ErrorMgr.h>
65 #include <N_LAS_Vector.h>
66 #include <N_LAS_Matrix.h>
162 bool bsuccess =
true;
180 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
303 const std::vector<int> & extLIDVecRef)
308 #ifdef Xyce_DEBUG_DEVICE
311 Xyce::dout() << std::endl << section_divider << std::endl;
312 Xyce::dout() <<
" Instance::registerLIDs" << std::endl;
313 Xyce::dout() <<
" name = " <<
getName() << std::endl;
327 #ifdef Xyce_DEBUG_DEVICE
330 Xyce::dout() <<
" li_Pos = " <<
li_Pos << std::endl
331 <<
" li_Neg = " <<
li_Neg << std::endl
332 <<
" li_nPro = " <<
li_nPro << std::endl
333 <<
" li_mPro = " <<
li_mPro << std::endl
334 <<
" li_hPro = " <<
li_hPro << std::endl;
338 #ifdef Xyce_DEBUG_DEVICE
341 Xyce::dout() << section_divider << std::endl;
401 bool returnVal=
false;
476 bool bsuccess =
true;
484 double v1Now = (*solVectorPtr)[
li_Pos];
485 double v2Now = (*solVectorPtr)[
li_Neg];
486 double nNow = (*solVectorPtr)[
li_nPro];
487 double mNow = (*solVectorPtr)[
li_mPro];
488 double hNow = (*solVectorPtr)[
li_hPro];
496 const int numDeriv = 5;
497 Sacado::Fad::SFad<double,5> v1Var( numDeriv, 0, v1Now );
498 Sacado::Fad::SFad<double,5> v2Var( numDeriv, 1, v2Now );
499 Sacado::Fad::SFad<double,5> nVar( numDeriv, 2, nNow );
500 Sacado::Fad::SFad<double,5> mVar( numDeriv, 3, mNow );
501 Sacado::Fad::SFad<double,5> hVar( numDeriv, 4, hNow );
503 Sacado::Fad::SFad<double,5> gMemVar(
model_.
gMem );
504 Sacado::Fad::SFad<double,5> eLeakVar(
model_.
eLeak );
505 Sacado::Fad::SFad<double,5> gKVar(
model_.
gK );
506 Sacado::Fad::SFad<double,5> eKVar(
model_.
eK );
507 Sacado::Fad::SFad<double,5> gNaVar(
model_.
gNa );
508 Sacado::Fad::SFad<double,5> eNaVar(
model_.
eNa );
511 Sacado::Fad::SFad<double,5> resultFad;
512 resultFad =
kcl1EquF( v1Var, v2Var, nVar, mVar, hVar, gMemVar, eLeakVar, gKVar, eKVar, gNaVar, eNaVar );
521 resultFad =
kcl2EquF( v1Var, v2Var, nVar, mVar, hVar, gMemVar, eLeakVar, gKVar, eKVar, gNaVar, eNaVar );
532 const int numDeriv = 2;
533 Sacado::Fad::SFad<double,2> v1Var( numDeriv, 0, v1Now );
534 Sacado::Fad::SFad<double,2> v2Var( numDeriv, 1, v2Now );
537 Sacado::Fad::SFad<double,2> cMemVar(
model_.
cMem );
539 Sacado::Fad::SFad<double,2> resultFad;
540 resultFad =
kcl1EquQ( v1Var, v2Var, cMemVar );
545 resultFad =
kcl2EquQ( v1Var, v2Var, cMemVar );
553 const int numDeriv = 3;
554 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
555 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
556 Sacado::Fad::SFad<double,3> nVar( numDeriv, 2, nNow );
558 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
560 Sacado::Fad::SFad<double,3> resultFad =
nEquF( v1Var, v2Var, nVar, vRestVar);
567 const int numDeriv = 1;
568 Sacado::Fad::SFad<double,1> nVar( numDeriv, 0, nNow );
570 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
577 const int numDeriv = 3;
578 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
579 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
580 Sacado::Fad::SFad<double,3> mVar( numDeriv, 2, mNow );
582 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
584 Sacado::Fad::SFad<double,3> resultFad =
mEquF( v1Var, v2Var, mVar, vRestVar );
591 const int numDeriv = 1;
592 Sacado::Fad::SFad<double,1> mVar( numDeriv, 0, mNow );
594 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
601 const int numDeriv = 3;
602 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
603 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
604 Sacado::Fad::SFad<double,3> hVar( numDeriv, 2, hNow );
606 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
608 Sacado::Fad::SFad<double,3> resultFad =
hEquF( v1Var, v2Var, hVar, vRestVar );
615 const int numDeriv = 1;
616 Sacado::Fad::SFad<double,1> hVar( numDeriv, 0, hNow );
618 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
629 #ifdef Xyce_DEBUG_DEVICE
633 Xyce::dout() <<
"Instance::updateIntermediateVars()" << std::endl
634 <<
"vRest(input) = " << vRest << std::endl
635 <<
"v1 = " << v1Now << std::endl
636 <<
"v2 = " << v2Now << std::endl
637 <<
"nNow = " << nNow << std::endl
638 <<
"mNow = " << mNow << std::endl
639 <<
"hNow = " << hNow << std::endl
643 <<
"dkcl1F_dn = " <<
dkcl1F_dn << std::endl
644 <<
"dkcl1F_dm = " <<
dkcl1F_dm << std::endl
645 <<
"dkcl1F_dh = " <<
dkcl1F_dh << std::endl
649 <<
"dkcl2F_dn = " <<
dkcl2F_dn << std::endl
650 <<
"dkcl2F_dm = " <<
dkcl2F_dm << std::endl
651 <<
"dkcl2F_dh = " <<
dkcl2F_dh << std::endl
652 <<
"alphaN = " << alphaN<double>( v1Now, v2Now, vRest) << std::endl
653 <<
"betaN = " << betaN<double>( v1Now, v2Now, vRest) << std::endl
655 <<
"dnF_dV1 = " <<
dnF_dV1 << std::endl
656 <<
"dnF_dV2 = " <<
dnF_dV2 << std::endl
657 <<
"dnF_dn = " <<
dnF_dn << std::endl
659 <<
"dnQ_dn = " <<
dnQ_dn << std::endl
660 <<
"alphaM = " << alphaM<double>( v1Now, v2Now, vRest) << std::endl
661 <<
"betaM = " << betaM<double>( v1Now, v2Now, vRest) << std::endl
663 <<
"dmF_dV1 = " <<
dmF_dV1 << std::endl
664 <<
"dmF_dV2 = " <<
dmF_dV2 << std::endl
665 <<
"dmF_dm = " <<
dmF_dm << std::endl
667 <<
"dmQ_dm = " <<
dmQ_dm << std::endl
668 <<
"alphaH = " << alphaH<double>( v1Now, v2Now, vRest) << std::endl
669 <<
"betaH = " << betaH<double>( v1Now, v2Now, vRest) << std::endl
671 <<
"dhF_dV1 = " <<
dhF_dV1 << std::endl
672 <<
"dhF_dV2 = " <<
dhF_dV2 << std::endl
673 <<
"dhF_dh = " <<
dhF_dh << std::endl
675 <<
"dhQ_dh = " <<
dhQ_dh << std::endl
692 bool bsuccess =
true;
715 bool bsuccess =
true;
738 bool bsuccess =
true;
792 bool bsuccess =
true;
827 bool bsuccess =
true;
868 bool bsuccess =
true;
912 std::vector<Instance*>::iterator iter;
916 for (iter=first; iter!=last; ++iter)
918 (*iter)->processParams();
936 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
967 std::vector<Instance*>::iterator iter;
971 for (iter=first; iter!=last; ++iter)
989 std::vector<Instance*>::const_iterator iter;
997 os <<
"Number of Neuron instances: " << isize << std::endl;
998 os <<
" name=\t\tmodelName\tParameters" << std::endl;
999 for (i=0, iter=first; iter!=last; ++iter, ++i)
1001 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
1026 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1045 (*it)->updatePrimaryState();
1059 .registerDevice(
"neuron", 9)
1060 .registerModelType(
"neuron", 9);