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>
293 bool bsuccess =
true;
310 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
327 rIntPreviousGiven(false),
328 radiusPreviousGiven(false),
329 lengthPreviousGiven(false),
330 rIntNextGiven(false),
331 radiusNextGiven(false),
332 lengthNextGiven(false),
341 APosEquPosNodeOffset(0),
342 APosEquNextNodeOffset(0),
343 ANegEquNegNodeOffset(0),
344 ANegEquLastNodeOffset(0)
451 for(
int i=2; i<numVars; i+=10)
471 if( i==(numVars-10) )
545 gForward[0] = radius * (radius *
radius) / (rLong * segLength * ( segLength * radius * radius + segLength * radius * radius ));
546 gBackward[
nSeg-1] = radius * (radius *
radius) / (rLong * segLength * ( segLength * radius * radius + segLength * radius * radius ));
548 for(
int i=1; i<(
nSeg-1); i++)
550 gBackward[i] = radius * (radius *
radius) / (rLong * segLength * ( segLength * radius * radius + segLength * radius * radius ));
551 gForward[i] = gBackward[i];
672 const std::vector<int> & extLIDVecRef)
677 #ifdef Xyce_DEBUG_DEVICE
680 Xyce::dout() << std::endl << section_divider << std::endl;
681 Xyce::dout() <<
" Instance::registerLIDs" << std::endl;
682 Xyce::dout() <<
" name = " <<
getName() << std::endl;
692 for(
int i=0, j=0; i<
nSeg; i++, j+=10)
706 #ifdef Xyce_DEBUG_DEVICE
709 Xyce::dout() <<
" li_Pos = " <<
li_Pos << std::endl
710 <<
" li_Neg = " <<
li_Neg << std::endl;
711 for(
int i=0; i<
nSeg; i++ )
713 Xyce::dout() <<
" li_Vol[ " << i <<
" ] = " <<
li_Vol[i] << std::endl
714 <<
" li_nPro[ " << i <<
" ] = " <<
li_nPro[i] << std::endl
715 <<
" li_mPro[ " << i <<
" ] = " <<
li_mPro[i] << std::endl
716 <<
" li_hPro[ " << i <<
" ] = " <<
li_hPro[i] << std::endl
717 <<
" li_aPro[ " << i <<
" ] = " <<
li_aPro[i] << std::endl
718 <<
" li_bPro[ " << i <<
" ] = " <<
li_bPro[i] << std::endl
719 <<
" li_MPro[ " << i <<
" ] = " <<
li_MPro[i] << std::endl
720 <<
" li_HPro[ " << i <<
" ] = " <<
li_HPro[i] << std::endl
721 <<
" li_cPro[ " << i <<
" ] = " <<
li_cPro[i] << std::endl
722 <<
" li_CaPro[ " << i <<
" ] = " <<
li_CaPro[i] << std::endl;
727 #ifdef Xyce_DEBUG_DEVICE
730 Xyce::dout() << section_divider << std::endl;
750 for(
int i=0; i<
nSeg; i++)
752 std::ostringstream segNumber;
754 std::string segNumStr = segNumber.str();
787 for(
int i=0, j=0; i<
nSeg; i++, j+=2)
810 bool returnVal=
false;
888 for(
int i=0, j=2; i<
nSeg; i++, j+=10 )
947 bool bsuccess =
true;
954 double vIn = (*solVectorPtr)[
li_Pos];
955 double vOut = (*solVectorPtr)[
li_Neg];
966 for(
int i=0; i<
nSeg; i++ )
969 double vSeg = (*solVectorPtr)[
li_Vol[i]];
977 vNext = (*solVectorPtr)[li_Vol[i+1]];
986 vPrev = (*solVectorPtr)[li_Vol[i-1]];
988 double nVarSeg = (*solVectorPtr)[
li_nPro[i]];
989 double mVarSeg = (*solVectorPtr)[
li_mPro[i]];
990 double hVarSeg = (*solVectorPtr)[
li_hPro[i]];
991 double aVarSeg = (*solVectorPtr)[
li_aPro[i]];
992 double bVarSeg = (*solVectorPtr)[
li_bPro[i]];
993 double M_VarSeg = (*solVectorPtr)[
li_MPro[i]];
994 double H_VarSeg = (*solVectorPtr)[
li_HPro[i]];
995 double cVarSeg = (*solVectorPtr)[
li_cPro[i]];
996 double CaVarSeg = (*solVectorPtr)[
li_CaPro[i]];
1003 const int numDeriv = 11;
1004 Sacado::Fad::SFad<double,11> vVar ( numDeriv, 0, vSeg );
1005 Sacado::Fad::SFad<double,11> vVpr ( numDeriv, 1, vPrev );
1006 Sacado::Fad::SFad<double,11> vVne ( numDeriv, 2, vNext );
1007 Sacado::Fad::SFad<double,11> nVar ( numDeriv, 3, nVarSeg );
1008 Sacado::Fad::SFad<double,11> mVar ( numDeriv, 4, mVarSeg );
1009 Sacado::Fad::SFad<double,11> hVar ( numDeriv, 5, hVarSeg );
1010 Sacado::Fad::SFad<double,11> aVar ( numDeriv, 6, aVarSeg );
1011 Sacado::Fad::SFad<double,11> bVar ( numDeriv, 7, bVarSeg );
1012 Sacado::Fad::SFad<double,11> M_Var( numDeriv, 8, M_VarSeg );
1013 Sacado::Fad::SFad<double,11> H_Var( numDeriv, 9, H_VarSeg );
1014 Sacado::Fad::SFad<double,11> cVar ( numDeriv, 10, cVarSeg );
1017 Sacado::Fad::SFad<double,11> gPrev(
gBackward[i] );
1018 Sacado::Fad::SFad<double,11> gNext(
gForward[i] );
1020 Sacado::Fad::SFad<double,11> vRestVar(
model_.
vRest );
1022 Sacado::Fad::SFad<double,11> eKVar(
model_.
eK );
1024 Sacado::Fad::SFad<double,11> eNaVar(
model_.
eNa );
1026 Sacado::Fad::SFad<double,11> eAVar(
model_.
eA );
1028 Sacado::Fad::SFad<double,11> eCaVar(
model_.
eCa );
1030 Sacado::Fad::SFad<double,11> CaInitVar(
model_.
CaInit );
1032 Sacado::Fad::SFad<double,11> CaTauVar(
model_.
CaTau );
1035 Sacado::Fad::SFad<double,11> resultFad;
1036 resultFad =
kcl1EquF( vVar, vVpr, vVne, nVar, mVar, hVar, aVar, bVar, M_Var, H_Var, cVar, gPrev, gNext, gMemVar, vRestVar, gKVar, eKVar, gNaVar, eNaVar, gAVar, eAVar, gCaVar, eCaVar, gKCaVar);
1049 segF_dc[i] = resultFad.dx(10);
1053 const int numDeriv = 1;
1054 Sacado::Fad::SFad<double,1> vVar( numDeriv, 0, vSeg );
1059 Sacado::Fad::SFad<double,1> resultFad;
1060 resultFad =
kcl1EquQ( vVar, cMemVar );
1068 const int numDeriv = 2;
1069 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1070 Sacado::Fad::SFad<double,2> nVar( numDeriv, 1, nVarSeg );
1072 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1074 Sacado::Fad::SFad<double,2> resultFad =
nEquF( vVar, nVar, vRestVar);
1076 dnF_dV[i] = resultFad.dx(0);
1077 dnF_dn[i] = resultFad.dx(1);
1080 const int numDeriv = 1;
1081 Sacado::Fad::SFad<double,1> nVar( numDeriv, 0, nVarSeg );
1083 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
1085 dnQ_dn[i] = resultFad.dx(0);
1090 const int numDeriv = 2;
1091 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1092 Sacado::Fad::SFad<double,2> mVar( numDeriv, 1, mVarSeg );
1094 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1096 Sacado::Fad::SFad<double,2> resultFad =
mEquF( vVar, mVar, vRestVar );
1098 dmF_dV[i] = resultFad.dx(0);
1099 dmF_dm[i] = resultFad.dx(1);
1102 const int numDeriv = 1;
1103 Sacado::Fad::SFad<double,1> mVar( numDeriv, 0, mVarSeg );
1105 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
1107 dmQ_dm[i] = resultFad.dx(0);
1112 const int numDeriv = 2;
1113 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1114 Sacado::Fad::SFad<double,2> hVar( numDeriv, 1, hVarSeg );
1116 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1118 Sacado::Fad::SFad<double,2> resultFad =
hEquF( vVar, hVar, vRestVar );
1120 dhF_dV[i] = resultFad.dx(0);
1121 dhF_dh[i] = resultFad.dx(1);
1124 const int numDeriv = 1;
1125 Sacado::Fad::SFad<double,1> hVar( numDeriv, 0, hVarSeg );
1127 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
1129 dhQ_dh[i] = resultFad.dx(0);
1134 const int numDeriv = 2;
1135 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1136 Sacado::Fad::SFad<double,2> aVar( numDeriv, 1, aVarSeg );
1138 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1140 Sacado::Fad::SFad<double,2> resultFad =
aEquF( vVar, aVar, vRestVar );
1142 daF_dV[i] = resultFad.dx(0);
1143 daF_da[i] = resultFad.dx(1);
1146 const int numDeriv = 1;
1147 Sacado::Fad::SFad<double,1> aVar( numDeriv, 0, aVarSeg );
1149 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( aVar );
1151 daQ_da[i] = resultFad.dx(0);
1156 const int numDeriv = 2;
1157 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1158 Sacado::Fad::SFad<double,2> bVar( numDeriv, 1, bVarSeg );
1160 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1162 Sacado::Fad::SFad<double,2> resultFad =
bEquF( vVar, bVar, vRestVar );
1164 dbF_dV[i] = resultFad.dx(0);
1165 dbF_db[i] = resultFad.dx(1);
1168 const int numDeriv = 1;
1169 Sacado::Fad::SFad<double,1> bVar( numDeriv, 0, bVarSeg );
1171 Sacado::Fad::SFad<double,1> resultFad =
bEquQ( bVar );
1173 dbQ_db[i] = resultFad.dx(0);
1178 const int numDeriv = 2;
1179 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1180 Sacado::Fad::SFad<double,2> M_Var( numDeriv, 1, M_VarSeg );
1182 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1184 Sacado::Fad::SFad<double,2> resultFad =
M_EquF( vVar, M_Var, vRestVar );
1186 dMF_dV[i] = resultFad.dx(0);
1187 dMF_dM[i] = resultFad.dx(1);
1190 const int numDeriv = 1;
1191 Sacado::Fad::SFad<double,1> M_Var( numDeriv, 0, M_VarSeg );
1193 Sacado::Fad::SFad<double,1> resultFad =
M_EquQ( M_Var );
1195 dMQ_dM[i] = resultFad.dx(0);
1200 const int numDeriv = 2;
1201 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1202 Sacado::Fad::SFad<double,2> H_Var( numDeriv, 1, H_VarSeg );
1204 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1206 Sacado::Fad::SFad<double,2> resultFad =
H_EquF( vVar, H_Var, vRestVar );
1208 dHF_dV[i] = resultFad.dx(0);
1209 dHF_dH[i] = resultFad.dx(1);
1212 const int numDeriv = 1;
1213 Sacado::Fad::SFad<double,1> H_Var( numDeriv, 0, H_VarSeg );
1215 Sacado::Fad::SFad<double,1> resultFad =
H_EquQ( H_Var );
1217 dHQ_dH[i] = resultFad.dx(0);
1222 const int numDeriv = 3;
1223 Sacado::Fad::SFad<double,3> vVar( numDeriv, 0, vSeg );
1224 Sacado::Fad::SFad<double,3> cVar( numDeriv, 1, cVarSeg );
1225 Sacado::Fad::SFad<double,3> CaVar( numDeriv, 2, CaVarSeg );
1227 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
1229 Sacado::Fad::SFad<double,3> resultFad =
C_EquF( vVar, cVar, CaVar, vRestVar );
1231 dcF_dV[i] = resultFad.dx(0);
1232 dcF_dc[i] = resultFad.dx(1);
1236 const int numDeriv = 1;
1237 Sacado::Fad::SFad<double,1> cVar( numDeriv, 0, cVarSeg );
1239 Sacado::Fad::SFad<double,1> resultFad =
C_EquQ( cVar );
1241 dcQ_dc[i] = resultFad.dx(0);
1246 const int numDeriv = 4;
1247 Sacado::Fad::SFad<double,4> vVar( numDeriv, 0, vSeg );
1248 Sacado::Fad::SFad<double,4> M_Var( numDeriv, 1, M_VarSeg );
1249 Sacado::Fad::SFad<double,4> H_Var( numDeriv, 2, H_VarSeg );
1250 Sacado::Fad::SFad<double,4> CaVar( numDeriv, 3, CaVarSeg );
1252 Sacado::Fad::SFad<double,4> gCaVar(
model_.
gCa );
1253 Sacado::Fad::SFad<double,4> eCaVar(
model_.
gCa );
1255 Sacado::Fad::SFad<double,4> CaTauVar(
model_.
CaTau );
1257 Sacado::Fad::SFad<double,4> resultFad =
Ca_EquF( vVar, M_Var, H_Var, CaVar, gCaVar, eCaVar, CaGammaVar, CaTauVar );
1265 const int numDeriv = 1;
1266 Sacado::Fad::SFad<double,1> CaVar( numDeriv, 0, CaVarSeg );
1268 Sacado::Fad::SFad<double,1> resultFad =
Ca_EquQ( CaVar );
1279 bool bsuccess =
true;
1288 double v1Now = (*solVectorPtr)[
li_Pos];
1289 double v2Now = (*solVectorPtr)[
li_Neg];
1290 double nNow = (*solVectorPtr)[
li_nPro];
1291 double mNow = (*solVectorPtr)[
li_mPro];
1292 double hNow = (*solVectorPtr)[
li_hPro];
1293 double aNow = (*solVectorPtr)[
li_aPro];
1294 double bNow = (*solVectorPtr)[
li_bPro];
1295 double M_Now = (*solVectorPtr)[li_M_Pro];
1296 double H_Now = (*solVectorPtr)[li_H_Pro];
1297 double cNow = (*solVectorPtr)[
li_cPro];
1298 double CaNow = (*solVectorPtr)[
li_CaPro];
1304 Sacado::Fad::SFad<double,10> v1Var( 10, 0, v1Now );
1305 Sacado::Fad::SFad<double,10> v2Var( 10, 1, v2Now );
1306 Sacado::Fad::SFad<double,10> nVar( 10, 2, nNow );
1307 Sacado::Fad::SFad<double,10> mVar( 10, 3, mNow );
1308 Sacado::Fad::SFad<double,10> hVar( 10, 4, hNow );
1309 Sacado::Fad::SFad<double,10> aVar( 10, 5, aNow );
1310 Sacado::Fad::SFad<double,10> bVar( 10, 6, bNow );
1311 Sacado::Fad::SFad<double,10> M_Var( 10, 7, M_Now );
1312 Sacado::Fad::SFad<double,10> H_Var( 10, 8, H_Now );
1313 Sacado::Fad::SFad<double,10> cVar( 10, 9, cNow );
1316 Sacado::Fad::SFad<double,10> gMemVar(
model_.
gMem );
1317 Sacado::Fad::SFad<double,10> vRestVar(
model_.
vRest );
1318 Sacado::Fad::SFad<double,10> gKVar(
model_.
gK );
1319 Sacado::Fad::SFad<double,10> eKVar(
model_.
eK );
1320 Sacado::Fad::SFad<double,10> gNaVar(
model_.
gNa );
1321 Sacado::Fad::SFad<double,10> eNaVar(
model_.
eNa );
1322 Sacado::Fad::SFad<double,10> gAVar(
model_.
gA );
1323 Sacado::Fad::SFad<double,10> eAVar(
model_.
eA );
1324 Sacado::Fad::SFad<double,10> gCaVar(
model_.
gCa );
1325 Sacado::Fad::SFad<double,10> eCaVar(
model_.
gCa );
1326 Sacado::Fad::SFad<double,10> gKCaVar(
model_.
gKCa );
1327 Sacado::Fad::SFad<double,10> CaInitVar(
model_.
CaInit );
1329 Sacado::Fad::SFad<double,10> CaTauVar(
model_.
CaTau );
1332 Sacado::Fad::SFad<double,10> resultFad;
1333 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);
1335 dkcl1F_dV1 = resultFad.dx(0);
1336 dkcl1F_dV2 = resultFad.dx(1);
1337 dkcl1F_dn = resultFad.dx(2);
1338 dkcl1F_dm = resultFad.dx(3);
1339 dkcl1F_dh = resultFad.dx(4);
1340 dkcl1F_da = resultFad.dx(5);
1341 dkcl1F_db = resultFad.dx(6);
1342 dkcl1F_dM = resultFad.dx(7);
1343 dkcl1F_dH = resultFad.dx(8);
1344 dkcl1F_dc = resultFad.dx(9);
1347 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);
1349 dkcl2F_dV1 = resultFad.dx(0);
1350 dkcl2F_dV2 = resultFad.dx(1);
1351 dkcl2F_dn = resultFad.dx(2);
1352 dkcl2F_dm = resultFad.dx(3);
1353 dkcl2F_dh = resultFad.dx(4);
1354 dkcl2F_da = resultFad.dx(5);
1355 dkcl2F_db = resultFad.dx(6);
1356 dkcl2F_dM = resultFad.dx(7);
1357 dkcl2F_dH = resultFad.dx(8);
1358 dkcl2F_dc = resultFad.dx(9);
1362 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1363 Sacado::Fad::SFad<double,2> v2Var( 2, 1, v2Now );
1366 Sacado::Fad::SFad<double,2> cMemVar(
model_.
cMem );
1368 Sacado::Fad::SFad<double,2> resultFad;
1369 resultFad =
kcl1EquQ( v1Var, v2Var, cMemVar );
1370 kcl1Qvalue = resultFad.val();
1371 dkcl1Q_dV1 = resultFad.dx(0);
1372 dkcl1Q_dV2 = resultFad.dx(1);
1374 resultFad =
kcl2EquQ( v1Var, v2Var, cMemVar );
1375 kcl2Qvalue = resultFad.val();
1376 dkcl2Q_dV1 = resultFad.dx(0);
1377 dkcl2Q_dV2 = resultFad.dx(1);
1382 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1383 Sacado::Fad::SFad<double,2> nVar( 2, 1, nNow );
1385 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1387 Sacado::Fad::SFad<double,2> resultFad =
nEquF( v1Var, nVar, vRestVar);
1388 nEquFvalue = resultFad.val();
1389 dnF_dV1 = resultFad.dx(0);
1390 dnF_dn = resultFad.dx(1);
1394 Sacado::Fad::SFad<double,1> nVar( 1, 0, nNow );
1396 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
1397 nEquQvalue = resultFad.val();
1398 dnQ_dn = resultFad.dx(0);
1403 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1404 Sacado::Fad::SFad<double,2> mVar( 2, 1, mNow );
1406 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1408 Sacado::Fad::SFad<double,2> resultFad =
mEquF( v1Var, mVar, vRestVar );
1409 mEquFvalue = resultFad.val();
1410 dmF_dV1 = resultFad.dx(0);
1411 dmF_dm = resultFad.dx(1);
1414 Sacado::Fad::SFad<double,1> mVar( 1, 0, mNow );
1416 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
1417 mEquQvalue = resultFad.val();
1418 dmQ_dm = resultFad.dx(0);
1423 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1424 Sacado::Fad::SFad<double,2> hVar( 2, 1, hNow );
1426 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1428 Sacado::Fad::SFad<double,2> resultFad =
hEquF( v1Var, hVar, vRestVar );
1429 hEquFvalue = resultFad.val();
1430 dhF_dV1 = resultFad.dx(0);
1431 dhF_dh = resultFad.dx(1);
1434 Sacado::Fad::SFad<double,1> hVar( 1, 0, hNow );
1436 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
1437 hEquQvalue = resultFad.val();
1438 dhQ_dh = resultFad.dx(0);
1443 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1444 Sacado::Fad::SFad<double,2> aVar( 2, 1, aNow );
1446 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1448 Sacado::Fad::SFad<double,2> resultFad =
aEquF( v1Var, aVar, vRestVar );
1449 aEquFvalue = resultFad.val();
1450 daF_dV1 = resultFad.dx(0);
1451 daF_da = resultFad.dx(1);
1454 Sacado::Fad::SFad<double,1> aVar( 1, 0, aNow );
1456 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( aVar );
1457 aEquQvalue = resultFad.val();
1458 daQ_da = resultFad.dx(0);
1463 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1464 Sacado::Fad::SFad<double,2> bVar( 2, 1, bNow );
1466 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1468 Sacado::Fad::SFad<double,2> resultFad =
bEquF( v1Var, bVar, vRestVar );
1469 bEquFvalue = resultFad.val();
1470 dbF_dV1 = resultFad.dx(0);
1471 dbF_db = resultFad.dx(1);
1474 Sacado::Fad::SFad<double,1> bVar( 1, 0, bNow );
1476 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( bVar );
1477 bEquQvalue = resultFad.val();
1478 dbQ_db = resultFad.dx(0);
1483 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1484 Sacado::Fad::SFad<double,2> M_Var( 2, 1, M_Now );
1486 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1488 Sacado::Fad::SFad<double,2> resultFad =
M_EquF( v1Var, M_Var, vRestVar );
1489 M_EquFvalue = resultFad.val();
1490 dMF_dV1 = resultFad.dx(0);
1491 dMF_dM = resultFad.dx(1);
1494 Sacado::Fad::SFad<double,1> M_Var( 1, 0, M_Now );
1496 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( M_Var );
1497 M_EquQvalue = resultFad.val();
1498 dMQ_dM = resultFad.dx(0);
1503 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1504 Sacado::Fad::SFad<double,2> H_Var( 2, 1, H_Now );
1506 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1508 Sacado::Fad::SFad<double,2> resultFad =
H_EquF( v1Var, H_Var, vRestVar );
1509 H_EquFvalue = resultFad.val();
1510 dHF_dV1 = resultFad.dx(0);
1511 dHF_dH = resultFad.dx(1);
1514 Sacado::Fad::SFad<double,1> H_Var( 1, 0, H_Now );
1516 Sacado::Fad::SFad<double,1> resultFad =
H_EquQ( H_Var );
1517 H_EquQvalue = resultFad.val();
1518 dHQ_dH = resultFad.dx(0);
1523 Sacado::Fad::SFad<double,3> v1Var( 3, 0, v1Now );
1524 Sacado::Fad::SFad<double,3> cVar( 3, 1, cNow );
1525 Sacado::Fad::SFad<double,3> CaVar( 3, 2, CaNow );
1527 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
1529 Sacado::Fad::SFad<double,3> resultFad =
C_EquF( v1Var, cVar, CaVar, vRestVar );
1530 cEquFvalue = resultFad.val();
1531 dcF_dV1 = resultFad.dx(0);
1532 dcF_dc = resultFad.dx(1);
1536 Sacado::Fad::SFad<double,1> cVar( 1, 0, cNow );
1538 Sacado::Fad::SFad<double,1> resultFad =
C_EquQ( cVar );
1539 cEquQvalue = resultFad.val();
1540 dcQ_dc = resultFad.dx(0);
1545 Sacado::Fad::SFad<double,5> v1Var( 5, 0, v1Now );
1546 Sacado::Fad::SFad<double,5> v2Var( 5, 1, v2Now );
1547 Sacado::Fad::SFad<double,5> M_Var( 5, 2, M_Now );
1548 Sacado::Fad::SFad<double,5> H_Var( 5, 3, H_Now );
1549 Sacado::Fad::SFad<double,5> CaVar( 5, 4, CaNow );
1552 Sacado::Fad::SFad<double,5> gCaVar(
model_.
gCa );
1553 Sacado::Fad::SFad<double,5> eCaVar(
model_.
gCa );
1555 Sacado::Fad::SFad<double,5> CaTauVar(
model_.
CaTau );
1557 Sacado::Fad::SFad<double,5> resultFad =
Ca_EquF( v1Var, v2Var, M_Var, H_Var, CaVar, gCaVar, eCaVar, CaGammaVar, CaTauVar );
1558 CaEquFvalue = resultFad.val();
1559 dCaF_dV1 = resultFad.dx(0);
1560 dCaF_dV2 = resultFad.dx(1);
1566 Sacado::Fad::SFad<double,1> CaVar( 1, 0, CaNow );
1568 Sacado::Fad::SFad<double,1> resultFad =
Ca_EquQ( CaVar );
1569 CaEquQvalue = resultFad.val();
1579 #ifdef Xyce_DEBUG_DEVICE
1582 Xyce::dout() <<
"Instance::updateIntermediateVars()" << std::endl
1583 <<
"v1 = " << v1Now << std::endl
1584 <<
"v2 = " << v2Now << std::endl
1585 <<
"nNow = " << nNow << std::endl
1586 <<
"mNow = " << mNow << std::endl
1587 <<
"hNow = " << hNow << std::endl
1588 <<
"aNow = " << aNow << std::endl
1589 <<
"bNow = " << bNow << std::endl
1590 <<
"M_Now = " << M_Now << std::endl
1591 <<
"H_Now = " << H_Now << std::endl
1592 <<
"cNow = " << cNow << std::endl
1593 <<
"CaNow = " << CaNow << std::endl
1594 <<
"kcl1Fvalue = " <<
kcl1Fvalue << std::endl
1595 <<
"dkcl1F_dV1 = " << dkcl1F_dV1 << std::endl
1596 <<
"dkcl1F_dV2 = " << dkcl1F_dV2 << std::endl
1597 <<
"dkcl1F_dn = " << dkcl1F_dn << std::endl
1598 <<
"dkcl1F_dm = " << dkcl1F_dm << std::endl
1599 <<
"dkcl1F_dh = " << dkcl1F_dh << std::endl
1600 <<
"kcl2Fvalue = " <<
kcl2Fvalue << std::endl
1601 <<
"dkcl2F_dV1 = " << dkcl2F_dV1 << std::endl
1602 <<
"dkcl2F_dV2 = " << dkcl2F_dV2 << std::endl
1603 <<
"dkcl2F_dn = " << dkcl2F_dn << std::endl
1604 <<
"dkcl2F_dm = " << dkcl2F_dm << std::endl
1605 <<
"dkcl2F_dh = " << dkcl2F_dh << std::endl
1606 <<
"alphaN = " << alphaN<double>( v1Now ) << std::endl
1607 <<
"betaN = " << betaN<double>( v1Now ) << std::endl
1608 <<
"nEquFvalue = " << nEquFvalue << std::endl
1609 <<
"dnF_dV1 = " << dnF_dV1 << std::endl
1610 <<
"dnF_dn = " <<
dnF_dn << std::endl
1611 <<
"nEquQvalue = " << nEquQvalue << std::endl
1612 <<
"dnQ_dn = " <<
dnQ_dn << std::endl
1613 <<
"alphaM = " << alphaM<double>( v1Now ) << std::endl
1614 <<
"betaM = " << betaM<double>( v1Now ) << std::endl
1615 <<
"mEquFvalue = " << mEquFvalue << std::endl
1616 <<
"dmF_dV1 = " << dmF_dV1 << std::endl
1617 <<
"dmF_dm = " <<
dmF_dm << std::endl
1618 <<
"mEquQvalue = " << mEquQvalue << std::endl
1619 <<
"dmQ_dm = " <<
dmQ_dm << std::endl
1620 <<
"alphaH = " << alphaH<double>( v1Now ) << std::endl
1621 <<
"betaH = " << betaH<double>( v1Now ) << std::endl
1622 <<
"hEquFvalue = " << hEquFvalue << std::endl
1623 <<
"dhF_dV1 = " << dhF_dV1 << std::endl
1624 <<
"dhF_dh = " <<
dhF_dh << std::endl
1625 <<
"hEquQvalue = " << hEquQvalue << std::endl
1626 <<
"dhQ_dh = " <<
dhQ_dh << std::endl
1628 <<
"aInf = " << aInf<double>( v1Now ) << std::endl
1629 <<
"aTau = " << aTau<double>( v1Now ) << std::endl
1630 <<
"aEquFvalue = " << aEquFvalue << std::endl
1631 <<
"daF_dV1 = " << daF_dV1 << std::endl
1632 <<
"daF_da = " <<
daF_da << std::endl
1633 <<
"aEquQvalue = " << aEquQvalue << std::endl
1634 <<
"daQ_da = " <<
daQ_da << std::endl
1636 <<
"bInf = " << bInf<double>( v1Now ) << std::endl
1637 <<
"bTau = " << bTau<double>( v1Now ) << std::endl
1638 <<
"bEquFvalue = " << bEquFvalue << std::endl
1639 <<
"dbF_dV1 = " << dbF_dV1 << std::endl
1640 <<
"dbF_db = " <<
dbF_db << std::endl
1641 <<
"bEquQvalue = " << bEquQvalue << std::endl
1642 <<
"dbQ_db = " <<
dbQ_db << std::endl
1644 <<
"M_Inf = " << M_Inf<double>( v1Now ) << std::endl
1645 <<
"M_Tau = " << M_Tau<double>( v1Now ) << std::endl
1646 <<
"M_EquFvalue = " << M_EquFvalue << std::endl
1647 <<
"dMF_dV1 = " << dMF_dV1 << std::endl
1648 <<
"dMF_dM = " <<
dMF_dM << std::endl
1649 <<
"M_EquQvalue = " << M_EquQvalue << std::endl
1650 <<
"dMQ_dM = " <<
dMQ_dM << std::endl
1652 <<
"H_Inf = " << H_Inf<double>( v1Now ) << std::endl
1653 <<
"H_Tau = " << H_Tau<double>( v1Now ) << std::endl
1654 <<
"H_EquFvalue = " << H_EquFvalue << std::endl
1655 <<
"dHF_dV1 = " << dHF_dV1 << std::endl
1656 <<
"dHF_dH = " <<
dHF_dH << std::endl
1657 <<
"H_EquQvalue = " << H_EquQvalue << std::endl
1658 <<
"dHQ_dH = " <<
dHQ_dH << std::endl
1660 <<
"cEquFvalue = " << cEquFvalue << std::endl
1661 <<
"dcF_dV1 = " << dcF_dV1 << std::endl
1662 <<
"dcF_dc = " <<
dcF_dc << std::endl
1663 <<
"cEquQvalue = " << cEquQvalue << std::endl
1664 <<
"dcQ_dc = " <<
dcQ_dc << std::endl
1666 <<
"CaEquFvalue = " << CaEquFvalue << std::endl
1667 <<
"dCaF_dV1 = " << dCaF_dV1 << std::endl
1668 <<
"dCaF_dV2 = " << dCaF_dV2 << std::endl
1669 <<
"dCaF_dM = " <<
dCaF_dM << std::endl
1670 <<
"dCaF_dH = " <<
dCaF_dH << std::endl
1671 <<
"dCaF_dCa = " <<
dCaF_dCa << std::endl
1672 <<
"CaEquQvalue = " << CaEquQvalue << std::endl
1673 <<
"dCaQ_dCa = " <<
dCaQ_dCa << std::endl
1692 bool bsuccess =
true;
1699 for(
int i=0; i<
nSeg; i++)
1718 bool bsuccess =
true;
1740 bool bsuccess =
true;
1744 for(
int i=0; i<
nSeg ; i++)
1784 for(
int i=0; i<
nSeg ; i++)
1812 bool bsuccess =
true;
1816 for(
int i=0; i<
nSeg ; i++)
1849 bool bsuccess =
true;
1859 for(
int i=0; i<
nSeg ; i++)
1911 bool bsuccess =
true;
1955 std::vector<Instance*>::iterator iter;
1959 for (iter=first; iter!=last; ++iter)
1961 (*iter)->processParams();
1979 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
2009 std::vector<Instance*>::iterator iter;
2013 for (iter=first; iter!=last; ++iter)
2032 std::vector<Instance*>::const_iterator iter;
2040 os <<
"Number of Neuron instances: " << isize << std::endl;
2041 os <<
" name=\t\tmodelName\tParameters" << std::endl;
2042 for (i=0, iter=first; iter!=last; ++iter, ++i)
2044 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
2069 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
2083 .registerDevice(
"neuron", 4)
2084 .registerModelType(
"neuron", 4);