Skip to content

Commit

Permalink
- fix nominal values for the *_init.xml file (see #2597)
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19239 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Feb 21, 2014
1 parent 7339d12 commit 0d7e46f
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 11 deletions.
7 changes: 4 additions & 3 deletions Compiler/BackEnd/SimCodeUtil.mo
Expand Up @@ -10420,10 +10420,11 @@ algorithm

case (BackendDAE.VAR(varType = DAE.T_REAL(source = _), values = dae_var_attr)) equation
e = DAEUtil.getNominalAttrFail(dae_var_attr);
true = Expression.isConstValue(e);
// lochel: #2597
// true = Expression.isConstValue(e);
then SOME(e);
case (_) equation

case (_)
then NONE();
end matchcontinue;
end getNominalValue;
Expand Down
1 change: 0 additions & 1 deletion Compiler/Template/CodegenC.tpl
Expand Up @@ -1748,7 +1748,6 @@ template functionUpdateBoundVariableAttributes(list<SimEqSystem> startValueEquat
<%nominalValueEquations |> SES_SIMPLE_ASSIGN(__) =>
<<
$P$ATTRIBUTE<%cref(cref)%>.nominal = <%cref(cref)%>;
$P$ATTRIBUTE<%cref(cref)%>.useNominal = ((modelica_boolean) 1);
infoStreamPrint(LOG_INIT, 0, "%s(nominal=<%crefToPrintfArg(cref)%>)", <%cref(cref)%>__varInfo.name, (<%crefType(cref)%>) $P$ATTRIBUTE<%cref(cref)%>.nominal);
>>
;separator="\n"%>
Expand Down
15 changes: 13 additions & 2 deletions Compiler/Template/CodegenUtil.tpl
Expand Up @@ -195,12 +195,23 @@ template ScalarVariableTypeFixedAttribute(Boolean isFixed)
' fixed="<%isFixed%>"'
end ScalarVariableTypeFixedAttribute;

template NominalString(DAE.Exp exp)
::=
match exp
case ICONST(__) then ' nominal="<%initValXml(exp)%>"'
case RCONST(__) then ' nominal="<%initValXml(exp)%>"'
case SCONST(__) then ' nominal="<%initValXml(exp)%>"'
case BCONST(__) then ' nominal="<%initValXml(exp)%>"'
else ''
end NominalString;

template ScalarVariableTypeNominalAttribute(Option<DAE.Exp> nominalValue)
"generates code for nominal attribute"
::=
match nominalValue
case SOME(exp) then ' useNominal="true" nominal="<%initValXml(exp)%>"'
case NONE() then ' useNominal="false" nominal="1.0"'
case SOME(exp)
then ' useNominal="true"<%NominalString(exp)%>'
case NONE() then ' useNominal="false"'
end ScalarVariableTypeNominalAttribute;

template ScalarVariableTypeUnitAttribute(String unit)
Expand Down
10 changes: 5 additions & 5 deletions SimulationRuntime/c/simulation/simulation_input_xml.cpp
Expand Up @@ -408,10 +408,10 @@ void read_input_xml(MODEL_DATA* modelData,

/* read var attribute */
read_value(mi.rSta[i]["useStart"], (modelica_boolean*)&(modelData->realVarsData[i].attribute.useStart));
read_value(mi.rSta[i]["start"], &(modelData->realVarsData[i].attribute.start), 0);
read_value(mi.rSta[i]["start"], &(modelData->realVarsData[i].attribute.start), 0.0);
read_value(mi.rSta[i]["fixed"], (modelica_boolean*)&(modelData->realVarsData[i].attribute.fixed));
read_value(mi.rSta[i]["useNominal"], (modelica_boolean*)&(modelData->realVarsData[i].attribute.useNominal));
read_value(mi.rSta[i]["nominal"], &(modelData->realVarsData[i].attribute.nominal), 1);
read_value(mi.rSta[i]["nominal"], &(modelData->realVarsData[i].attribute.nominal), 1.0);
read_value(mi.rSta[i]["min"], &(modelData->realVarsData[i].attribute.min), REAL_MIN);
read_value(mi.rSta[i]["max"], &(modelData->realVarsData[i].attribute.max), REAL_MAX);

Expand Down Expand Up @@ -458,7 +458,7 @@ void read_input_xml(MODEL_DATA* modelData,
read_value(mi.rDer[i]["start"], &(modelData->realVarsData[modelData->nStates+i].attribute.start), 0);
read_value(mi.rDer[i]["fixed"], (modelica_boolean*)&(modelData->realVarsData[modelData->nStates+i].attribute.fixed));
read_value(mi.rDer[i]["useNominal"], (modelica_boolean*)&(modelData->realVarsData[modelData->nStates+i].attribute.useNominal));
read_value(mi.rDer[i]["nominal"], &(modelData->realVarsData[modelData->nStates+i].attribute.nominal), 1);
read_value(mi.rDer[i]["nominal"], &(modelData->realVarsData[modelData->nStates+i].attribute.nominal), 1.0);
read_value(mi.rDer[i]["min"], &(modelData->realVarsData[modelData->nStates+i].attribute.min), REAL_MIN);
read_value(mi.rDer[i]["max"], &(modelData->realVarsData[modelData->nStates+i].attribute.max), REAL_MAX);

Expand Down Expand Up @@ -507,7 +507,7 @@ void read_input_xml(MODEL_DATA* modelData,
read_value(mi.rAlg[i]["start"], &(modelData->realVarsData[j].attribute.start), 0);
read_value(mi.rAlg[i]["fixed"], (modelica_boolean*)&(modelData->realVarsData[j].attribute.fixed));
read_value(mi.rAlg[i]["useNominal"], (modelica_boolean*)&(modelData->realVarsData[j].attribute.useNominal));
read_value(mi.rAlg[i]["nominal"], &(modelData->realVarsData[j].attribute.nominal), 0);
read_value(mi.rAlg[i]["nominal"], &(modelData->realVarsData[j].attribute.nominal), 1.0);
read_value(mi.rAlg[i]["min"], &(modelData->realVarsData[j].attribute.min), REAL_MIN);
read_value(mi.rAlg[i]["max"], &(modelData->realVarsData[j].attribute.max), REAL_MAX);

Expand Down Expand Up @@ -687,7 +687,7 @@ void read_input_xml(MODEL_DATA* modelData,
read_value(mi.rPar[i]["start"], &(modelData->realParameterData[i].attribute.start), 0);
read_value(mi.rPar[i]["fixed"], &(modelData->realParameterData[i].attribute.fixed));
read_value(mi.rPar[i]["useNominal"], &(modelData->realParameterData[i].attribute.useNominal));
read_value(mi.rPar[i]["nominal"], &(modelData->realParameterData[i].attribute.nominal), 1);
read_value(mi.rPar[i]["nominal"], &(modelData->realParameterData[i].attribute.nominal), 1.0);
read_value(mi.rPar[i]["min"], &(modelData->realParameterData[i].attribute.min), REAL_MIN);
read_value(mi.rPar[i]["max"], &(modelData->realParameterData[i].attribute.max), REAL_MAX);

Expand Down

0 comments on commit 0d7e46f

Please sign in to comment.