Skip to content

Commit

Permalink
- start values are now correctly set for exported FMU 1.0 ModelExchange
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcus Walther authored and OpenModelica-Hudson committed Oct 27, 2015
1 parent 33b29ef commit 90cc19c
Showing 1 changed file with 33 additions and 7 deletions.
40 changes: 33 additions & 7 deletions SimulationRuntime/cpp/Include/FMU/FMUWrapper.h
Expand Up @@ -81,7 +81,15 @@ class FMUWrapper : public IFMUInterface
//LOGGER_WRITE("Set real values",LC_OTHER,LL_DEBUG);
//for(size_t i = 0; i < nvr; i++)
// LOGGER_WRITE(" Set real value " + boost::lexical_cast<std::string>(vr[i]) + " to " + boost::lexical_cast<std::string>(value[i]),LC_OTHER,LL_DEBUG);
_model->setReal(vr, nvr, value);
if(_model->initial())
{
double *realVars = _model->getSimVars()->getRealVarsVector();
for(size_t i = 0; i < nvr; i++)
_model->setRealStartValue(realVars[vr[i]],true);
}
else
_model->setReal(vr, nvr, value);

_need_update = true;
//LOGGER_WRITE("Set real values finished",LC_OTHER,LL_DEBUG);
return fmiOK;
Expand All @@ -92,7 +100,15 @@ class FMUWrapper : public IFMUInterface
//LOGGER_WRITE("Set int values",LC_OTHER,LL_DEBUG);
//for(size_t i = 0; i < nvr; i++)
// LOGGER_WRITE(" Set int value " + boost::lexical_cast<std::string>(vr[i]) + " to " + boost::lexical_cast<std::string>(value[i]),LC_OTHER,LL_DEBUG);
_model->setInteger(vr, nvr, value);
if(_model->initial())
{
int *intVars = _model->getSimVars()->getIntVarsVector();
for(size_t i = 0; i < nvr; i++)
_model->setIntStartValue(intVars[vr[i]],true);
}
else
_model->setInteger(vr, nvr, value);

_need_update = true;
//LOGGER_WRITE("Set int values finished",LC_OTHER,LL_DEBUG);
return fmiOK;
Expand All @@ -101,12 +117,22 @@ class FMUWrapper : public IFMUInterface
virtual fmiStatus setBoolean(const fmiValueReference vr[], size_t nvr, const fmiBoolean value[])
{
//LOGGER_WRITE("Set bool values",LC_OTHER,LL_DEBUG);
int val;
for (size_t i = 0; i < nvr; i++) {
val = value[i];
//LOGGER_WRITE(" Set bool value " + boost::lexical_cast<std::string>(vr[i]) + " to " + boost::lexical_cast<std::string>(val),LC_OTHER,LL_DEBUG);
_model->setBoolean(vr + i, 1, &val);
if(_model->initial())
{
bool *boolVars = _model->getSimVars()->getBoolVarsVector();
for(size_t i = 0; i < nvr; i++)
_model->setBoolStartValue(boolVars[vr[i]],true);
}
else
{
int val;
for(size_t i = 0; i < nvr; i++)
{
val = value[i];
_model->setBoolean(vr + i, 1, &val);
}
}

_need_update = true;
//LOGGER_WRITE("Set bool values finished",LC_OTHER,LL_DEBUG);
return fmiOK;
Expand Down

0 comments on commit 90cc19c

Please sign in to comment.