Skip to content

Commit 8b611a2

Browse files
committed
separate initialization of free variables from initialization of bound variables
- CodegenCpp.tpl: split initialize method in a backwards compatible way - FMU2Wrapper.cpp: exploit new initialize methods - FMUWrapper.cpp: revert to before r25374, as FMI1 should not get new features git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@25395 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 229d3eb commit 8b611a2

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

Compiler/Template/CodegenCpp.tpl

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ let initeqs = generateEquationMemberFuncDecls(initialEquations,"initEquation")
119119
virtual bool initial();
120120
virtual void setInitial(bool);
121121
virtual void initialize();
122+
virtual void initializeFreeVariables();
123+
virtual void initializeBoundVariables();
122124
virtual void initEquations();
123125

124126
private:
@@ -5073,6 +5075,13 @@ case SIMCODE(modelInfo = MODELINFO(__)) then
50735075
let initialequations = functionInitialEquations(initialEquations,simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation, false)
50745076
<<
50755077
void <%lastIdentOfPath(modelInfo.name)%>Initialize::initialize()
5078+
{
5079+
initializeFreeVariables();
5080+
initializeBoundVariables();
5081+
saveAll();
5082+
}
5083+
5084+
void <%lastIdentOfPath(modelInfo.name)%>Initialize::initializeFreeVariables()
50765085
{
50775086
_discrete_events = _event_handling->initialize(this);
50785087
//create and initialize Algloopsolvers
@@ -5102,20 +5111,23 @@ case SIMCODE(modelInfo = MODELINFO(__)) then
51025111
initializeDerVars();
51035112
/*external vars decls*/
51045113
initializeExternalVar();
5105-
<%initFunctions%>
5106-
5107-
5108-
51095114

51105115
//init event handling
51115116
<%initEventHandling%>
51125117
//init alg loop vars
51135118
<%initAlgloopvars%>
51145119

5115-
#if defined(__TRICORE__) || defined(__vxworks)
5116-
//init inputs
5117-
stepStarted(0.0);
5118-
#endif
5120+
#if defined(__TRICORE__) || defined(__vxworks)
5121+
//init inputs
5122+
stepStarted(0.0);
5123+
#endif
5124+
}
5125+
5126+
void <%lastIdentOfPath(modelInfo.name)%>Initialize::initializeBoundVariables()
5127+
{
5128+
//bound start values
5129+
<%initFunctions%>
5130+
51195131
//init equations
51205132
initEquations();
51215133

@@ -5128,11 +5140,9 @@ case SIMCODE(modelInfo = MODELINFO(__)) then
51285140
}
51295141

51305142
//initialAnalyticJacobian();
5131-
saveAll();
51325143

51335144
<%functionInitDelay(delayedExps,simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)%>
5134-
5135-
}
5145+
}
51365146

51375147
void <%lastIdentOfPath(modelInfo.name)%>Initialize::initEquations()
51385148
{

SimulationRuntime/cpp/Include/FMU/FMUWrapper.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ FMUWrapper::FMUWrapper(fmiString instanceName, fmiString GUID,
2222
_model = boost::shared_ptr<MODEL_CLASS>
2323
(new MODEL_CLASS(&_global_settings, solver_factory, boost::shared_ptr<ISimData>(new SimData())));
2424
_model->setInitial(true);
25-
_model->initialize(); // set default start values
2625
_tmp_real_buffer.resize(_model->getDimReal());
2726
_tmp_int_buffer.resize(_model->getDimInteger());
2827
_tmp_bool_buffer.resize(_model->getDimBoolean());
@@ -129,8 +128,9 @@ fmiStatus FMUWrapper::setString(const fmiValueReference vr[], size_t nvr,
129128
/* of the model equations */
130129
fmiStatus FMUWrapper::initialize(fmiBoolean toleranceControlled, fmiReal relativeTolerance, fmiEventInfo& eventInfo)
131130
{
131+
// TODO: here is some code duplication to SimulationRuntime/cpp/Core/Solver/Initailization.cpp
132+
_model->initialize();
132133
_model->setInitial(true);
133-
_model->initEquations(); // initialize dependent variables
134134

135135
bool restart=true;
136136
int iter=0;

SimulationRuntime/cpp/Include/FMU2/FMU2Wrapper.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ FMU2Wrapper::FMU2Wrapper(fmi2String instanceName, fmi2String GUID,
7777
(new MODEL_CLASS(&_global_settings, solver_factory,
7878
boost::shared_ptr<ISimData>(new SimData())));
7979
_model->setInitial(true);
80-
_model->initialize(); // set default start values
80+
_model->initializeFreeVariables();
8181
_string_buffer.resize(_model->getDimString());
8282
}
8383

@@ -161,7 +161,7 @@ fmi2Status FMU2Wrapper::reset()
161161
void FMU2Wrapper::updateModel()
162162
{
163163
if (_model->initial())
164-
_model->initEquations(); // initial equations and calculated parameters
164+
_model->initializeBoundVariables();
165165
_model->evaluateAll(); // derivatives and algebraic variables
166166
_need_update = false;
167167
}
@@ -199,7 +199,7 @@ fmi2Status FMU2Wrapper::completedIntegratorStep(fmi2Boolean noSetFMUStatePriorTo
199199
fmi2Boolean *terminateSimulation)
200200
{
201201
_model->saveAll();
202-
*enterEventMode = false;
202+
*enterEventMode = fmi2False;
203203
*terminateSimulation = fmi2False;
204204
return fmi2OK;
205205
}

0 commit comments

Comments
 (0)