Skip to content

Commit c8b206d

Browse files
committed
Correct numbers of variables, ticket:4072
Index 0 of real vars is the first state, not reserved. Moreover inputs and outputs are already covered by alg vars and states.
1 parent 8b1f74e commit c8b206d

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

Compiler/Template/CodegenCpp.tpl

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8961,9 +8961,8 @@ template numRealvars(ModelInfo modelInfo)
89618961
::=
89628962
match modelInfo
89638963
case MODELINFO(varInfo=VARINFO(__)) then
8964-
//the index 0 is reserved for undefined references
89658964
<<
8966-
<%intAdd(1, intAdd(varInfo.numOptimizeFinalConstraints, intAdd(varInfo.numOptimizeConstraints, intAdd(varInfo.numOutVars, intAdd(varInfo.numInVars ,intAdd(intMul(2,varInfo.numStateVars),intAdd(varInfo.numAlgVars,intAdd(varInfo.numParams,varInfo.numDiscreteReal))))))))
8965+
<%intAdd(intMul(2,varInfo.numStateVars),intAdd(varInfo.numAlgVars,intAdd(varInfo.numParams,varInfo.numDiscreteReal)))
89678966
%>
89688967
>>
89698968
end numRealvars;
@@ -8983,29 +8982,26 @@ template numIntvars(ModelInfo modelInfo)
89838982
::=
89848983
match modelInfo
89858984
case MODELINFO(varInfo=VARINFO(__)) then
8986-
//the index 0 is reserved for undefined references
89878985
<<
8988-
<%intAdd(1, intAdd(varInfo.numIntAlgVars,varInfo.numIntParams))%>
8986+
<%intAdd(varInfo.numIntAlgVars,varInfo.numIntParams)%>
89898987
>>
89908988
end numIntvars;
89918989

89928990
template numBoolvars(ModelInfo modelInfo)
89938991
::=
89948992
match modelInfo
89958993
case MODELINFO(varInfo=VARINFO(__)) then
8996-
//the index 0 is reserved for undefined references
89978994
<<
8998-
<%intAdd(1, intAdd(varInfo.numBoolAlgVars,varInfo.numBoolParams))%>
8995+
<%intAdd(varInfo.numBoolAlgVars,varInfo.numBoolParams)%>
89998996
>>
90008997
end numBoolvars;
90018998

90028999
template numStringvars(ModelInfo modelInfo)
90039000
::=
90049001
match modelInfo
90059002
case MODELINFO(varInfo=VARINFO(__)) then
9006-
//the index 0 is reserved for undefined references
90079003
<<
9008-
<%intAdd(1, intAdd(varInfo.numStringAlgVars,varInfo.numStringParamVars))%>
9004+
<%intAdd(varInfo.numStringAlgVars,varInfo.numStringParamVars)%>
90099005
>>
90109006
end numStringvars;
90119007

Compiler/Template/CodegenFMUCpp.tpl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,11 @@ template accessVarsFunctionFMU2(SimCode simCode, String direction, String modelS
556556
>>%>
557557
// convert negated aliases
558558
else switch (*vr) {
559-
<%aliasVars |> var => accessVarFMU2(simCode, direction, var, offset); separator="\n"%>
559+
<%aliasVars |> var => match var
560+
case SIMVAR(aliasvar=NEGATEDALIAS()) then
561+
accessVarFMU2(simCode, direction, var, offset)
562+
else ''
563+
end match; separator="\n"%>
560564
default:
561565
throw std::invalid_argument("<%direction%><%typeName%> with wrong value reference " + omcpp::to_string(*vr));
562566
}

SimulationRuntime/cpp/Core/System/SimVars.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ void SimVars::create(size_t dim_real, size_t dim_int, size_t dim_bool, size_t di
4747
if (_dim_real + _dim_int + _dim_bool > _dim_pre_vars)
4848
throw std::runtime_error("Wrong pre variable size");
4949
//allocate memory for all model variables
50-
if (dim_string > 0)
50+
if (dim_string > 0) {
5151
_string_vars = new string[dim_string];
52+
}
53+
else {
54+
_string_vars = NULL;
55+
}
5256
if (dim_bool > 0) {
5357
_bool_vars = (bool*)alignedMalloc(sizeof(bool) * dim_bool, 64);
5458
_pre_bool_vars = (bool*)alignedMalloc(sizeof(bool) * dim_bool, 64);

0 commit comments

Comments
 (0)