Skip to content

Commit

Permalink
fix initial unknowns in fmi export (#7524)
Browse files Browse the repository at this point in the history
  • Loading branch information
arun3688 committed Jun 7, 2021
1 parent 49710ab commit 5b1d684
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 47 deletions.
7 changes: 4 additions & 3 deletions OMCompiler/Compiler/SimCode/SimCodeUtil.mo
Expand Up @@ -13658,12 +13658,13 @@ algorithm
if debug then
BackendDump.dumpVariables(currentSystem.orderedVars,"orderedVariables");
BackendDump.dumpEquationArray(currentSystem.orderedEqs,"orderedEquation");
BackendDump.dumpVariables(shared.globalKnownVars,"globalknownVars");
end if;

// traverse the simulation DAE globalknownVars and update the initialization DAE with new equations and vars
for var in BackendVariable.varList(inSimDAE.shared.globalKnownVars) loop
// check for param Vars, as we are only interested in causality = calculatedParameters
if BackendVariable.isParam(var) then
// check for param Vars, as we are only interested in causality = parameters
if BackendVariable.isParam(var) and not BackendVariable.containsCref(var.varName, currentSystem.orderedVars) then
lhs := BackendVariable.varExp(var);
rhs := BackendVariable.varBindExpStartValueNoFail(var) "bindings are optional";
eqn := BackendDAE.EQUATION(lhs, rhs, DAE.emptyElementSource, BackendDAE.EQ_ATTR_DEFAULT_BINDING);
Expand All @@ -13672,7 +13673,7 @@ algorithm
//var := BackendVariable.setVarFixed(var,false);
//var := BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
currentSystem := BackendVariable.addVarDAE(var, currentSystem);
else
elseif not BackendVariable.containsCref(var.varName, currentSystem.orderedVars) then
shared := BackendVariable.addGlobalKnownVarDAE(var, shared);
end if;
end for;
Expand Down
Expand Up @@ -129,7 +129,7 @@ val(evaporator_qm_S, 100);
// <BaseUnit K=\"1\" />
// </Unit>
// <Unit name=\"km-1.s-3.g\">
// <BaseUnit m=\"-1\" s=\"-3\" kg=\"1\" factor=\"1e-006\" />
// <BaseUnit m=\"-1\" s=\"-3\" kg=\"1\" factor=\"1e-06\" />
// </Unit>
// <Unit name=\"m3.s-1\">
// <BaseUnit m=\"3\" s=\"-1\" />
Expand Down Expand Up @@ -179,7 +179,7 @@ val(evaporator_qm_S, 100);
// <Category name=\"logAll\" />
// <Category name=\"logFmi2Call\" />
// </LogCategories>
// <DefaultExperiment startTime=\"0.0\" stopTime=\"1.0\" tolerance=\"1e-006\"/>
// <DefaultExperiment startTime=\"0.0\" stopTime=\"1.0\" tolerance=\"1e-06\"/>
// <ModelVariables>
// <!-- Index of variable = \"1\" -->
// <ScalarVariable
Expand Down Expand Up @@ -501,7 +501,7 @@ val(evaporator_qm_S, 100);
// valueReference=\"192\"
// description=\"Connector of Real output signal\"
// >
// <Real min=\"-1e+060\" max=\"100000.0\"/>
// <Real min=\"-9.999999999999999e+59\" max=\"100000.0\"/>
// </ScalarVariable>
// <!-- Index of variable = \"41\" -->
// <ScalarVariable
Expand Down Expand Up @@ -632,7 +632,7 @@ val(evaporator_qm_S, 100);
// description=\"steam flow rate\"
// causality=\"output\"
// >
// <Real min=\"-1e+060\" max=\"100000.0\"/>
// <Real min=\"-9.999999999999999e+59\" max=\"100000.0\"/>
// </ScalarVariable>
// <!-- Index of variable = \"57\" -->
// <ScalarVariable
Expand Down Expand Up @@ -756,7 +756,7 @@ val(evaporator_qm_S, 100);
// variability=\"fixed\"
// causality=\"parameter\"
// >
// <Real start=\"1e-005\" unit=\"1\"/>
// <Real start=\"1e-05\" unit=\"1\"/>
// </ScalarVariable>
// <!-- Index of variable = \"72\" -->
// <ScalarVariable
Expand All @@ -776,7 +776,7 @@ val(evaporator_qm_S, 100);
// variability=\"fixed\"
// causality=\"calculatedParameter\"
// >
// <Real min=\"-1e+060\" max=\"100000000.0\" nominal=\"1000000.0\" unit=\"Pa\"/>
// <Real min=\"-9.999999999999999e+59\" max=\"100000000.0\" nominal=\"1000000.0\" unit=\"Pa\"/>
// </ScalarVariable>
// <!-- Index of variable = \"74\" -->
// <ScalarVariable
Expand Down Expand Up @@ -846,7 +846,7 @@ val(evaporator_qm_S, 100);
// variability=\"fixed\"
// causality=\"parameter\"
// >
// <Real start=\"120.0\" min=\"1e-060\" unit=\"s\"/>
// <Real start=\"120.0\" min=\"1e-60\" unit=\"s\"/>
// </ScalarVariable>
// <!-- Index of variable = \"81\" -->
// <ScalarVariable
Expand Down Expand Up @@ -2265,42 +2265,42 @@ val(evaporator_qm_S, 100);
// <Unknown index=\"6\" dependencies=\"1 2 3 27 55\" dependenciesKind=\"dependent dependent dependent dependent dependent\" />
// </Derivatives>
// <InitialUnknowns>
// <Unknown index=\"1\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"2\" dependencies=\"122\" dependenciesKind=\"dependent\" />
// <Unknown index=\"3\" dependencies=\"121\" dependenciesKind=\"dependent\" />
// <Unknown index=\"4\" dependencies=\"69 101 122\" dependenciesKind=\"dependent dependent dependent\" />
// <Unknown index=\"5\" dependencies=\"43 45 59 61 69 72 75 92 110 114 117 118 121 122 191\" dependenciesKind=\"dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent\" />
// <Unknown index=\"6\" dependencies=\"43 45 59 61 69 72 75 92 110 114 117 118 121 122 191\" dependenciesKind=\"dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent\" />
// <Unknown index=\"25\" dependencies=\"43 45 121\" dependenciesKind=\"dependent dependent dependent\" />
// <Unknown index=\"26\" dependencies=\"122\" dependenciesKind=\"dependent\" />
// <Unknown index=\"41\" dependencies=\"121 190\" dependenciesKind=\"dependent dependent\" />
// <Unknown index=\"56\" dependencies=\"45 121\" dependenciesKind=\"dependent dependent\" />
// <Unknown index=\"57\" dependencies=\"43 45 59 61 69 72 75 92 110 114 117 118 121 122 191\" dependenciesKind=\"dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent\" />
// <Unknown index=\"1\" dependencies=\"82\" dependenciesKind=\"dependent\" />
// <Unknown index=\"2\" dependencies=\"84\" dependenciesKind=\"dependent\" />
// <Unknown index=\"3\" dependencies=\"88\" dependenciesKind=\"dependent\" />
// <Unknown index=\"4\" dependencies=\"80 84 92\" dependenciesKind=\"dependent dependent dependent\" />
// <Unknown index=\"5\" dependencies=\"27 55 70 81 82 84 85 86 87 88 90 91 92 94 95 101 110\" dependenciesKind=\"dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent\" />
// <Unknown index=\"6\" dependencies=\"27 55 70 81 82 84 85 86 87 88 90 91 92 94 95 101 110\" dependenciesKind=\"dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent\" />
// <Unknown index=\"25\" dependencies=\"27 88 101 110\" dependenciesKind=\"dependent dependent dependent dependent\" />
// <Unknown index=\"26\" dependencies=\"84\" dependenciesKind=\"dependent\" />
// <Unknown index=\"41\" dependencies=\"71 88\" dependenciesKind=\"dependent dependent\" />
// <Unknown index=\"56\" dependencies=\"27 88 110\" dependenciesKind=\"dependent dependent dependent\" />
// <Unknown index=\"57\" dependencies=\"27 55 70 81 82 84 85 86 87 88 90 91 92 94 95 101 110\" dependenciesKind=\"dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent dependent\" />
// <Unknown index=\"73\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"74\" dependencies=\"46 47\" dependenciesKind=\"dependent dependent\" />
// <Unknown index=\"76\" dependencies=\"60\" dependenciesKind=\"dependent\" />
// <Unknown index=\"77\" dependencies=\"44\" dependenciesKind=\"dependent\" />
// <Unknown index=\"78\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"79\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"89\" dependencies=\"69\" dependenciesKind=\"dependent\" />
// <Unknown index=\"93\" dependencies=\"69\" dependenciesKind=\"dependent\" />
// <Unknown index=\"74\" dependencies=\"72 75\" dependenciesKind=\"dependent dependent\" />
// <Unknown index=\"76\" dependencies=\"120\" dependenciesKind=\"dependent\" />
// <Unknown index=\"77\" dependencies=\"121\" dependenciesKind=\"dependent\" />
// <Unknown index=\"78\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"79\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"89\" dependencies=\"92\" dependenciesKind=\"dependent\" />
// <Unknown index=\"93\" dependencies=\"92\" dependenciesKind=\"dependent\" />
// <Unknown index=\"96\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"97\" dependencies=\"60\" dependenciesKind=\"dependent\" />
// <Unknown index=\"97\" dependencies=\"120\" dependenciesKind=\"dependent\" />
// <Unknown index=\"98\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"99\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"100\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"103\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"105\" dependencies=\"43\" dependenciesKind=\"dependent\" />
// <Unknown index=\"106\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"107\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"108\" dependencies=\"43\" dependenciesKind=\"dependent\" />
// <Unknown index=\"109\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"111\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"112\" dependencies=\"43\" dependenciesKind=\"dependent\" />
// <Unknown index=\"113\" dependencies=\"45\" dependenciesKind=\"dependent\" />
// <Unknown index=\"115\" dependencies=\"188\" dependenciesKind=\"dependent\" />
// <Unknown index=\"119\" dependencies=\"60\" dependenciesKind=\"dependent\" />
// <Unknown index=\"123\" dependencies=\"187\" dependenciesKind=\"dependent\" />
// <Unknown index=\"105\" dependencies=\"101\" dependenciesKind=\"dependent\" />
// <Unknown index=\"106\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"107\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"108\" dependencies=\"101\" dependenciesKind=\"dependent\" />
// <Unknown index=\"109\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"111\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"112\" dependencies=\"101\" dependenciesKind=\"dependent\" />
// <Unknown index=\"113\" dependencies=\"110\" dependenciesKind=\"dependent\" />
// <Unknown index=\"115\" dependencies=\"114\" dependenciesKind=\"dependent\" />
// <Unknown index=\"119\" dependencies=\"120\" dependenciesKind=\"dependent\" />
// <Unknown index=\"123\" dependencies=\"122\" dependenciesKind=\"dependent\" />
// <Unknown index=\"192\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"193\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"194\" dependencies=\"\" dependenciesKind=\"\" />
Expand Down Expand Up @@ -2352,18 +2352,18 @@ val(evaporator_qm_S, 100);
// ""
// record SimulationResult
// resultFile = "DrumBoilerModel_me_FMU_res.mat",
// simulationOptions = "startTime = 0.0, stopTime = 100.0, numberOfIntervals = 500, tolerance = 1e-006, method = 'dassl', fileNamePrefix = 'DrumBoilerModel_me_FMU', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = '-override=q_F=10,Y_Valve=1'",
// simulationOptions = "startTime = 0.0, stopTime = 100.0, numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl', fileNamePrefix = 'DrumBoilerModel_me_FMU', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = '-override=q_F=10,Y_Valve=1'",
// messages = "LOG_SUCCESS | info | The initialization finished successfully without homotopy method.
// LOG_SUCCESS | info | The simulation finished successfully.
// "
// end SimulationResult;
// ""
// 10.0
// 1.0
// 1.066186961478094
// 1.132373922956188
// -16.62186178224934
// 101.4102128671589
// 66.98717518863343
// -1.132373922956188
// 1.06618690902324
// 1.132373818046481
// -16.62186201223443
// 101.4102114768519
// 66.98717539330144
// -1.132373818046481
// endResult
1 change: 1 addition & 0 deletions testsuite/openmodelica/fmi/ModelExchange/2.0/Makefile
Expand Up @@ -19,6 +19,7 @@ fmi_attributes_12.mos \
fmi_attributes_13.mos \
fmi_attributes_14.mos \
fmi_attributes_15.mos \
fmi_attributes_16.mos \
FMIExercise.mos \
FMUResourceTest.mos \
HelloFMIWorld.mos \
Expand Down
76 changes: 76 additions & 0 deletions testsuite/openmodelica/fmi/ModelExchange/2.0/fmi_attributes_16.mos
@@ -0,0 +1,76 @@
// name: fmi_attributes_16.mos
// status: correct
// teardown_command: rm -rf fmi_attributes_16.fmu fmi_attributes_16.log fmi_attributes_16.xml fmi_attributes_16_tmp.xml fmi_attributes_16.fmutmp/

loadString("
model fmi_attributes_16
Real x(fixed=true, start=x_start);
parameter Real x_start(fixed=false);
initial equation
der(x) + x_start = 1;
equation
der(x) = 0.0;
end fmi_attributes_16;
"); getErrorString();

translateModelFMU(fmi_attributes_16); getErrorString();

// unzip to console, quiet, extra quiet
system("unzip -cqq fmi_attributes_16.fmu modelDescription.xml > fmi_attributes_16_tmp.xml"); getErrorString();
system("sed -n \"/<ModelVariables>/,/<\\/ModelVariables>/p\" fmi_attributes_16_tmp.xml > fmi_attributes_16.xml"); getErrorString();
readFile("fmi_attributes_16.xml"); getErrorString();

system("sed -n \"/<ModelStructure>/,/<\\/ModelStructure>/p\" fmi_attributes_16_tmp.xml > fmi_attributes_16.xml"); getErrorString();
readFile("fmi_attributes_16.xml"); getErrorString();

// Result:
// true
// ""
// "fmi_attributes_16.fmu"
// ""
// 0
// ""
// 0
// ""
// " <ModelVariables>
// <!-- Index of variable = \"1\" -->
// <ScalarVariable
// name=\"x\"
// valueReference=\"0\"
// >
// <Real/>
// </ScalarVariable>
// <!-- Index of variable = \"2\" -->
// <ScalarVariable
// name=\"der(x)\"
// valueReference=\"1\"
// >
// <Real derivative=\"1\"/>
// </ScalarVariable>
// <!-- Index of variable = \"3\" -->
// <ScalarVariable
// name=\"x_start\"
// valueReference=\"2\"
// variability=\"fixed\"
// causality=\"calculatedParameter\"
// >
// <Real/>
// </ScalarVariable>
// </ModelVariables>
// "
// ""
// 0
// ""
// " <ModelStructure>
// <Derivatives>
// <Unknown index=\"2\" dependencies=\"\" dependenciesKind=\"\" />
// </Derivatives>
// <InitialUnknowns>
// <Unknown index=\"1\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"2\" dependencies=\"\" dependenciesKind=\"\" />
// <Unknown index=\"3\" dependencies=\"\" dependenciesKind=\"\" />
// </InitialUnknowns>
// </ModelStructure>
// "
// ""
// endResult

0 comments on commit 5b1d684

Please sign in to comment.