Skip to content

Commit

Permalink
generate states, input and output vars for linearized python code (#8773
Browse files Browse the repository at this point in the history
)
  • Loading branch information
arun3688 committed Mar 28, 2022
1 parent 54e99b8 commit 62abb40
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 29 deletions.
35 changes: 23 additions & 12 deletions OMCompiler/Compiler/Template/CodegenC.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -5056,22 +5056,22 @@ template functionlinearmodelPython(ModelInfo modelInfo, String modelNamePrefix)
const char *<%symbolName(modelNamePrefix,"linear_model_frame")%>()
{
return "def linearized_model():\n"
" # <%modelNamePrefix%>\n"
" # der(x) = A * x + B * u \n # y = C * x + D * u \n"
" n = <%varInfo.numStateVars%> # number of states\n m = <%varInfo.numInVars%> # number of inputs\n p = <%varInfo.numOutVars%> # number of outputs\n"
" # <%modelNamePrefix%>\n"
" # der(x) = A * x + B * u \n # y = C * x + D * u \n"
" n = <%varInfo.numStateVars%> # number of states\n m = <%varInfo.numInVars%> # number of inputs\n p = <%varInfo.numOutVars%> # number of outputs\n"
"\n"
" x0 = %s\n"
" u0 = %s\n"
" x0 = %s\n"
" u0 = %s\n"
"\n"
<%matrixA%>
<%matrixB%>
<%matrixC%>
<%matrixD%>
<%getVarNameJulia(vars.stateVars, "x")%>
<%getVarNameJulia(vars.inputVars, "u")%>
<%getVarNameJulia(vars.outputVars, "y")%>
" stateVars = [<%getVarNamePython(vars.stateVars, "x0")%>]\n"
" inputVars = [<%getVarNamePython(vars.inputVars, "u0")%>]\n"
" outputVars = [<%getVarNamePython(vars.outputVars, "y0")%>]\n"
"\n"
" return (n, m, p, x0, u0, A, B, C, D)\n";
" return (n, m, p, x0, u0, A, B, C, D, stateVars, inputVars, outputVars)\n";
}
const char *<%symbolName(modelNamePrefix,"linear_model_datarecovery_frame")%>()
{
Expand Down Expand Up @@ -5102,6 +5102,17 @@ template getVarNameMatlab(list<SimVar> simVars, String arrayName) "template getV
>>
end getVarNameMatlab;

template getVarNamePython(list<SimVar> simVars, String arrayName) "template getVarName
Generates name for a variables."
::=
<<
<%simVars |> var hasindex arrindex fromindex 0 => (match var
case SIMVAR(__) then
<<'<%crefStrMatlabSafe(name)%>'>>
end match) ;separator=","%>
>>
end getVarNamePython;

template getVarNameJulia(list<SimVar> simVars, String arrayName) "template getVarName
Generates name for a varables."
::=
Expand Down Expand Up @@ -5150,13 +5161,13 @@ template genMatrixPython(String name, String row, String col, Integer rowI, Inte
::=
match rowI
case 0 then
<<" <%name%> = %s\n\n">>
<<" <%name%> = %s\n\n">>
case _ then
match colI
case 0 then
<<" <%name%> = %s\n\n">>
<<" <%name%> = %s\n\n">>
case _ then
<<" <%name%> = %s\n\n">>
<<" <%name%> = %s\n\n">>
end match
end match
end genMatrixPython;
Expand Down
33 changes: 16 additions & 17 deletions testsuite/openmodelica/linearization/test_dump_languages.mos
Original file line number Diff line number Diff line change
Expand Up @@ -169,36 +169,35 @@ readFile("linearized_model.py"); getErrorString();
// "Warning: The initial conditions are not fully specified. For more information set -d=initialization. In OMEdit Tools->Options->Simulation->Show additional information from the initialization process, in OMNotebook call setCommandLineOptions(\"-d=initialization\").
// "
// "def linearized_model():
// # simple_test
// # der(x) = A * x + B * u
// # y = C * x + D * u
// n = 2 # number of states
// m = 1 # number of inputs
// p = 1 # number of outputs
// # simple_test
// # der(x) = A * x + B * u
// # y = C * x + D * u
// n = 2 # number of states
// m = 1 # number of inputs
// p = 1 # number of outputs
//
// x0 = [1.626558527192664, 2.380918053900121]
// u0 = [0]
// x0 = [1.626558527192664, 2.380918053900121]
// u0 = [0]
//
// A = [[-2.887152375617477, -1.62655852935388],
// A = [[-2.887152375617477, -1.62655852935388],
// [-2.380918056675567, -2.388394731625707]]
//
//
// B = [[0],
// B = [[0],
// [0]]
//
//
// C = [[0, 0]]
// C = [[0, 0]]
//
//
// D = [[4.007476581092785]]
// D = [[4.007476581092785]]
//
//
// # x_num_x(1) = x(1);
// # x_num_x(2) = x(2);
// # u_u = u(1);
// # y_y = y(1);
// stateVars = ['num_x(1)','num_x(2)']
// inputVars = ['u']
// outputVars = ['y']
//
// return (n, m, p, x0, u0, A, B, C, D)
// return (n, m, p, x0, u0, A, B, C, D, stateVars, inputVars, outputVars)
// "
// ""
// endResult

0 comments on commit 62abb40

Please sign in to comment.