46 #include <Xyce_config.h>
51 #include <N_UTL_Misc.h>
61 #include <N_ERH_ErrorMgr.h>
63 #include <N_LAS_Vector.h>
64 #include <N_LAS_Matrix.h>
123 std::vector<std::vector<int> >
156 bool bsuccess =
true;
173 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
297 const std::vector<int> & extLIDVecRef)
302 #ifdef Xyce_DEBUG_DEVICE
305 Xyce::dout() << std::endl << section_divider << std::endl;
306 Xyce::dout() <<
" Instance::registerLIDs" << std::endl;
307 Xyce::dout() <<
" name = " <<
getName() << std::endl;
321 #ifdef Xyce_DEBUG_DEVICE
324 Xyce::dout() <<
" li_Pos = " <<
li_Pos << std::endl
325 <<
" li_Neg = " <<
li_Neg << std::endl
326 <<
" li_nPro = " <<
li_nPro << std::endl
327 <<
" li_mPro = " <<
li_mPro << std::endl
328 <<
" li_hPro = " <<
li_hPro << std::endl;
332 #ifdef Xyce_DEBUG_DEVICE
335 Xyce::dout() << section_divider << std::endl;
403 bool returnVal=
false;
478 bool bsuccess =
true;
486 double v1Now = (*solVectorPtr)[
li_Pos];
487 double v2Now = (*solVectorPtr)[
li_Neg];
488 double nNow = (*solVectorPtr)[
li_nPro];
489 double mNow = (*solVectorPtr)[
li_mPro];
490 double hNow = (*solVectorPtr)[
li_hPro];
498 const int numDeriv = 5;
499 Sacado::Fad::SFad<double,5> v1Var( numDeriv, 0, v1Now );
500 Sacado::Fad::SFad<double,5> v2Var( numDeriv, 1, v2Now );
501 Sacado::Fad::SFad<double,5> nVar( numDeriv, 2, nNow );
502 Sacado::Fad::SFad<double,5> mVar( numDeriv, 3, mNow );
503 Sacado::Fad::SFad<double,5> hVar( numDeriv, 4, hNow );
505 Sacado::Fad::SFad<double,5> gMemVar(
model_.
gMem );
506 Sacado::Fad::SFad<double,5> eLeakVar(
model_.
eLeak );
507 Sacado::Fad::SFad<double,5> gKVar(
model_.
gK );
508 Sacado::Fad::SFad<double,5> eKVar(
model_.
eK );
509 Sacado::Fad::SFad<double,5> gNaVar(
model_.
gNa );
510 Sacado::Fad::SFad<double,5> eNaVar(
model_.
eNa );
513 Sacado::Fad::SFad<double,5> resultFad;
514 resultFad =
kcl1EquF( v1Var, v2Var, nVar, mVar, hVar, gMemVar, eLeakVar, gKVar, eKVar, gNaVar, eNaVar );
523 resultFad =
kcl2EquF( v1Var, v2Var, nVar, mVar, hVar, gMemVar, eLeakVar, gKVar, eKVar, gNaVar, eNaVar );
534 const int numDeriv = 2;
535 Sacado::Fad::SFad<double,2> v1Var( numDeriv, 0, v1Now );
536 Sacado::Fad::SFad<double,2> v2Var( numDeriv, 1, v2Now );
539 Sacado::Fad::SFad<double,2> cMemVar(
model_.
cMem );
541 Sacado::Fad::SFad<double,2> resultFad;
542 resultFad =
kcl1EquQ( v1Var, v2Var, cMemVar );
547 resultFad =
kcl2EquQ( v1Var, v2Var, cMemVar );
555 const int numDeriv = 3;
556 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
557 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
558 Sacado::Fad::SFad<double,3> nVar( numDeriv, 2, nNow );
560 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
562 Sacado::Fad::SFad<double,3> resultFad =
nEquF( v1Var, v2Var, nVar, vRestVar);
569 const int numDeriv = 1;
570 Sacado::Fad::SFad<double,1> nVar( numDeriv, 0, nNow );
572 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
579 const int numDeriv = 3;
580 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
581 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
582 Sacado::Fad::SFad<double,3> mVar( numDeriv, 2, mNow );
584 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
586 Sacado::Fad::SFad<double,3> resultFad =
mEquF( v1Var, v2Var, mVar, vRestVar );
593 const int numDeriv = 1;
594 Sacado::Fad::SFad<double,1> mVar( numDeriv, 0, mNow );
596 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
603 const int numDeriv = 3;
604 Sacado::Fad::SFad<double,3> v1Var( numDeriv, 0, v1Now );
605 Sacado::Fad::SFad<double,3> v2Var( numDeriv, 1, v2Now );
606 Sacado::Fad::SFad<double,3> hVar( numDeriv, 2, hNow );
608 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
610 Sacado::Fad::SFad<double,3> resultFad =
hEquF( v1Var, v2Var, hVar, vRestVar );
617 const int numDeriv = 1;
618 Sacado::Fad::SFad<double,1> hVar( numDeriv, 0, hNow );
620 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
631 #ifdef Xyce_DEBUG_DEVICE
635 Xyce::dout() <<
"Instance::updateIntermediateVars()" << std::endl
636 <<
"vRest(input) = " << vRest << std::endl
637 <<
"v1 = " << v1Now << std::endl
638 <<
"v2 = " << v2Now << std::endl
639 <<
"nNow = " << nNow << std::endl
640 <<
"mNow = " << mNow << std::endl
641 <<
"hNow = " << hNow << std::endl
645 <<
"dkcl1F_dn = " <<
dkcl1F_dn << std::endl
646 <<
"dkcl1F_dm = " <<
dkcl1F_dm << std::endl
647 <<
"dkcl1F_dh = " <<
dkcl1F_dh << std::endl
651 <<
"dkcl2F_dn = " <<
dkcl2F_dn << std::endl
652 <<
"dkcl2F_dm = " <<
dkcl2F_dm << std::endl
653 <<
"dkcl2F_dh = " <<
dkcl2F_dh << std::endl
654 <<
"alphaN = " << alphaN<double>( v1Now, v2Now, vRest) << std::endl
655 <<
"betaN = " << betaN<double>( v1Now, v2Now, vRest) << std::endl
657 <<
"dnF_dV1 = " <<
dnF_dV1 << std::endl
658 <<
"dnF_dV2 = " <<
dnF_dV2 << std::endl
659 <<
"dnF_dn = " <<
dnF_dn << std::endl
661 <<
"dnQ_dn = " <<
dnQ_dn << std::endl
662 <<
"alphaM = " << alphaM<double>( v1Now, v2Now, vRest) << std::endl
663 <<
"betaM = " << betaM<double>( v1Now, v2Now, vRest) << std::endl
665 <<
"dmF_dV1 = " <<
dmF_dV1 << std::endl
666 <<
"dmF_dV2 = " <<
dmF_dV2 << std::endl
667 <<
"dmF_dm = " <<
dmF_dm << std::endl
669 <<
"dmQ_dm = " <<
dmQ_dm << std::endl
670 <<
"alphaH = " << alphaH<double>( v1Now, v2Now, vRest) << std::endl
671 <<
"betaH = " << betaH<double>( v1Now, v2Now, vRest) << std::endl
673 <<
"dhF_dV1 = " <<
dhF_dV1 << std::endl
674 <<
"dhF_dV2 = " <<
dhF_dV2 << std::endl
675 <<
"dhF_dh = " <<
dhF_dh << std::endl
677 <<
"dhQ_dh = " <<
dhQ_dh << std::endl
694 bool bsuccess =
true;
717 bool bsuccess =
true;
740 bool bsuccess =
true;
794 bool bsuccess =
true;
829 bool bsuccess =
true;
870 bool bsuccess =
true;
914 std::vector<Instance*>::iterator iter;
918 for (iter=first; iter!=last; ++iter)
920 (*iter)->processParams();
938 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
969 std::vector<Instance*>::iterator iter;
973 for (iter=first; iter!=last; ++iter)
991 std::vector<Instance*>::const_iterator iter;
999 os <<
"Number of Neuron instances: " << isize << std::endl;
1000 os <<
" name=\t\tmodelName\tParameters" << std::endl;
1001 for (i=0, iter=first; iter!=last; ++iter, ++i)
1003 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
1028 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1046 (*it)->updatePrimaryState();
1061 .registerDevice(
"neuron", 1)
1062 .registerModelType(
"neuron", 1);