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();
756 tmpstr =
getName() +
"_" +
"V" + segNumStr;
760 tmpstr =
getName() +
"_" +
"N" + segNumStr;
764 tmpstr =
getName() +
"_" +
"M" + segNumStr;
768 tmpstr =
getName() +
"_" +
"H" + segNumStr;
772 tmpstr =
getName() +
"_" +
"A" + segNumStr;
776 tmpstr =
getName() +
"_" +
"B" + segNumStr;
780 tmpstr =
getName() +
"_" +
"M_" + segNumStr;
784 tmpstr =
getName() +
"_" +
"H_" + segNumStr;
788 tmpstr =
getName() +
"_" +
"C" + segNumStr;
792 tmpstr =
getName() +
"_" +
"Ca" + segNumStr;
817 for(
int i=0, j=0; i<
nSeg; i++, j+=2)
840 bool returnVal=
false;
918 for(
int i=0, j=2; i<
nSeg; i++, j+=10 )
977 bool bsuccess =
true;
984 double vIn = (*solVectorPtr)[
li_Pos];
985 double vOut = (*solVectorPtr)[
li_Neg];
996 for(
int i=0; i<
nSeg; i++ )
999 double vSeg = (*solVectorPtr)[
li_Vol[i]];
1001 if (i == (nSeg - 1))
1007 vNext = (*solVectorPtr)[li_Vol[i+1]];
1016 vPrev = (*solVectorPtr)[li_Vol[i-1]];
1018 double nVarSeg = (*solVectorPtr)[
li_nPro[i]];
1019 double mVarSeg = (*solVectorPtr)[
li_mPro[i]];
1020 double hVarSeg = (*solVectorPtr)[
li_hPro[i]];
1021 double aVarSeg = (*solVectorPtr)[
li_aPro[i]];
1022 double bVarSeg = (*solVectorPtr)[
li_bPro[i]];
1023 double M_VarSeg = (*solVectorPtr)[
li_MPro[i]];
1024 double H_VarSeg = (*solVectorPtr)[
li_HPro[i]];
1025 double cVarSeg = (*solVectorPtr)[
li_cPro[i]];
1026 double CaVarSeg = (*solVectorPtr)[
li_CaPro[i]];
1033 const int numDeriv = 11;
1034 Sacado::Fad::SFad<double,11> vVar ( numDeriv, 0, vSeg );
1035 Sacado::Fad::SFad<double,11> vVpr ( numDeriv, 1, vPrev );
1036 Sacado::Fad::SFad<double,11> vVne ( numDeriv, 2, vNext );
1037 Sacado::Fad::SFad<double,11> nVar ( numDeriv, 3, nVarSeg );
1038 Sacado::Fad::SFad<double,11> mVar ( numDeriv, 4, mVarSeg );
1039 Sacado::Fad::SFad<double,11> hVar ( numDeriv, 5, hVarSeg );
1040 Sacado::Fad::SFad<double,11> aVar ( numDeriv, 6, aVarSeg );
1041 Sacado::Fad::SFad<double,11> bVar ( numDeriv, 7, bVarSeg );
1042 Sacado::Fad::SFad<double,11> M_Var( numDeriv, 8, M_VarSeg );
1043 Sacado::Fad::SFad<double,11> H_Var( numDeriv, 9, H_VarSeg );
1044 Sacado::Fad::SFad<double,11> cVar ( numDeriv, 10, cVarSeg );
1047 Sacado::Fad::SFad<double,11> gPrev(
gBackward[i] );
1048 Sacado::Fad::SFad<double,11> gNext(
gForward[i] );
1050 Sacado::Fad::SFad<double,11> vRestVar(
model_.
vRest );
1052 Sacado::Fad::SFad<double,11> eKVar(
model_.
eK );
1054 Sacado::Fad::SFad<double,11> eNaVar(
model_.
eNa );
1056 Sacado::Fad::SFad<double,11> eAVar(
model_.
eA );
1058 Sacado::Fad::SFad<double,11> eCaVar(
model_.
eCa );
1060 Sacado::Fad::SFad<double,11> CaInitVar(
model_.
CaInit );
1062 Sacado::Fad::SFad<double,11> CaTauVar(
model_.
CaTau );
1065 Sacado::Fad::SFad<double,11> resultFad;
1066 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);
1079 segF_dc[i] = resultFad.dx(10);
1083 const int numDeriv = 1;
1084 Sacado::Fad::SFad<double,1> vVar( numDeriv, 0, vSeg );
1089 Sacado::Fad::SFad<double,1> resultFad;
1090 resultFad =
kcl1EquQ( vVar, cMemVar );
1098 const int numDeriv = 2;
1099 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1100 Sacado::Fad::SFad<double,2> nVar( numDeriv, 1, nVarSeg );
1102 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1104 Sacado::Fad::SFad<double,2> resultFad =
nEquF( vVar, nVar, vRestVar);
1106 dnF_dV[i] = resultFad.dx(0);
1107 dnF_dn[i] = resultFad.dx(1);
1110 const int numDeriv = 1;
1111 Sacado::Fad::SFad<double,1> nVar( numDeriv, 0, nVarSeg );
1113 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
1115 dnQ_dn[i] = resultFad.dx(0);
1120 const int numDeriv = 2;
1121 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1122 Sacado::Fad::SFad<double,2> mVar( numDeriv, 1, mVarSeg );
1124 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1126 Sacado::Fad::SFad<double,2> resultFad =
mEquF( vVar, mVar, vRestVar );
1128 dmF_dV[i] = resultFad.dx(0);
1129 dmF_dm[i] = resultFad.dx(1);
1132 const int numDeriv = 1;
1133 Sacado::Fad::SFad<double,1> mVar( numDeriv, 0, mVarSeg );
1135 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
1137 dmQ_dm[i] = resultFad.dx(0);
1142 const int numDeriv = 2;
1143 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1144 Sacado::Fad::SFad<double,2> hVar( numDeriv, 1, hVarSeg );
1146 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1148 Sacado::Fad::SFad<double,2> resultFad =
hEquF( vVar, hVar, vRestVar );
1150 dhF_dV[i] = resultFad.dx(0);
1151 dhF_dh[i] = resultFad.dx(1);
1154 const int numDeriv = 1;
1155 Sacado::Fad::SFad<double,1> hVar( numDeriv, 0, hVarSeg );
1157 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
1159 dhQ_dh[i] = resultFad.dx(0);
1164 const int numDeriv = 2;
1165 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1166 Sacado::Fad::SFad<double,2> aVar( numDeriv, 1, aVarSeg );
1168 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1170 Sacado::Fad::SFad<double,2> resultFad =
aEquF( vVar, aVar, vRestVar );
1172 daF_dV[i] = resultFad.dx(0);
1173 daF_da[i] = resultFad.dx(1);
1176 const int numDeriv = 1;
1177 Sacado::Fad::SFad<double,1> aVar( numDeriv, 0, aVarSeg );
1179 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( aVar );
1181 daQ_da[i] = resultFad.dx(0);
1186 const int numDeriv = 2;
1187 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1188 Sacado::Fad::SFad<double,2> bVar( numDeriv, 1, bVarSeg );
1190 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1192 Sacado::Fad::SFad<double,2> resultFad =
bEquF( vVar, bVar, vRestVar );
1194 dbF_dV[i] = resultFad.dx(0);
1195 dbF_db[i] = resultFad.dx(1);
1198 const int numDeriv = 1;
1199 Sacado::Fad::SFad<double,1> bVar( numDeriv, 0, bVarSeg );
1201 Sacado::Fad::SFad<double,1> resultFad =
bEquQ( bVar );
1203 dbQ_db[i] = resultFad.dx(0);
1208 const int numDeriv = 2;
1209 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1210 Sacado::Fad::SFad<double,2> M_Var( numDeriv, 1, M_VarSeg );
1212 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1214 Sacado::Fad::SFad<double,2> resultFad =
M_EquF( vVar, M_Var, vRestVar );
1216 dMF_dV[i] = resultFad.dx(0);
1217 dMF_dM[i] = resultFad.dx(1);
1220 const int numDeriv = 1;
1221 Sacado::Fad::SFad<double,1> M_Var( numDeriv, 0, M_VarSeg );
1223 Sacado::Fad::SFad<double,1> resultFad =
M_EquQ( M_Var );
1225 dMQ_dM[i] = resultFad.dx(0);
1230 const int numDeriv = 2;
1231 Sacado::Fad::SFad<double,2> vVar( numDeriv, 0, vSeg );
1232 Sacado::Fad::SFad<double,2> H_Var( numDeriv, 1, H_VarSeg );
1234 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1236 Sacado::Fad::SFad<double,2> resultFad =
H_EquF( vVar, H_Var, vRestVar );
1238 dHF_dV[i] = resultFad.dx(0);
1239 dHF_dH[i] = resultFad.dx(1);
1242 const int numDeriv = 1;
1243 Sacado::Fad::SFad<double,1> H_Var( numDeriv, 0, H_VarSeg );
1245 Sacado::Fad::SFad<double,1> resultFad =
H_EquQ( H_Var );
1247 dHQ_dH[i] = resultFad.dx(0);
1252 const int numDeriv = 3;
1253 Sacado::Fad::SFad<double,3> vVar( numDeriv, 0, vSeg );
1254 Sacado::Fad::SFad<double,3> cVar( numDeriv, 1, cVarSeg );
1255 Sacado::Fad::SFad<double,3> CaVar( numDeriv, 2, CaVarSeg );
1257 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
1259 Sacado::Fad::SFad<double,3> resultFad =
C_EquF( vVar, cVar, CaVar, vRestVar );
1261 dcF_dV[i] = resultFad.dx(0);
1262 dcF_dc[i] = resultFad.dx(1);
1266 const int numDeriv = 1;
1267 Sacado::Fad::SFad<double,1> cVar( numDeriv, 0, cVarSeg );
1269 Sacado::Fad::SFad<double,1> resultFad =
C_EquQ( cVar );
1271 dcQ_dc[i] = resultFad.dx(0);
1276 const int numDeriv = 4;
1277 Sacado::Fad::SFad<double,4> vVar( numDeriv, 0, vSeg );
1278 Sacado::Fad::SFad<double,4> M_Var( numDeriv, 1, M_VarSeg );
1279 Sacado::Fad::SFad<double,4> H_Var( numDeriv, 2, H_VarSeg );
1280 Sacado::Fad::SFad<double,4> CaVar( numDeriv, 3, CaVarSeg );
1282 Sacado::Fad::SFad<double,4> gCaVar(
model_.
gCa );
1283 Sacado::Fad::SFad<double,4> eCaVar(
model_.
gCa );
1285 Sacado::Fad::SFad<double,4> CaTauVar(
model_.
CaTau );
1287 Sacado::Fad::SFad<double,4> resultFad =
Ca_EquF( vVar, M_Var, H_Var, CaVar, gCaVar, eCaVar, CaGammaVar, CaTauVar );
1295 const int numDeriv = 1;
1296 Sacado::Fad::SFad<double,1> CaVar( numDeriv, 0, CaVarSeg );
1298 Sacado::Fad::SFad<double,1> resultFad =
Ca_EquQ( CaVar );
1309 bool bsuccess =
true;
1318 double v1Now = (*solVectorPtr)[
li_Pos];
1319 double v2Now = (*solVectorPtr)[
li_Neg];
1320 double nNow = (*solVectorPtr)[
li_nPro];
1321 double mNow = (*solVectorPtr)[
li_mPro];
1322 double hNow = (*solVectorPtr)[
li_hPro];
1323 double aNow = (*solVectorPtr)[
li_aPro];
1324 double bNow = (*solVectorPtr)[
li_bPro];
1325 double M_Now = (*solVectorPtr)[li_M_Pro];
1326 double H_Now = (*solVectorPtr)[li_H_Pro];
1327 double cNow = (*solVectorPtr)[
li_cPro];
1328 double CaNow = (*solVectorPtr)[
li_CaPro];
1334 Sacado::Fad::SFad<double,10> v1Var( 10, 0, v1Now );
1335 Sacado::Fad::SFad<double,10> v2Var( 10, 1, v2Now );
1336 Sacado::Fad::SFad<double,10> nVar( 10, 2, nNow );
1337 Sacado::Fad::SFad<double,10> mVar( 10, 3, mNow );
1338 Sacado::Fad::SFad<double,10> hVar( 10, 4, hNow );
1339 Sacado::Fad::SFad<double,10> aVar( 10, 5, aNow );
1340 Sacado::Fad::SFad<double,10> bVar( 10, 6, bNow );
1341 Sacado::Fad::SFad<double,10> M_Var( 10, 7, M_Now );
1342 Sacado::Fad::SFad<double,10> H_Var( 10, 8, H_Now );
1343 Sacado::Fad::SFad<double,10> cVar( 10, 9, cNow );
1346 Sacado::Fad::SFad<double,10> gMemVar(
model_.
gMem );
1347 Sacado::Fad::SFad<double,10> vRestVar(
model_.
vRest );
1348 Sacado::Fad::SFad<double,10> gKVar(
model_.
gK );
1349 Sacado::Fad::SFad<double,10> eKVar(
model_.
eK );
1350 Sacado::Fad::SFad<double,10> gNaVar(
model_.
gNa );
1351 Sacado::Fad::SFad<double,10> eNaVar(
model_.
eNa );
1352 Sacado::Fad::SFad<double,10> gAVar(
model_.
gA );
1353 Sacado::Fad::SFad<double,10> eAVar(
model_.
eA );
1354 Sacado::Fad::SFad<double,10> gCaVar(
model_.
gCa );
1355 Sacado::Fad::SFad<double,10> eCaVar(
model_.
gCa );
1356 Sacado::Fad::SFad<double,10> gKCaVar(
model_.
gKCa );
1357 Sacado::Fad::SFad<double,10> CaInitVar(
model_.
CaInit );
1359 Sacado::Fad::SFad<double,10> CaTauVar(
model_.
CaTau );
1362 Sacado::Fad::SFad<double,10> resultFad;
1363 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);
1365 dkcl1F_dV1 = resultFad.dx(0);
1366 dkcl1F_dV2 = resultFad.dx(1);
1367 dkcl1F_dn = resultFad.dx(2);
1368 dkcl1F_dm = resultFad.dx(3);
1369 dkcl1F_dh = resultFad.dx(4);
1370 dkcl1F_da = resultFad.dx(5);
1371 dkcl1F_db = resultFad.dx(6);
1372 dkcl1F_dM = resultFad.dx(7);
1373 dkcl1F_dH = resultFad.dx(8);
1374 dkcl1F_dc = resultFad.dx(9);
1377 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);
1379 dkcl2F_dV1 = resultFad.dx(0);
1380 dkcl2F_dV2 = resultFad.dx(1);
1381 dkcl2F_dn = resultFad.dx(2);
1382 dkcl2F_dm = resultFad.dx(3);
1383 dkcl2F_dh = resultFad.dx(4);
1384 dkcl2F_da = resultFad.dx(5);
1385 dkcl2F_db = resultFad.dx(6);
1386 dkcl2F_dM = resultFad.dx(7);
1387 dkcl2F_dH = resultFad.dx(8);
1388 dkcl2F_dc = resultFad.dx(9);
1392 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1393 Sacado::Fad::SFad<double,2> v2Var( 2, 1, v2Now );
1396 Sacado::Fad::SFad<double,2> cMemVar(
model_.
cMem );
1398 Sacado::Fad::SFad<double,2> resultFad;
1399 resultFad =
kcl1EquQ( v1Var, v2Var, cMemVar );
1400 kcl1Qvalue = resultFad.val();
1401 dkcl1Q_dV1 = resultFad.dx(0);
1402 dkcl1Q_dV2 = resultFad.dx(1);
1404 resultFad =
kcl2EquQ( v1Var, v2Var, cMemVar );
1405 kcl2Qvalue = resultFad.val();
1406 dkcl2Q_dV1 = resultFad.dx(0);
1407 dkcl2Q_dV2 = resultFad.dx(1);
1412 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1413 Sacado::Fad::SFad<double,2> nVar( 2, 1, nNow );
1415 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1417 Sacado::Fad::SFad<double,2> resultFad =
nEquF( v1Var, nVar, vRestVar);
1418 nEquFvalue = resultFad.val();
1419 dnF_dV1 = resultFad.dx(0);
1420 dnF_dn = resultFad.dx(1);
1424 Sacado::Fad::SFad<double,1> nVar( 1, 0, nNow );
1426 Sacado::Fad::SFad<double,1> resultFad =
nEquQ( nVar );
1427 nEquQvalue = resultFad.val();
1428 dnQ_dn = resultFad.dx(0);
1433 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1434 Sacado::Fad::SFad<double,2> mVar( 2, 1, mNow );
1436 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1438 Sacado::Fad::SFad<double,2> resultFad =
mEquF( v1Var, mVar, vRestVar );
1439 mEquFvalue = resultFad.val();
1440 dmF_dV1 = resultFad.dx(0);
1441 dmF_dm = resultFad.dx(1);
1444 Sacado::Fad::SFad<double,1> mVar( 1, 0, mNow );
1446 Sacado::Fad::SFad<double,1> resultFad =
mEquQ( mVar );
1447 mEquQvalue = resultFad.val();
1448 dmQ_dm = resultFad.dx(0);
1453 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1454 Sacado::Fad::SFad<double,2> hVar( 2, 1, hNow );
1456 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1458 Sacado::Fad::SFad<double,2> resultFad =
hEquF( v1Var, hVar, vRestVar );
1459 hEquFvalue = resultFad.val();
1460 dhF_dV1 = resultFad.dx(0);
1461 dhF_dh = resultFad.dx(1);
1464 Sacado::Fad::SFad<double,1> hVar( 1, 0, hNow );
1466 Sacado::Fad::SFad<double,1> resultFad =
hEquQ( hVar );
1467 hEquQvalue = resultFad.val();
1468 dhQ_dh = resultFad.dx(0);
1473 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1474 Sacado::Fad::SFad<double,2> aVar( 2, 1, aNow );
1476 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1478 Sacado::Fad::SFad<double,2> resultFad =
aEquF( v1Var, aVar, vRestVar );
1479 aEquFvalue = resultFad.val();
1480 daF_dV1 = resultFad.dx(0);
1481 daF_da = resultFad.dx(1);
1484 Sacado::Fad::SFad<double,1> aVar( 1, 0, aNow );
1486 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( aVar );
1487 aEquQvalue = resultFad.val();
1488 daQ_da = resultFad.dx(0);
1493 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1494 Sacado::Fad::SFad<double,2> bVar( 2, 1, bNow );
1496 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1498 Sacado::Fad::SFad<double,2> resultFad =
bEquF( v1Var, bVar, vRestVar );
1499 bEquFvalue = resultFad.val();
1500 dbF_dV1 = resultFad.dx(0);
1501 dbF_db = resultFad.dx(1);
1504 Sacado::Fad::SFad<double,1> bVar( 1, 0, bNow );
1506 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( bVar );
1507 bEquQvalue = resultFad.val();
1508 dbQ_db = resultFad.dx(0);
1513 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1514 Sacado::Fad::SFad<double,2> M_Var( 2, 1, M_Now );
1516 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1518 Sacado::Fad::SFad<double,2> resultFad =
M_EquF( v1Var, M_Var, vRestVar );
1519 M_EquFvalue = resultFad.val();
1520 dMF_dV1 = resultFad.dx(0);
1521 dMF_dM = resultFad.dx(1);
1524 Sacado::Fad::SFad<double,1> M_Var( 1, 0, M_Now );
1526 Sacado::Fad::SFad<double,1> resultFad =
aEquQ( M_Var );
1527 M_EquQvalue = resultFad.val();
1528 dMQ_dM = resultFad.dx(0);
1533 Sacado::Fad::SFad<double,2> v1Var( 2, 0, v1Now );
1534 Sacado::Fad::SFad<double,2> H_Var( 2, 1, H_Now );
1536 Sacado::Fad::SFad<double,2> vRestVar(
model_.
vRest );
1538 Sacado::Fad::SFad<double,2> resultFad =
H_EquF( v1Var, H_Var, vRestVar );
1539 H_EquFvalue = resultFad.val();
1540 dHF_dV1 = resultFad.dx(0);
1541 dHF_dH = resultFad.dx(1);
1544 Sacado::Fad::SFad<double,1> H_Var( 1, 0, H_Now );
1546 Sacado::Fad::SFad<double,1> resultFad =
H_EquQ( H_Var );
1547 H_EquQvalue = resultFad.val();
1548 dHQ_dH = resultFad.dx(0);
1553 Sacado::Fad::SFad<double,3> v1Var( 3, 0, v1Now );
1554 Sacado::Fad::SFad<double,3> cVar( 3, 1, cNow );
1555 Sacado::Fad::SFad<double,3> CaVar( 3, 2, CaNow );
1557 Sacado::Fad::SFad<double,3> vRestVar(
model_.
vRest );
1559 Sacado::Fad::SFad<double,3> resultFad =
C_EquF( v1Var, cVar, CaVar, vRestVar );
1560 cEquFvalue = resultFad.val();
1561 dcF_dV1 = resultFad.dx(0);
1562 dcF_dc = resultFad.dx(1);
1566 Sacado::Fad::SFad<double,1> cVar( 1, 0, cNow );
1568 Sacado::Fad::SFad<double,1> resultFad =
C_EquQ( cVar );
1569 cEquQvalue = resultFad.val();
1570 dcQ_dc = resultFad.dx(0);
1575 Sacado::Fad::SFad<double,5> v1Var( 5, 0, v1Now );
1576 Sacado::Fad::SFad<double,5> v2Var( 5, 1, v2Now );
1577 Sacado::Fad::SFad<double,5> M_Var( 5, 2, M_Now );
1578 Sacado::Fad::SFad<double,5> H_Var( 5, 3, H_Now );
1579 Sacado::Fad::SFad<double,5> CaVar( 5, 4, CaNow );
1582 Sacado::Fad::SFad<double,5> gCaVar(
model_.
gCa );
1583 Sacado::Fad::SFad<double,5> eCaVar(
model_.
gCa );
1585 Sacado::Fad::SFad<double,5> CaTauVar(
model_.
CaTau );
1587 Sacado::Fad::SFad<double,5> resultFad =
Ca_EquF( v1Var, v2Var, M_Var, H_Var, CaVar, gCaVar, eCaVar, CaGammaVar, CaTauVar );
1588 CaEquFvalue = resultFad.val();
1589 dCaF_dV1 = resultFad.dx(0);
1590 dCaF_dV2 = resultFad.dx(1);
1596 Sacado::Fad::SFad<double,1> CaVar( 1, 0, CaNow );
1598 Sacado::Fad::SFad<double,1> resultFad =
Ca_EquQ( CaVar );
1599 CaEquQvalue = resultFad.val();
1609 #ifdef Xyce_DEBUG_DEVICE
1612 Xyce::dout() <<
"Instance::updateIntermediateVars()" << std::endl
1613 <<
"v1 = " << v1Now << std::endl
1614 <<
"v2 = " << v2Now << std::endl
1615 <<
"nNow = " << nNow << std::endl
1616 <<
"mNow = " << mNow << std::endl
1617 <<
"hNow = " << hNow << std::endl
1618 <<
"aNow = " << aNow << std::endl
1619 <<
"bNow = " << bNow << std::endl
1620 <<
"M_Now = " << M_Now << std::endl
1621 <<
"H_Now = " << H_Now << std::endl
1622 <<
"cNow = " << cNow << std::endl
1623 <<
"CaNow = " << CaNow << std::endl
1624 <<
"kcl1Fvalue = " <<
kcl1Fvalue << std::endl
1625 <<
"dkcl1F_dV1 = " << dkcl1F_dV1 << std::endl
1626 <<
"dkcl1F_dV2 = " << dkcl1F_dV2 << std::endl
1627 <<
"dkcl1F_dn = " << dkcl1F_dn << std::endl
1628 <<
"dkcl1F_dm = " << dkcl1F_dm << std::endl
1629 <<
"dkcl1F_dh = " << dkcl1F_dh << std::endl
1630 <<
"kcl2Fvalue = " <<
kcl2Fvalue << std::endl
1631 <<
"dkcl2F_dV1 = " << dkcl2F_dV1 << std::endl
1632 <<
"dkcl2F_dV2 = " << dkcl2F_dV2 << std::endl
1633 <<
"dkcl2F_dn = " << dkcl2F_dn << std::endl
1634 <<
"dkcl2F_dm = " << dkcl2F_dm << std::endl
1635 <<
"dkcl2F_dh = " << dkcl2F_dh << std::endl
1636 <<
"alphaN = " << alphaN<double>( v1Now ) << std::endl
1637 <<
"betaN = " << betaN<double>( v1Now ) << std::endl
1638 <<
"nEquFvalue = " << nEquFvalue << std::endl
1639 <<
"dnF_dV1 = " << dnF_dV1 << std::endl
1640 <<
"dnF_dn = " <<
dnF_dn << std::endl
1641 <<
"nEquQvalue = " << nEquQvalue << std::endl
1642 <<
"dnQ_dn = " <<
dnQ_dn << std::endl
1643 <<
"alphaM = " << alphaM<double>( v1Now ) << std::endl
1644 <<
"betaM = " << betaM<double>( v1Now ) << std::endl
1645 <<
"mEquFvalue = " << mEquFvalue << std::endl
1646 <<
"dmF_dV1 = " << dmF_dV1 << std::endl
1647 <<
"dmF_dm = " <<
dmF_dm << std::endl
1648 <<
"mEquQvalue = " << mEquQvalue << std::endl
1649 <<
"dmQ_dm = " <<
dmQ_dm << std::endl
1650 <<
"alphaH = " << alphaH<double>( v1Now ) << std::endl
1651 <<
"betaH = " << betaH<double>( v1Now ) << std::endl
1652 <<
"hEquFvalue = " << hEquFvalue << std::endl
1653 <<
"dhF_dV1 = " << dhF_dV1 << std::endl
1654 <<
"dhF_dh = " <<
dhF_dh << std::endl
1655 <<
"hEquQvalue = " << hEquQvalue << std::endl
1656 <<
"dhQ_dh = " <<
dhQ_dh << std::endl
1658 <<
"aInf = " << aInf<double>( v1Now ) << std::endl
1659 <<
"aTau = " << aTau<double>( v1Now ) << std::endl
1660 <<
"aEquFvalue = " << aEquFvalue << std::endl
1661 <<
"daF_dV1 = " << daF_dV1 << std::endl
1662 <<
"daF_da = " <<
daF_da << std::endl
1663 <<
"aEquQvalue = " << aEquQvalue << std::endl
1664 <<
"daQ_da = " <<
daQ_da << std::endl
1666 <<
"bInf = " << bInf<double>( v1Now ) << std::endl
1667 <<
"bTau = " << bTau<double>( v1Now ) << std::endl
1668 <<
"bEquFvalue = " << bEquFvalue << std::endl
1669 <<
"dbF_dV1 = " << dbF_dV1 << std::endl
1670 <<
"dbF_db = " <<
dbF_db << std::endl
1671 <<
"bEquQvalue = " << bEquQvalue << std::endl
1672 <<
"dbQ_db = " <<
dbQ_db << std::endl
1674 <<
"M_Inf = " << M_Inf<double>( v1Now ) << std::endl
1675 <<
"M_Tau = " << M_Tau<double>( v1Now ) << std::endl
1676 <<
"M_EquFvalue = " << M_EquFvalue << std::endl
1677 <<
"dMF_dV1 = " << dMF_dV1 << std::endl
1678 <<
"dMF_dM = " <<
dMF_dM << std::endl
1679 <<
"M_EquQvalue = " << M_EquQvalue << std::endl
1680 <<
"dMQ_dM = " <<
dMQ_dM << std::endl
1682 <<
"H_Inf = " << H_Inf<double>( v1Now ) << std::endl
1683 <<
"H_Tau = " << H_Tau<double>( v1Now ) << std::endl
1684 <<
"H_EquFvalue = " << H_EquFvalue << std::endl
1685 <<
"dHF_dV1 = " << dHF_dV1 << std::endl
1686 <<
"dHF_dH = " <<
dHF_dH << std::endl
1687 <<
"H_EquQvalue = " << H_EquQvalue << std::endl
1688 <<
"dHQ_dH = " <<
dHQ_dH << std::endl
1690 <<
"cEquFvalue = " << cEquFvalue << std::endl
1691 <<
"dcF_dV1 = " << dcF_dV1 << std::endl
1692 <<
"dcF_dc = " <<
dcF_dc << std::endl
1693 <<
"cEquQvalue = " << cEquQvalue << std::endl
1694 <<
"dcQ_dc = " <<
dcQ_dc << std::endl
1696 <<
"CaEquFvalue = " << CaEquFvalue << std::endl
1697 <<
"dCaF_dV1 = " << dCaF_dV1 << std::endl
1698 <<
"dCaF_dV2 = " << dCaF_dV2 << std::endl
1699 <<
"dCaF_dM = " <<
dCaF_dM << std::endl
1700 <<
"dCaF_dH = " <<
dCaF_dH << std::endl
1701 <<
"dCaF_dCa = " <<
dCaF_dCa << std::endl
1702 <<
"CaEquQvalue = " << CaEquQvalue << std::endl
1703 <<
"dCaQ_dCa = " <<
dCaQ_dCa << std::endl
1722 bool bsuccess =
true;
1729 for(
int i=0; i<
nSeg; i++)
1748 bool bsuccess =
true;
1770 bool bsuccess =
true;
1774 for(
int i=0; i<
nSeg ; i++)
1814 for(
int i=0; i<
nSeg ; i++)
1842 bool bsuccess =
true;
1846 for(
int i=0; i<
nSeg ; i++)
1879 bool bsuccess =
true;
1889 for(
int i=0; i<
nSeg ; i++)
1941 bool bsuccess =
true;
1985 std::vector<Instance*>::iterator iter;
1989 for (iter=first; iter!=last; ++iter)
1991 (*iter)->processParams();
2009 :
DeviceModel(MB, configuration.getModelParameters(), factory_block)
2039 std::vector<Instance*>::iterator iter;
2043 for (iter=first; iter!=last; ++iter)
2062 std::vector<Instance*>::const_iterator iter;
2070 os <<
"Number of Neuron instances: " << isize << std::endl;
2071 os <<
" name=\t\tmodelName\tParameters" << std::endl;
2072 for (i=0, iter=first; iter!=last; ++iter, ++i)
2074 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
2099 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
2113 .registerDevice(
"neuron", 4)
2114 .registerModelType(
"neuron", 4);