46 #include <Xyce_config.h>
53 #include <N_UTL_Misc.h>
68 #include <N_ERH_ErrorMgr.h>
70 #include <N_LAS_Vector.h>
71 #include <N_LAS_Matrix.h>
72 #include <N_UTL_BreakPoint.h>
78 namespace NeuronPop1 {
94 .setDescription(
"Maximum number of neurons in the device");
97 .setDescription(
"Maximum number of internal connections in the device");
100 .setDescription(
"Maximum number of external connections in the device");
104 .setDescription(
"Rate in days of GC neurogenesis in the population");
108 .setDescription(
"Time in days for population updates");
110 .setDescription(
"Flag to save population variables" );
132 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
138 populationInitialized(false),
140 connectionTargetPopulationGiven(false),
141 numberOfUpdatesDone(0),
142 lastPopulationUpdateTime(0.0),
143 lastNeurogenesisUpdateTime(0.0),
144 outputPopulationVarsFlag(false),
145 newStateToOutput(false)
240 std::string filename(
"NeuronPop_" );
242 filename.append(
".dat" );
244 replace( filename.begin(), filename.end(),
'%',
'_' );
245 replace( filename.begin(), filename.end(),
':',
'_' );
248 outputFileStreamPtr->open( filename.c_str() );
249 if( !(*outputFileStreamPtr) )
251 std::string msg(
"Instance constructor.\n");
252 msg +=
"\tCould not open file for output of population variables. name =" +
getName();
253 N_ERH_ErrorMgr::report ( N_ERH_ErrorMgr::DEV_FATAL,msg);
255 (*outputFileStreamPtr).setf(std::ios::scientific, std::ios::floatfield );
256 (*outputFileStreamPtr).width(20);
257 (*outputFileStreamPtr).precision(12);
303 bool bsuccess =
true;
316 const std::vector<int> & extLIDVecRef)
321 #ifdef Xyce_DEBUG_DEVICE
324 Xyce::dout() << std::endl << section_divider << std::endl;
325 Xyce::dout() <<
" Instance::registerLIDs" << std::endl;
326 Xyce::dout() <<
" name = " <<
getName() << std::endl;
354 std::ostringstream segNumber;
356 std::string segNumStr = segNumber.str();
358 tmpstr = name +
"_" +
"V" + segNumStr;
360 intNameMap[ li_internalVars[i*numIntVarsPerSegment] ] = tmpstr;
406 bool returnVal=
false;
439 int numRows = jacLIDVec.size();
463 const double random_max = std::pow(2.0,31)-1;
471 #ifdef Xyce_DEBUG_DEVICE
474 Xyce::dout() <<
"Instance::initializePopulation "
483 for(
int i=0; i<maxPopSize; i++)
488 staVector[ liNeuronPopState[
model_.
neuronsMax + i ] ] = (rand()/random_max);
490 staVector[ liNeuronPopState[2 *
model_.
neuronsMax + i ] ] = (rand()/random_max);
494 for(
int i=0; i<maxPopSize; i++)
499 for(; k<numConnections; k++)
501 int postNeuron = (rand()/random_max) * maxPopSize;
541 #ifdef Xyce_DEBUG_DEVICE
544 Xyce::dout() <<
"Instance::updatePopulation "
599 bool bsuccess =
true;
619 #ifdef Xyce_DEBUG_DEVICE
622 Xyce::dout() <<
" Instance::updateIntermediateVars\n";
628 #ifdef Xyce_DEBUG_DEVICE
631 Xyce::dout() <<
" Time = " << time << std::endl;
667 bool bsuccess =
true;
683 bool bsuccess =
true;
698 bool bsuccess =
true;
740 bool bsuccess =
true;
759 bool bsuccess =
true;
782 bool bsuccess =
true;
797 (*outputFileStreamPtr)
832 (*outputFileStreamPtr) <<
", ";
836 (*outputFileStreamPtr) << std::endl;
855 bool bsuccess =
true;
887 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
889 neuronsMaxGiven(false),
890 internalMaxConnections(0),
891 internalMaxConnectionsGiven(false),
892 externalMaxConnections(0),
893 externalMaxConnectionsGiven(false),
894 populationNeurogenesisRate(0.0),
895 populationNeurogenesisRateGiven(false),
896 populationUpdatePeriod(0.0),
897 populationUpdatePeriodGiven(false),
898 outputPopulationVars(0)
931 std::vector<Instance*>::iterator iter;
935 for (iter=first; iter!=last; ++iter)
967 std::vector<Instance*>::iterator iter;
971 for (iter=first; iter!=last; ++iter)
973 (*iter)->processParams();
988 std::vector<Instance*>::const_iterator iter;
996 os <<
"Number of Neuron instances: " << isize << std::endl;
997 os <<
" name=\t\tmodelName\tParameters" << std::endl;
998 for (i=0, iter=first; iter!=last; ++iter, ++i)
1000 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
1025 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
1039 .registerDevice(
"neuronpop", 1)
1040 .registerModelType(
"neuronpop", 1);