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>
198 bool bsuccess =
true;
215 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
356 const std::vector<int> & extLIDVecRef)
361 #ifdef Xyce_DEBUG_DEVICE
364 Xyce::dout() << std::endl << section_divider << std::endl;
365 Xyce::dout() <<
" Instance::registerLIDs" << std::endl;
366 Xyce::dout() <<
" name = " <<
getName() << std::endl;
386 #ifdef Xyce_DEBUG_DEVICE
389 Xyce::dout() <<
" li_Pos = " <<
li_Pos << std::endl
390 <<
" li_Neg = " <<
li_Neg << std::endl
391 <<
" li_nPro = " <<
li_nPro << std::endl
392 <<
" li_mPro = " <<
li_mPro << std::endl
393 <<
" li_hPro = " <<
li_hPro << std::endl
394 <<
" li_aPro = " <<
li_aPro << std::endl
395 <<
" li_bPro = " <<
li_bPro << std::endl
396 <<
" li_M_Pro = " <<
li_M_Pro << std::endl
397 <<
" li_H_Pro = " <<
li_H_Pro << std::endl
398 <<
" li_cPro = " <<
li_cPro << std::endl
399 <<
" li_CaPro = " <<
li_CaPro << std::endl;
403 #ifdef Xyce_DEBUG_DEVICE
406 Xyce::dout() << section_divider << std::endl;
425 std::ostringstream segNumber;
427 tmpstr =
getName() +
"_" +
"N";
431 tmpstr =
getName() +
"_" +
"M";
435 tmpstr =
getName() +
"_" +
"H";
439 tmpstr =
getName() +
"_" +
"A";
443 tmpstr =
getName() +
"_" +
"B";
447 tmpstr =
getName() +
"_" +
"M_";
451 tmpstr =
getName() +
"_" +
"H_";
455 tmpstr =
getName() +
"_" +
"C";
459 tmpstr =
getName() +
"_" +
"Ca";
502 bool returnVal=
false;
607 bool bsuccess =
true;
615 double v1Now = (*solVectorPtr)[
li_Pos];
616 double v2Now = (*solVectorPtr)[
li_Neg];
617 double nNow = (*solVectorPtr)[
li_nPro];
618 double mNow = (*solVectorPtr)[
li_mPro];
619 double hNow = (*solVectorPtr)[
li_hPro];
620 double aNow = (*solVectorPtr)[
li_aPro];
621 double bNow = (*solVectorPtr)[
li_bPro];
622 double M_Now = (*solVectorPtr)[
li_M_Pro];
623 double H_Now = (*solVectorPtr)[
li_H_Pro];
624 double cNow = (*solVectorPtr)[
li_cPro];
625 double CaNow = (*solVectorPtr)[
li_CaPro];
631 Sacado::Fad::SFad<double,10> v1Var( 10, 0, v1Now );
632 Sacado::Fad::SFad<double,10> v2Var( 10, 1, v2Now );
633 Sacado::Fad::SFad<double,10> nVar( 10, 2, nNow );
634 Sacado::Fad::SFad<double,10> mVar( 10, 3, mNow );
635 Sacado::Fad::SFad<double,10> hVar( 10, 4, hNow );
636 Sacado::Fad::SFad<double,10> aVar( 10, 5, aNow );
637 Sacado::Fad::SFad<double,10> bVar( 10, 6, bNow );
638 Sacado::Fad::SFad<double,10> M_Var( 10, 7, M_Now );
639 Sacado::Fad::SFad<double,10> H_Var( 10, 8, H_Now );
640 Sacado::Fad::SFad<double,10> cVar( 10, 9, cNow );
643 Sacado::Fad::SFad<double,10> gMemVar(
model_.
gMem );
644 Sacado::Fad::SFad<double,10> vRestVar(
model_.
vRest );
645 Sacado::Fad::SFad<double,10> gKVar(
model_.
gK );
646 Sacado::Fad::SFad<double,10> eKVar(
model_.
eK );
647 Sacado::Fad::SFad<double,10> gNaVar(
model_.
gNa );
648 Sacado::Fad::SFad<double,10> eNaVar(
model_.
eNa );
649 Sacado::Fad::SFad<double,10> gAVar(
model_.
gA );
650 Sacado::Fad::SFad<double,10> eAVar(
model_.
eA );
651 Sacado::Fad::SFad<double,10> gCaVar(
model_.
gCa );
652 Sacado::Fad::SFad<double,10> eCaVar(
model_.
eCa );
653 Sacado::Fad::SFad<double,10> gKCaVar(
model_.
gKCa );
654 Sacado::Fad::SFad<double,10> CaInitVar(
model_.
CaInit );
656 Sacado::Fad::SFad<double,10> CaTauVar(
model_.
CaTau );
659 Sacado::Fad::SFad<double,10> resultFad;
660 resultFad =
kcl1EquF( v1Var, v2Var, nVar, mVar, hVar, aVar, bVar, M_Var, H_Var, cVar, gMemVar, vRestVar, gKVar, eKVar, gNaVar, eNaVar, gAVar, eAVar, gCaVar, eCaVar, gKCaVar);
674 resultFad =
kcl2EquF( v1Var, v2Var, nVar, mVar, hVar, aVar, bVar, M_Var, H_Var, cVar, gMemVar, vRestVar, gKVar, eKVar, gNaVar, eNaVar, gAVar, eAVar, gCaVar, eCaVar, gKCaVar);
689 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
690 Sacado::Fad::SFad<double,2> v2Var( 2, 1, v2Now );
693 Sacado::Fad::SFad<double,2> cMemVar(
model_.
cMem );
695 Sacado::Fad::SFad<double,2> resultFad;
696 resultFad =
kcl1EquQ( v1Var, v2Var, cMemVar );
701 resultFad =
kcl2EquQ( v1Var, v2Var, cMemVar );
709 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
710 Sacado::Fad::SFad<double,2> nVar( 2, 1, nNow );
712 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
714 Sacado::Fad::SFad<double,2> resultFad =
nEquF( v1Var, nVar, vRestVar);
721 Sacado::Fad::SFad<double,1> nVar( 1, 0, nNow );
723 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
730 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
731 Sacado::Fad::SFad<double,2> mVar( 2, 1, mNow );
733 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
735 Sacado::Fad::SFad<double,2> resultFad =
mEquF( v1Var, mVar, vRestVar );
741 Sacado::Fad::SFad<double,1> mVar( 1, 0, mNow );
743 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
750 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
751 Sacado::Fad::SFad<double,2> hVar( 2, 1, hNow );
753 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
755 Sacado::Fad::SFad<double,2> resultFad =
hEquF( v1Var, hVar, vRestVar );
761 Sacado::Fad::SFad<double,1> hVar( 1, 0, hNow );
763 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
770 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
771 Sacado::Fad::SFad<double,2> aVar( 2, 1, aNow );
773 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
775 Sacado::Fad::SFad<double,2> resultFad =
aEquF( v1Var, aVar, vRestVar );
781 Sacado::Fad::SFad<double,1> aVar( 1, 0, aNow );
783 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( aVar );
790 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
791 Sacado::Fad::SFad<double,2> bVar( 2, 1, bNow );
793 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
795 Sacado::Fad::SFad<double,2> resultFad =
bEquF( v1Var, bVar, vRestVar );
801 Sacado::Fad::SFad<double,1> bVar( 1, 0, bNow );
803 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( bVar );
810 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
811 Sacado::Fad::SFad<double,2> M_Var( 2, 1, M_Now );
813 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
815 Sacado::Fad::SFad<double,2> resultFad =
M_EquF( v1Var, M_Var, vRestVar );
821 Sacado::Fad::SFad<double,1> M_Var( 1, 0, M_Now );
823 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( M_Var );
830 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
831 Sacado::Fad::SFad<double,2> H_Var( 2, 1, H_Now );
833 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
835 Sacado::Fad::SFad<double,2> resultFad =
H_EquF( v1Var, H_Var, vRestVar );
841 Sacado::Fad::SFad<double,1> H_Var( 1, 0, H_Now );
843 Sacado::Fad::SFad<double,1> resultFad =
H_EquQ( H_Var );
850 Sacado::Fad::SFad<double,3> v1Var( 3, 0, v1Now );
851 Sacado::Fad::SFad<double,3> cVar( 3, 1, cNow );
852 Sacado::Fad::SFad<double,3> CaVar( 3, 2, CaNow );
854 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
856 Sacado::Fad::SFad<double,3> resultFad =
C_EquF( v1Var, cVar, CaVar, vRestVar );
863 Sacado::Fad::SFad<double,1> cVar( 1, 0, cNow );
865 Sacado::Fad::SFad<double,1> resultFad =
C_EquQ( cVar );
872 Sacado::Fad::SFad<double,5> v1Var( 5, 0, v1Now );
873 Sacado::Fad::SFad<double,5> v2Var( 5, 1, v2Now );
874 Sacado::Fad::SFad<double,5> M_Var( 5, 2, M_Now );
875 Sacado::Fad::SFad<double,5> H_Var( 5, 3, H_Now );
876 Sacado::Fad::SFad<double,5> CaVar( 5, 4, CaNow );
879 Sacado::Fad::SFad<double,5> gCaVar(
model_.
gCa );
880 Sacado::Fad::SFad<double,5> eCaVar(
model_.
gCa );
882 Sacado::Fad::SFad<double,5> CaTauVar(
model_.
CaTau );
884 Sacado::Fad::SFad<double,5> resultFad =
Ca_EquF( v1Var, v2Var, M_Var, H_Var, CaVar, gCaVar, eCaVar, CaGammaVar, CaTauVar );
893 Sacado::Fad::SFad<double,1> CaVar( 1, 0, CaNow );
895 Sacado::Fad::SFad<double,1> resultFad =
Ca_EquQ( CaVar );
906 #ifdef Xyce_DEBUG_DEVICE
909 Xyce::dout() <<
"Instance::updateIntermediateVars()" << std::endl
910 <<
"v1 = " << v1Now << std::endl
911 <<
"v2 = " << v2Now << std::endl
912 <<
"nNow = " << nNow << std::endl
913 <<
"mNow = " << mNow << std::endl
914 <<
"hNow = " << hNow << std::endl
915 <<
"aNow = " << aNow << std::endl
916 <<
"bNow = " << bNow << std::endl
917 <<
"M_Now = " << M_Now << std::endl
918 <<
"H_Now = " << H_Now << std::endl
919 <<
"cNow = " << cNow << std::endl
920 <<
"CaNow = " << CaNow << std::endl
924 <<
"dkcl1F_dn = " <<
dkcl1F_dn << std::endl
925 <<
"dkcl1F_dm = " <<
dkcl1F_dm << std::endl
926 <<
"dkcl1F_dh = " <<
dkcl1F_dh << std::endl
930 <<
"dkcl2F_dn = " <<
dkcl2F_dn << std::endl
931 <<
"dkcl2F_dm = " <<
dkcl2F_dm << std::endl
932 <<
"dkcl2F_dh = " <<
dkcl2F_dh << std::endl
933 <<
"alphaN = " << alphaN<double>( v1Now ) << std::endl
934 <<
"betaN = " << betaN<double>( v1Now ) << std::endl
936 <<
"dnF_dV1 = " <<
dnF_dV1 << std::endl
937 <<
"dnF_dn = " <<
dnF_dn << std::endl
939 <<
"dnQ_dn = " <<
dnQ_dn << std::endl
940 <<
"alphaM = " << alphaM<double>( v1Now ) << std::endl
941 <<
"betaM = " << betaM<double>( v1Now ) << std::endl
943 <<
"dmF_dV1 = " <<
dmF_dV1 << std::endl
944 <<
"dmF_dm = " <<
dmF_dm << std::endl
946 <<
"dmQ_dm = " <<
dmQ_dm << std::endl
947 <<
"alphaH = " << alphaH<double>( v1Now ) << std::endl
948 <<
"betaH = " << betaH<double>( v1Now ) << std::endl
950 <<
"dhF_dV1 = " <<
dhF_dV1 << std::endl
951 <<
"dhF_dh = " <<
dhF_dh << std::endl
953 <<
"dhQ_dh = " <<
dhQ_dh << std::endl
955 <<
"aInf = " << aInf<double>( v1Now ) << std::endl
956 <<
"aTau = " << aTau<double>( v1Now ) << std::endl
958 <<
"daF_dV1 = " <<
daF_dV1 << std::endl
959 <<
"daF_da = " <<
daF_da << std::endl
961 <<
"daQ_da = " <<
daQ_da << std::endl
963 <<
"bInf = " << bInf<double>( v1Now ) << std::endl
964 <<
"bTau = " << bTau<double>( v1Now ) << std::endl
966 <<
"dbF_dV1 = " <<
dbF_dV1 << std::endl
967 <<
"dbF_db = " <<
dbF_db << std::endl
969 <<
"dbQ_db = " <<
dbQ_db << std::endl
971 <<
"M_Inf = " << M_Inf<double>( v1Now ) << std::endl
972 <<
"M_Tau = " << M_Tau<double>( v1Now ) << std::endl
974 <<
"dMF_dV1 = " <<
dMF_dV1 << std::endl
975 <<
"dMF_dM = " <<
dMF_dM << std::endl
977 <<
"dMQ_dM = " <<
dMQ_dM << std::endl
979 <<
"H_Inf = " << H_Inf<double>( v1Now ) << std::endl
980 <<
"H_Tau = " << H_Tau<double>( v1Now ) << std::endl
982 <<
"dHF_dV1 = " <<
dHF_dV1 << std::endl
983 <<
"dHF_dH = " <<
dHF_dH << std::endl
985 <<
"dHQ_dH = " <<
dHQ_dH << std::endl
988 <<
"dcF_dV1 = " <<
dcF_dV1 << std::endl
989 <<
"dcF_dc = " <<
dcF_dc << std::endl
991 <<
"dcQ_dc = " <<
dcQ_dc << std::endl
994 <<
"dCaF_dV1 = " <<
dCaF_dV1 << std::endl
995 <<
"dCaF_dV2 = " <<
dCaF_dV2 << std::endl
996 <<
"dCaF_dM = " <<
dCaF_dM << std::endl
997 <<
"dCaF_dH = " <<
dCaF_dH << std::endl
998 <<
"dCaF_dCa = " <<
dCaF_dCa << std::endl
1000 <<
"dCaQ_dCa = " <<
dCaQ_dCa << std::endl
1019 bool bsuccess =
true;
1042 bool bsuccess =
true;
1064 bool bsuccess =
true;
1129 bool bsuccess =
true;
1168 bool bsuccess =
true;
1238 bool bsuccess =
true;
1282 std::vector<Instance*>::iterator iter;
1286 for (iter=first; iter!=last; ++iter)
1288 (*iter)->processParams();
1306 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
1337 std::vector<Instance*>::iterator iter;
1341 for (iter=first; iter!=last; ++iter)
1360 std::vector<Instance*>::const_iterator iter;
1368 os <<
"Number of Neuron instances: " << isize << std::endl;
1369 os <<
" name=\t\tmodelName\tParameters" << std::endl;
1370 for (i=0, iter=first; iter!=last; ++iter, ++i)
1372 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
1397 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1411 .registerDevice(
"neuron", 2)
1412 .registerModelType(
"neuron", 2);