Skip to content

Commit

Permalink
Redo 8963da5 to make Cpp FMI2 work again
Browse files Browse the repository at this point in the history
  • Loading branch information
Ruediger Franke authored and OpenModelica-Hudson committed Jun 22, 2015
1 parent ef62d68 commit c078626
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 31 deletions.
9 changes: 2 additions & 7 deletions Compiler/Template/CodegenCpp.tpl
Expand Up @@ -5120,18 +5120,13 @@ case SIMCODE(modelInfo = MODELINFO(__)) then
<<
void <%lastIdentOfPath(modelInfo.name)%>Initialize::initialize()
{



initializeMemory();
IPropertyReader *reader = new XmlPropertyReader("OMCpp<%fileNamePrefix%>Init.xml");
//IPropertyReader *reader = new XmlPropertyReader("OMCpp<%fileNamePrefix%>Init.xml");
//reader->readInitialValues(_sim_vars);
initializeFreeVariables();
initializeStringParameterVars();
initializeStringAliasVars();
initializeBoundVariables();
saveAll();
delete reader;
//delete reader;
}

void <%lastIdentOfPath(modelInfo.name)%>Initialize::initializeMemory()
Expand Down
29 changes: 7 additions & 22 deletions Compiler/Template/CodegenFMUCpp.tpl
Expand Up @@ -235,13 +235,13 @@ case SIMCODE(modelInfo=MODELINFO(__)) then
// getters for given value references
virtual void getReal(const unsigned int vr[], int nvr, double value[]);
virtual void getInteger(const unsigned int vr[], int nvr, int value[]);
virtual void getBoolean(const unsigned int vr[], int nvr, char value[]);
virtual void getBoolean(const unsigned int vr[], int nvr, int value[]);
virtual void getString(const unsigned int vr[], int nvr, string value[]);
// setters for given value references
virtual void setReal(const unsigned int vr[], int nvr, const double value[]);
virtual void setInteger(const unsigned int vr[], int nvr, const int value[]);
virtual void setBoolean(const unsigned int vr[], int nvr, const char value[]);
virtual void setBoolean(const unsigned int vr[], int nvr, const int value[]);
virtual void setString(const unsigned int vr[], int nvr, const string value[]);
};
>>
Expand Down Expand Up @@ -294,12 +294,11 @@ case SIMCODE(modelInfo=MODELINFO(__)) then

// initialization
void <%modelShortName%>FMU::initialize() {
Logger::writeInfo("Initialization started");
<%modelShortName%>WriteOutput::initialize();
<%modelShortName%>Initialize::initialize();
<%modelShortName%>Initialize::initializeMemory();
<%modelShortName%>Initialize::initializeFreeVariables();
<%modelShortName%>Jacobian::initialize();
<%modelShortName%>Jacobian::initializeColoredJacobianA();
Logger::writeInfo("Initialization finished");
}

// getters
Expand Down Expand Up @@ -510,7 +509,7 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
<%accessRealFunction(simCode, direction, modelShortName, modelInfo)%>
<%accessVarsFunction(simCode, direction, modelShortName, "Integer", "int", vars.intAlgVars, vars.intParamVars, vars.intAliasVars)%>
<%accessVarsFunction(simCode, direction, modelShortName, "Boolean", "char", vars.boolAlgVars, vars.boolParamVars, vars.boolAliasVars)%>
<%accessVarsFunction(simCode, direction, modelShortName, "Boolean", "int", vars.boolAlgVars, vars.boolParamVars, vars.boolAliasVars)%>
<%accessVarsFunction(simCode, direction, modelShortName, "String", "string", vars.stringAlgVars, vars.stringParamVars, vars.stringAliasVars)%>
>>
end accessFunctions;
Expand All @@ -535,7 +534,6 @@ case MODELINFO(vars=SIMVARS(__), varInfo=VARINFO(numStateVars=numStateVars, numA
default:
message.str("");
message << "<%direction%>Real with wrong value reference " << vr[i];
Logger::writeError(message.str());
throw std::invalid_argument(message.str());
}
}
Expand All @@ -558,7 +556,6 @@ template accessVarsFunction(SimCode simCode, String direction, String modelShort
default:
message.str("");
message << "<%direction%><%typeName%> with wrong value reference " << vr[i];
Logger::writeError(message.str());
throw std::invalid_argument(message.str());
}
}
Expand All @@ -578,17 +575,11 @@ match simVar
if stringEq(direction, "get") then
<<
case <%intAdd(offset, index)%>: <%description%>
value[i] = <%cppSign%><%cppName%>;
message.str("");
message << "Getting variable <%descName%> with value " << value[i];
Logger::writeInfo(message.str()); break;
value[i] = <%cppSign%><%cppName%>; break;
>>
else
<<
case <%intAdd(offset, index)%>: <%description%>
message.str("");
message << "Setting variable <%descName%> to value " << <%cppSign%>value[i];
Logger::writeInfo(message.str());
<%cppName%> = <%cppSign%>value[i]; break;
>>
end accessVar;
Expand Down Expand Up @@ -632,17 +623,11 @@ match simVar
else if stringEq(direction, "get") then
<<
case <%intAdd(offset, index)%>: <%description%>
value[i] = <%vecName%>[<%index%>];
message.str("");
message << "Getting variable <%descName%> with value " << value[i];
Logger::writeInfo(message.str()); break;
value[i] = <%vecName%>[<%index%>]; break;
>>
else
<<
case <%intAdd(offset, index)%>: <%description%>
message.str("");
message << "Setting variable <%descName%> to value " << value[i];
Logger::writeInfo(message.str());
<%vecName%>[<%index%>] = value[i]; break;
>>
end accessVecVar;
Expand Down
13 changes: 11 additions & 2 deletions SimulationRuntime/cpp/Include/FMU/FMUWrapper.h
Expand Up @@ -99,7 +99,11 @@ class FMUWrapper : public IFMUInterface

virtual fmiStatus setBoolean (const fmiValueReference vr[], size_t nvr, const fmiBoolean value[])
{
_model->setBoolean(vr, nvr, value);
int val;
for (size_t i = 0; i < nvr; i++) {
val = value[i];
_model->setBoolean(vr + i, 1, &val);
}
_need_update = true;
return fmiOK;
}
Expand All @@ -116,6 +120,7 @@ class FMUWrapper : public IFMUInterface
{
// TODO: here is some code duplication to SimulationRuntime/cpp/Core/Solver/Initailization.cpp
_model->initialize();
_model->initializeBoundVariables();
_model->setInitial(true);

bool restart=true;
Expand Down Expand Up @@ -178,8 +183,12 @@ class FMUWrapper : public IFMUInterface

virtual fmiStatus getBoolean(const fmiValueReference vr[], size_t nvr, fmiBoolean value[])
{
int val;
updateModel();
_model->getBoolean(vr, nvr, value);
for (size_t i = 0; i < nvr; i++) {
_model->getBoolean(vr + i, 1, &val);
value[i] = (fmiBoolean)val;
}
return fmiOK;
}

Expand Down

0 comments on commit c078626

Please sign in to comment.