46 #include <Xyce_config.h>
50 #if defined(HAVE_UNORDERED_MAP)
51 #include <unordered_map>
52 using std::unordered_map;
53 #elif defined(HAVE_TR1_UNORDERED_MAP)
54 #include <tr1/unordered_map>
55 using std::tr1::unordered_map;
57 #error neither unordered_map or tr1/unordered_map found
67 #include <N_LAS_Vector.h>
68 #include <N_UTL_BreakPoint.h>
69 #include <N_UTL_Diagnostic.h>
70 #include <N_UTL_Expression.h>
71 #include <N_UTL_FeatureTest.h>
88 const std::string & netlist_filename,
90 : parametricData_(parametric_data),
91 solState_(solver_state),
92 globals_(solver_state.getGlobals()),
93 devOptions_(device_options),
95 netlistLocation_(netlist_filename, netlist_line)
131 DevelFatal(*this).in(
"DeviceEntity::scaleParam") <<
"Unrecognized parameter " << paramName;
138 DevelFatal(*this).in(
"DeviceEntity::scaleParam") <<
"Original value not available for parameter " << paramName;
142 if (!param.
isType<
double>())
144 DevelFatal(*this).in(
"DeviceEntity::scaleParam") <<
"Can scale only double parameters, parameter " << paramName <<
" is not double";
151 if (param.hasGivenMember())
152 param.setGiven(*
this,
true);
176 DevelFatal(*this).in(
"DeviceEntity::scaleParam") <<
"Unrecognized parameter " << paramName;
183 DevelFatal(*this).in(
"DeviceEntity::scaleParam") <<
"Original value not available for parameter " << paramName;
187 if (!param.
isType<
double>())
189 DevelFatal(*this).in(
"DeviceEntity::scaleParam") <<
"Can scale only double parameters, parameter " << paramName <<
" is not double";
217 DevelFatal(*this).in(
"DeviceEntity::scaleDefaultParam") <<
"Device does not have a default parameter";
237 DevelFatal(*this).in(
"DeviceEntity::analyticSensitivityAvailable") <<
"Unrecognized parameter " << paramName;
254 std::vector<double> & dfdpVec,
255 std::vector<double> & dqdpVec,
256 std::vector<double> & dbdpVec,
257 std::vector<int> & FindicesVec,
258 std::vector<int> & QindicesVec,
259 std::vector<int> & BindicesVec)
264 DevelFatal(*this).in(
"DeviceEntity::analyticSensitivityAvailable") <<
"Unrecognized parameter " << paramName;
271 FindicesVec, QindicesVec, BindicesVec);
297 Xyce::dout() <<
"DeviceEntity::setParam with paramname" << paramName <<
" value " << val <<
" overrideOriginal " << overrideOriginal << std::endl;
309 if (param.
isType<
double>())
310 param.
value<
double>(*this) = val;
311 else if (param.
isType<
int>())
312 param.
value<
int>(*this) = static_cast <
int> (val);
313 else if (param.
isType<
long>())
314 param.
value<
long>(*
this) = static_cast <
long> (val);
315 else if (param.
isType<
bool>())
316 param.
value<
bool>(*
this) = (val != 0);
318 DevelFatal0(*
this) <<
"Illegal type for parameter " << paramName;
329 Xyce::dout() <<
" Overriding original value for parameter " << paramName <<
" with value " << val << std::endl;
353 const std::string & name,
354 double & result)
const
364 if (param.
isType<
double>())
365 val = param.
value<
double>(*this);
366 else if (param.
isType<
int>())
367 val = static_cast <
double> (param.
value<
int>(*this));
368 else if (param.
isType<
long>())
369 val = static_cast <double> (param.
value<
long>(*
this));
370 else if (param.
isType<
bool>())
372 if (param.
value<
bool>(*
this))
379 DevelFatal(*this).in(
"DeviceEntity::getParam") <<
"Illegal type for parameter " << name;
405 DevelFatal(*this).in(
"DeviceEntity::setDefaultParam") <<
"Device does not have a default parameter";
455 dependentParam.
expr->evaluateFunction (rval);
472 std::vector<double> *res,
485 dependentParam.
expr->evaluateFunction (rval);
504 std::vector<std::string> instances, leads, names, variables;
506 dependentParam.
name = par.tag();
509 dependentParam.
expr =
new Util::Expression (
"(" + par.stringValue() +
")+CONSTCtoK");
510 dependentParam.
expr->make_constant (std::string(
"CONSTCTOK"),
CONSTCtoK);
514 dependentParam.
expr =
new Util::Expression (par.getValue<Util::Expression>());
522 dependentParam.
expr->get_names(XEXP_NODE, names);
523 dependentParam.
expr->get_names(XEXP_LEAD, leads);
524 dependentParam.
expr->get_names(XEXP_INSTANCE, instances);
525 dependentParam.
expr->get_names(XEXP_VARIABLE, variables);
528 std::vector<std::string>::iterator iterS;
532 if (names.size() > 0 || instances.size() > 0)
534 UserError0(*
this) <<
"Parameter " << par.tag() <<
" is not allowed to depend on voltage/current values";
539 if (dependentParam.
expr->get_num(XEXP_SPECIAL) > 0)
541 UserError0(*
this) <<
"Parameter " << par.tag() <<
" is not allowed to depend on time";
547 if (leads.size() > 0)
551 for (std::vector<std::string>::const_iterator n_i=leads.begin(); n_i != leads.end(); ++n_i)
553 index = n_i->find_last_of(
":");
554 if (index == std::string::npos )
557 type = (*n_i)[index+1];
559 if (type !=
'B' && type !=
'E' && type !=
'H')
561 UserError(*
this) <<
"Illegal use of lead current specification in expression '" << dependentParam.
expr->get_expression()
562 <<
"' in parameter " << par.tag();
565 names.insert( names.end(), leads.begin(), leads.end() );
568 names.insert( names.end(), instances.begin(), instances.end() );
571 dependentParam.
n_vars = names.size();
572 dependentParam.
vals.resize(dependentParam.
n_vars);
573 int expVarLen = dependentParam.
lo_var+dependentParam.
n_vars;
578 if (!variables.empty())
579 names.insert( names.end(), variables.begin(), variables.end() );
581 if ( !names.empty() )
585 dependentParam.
expr->order_names( names );
587 for (
int i=0 ; i<dependentParam.
n_vars ; ++i)
590 if (dependentParam.
n_vars > 0)
592 std::vector<double> zeros;
593 zeros.resize(dependentParam.
n_vars);
594 for (
int i=0 ; i<dependentParam.
n_vars ; ++i)
596 dependentParam.
expr->set_vars(zeros);
600 if (!variables.empty())
602 for (iterS=variables.begin() ; iterS!=variables.end() ; ++iterS)
607 UserError(*
this) <<
"Global parameter " << *iterS <<
" not found";
610 dependentParam.
expr->set_var(*iterS, (*global_param_it).second);
630 bool changed =
false;
632 for ( ; dpIter != end ; ++dpIter)
637 if (dpIter->n_vars > 0)
639 int hi = dpIter->lo_var+dpIter->n_vars;
640 for (
int i = dpIter->lo_var; i < hi; ++i)
645 if (dpIter->expr->set_vars(
eVarVals))
648 dpIter->expr->evaluateFunction (rval);
649 if (dpIter->vectorIndex==-1)
650 *(dpIter->resultU.result) = rval;
652 (*(dpIter->resultU.resVec))[dpIter->vectorIndex] = rval;
672 bool changed =
false;
674 for ( ; dpIter != end ; ++dpIter)
676 if (!dpIter->global_params.empty())
678 std::vector<std::string>::iterator gp=dpIter->global_params.begin();
679 std::vector<std::string>::iterator gend=dpIter->global_params.end();
680 for ( ; gp != gend; ++gp)
682 if (global_map.find(*gp) == global_map.end())
684 DevelFatal(*this).in(
"DeviceEntity::updateGlobalParameters") <<
"Failed to find global parameter " << *gp;
686 if (dpIter->expr->set_var(*gp, global_map[*gp]))
706 bool changed =
false;
710 for ( ; dpIter != end; ++dpIter)
714 dpIter->expr->evaluateFunction (rval);
715 if (dpIter->vectorIndex == -1)
716 *(dpIter->resultU.result) = rval;
718 (*(dpIter->resultU.resVec))[dpIter->vectorIndex] = rval;
736 bool changed =
false;
740 for ( ; dpIter != end; ++dpIter)
742 if (dpIter->expr->set_sim_time(
getSolverState().currTime ) || dpIter->expr->set_temp(tempIn))
744 dpIter->expr->evaluateFunction (rval);
745 if (dpIter->vectorIndex == -1)
746 *(dpIter->resultU.result) = rval;
748 (*(dpIter->resultU.resVec))[dpIter->vectorIndex] = rval;
769 for ( ; dpIter != end; ++dpIter)
771 bTime = dpIter->expr->get_break_time();
773 breakPointTimes.push_back(Util::BreakPoint(bTime));
789 ParameterMap::const_iterator it =
getParameterMap().find(parameter_name);
791 DevelFatal0(*this).in(
"DeviceEntity::given") <<
"Unrecognized parameter " << parameter_name;
807 std::vector<std::string> composite_name_list;
808 unordered_map<std::string, std::vector<CompositeParam *>, HashNoCase, EqualNoCase> composite_parameter_map;
809 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
811 Xyce::dout() << std::endl <<
"In DeviceEntity::setParams, for ";
813 Xyce::dout() <<
" parameters are:" << std::endl;
814 for (std::vector<Param>::const_iterator it = begin; it != end; ++it)
816 const Param ¶m = *it;
817 Xyce::dout() <<
"Param = " << param.tag() <<
", Type = ";
818 int tmpType = param.getType();
822 Xyce::dout() <<
"STR";
825 Xyce::dout() <<
"DBLE";
828 Xyce::dout() <<
"INT";
831 Xyce::dout() <<
"LNG";
834 Xyce::dout() <<
"EXPR";
837 Xyce::dout() <<
"BOOL";
840 Xyce::dout() <<
"STR_VEC";
843 Xyce::dout() <<
"INT_VEC";
846 Xyce::dout() <<
"DBLE_VEC";
848 case Util::DBLE_VEC_IND:
849 Xyce::dout() <<
"DBLE_VEC_IND";
851 case Util::COMPOSITE:
852 Xyce::dout() <<
"COMPOSITE";
855 Xyce::dout() <<
"Unknown";
857 Xyce::dout() <<
", Value = " << param.stringValue();
861 Xyce::dout() <<
" given=TRUE";
865 Xyce::dout() <<
" given=FALSE";
870 Xyce::dout() <<
" default=TRUE" << std::endl;
874 Xyce::dout() <<
" default=FALSE" << std::endl;
877 Xyce::dout() << std::endl;
880 for (std::vector<Param>::const_iterator param_it = begin; param_it != end; ++param_it)
882 Param ¶m =
const_cast<Param &
>(*param_it);
884 const std::string &tag = param.tag();
887 ParameterMap::const_iterator entity_parameter_it = entity.
getParameterMap().find(tag);
890 const Descriptor &descriptor = *(*entity_parameter_it).second;
897 else if (descriptor.
getGiven(entity))
906 if ( param.getType() == Util::EXPR )
908 if (descriptor.
isType<
double>())
913 else if (descriptor.
isType<std::vector<double> >())
915 int ind = (descriptor.
value<std::vector<double> >(entity)).size();
917 (descriptor.
value<std::vector<double> >(entity)).push_back(val);
921 DevelFatal(entity).in(
"DeviceEntity::setParams") <<
"Non double param " << tag <<
" cannot be set to expression";
926 if (descriptor.
isType<
double>())
928 if (!param.isNumeric())
930 UserError(entity) <<
"Cannot convert parameter " << tag <<
" to a numeric value from " << param.stringValue();
934 descriptor.
value<
double>(entity) = param.getImmutableValue<
double>();
944 else if (descriptor.
isType<std::string>())
946 descriptor.
value<std::string>(entity) = param.stringValue();
948 else if (descriptor.
isType<
int>())
950 if (!param.isInteger())
952 UserError(entity) <<
"Cannot convert parameter " << tag <<
" to an integer value from " << param.stringValue();
955 descriptor.
value<
int>(entity) = param.getImmutableValue<
int>();
961 else if (descriptor.
isType<
long>())
963 if (!param.isInteger())
965 UserError(entity) <<
"Cannot convert parameter " << tag <<
" to an integer value from " << param.stringValue();
968 descriptor.
value<
long>(entity) = param.getImmutableValue<
long>();
974 else if (descriptor.
isType<
bool>())
978 UserError(entity) <<
"Cannot convert parameter " << tag <<
" to a logical value from " << param.stringValue();
981 descriptor.
value<
bool>(entity) = param.getImmutableValue<
bool>();
984 if (descriptor.
value<
bool>(entity))
994 else if (descriptor.
isType<std::vector<int> >())
996 if (param.getType() == Util::INT_VEC)
998 (descriptor.
value<std::vector<int> >(entity)) = param.getValue<std::vector<int> >();
1000 else if (param.getType() == Util::INT)
1002 (descriptor.
value<std::vector<int> >(entity)).push_back(param.getImmutableValue<
int>());
1005 else if (descriptor.
isType<std::vector<double> >())
1007 if (param.getType() == Util::DBLE_VEC)
1009 (descriptor.
value<std::vector<double> >(entity)) = param.getValue<std::vector<double> >();
1011 else if (param.getType() == Util::DBLE)
1013 (descriptor.
value<std::vector<double> >(entity)).push_back(param.getImmutableValue<
double>());
1016 else if (descriptor.
isType<std::vector<std::string> >())
1018 if (param.getType() == Util::STR_VEC)
1020 (descriptor.
value<std::vector<std::string> >(entity)) = param.getValue<std::vector<std::string> >();
1022 else if (param.getType() == Util::STR)
1024 (descriptor.
value<std::vector<std::string> >(entity)).push_back(param.stringValue());
1029 composite_parameter_map[tag].clear();
1030 composite_name_list.push_back(tag);
1041 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
1043 Xyce::dout() <<
"pushing back composite " << tag << std::endl;
1048 DevelFatal(entity).in(
"DeviceEntity::setParams") <<
"Unknown type";
1055 else if (param.stringValue() ==
"VECTOR")
1062 bool vc_stat =
false;
1064 std::string::size_type dot = tag.find_first_of(
'.');
1065 if (dot != std::string::npos)
1067 for (std::vector<std::string>::const_iterator it = composite_name_list.begin(); it != composite_name_list.end(); ++it)
1069 const std::string &composite_name = *it;
1071 if (tag.find(composite_name) == 0)
1073 std::string param_name(tag.begin() + dot + 1, tag.end());
1079 std::istringstream is(std::string(tag.begin() + composite_name.size(), tag.begin() + dot));
1083 if (param_name ==
"NAME")
1085 if (n != composite_parameter_map[composite_name].size())
1087 DevelFatal(entity).in(
"DeviceEntity::setParams") <<
"Error filling 'NAME' vector param " << composite_name;
1090 std::string name = param.stringValue();
1092 composite_parameter_map[composite_name].push_back(composite);
1097 if (n >= composite_parameter_map[composite_name].size())
1099 DevelFatal(entity).in(
"DeviceEntity::setParams") <<
"Internal error in vector-composite, 'NAME' must come first " << composite_name;
1108 DevelFatal(entity) <<
"Undefined parameter " << tag <<
", this parameter is in metadata, but not recognized in constructor";
1113 if (!composite_name_list.empty())
1115 for (std::vector<std::string>::const_iterator name_it = composite_name_list.begin(); name_it != composite_name_list.end(); ++name_it)
1117 const std::string &vcs = *name_it;
1119 for (std::vector<CompositeParam *>::iterator it = composite_parameter_map[vcs].begin(); it != composite_parameter_map[vcs].end(); ++it)
1121 (*it)->processParams();
1140 ParameterMap::const_iterator p_i = composite_param.
getParameterMap().find(pName);
1146 if (ndParam.
given())
1148 else if (p.
getGiven(composite_param))
1156 p.
value<
double>(composite_param) = ndParam.getImmutableValue<
double>();
1162 else if (p.
isType<std::string>())
1164 p.
value<std::string>(composite_param) = ndParam.stringValue();
1166 else if (p.
isType<
int>())
1168 p.
value<
int>(composite_param) = ndParam.getImmutableValue<
int>();
1172 else if (p.
isType<
long>())
1174 p.
value<
long>(composite_param) = ndParam.getImmutableValue<
long>();
1178 else if (p.
isType<
bool>())
1180 p.
value<
bool>(composite_param) = (ndParam.getImmutableValue<
double>() != 0.0);
1183 if (p.
value<
bool>(composite_param))
1189 else if (p.
isType<std::vector<double> >())
1191 (p.
value<std::vector<double> >(composite_param)).push_back(ndParam.getImmutableValue<
double>());
1193 else if (p.
isType<std::vector<std::string> >())
1195 p.
value<std::vector<std::string> >(composite_param).push_back(ndParam.stringValue());
1199 Report::DevelFatal().in(
"CompositeParam::setParams") <<
"Unknown parameter type for " << pName;
1205 Report::DevelFatal().in(
"CompositeParam::setParams") <<
"Undefined parameter " << pName << std::endl
1206 <<
"This parameter is in metadata, but not recognized in constructor";
1213 for (ParameterMap::const_iterator it = parameter_map.begin(); it != parameter_map.end(); ++it)
1217 if (param.
isType<
double>())
1223 val = getDefaultValue<double>(param) -
CONSTCtoK;
1225 val = getDefaultValue<double>(param);
1226 param_list.push_back(
Param((*it).first, val));
1228 else if (param.
getVec() > 0)
1233 std::string vPar((*it).first.substr(0, (*it).first.size()-1));
1234 param_list.push_back(
Param(vPar,
"VECTOR"));
1239 double val = getDefaultValue<double>(param);
1240 param_list.push_back(
Param((*it).first, val));
1243 else if (param.
isType<
bool>())
1246 param_list.push_back(
Param((*it).first, getDefaultValue<bool>(param)));
1247 else if (param.
getVec() > 0)
1251 std::string vPar((*it).first.substr(0, (*it).first.size()-1));
1252 param_list.push_back(
Param(vPar,
"VECTOR"));
1257 bool val = getDefaultValue<bool>(param);
1258 param_list.push_back(
Param((*it).first, val));
1261 else if (param.
isType<
int>())
1264 param_list.push_back(
Param((*it).first, getDefaultValue<int>(param)));
1265 else if (param.
getVec() > 0)
1269 std::string vPar((*it).first.substr(0, (*it).first.size()-1));
1270 param_list.push_back(
Param(vPar,
"VECTOR"));
1272 int val = getDefaultValue<int>(param);
1273 param_list.push_back(
Param((*it).first, val));
1276 else if (param.
isType<std::string>())
1279 param_list.push_back(
Param((*it).first, getDefaultValue<std::string>(param)));
1280 else if (param.
getVec() > 0)
1284 std::string vPar((*it).first.substr(0, (*it).first.size()-1));
1285 param_list.push_back(
Param(vPar,
"VECTOR"));
1287 std::string val = getDefaultValue<std::string>(param);
1288 param_list.push_back(
Param((*it).first, val));
1291 else if (param.
isType<std::vector<std::string> >())
1293 Param vc((*it).first, std::vector<std::string>());
1294 param_list.push_back(vc);
1296 else if (param.
isType<std::vector<double> >())
1298 Param vc((*it).first, std::vector<double>());
1299 param_list.push_back(vc);
1303 Param vc2((*it).first,
"VECTOR-COMPOSITE");
1305 param_list.push_back(vc2);
1307 std::vector<Param> compositeParams;
1312 Report::DevelFatal().in(
"populateParams") <<
"Vector-composite map for device type entity empty.";
1320 for (ParameterMap::const_iterator it4 = e.find(
"NAME"); it4 != e.end();) {
1323 compositeParams.push_back(
Param((*it4).first, getDefaultValue<double>(p)));
1324 else if (p.
isType<
bool>())
1325 compositeParams.push_back(
Param((*it4).first, getDefaultValue<bool>(p)));
1326 else if (p.
isType<
int>())
1327 compositeParams.push_back(
Param((*it4).first, getDefaultValue<int>(p)));
1328 else if (p.
isType<std::string>())
1329 compositeParams.push_back(
Param((*it4).first, getDefaultValue<std::string>(p)));
1330 if ((*it4).first ==
"NAME")
1334 if (it4 != e.end() && (*it4).first ==
"NAME")
1338 composite_param_map[(*it).first] = compositeParams;
1343 Xyce::dout() <<
"In final else clause of DeviceEntity::getParams().";
1344 if( param.
isType<std::vector<std::string> >() )
1345 Xyce::dout() <<
" type is STR_VEC ";
1346 if( param.
isType<std::vector<double> >() )
1347 Xyce::dout() <<
" type is DBLE_VEC ";
1348 Xyce::dout() << it->first <<
" this item is NOT being added to default parameter list." << std::endl;
int getVec() const
Gets the vector length of a vectorized parameter.
std::string defaultParamName_
bool updateDependentParameters()
bool getParam(const std::string ¶mName, double &result) const
void setOriginalValue(ParameterBase ¶meter_base, int serial_number, double value)
Set a parameter's original value.
bool given(const std::string ¶meter_name) const
Pure virtual class to augment a linear system.
unordered_map< std::string, Descriptor *, HashNoCase, EqualNoCase > ParameterMap
virtual CompositeParam * constructComposite(const std::string &composite_name, const std::string ¶m_name)
Parameter can only be set to a constant from netlist.
DeviceEntity(ParametricData< void > ¶metric_data, const SolverState &solver_state, const DeviceOptions &device_options, const std::string &netlist_filename, int netlist_line)
bool getAnalyticSensitivityAvailable() const
returns a boolean to indicate if analytic sensitivities are available w.r.t. this parameter...
bool getGiven(ParameterBase &entity) const
Tests if the parameter has been given by the netlist.
bool getAnalyticSensitivity(const std::string ¶mName, std::vector< double > &dfdpVec, std::vector< double > &dqdpVec, std::vector< double > &dbdpVec, std::vector< int > &FindicesVec, std::vector< int > &QindicesVec, std::vector< int > &BindicesVec)
std::vector< double > * resVec
bool isTempParam(const std::string &name)
Returns true if the name is TNOM or TEMP.
bool scaleDefaultParam(double val)
double setDependentParameter(Util::Param &, double *, ParameterType::ExprAccess)
void setDefault(bool is_default)
const ParameterMap & getParameterMap() const
std::vector< double > vals
double getOriginalValue(ParameterBase ¶meter_base, int serial_number)
Retrieve a parameter's original value.
void setParameters(CompositeParam &composite_param, const std::string &pName, const Param &ndParam)
bool hasGivenMember() const
Tests if parameter has a given data member.
const T & value(const ParameterBase &entity) const
Returns the value of the parameter for the entity.
union Xyce::Device::Depend::resUnion resultU
Class ParametricData manages the configuration information and the parameter binding map...
std::vector< std::string > global_params
ExprAccess getExpressionAccess() const
Gets the expression access which describes the usage of the paramter.
bool setDefaultParam(double val, bool overrideOriginal=false)
std::vector< Depend > dependentParams_
const ParametricData< U > * getCompositeParametricData() const
Return the composite parameter.
void setValueGiven(ParameterBase ¶meter_base, int serial_number, bool value)
Set the given value state of a parameter.
Class Descriptor describes the parameters stored in the ParametricData parameter map.
void setDefaultParameters(ParameterBase ¶meter_base, ParameterMap::const_iterator begin, ParameterMap::const_iterator end, const DeviceOptions &device_options)
Set the default values for the parameter.
virtual std::ostream & printName(std::ostream &os) const =0
std::vector< int > expVarLIDs
bool wasValueGiven(const ParameterBase ¶meter_base, int serial_number)
Return true if a value was provided for the device.
bool hasCompositeData() const
bool getParamBreakpoints(std::vector< Util::BreakPoint > &)
std::vector< int > expVarGIDs
bool getAnalyticSensitivity(const ParameterBase &entity1, const std::string &name, std::vector< double > &dfdp, std::vector< double > &dqdp, std::vector< double > &dbdp, std::vector< int > &Findices, std::vector< int > &Qindices, std::vector< int > &Bindices) const
returns analytic sensitivity, evaluated at the most recent solve point.
bool analyticSensitivityAvailable(const std::string ¶mName)
std::vector< double > eVarVals
const SolverState & getSolverState() const
bool hasOriginalValueStored() const
Returns whether an original value has been stored.
int getSerialNumber() const
Gets the serial number used to store and retireve given boolean fromt he GivenValueMap.
void populateParams(const ParameterMap ¶meter_map, std::vector< Param > ¶m_list, CompositeParamMap &composite_param_map)
std::map< std::string, std::vector< Param >, LessNoCase > CompositeParamMap
unordered_map< std::string, double, HashNoCase, EqualNoCase > GlobalParameterMap
void setGiven(ParameterBase &entity, bool value) const
Sets the given state of the parameter to value.
std::vector< double > expVarVals
bool scaleParam(const std::string ¶mName, double val, double val0)
double getDefaultParam() const
bool setParam(const std::string ¶mName, double val, bool overrideOriginal=false)
bool isType() const
Tests entry data type.
GlobalParameterMap global_params
Parameter may be specified as a solution dependent expression from netlist.
Manages parameter binding for class C.
bool updateGlobalParameters(GlobalParameterMap &)
std::vector< std::string > expVarNames
CompositeParam is the base class for classes that wish to only manage the processing of parameter dat...
const ParameterMap & getParameterMap() const
getParameterMap returns the parameter map which describes the parameters.