46 #include <Xyce_config.h>
51 #include <N_UTL_Misc.h>
66 #include <N_ERH_ErrorMgr.h>
70 #include <N_LAS_Vector.h>
71 #include <N_LAS_Matrix.h>
208 NULL,
U_AMP,
CAT_NONE,
"Current for user-defined current equation");
247 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
259 numIntVarsPerSegment(0),
260 numStateVarsPerSegment(0),
269 APosEquPosNodeOffset(0),
270 APosEquNextNodeOffset(0),
271 ANegEquNegNodeOffset(0),
272 ANegEquLastNodeOffset(0)
322 double d_lambda = 0.1;
334 nSeg = int((
length/(d_lambda*lambda_f)+0.9)/2)*2 + 1;
399 for(
int i=0; i<
nSeg; i++ )
405 jacStamp[offset].resize( numIntVarsPerSegment + 2 );
426 nextMap[i] = numIntVarsPerSegment+1;
431 else if( i==(nSeg-1) )
446 nextMap[i] = numIntVarsPerSegment+1;
639 bool bsuccess =
true;
652 const std::vector<int> & extLIDVecRef)
657 #ifdef Xyce_DEBUG_DEVICE
660 Xyce::dout() << std::endl << section_divider << std::endl;
661 Xyce::dout() <<
" Instance::registerLIDs" << std::endl;
662 Xyce::dout() <<
" name = " <<
getName() << std::endl;
754 for(
int i=0; i<
nSeg; i++)
756 std::ostringstream segNumber;
758 std::string segNumStr = segNumber.str();
760 tmpstr =
getName() +
"_" +
"V" + segNumStr;
766 tmpstr =
getName() +
"_" +
"N" + segNumStr;
770 tmpstr =
getName() +
"_" +
"M" + segNumStr;
774 tmpstr =
getName() +
"_" +
"H" + segNumStr;
778 tmpstr =
getName() +
"_" +
"A" + segNumStr;
782 tmpstr =
getName() +
"_" +
"B" + segNumStr;
786 tmpstr =
getName() +
"_" +
"M_" + segNumStr;
790 tmpstr =
getName() +
"_" +
"H_" + segNumStr;
794 tmpstr =
getName() +
"_" +
"C" + segNumStr;
798 tmpstr =
getName() +
"_" +
"Ca" + segNumStr;
826 for(
int i=0, j=0; i<
nSeg; i++, j+=2)
852 bool returnVal=
false;
891 int numRows = jacLIDVec.size();
893 for(
int i=0; i< numRows; i++ )
895 int numCol = jacLIDVec[i].size();
897 for(
int j=0; j< numCol; j++ )
946 for(
int i=0, j=2; i<
nSeg; i++, j+=10 )
1028 bool bsuccess =
true;
1042 bool bsuccess =
true;
1057 bool bsuccess =
true;
1079 bool bsuccess =
true;
1087 for(
int i=0; i<
nSeg ; i++)
1131 double vIn = (*solVectorPtr)[
li_Pos];
1132 double vOut = (*solVectorPtr)[
li_Neg];
1138 for(
int i=0; i<
nSeg ; i++)
1144 if (i == (nSeg - 1))
1170 (*daeFVecPtr)[li_internalVars[i*
numIntVarsPerSegment]] += - gPrev * (vPrev - vSeg) - gNext * (vNext - vSeg);
1190 bool bsuccess =
true;
1195 for(
int i=0; i<
nSeg ; i++)
1235 bool bsuccess =
true;
1246 for(
int i=0; i<
nSeg ; i++)
1252 double gPrev =
gSeg;
1253 double gNext =
gSeg;
1285 bool bsuccess =
true;
1317 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
1342 ionChannelModelGiven(false),
1357 CaGammaGiven(false),
1359 hodgenHuxleyOn_(false),
1360 ConnorStevensOn_(false),
1362 potassiumOn_(false),
1365 membraneIndpVarsGiven(false),
1366 membraneIndpFEqusGiven(false),
1367 membraneIndpQEqusGiven(false)
1433 std::vector<Instance*>::iterator iter;
1437 for (iter=first; iter!=last; ++iter)
1469 std::vector<Instance*>::iterator iter;
1473 for (iter=first; iter!=last; ++iter)
1475 (*iter)->processParams();
1490 std::vector<Instance*>::const_iterator iter;
1498 os <<
"Number of Neuron instances: " << isize << std::endl;
1499 os <<
" name=\t\tmodelName\tParameters" << std::endl;
1500 for (i=0, iter=first; iter!=last; ++iter, ++i)
1502 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
1527 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1541 .registerDevice(
"neuron", 6)
1542 .registerModelType(
"neuron", 6);