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;
409 bool returnVal=
false;
484 bool bsuccess =
true;
492 double v1Now = (*solVectorPtr)[
li_Pos];
493 double v2Now = (*solVectorPtr)[
li_Neg];
494 double nNow = (*solVectorPtr)[
li_nPro];
495 double mNow = (*solVectorPtr)[
li_mPro];
496 double hNow = (*solVectorPtr)[
li_hPro];
504 const int numDeriv = 5;
505 Sacado::Fad::SFad<double,5> v1Var( numDeriv, 0, v1Now );
506 Sacado::Fad::SFad<double,5> v2Var( numDeriv, 1, v2Now );
507 Sacado::Fad::SFad<double,5> nVar( numDeriv, 2, nNow );
508 Sacado::Fad::SFad<double,5> mVar( numDeriv, 3, mNow );
509 Sacado::Fad::SFad<double,5> hVar( numDeriv, 4, hNow );
511 Sacado::Fad::SFad<double,5> gMemVar(
model_.
gMem );
512 Sacado::Fad::SFad<double,5> eLeakVar(
model_.
eLeak );
513 Sacado::Fad::SFad<double,5> gKVar(
model_.
gK );
514 Sacado::Fad::SFad<double,5> eKVar(
model_.
eK );
515 Sacado::Fad::SFad<double,5> gNaVar(
model_.
gNa );
516 Sacado::Fad::SFad<double,5> eNaVar(
model_.
eNa );
519 Sacado::Fad::SFad<double,5> resultFad;
520 resultFad =
kcl1EquF( v1Var, v2Var, nVar, mVar, hVar, gMemVar, eLeakVar, gKVar, eKVar, gNaVar, eNaVar );
529 resultFad =
kcl2EquF( v1Var, v2Var, nVar, mVar, hVar, gMemVar, eLeakVar, gKVar, eKVar, gNaVar, eNaVar );
540 const int numDeriv = 2;
541 Sacado::Fad::SFad<double,2> v1Var( numDeriv, 0, v1Now );
542 Sacado::Fad::SFad<double,2> v2Var( numDeriv, 1, v2Now );
545 Sacado::Fad::SFad<double,2> cMemVar(
model_.
cMem );
547 Sacado::Fad::SFad<double,2> resultFad;
548 resultFad =
kcl1EquQ( v1Var, v2Var, cMemVar );
553 resultFad =
kcl2EquQ( v1Var, v2Var, cMemVar );
561 const int numDeriv = 3;
562 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
563 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
564 Sacado::Fad::SFad<double,3> nVar( numDeriv, 2, nNow );
566 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
568 Sacado::Fad::SFad<double,3> resultFad =
nEquF( v1Var, v2Var, nVar, vRestVar);
575 const int numDeriv = 1;
576 Sacado::Fad::SFad<double,1> nVar( numDeriv, 0, nNow );
578 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
585 const int numDeriv = 3;
586 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
587 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
588 Sacado::Fad::SFad<double,3> mVar( numDeriv, 2, mNow );
590 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
592 Sacado::Fad::SFad<double,3> resultFad =
mEquF( v1Var, v2Var, mVar, vRestVar );
599 const int numDeriv = 1;
600 Sacado::Fad::SFad<double,1> mVar( numDeriv, 0, mNow );
602 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
609 const int numDeriv = 3;
610 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
611 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
612 Sacado::Fad::SFad<double,3> hVar( numDeriv, 2, hNow );
614 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
616 Sacado::Fad::SFad<double,3> resultFad =
hEquF( v1Var, v2Var, hVar, vRestVar );
623 const int numDeriv = 1;
624 Sacado::Fad::SFad<double,1> hVar( numDeriv, 0, hNow );
626 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
637 #ifdef Xyce_DEBUG_DEVICE
641 Xyce::dout() <<
"Instance::updateIntermediateVars()" << std::endl
642 <<
"vRest(input) = " << vRest << std::endl
643 <<
"v1 = " << v1Now << std::endl
644 <<
"v2 = " << v2Now << std::endl
645 <<
"nNow = " << nNow << std::endl
646 <<
"mNow = " << mNow << std::endl
647 <<
"hNow = " << hNow << std::endl
651 <<
"dkcl1F_dn = " <<
dkcl1F_dn << std::endl
652 <<
"dkcl1F_dm = " <<
dkcl1F_dm << std::endl
653 <<
"dkcl1F_dh = " <<
dkcl1F_dh << std::endl
657 <<
"dkcl2F_dn = " <<
dkcl2F_dn << std::endl
658 <<
"dkcl2F_dm = " <<
dkcl2F_dm << std::endl
659 <<
"dkcl2F_dh = " <<
dkcl2F_dh << std::endl
660 <<
"alphaN = " << alphaN<double>( v1Now, v2Now, vRest) << std::endl
661 <<
"betaN = " << betaN<double>( v1Now, v2Now, vRest) << std::endl
663 <<
"dnF_dV1 = " <<
dnF_dV1 << std::endl
664 <<
"dnF_dV2 = " <<
dnF_dV2 << std::endl
665 <<
"dnF_dn = " <<
dnF_dn << std::endl
667 <<
"dnQ_dn = " <<
dnQ_dn << std::endl
668 <<
"alphaM = " << alphaM<double>( v1Now, v2Now, vRest) << std::endl
669 <<
"betaM = " << betaM<double>( v1Now, v2Now, vRest) << std::endl
671 <<
"dmF_dV1 = " <<
dmF_dV1 << std::endl
672 <<
"dmF_dV2 = " <<
dmF_dV2 << std::endl
673 <<
"dmF_dm = " <<
dmF_dm << std::endl
675 <<
"dmQ_dm = " <<
dmQ_dm << std::endl
676 <<
"alphaH = " << alphaH<double>( v1Now, v2Now, vRest) << std::endl
677 <<
"betaH = " << betaH<double>( v1Now, v2Now, vRest) << std::endl
679 <<
"dhF_dV1 = " <<
dhF_dV1 << std::endl
680 <<
"dhF_dV2 = " <<
dhF_dV2 << std::endl
681 <<
"dhF_dh = " <<
dhF_dh << std::endl
683 <<
"dhQ_dh = " <<
dhQ_dh << std::endl
700 bool bsuccess =
true;
723 bool bsuccess =
true;
746 bool bsuccess =
true;
800 bool bsuccess =
true;
835 bool bsuccess =
true;
876 bool bsuccess =
true;
920 std::vector<Instance*>::iterator iter;
924 for (iter=first; iter!=last; ++iter)
926 (*iter)->processParams();
944 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
975 std::vector<Instance*>::iterator iter;
979 for (iter=first; iter!=last; ++iter)
997 std::vector<Instance*>::const_iterator iter;
1005 os <<
"Number of Neuron instances: " << isize << std::endl;
1006 os <<
" name=\t\tmodelName\tParameters" << std::endl;
1007 for (i=0, iter=first; iter!=last; ++iter, ++i)
1009 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
1034 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1053 (*it)->updatePrimaryState();
1067 .registerDevice(
"neuron", 9)
1068 .registerModelType(
"neuron", 9);