51 #ifndef Xyce_N_DEV_Device_Template_h
52 #define Xyce_N_DEV_Device_Template_h
66 void could_not_find_model(
const Device &device,
const std::string &model_name,
const std::string &instance_name,
const std::string &netlist_path,
int line_number);
67 void duplicate_model_warning(
const Device &device,
const std::string &model_name,
const std::string &netlist_path,
int line_number);
111 typedef std::map<std::string, ModelType *, LessNoCase>
ModelMap ;
112 typedef std::map<std::string, DeviceEntity *, LessNoCase>
EntityMap;
163 const std::string & model_type_name,
195 for (
typename ModelMap::iterator model_it =
modelMap_.begin(); model_it !=
modelMap_.end(); ++model_it)
197 delete (*model_it).second;
244 EntityMap::iterator it =
entityMap_.find(entity_name);
263 EntityMap::const_iterator it =
entityMap_.find(entity_name);
280 return T::isLinearDevice();
293 return T::isPDEDevice();
310 for (
typename ModelMap::const_iterator it =
modelMap_.begin(); it !=
modelMap_.end(); ++it)
338 virtual bool updateState (
double * solVec,
double * staVec,
double * stoVec);
340 virtual bool loadDAEVectors (
double * solVec,
double * fVec,
double * qVec,
double * storeLeadF,
double * storeLeadQ) ;
341 virtual bool loadDAEMatrices (N_LAS_Matrix & dFdx, N_LAS_Matrix & dQdx) ;
412 return T::modelRequired();
429 std::pair<EntityMap::iterator, bool> result =
entityMap_.insert(EntityMap::value_type(name, entity));
434 virtual bool getBreakPoints(std::vector<Util::BreakPoint> & breakPointTimes);
478 if (model_name.empty())
480 if (isModelRequired())
486 model_name = defaultModelName_;
490 typename ModelMap::iterator it = modelMap_.find(model_name);
491 if (it == modelMap_.end())
500 instance->setDefaultParamName(T::instanceDefaultParameter());
502 addEntity(instance_block.
getName(), instance);
504 model.addInstance(instance);
506 instanceVector_.push_back(instance);
531 if (modelMap_.find(model_block.
name) != modelMap_.end())
541 modelMap_[model_block.
name] = model;
544 addEntity(model_block.
name, model);
597 bool bsuccess =
true;
599 for (
typename InstanceVector::iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
600 bsuccess = (*it)->getInstanceBreakPoints(breakPointTimes) && bsuccess;
625 bool bsuccess =
true;
627 for (
typename InstanceVector::iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
628 bsuccess = (*it)->updateSource() && bsuccess;
644 bool bsuccess =
true;
645 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
647 bool tmpBool = (*it)->updatePrimaryState();
648 bsuccess = bsuccess && tmpBool;
665 bool bsuccess =
true;
666 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
668 bool tmpBool = (*it)->updateSecondaryState ();
669 bsuccess = bsuccess && tmpBool;
686 bool bsuccess =
true;
687 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
689 bool tmpBool = (*it)->loadDAEFVector();
690 bsuccess = bsuccess && tmpBool;
691 tmpBool = (*it)->loadDAEQVector();
692 bsuccess = bsuccess && tmpBool;
709 bool bsuccess =
true;
710 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
712 bool tmpBool = (*it)->loadDAEdFdx();
713 bsuccess = bsuccess && tmpBool;
714 tmpBool = (*it)->loadDAEdQdx();
715 bsuccess = bsuccess && tmpBool;