51 #ifndef Xyce_N_DEV_Device_Template_h
52 #define Xyce_N_DEV_Device_Template_h
67 void could_not_find_model_error(
const Device &device,
const std::string &model_name,
const std::string &instance_name,
const NetlistLocation &netlist_location);
68 void duplicate_model_warning(
const Device &device,
const DeviceModel &model,
const NetlistLocation &netlist_location);
69 void duplicate_instance_warning(
const Device &device,
const DeviceInstance &instance,
const NetlistLocation &netlist_location);
70 void duplicate_entity_warning(
const Device &device,
const DeviceEntity &entity,
const NetlistLocation &netlist_location);
114 typedef std::map<std::string, ModelType *, LessNoCase>
ModelMap;
115 typedef std::map<std::string, InstanceType *, LessNoCase>
InstanceMap;
159 for (
typename ModelMap::iterator model_it =
modelMap_.begin(); model_it !=
modelMap_.end(); ++model_it)
161 delete (*model_it).second;
209 typename ModelMap::iterator it =
modelMap_.find(model_name);
228 typename ModelMap::const_iterator it =
modelMap_.find(model_name);
266 typename InstanceMap::const_iterator it =
instanceMap_.find(instance_name.getEncodedName());
283 return T::isLinearDevice();
296 return T::isPDEDevice();
313 for (
typename ModelMap::const_iterator it =
modelMap_.begin(); it !=
modelMap_.end(); ++it)
341 virtual bool updateState (
double * solVec,
double * staVec,
double * stoVec);
343 virtual bool loadDAEVectors (
double * solVec,
double * fVec,
double * qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ) ;
344 virtual bool loadDAEMatrices (N_LAS_Matrix & dFdx, N_LAS_Matrix & dQdx) ;
415 return T::modelRequired();
419 virtual bool getBreakPoints(std::vector<Util::BreakPoint> & breakPointTimes);
462 if (model_name.empty())
464 if (isModelRequired())
471 typename ModelMap::iterator it = modelMap_.find(defaultModelName_);
472 if (it == modelMap_.end())
474 addModel(
ModelBlock(defaultModelName_), factory_block);
476 model_name = defaultModelName_;
480 typename ModelMap::iterator it = modelMap_.find(model_name);
481 if (it == modelMap_.end())
489 std::pair<typename InstanceMap::iterator, bool> result = instanceMap_.insert(
typename InstanceMap::value_type(instance_block.
getInstanceName().
getEncodedName(),
typename InstanceMap::mapped_type(0)));
493 instance->setDefaultParamName(T::instanceDefaultParameter());
495 (*result.first).second = instance;
497 model.addInstance(instance);
499 instanceVector_.push_back(instance);
509 return (*result.first).second;
533 std::pair<typename ModelMap::iterator, bool> result = modelMap_.insert(
typename ModelMap::value_type(model_block.
getName(),
typename ModelMap::mapped_type(0)));
538 (*result.first).second = model;
540 if (instanceMap_.find(model_block.
getName()) != instanceMap_.end())
548 return (*result.first).second;
599 bool bsuccess =
true;
601 for (
typename InstanceVector::iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
602 bsuccess = (*it)->getInstanceBreakPoints(breakPointTimes) && bsuccess;
627 bool bsuccess =
true;
629 for (
typename InstanceVector::iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
630 bsuccess = (*it)->updateSource() && bsuccess;
646 bool bsuccess =
true;
647 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
649 bool tmpBool = (*it)->updatePrimaryState();
650 bsuccess = bsuccess && tmpBool;
667 bool bsuccess =
true;
668 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
670 bool tmpBool = (*it)->updateSecondaryState ();
671 bsuccess = bsuccess && tmpBool;
688 bool bsuccess =
true;
689 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
691 bool tmpBool = (*it)->loadDAEFVector();
692 bsuccess = bsuccess && tmpBool;
693 tmpBool = (*it)->loadDAEQVector();
694 bsuccess = bsuccess && tmpBool;
695 #ifdef SEPARATE_F_AND_B
696 tmpBool = (*it)->loadDAEBVector();
697 bsuccess = bsuccess && tmpBool;
715 bool bsuccess =
true;
716 for (
typename InstanceVector::const_iterator it = instanceVector_.begin(); it != instanceVector_.end(); ++it)
718 bool tmpBool = (*it)->loadDAEdFdx();
719 bsuccess = bsuccess && tmpBool;
720 tmpBool = (*it)->loadDAEdQdx();
721 bsuccess = bsuccess && tmpBool;