Skip to content

Commit

Permalink
- generate variables for inline solver again (was removed in r14511)
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@14536 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Dec 24, 2012
1 parent 35f5380 commit e31c5c4
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 40 deletions.
80 changes: 46 additions & 34 deletions Compiler/Template/CodegenC.tpl
Expand Up @@ -282,6 +282,7 @@ template populateModelInfo(ModelInfo modelInfo, String fileNamePrefix, String gu
data->modelData.nEquations = <%varInfo.numEquations%>;
data->modelData.nNonLinearSystems = <%varInfo.numNonLinearResFunctions%>;
data->modelData.nStateSets = <%varInfo.numStateSets%>;
data->modelData.nInlineVars = <%varInfo.numInlineVars%>;

data->modelData.nDelayExpressions = <%match delayed case DELAYED_EXPRESSIONS(__) then maxDelayedIndex%>;

Expand Down Expand Up @@ -371,17 +372,22 @@ template variableDefinitions(ModelInfo modelInfo)

/* States */
<%vars.stateVars |> var =>
globalDataVarDefine(var, "realVars",0)
globalDataVarDefine(var, "realVars", 0)
;separator="\n"%>

/* StatesDerivatives */
<%vars.derivativeVars |> var =>
globalDataVarDefine(var, "realVars",numStateVars)
globalDataVarDefine(var, "realVars", numStateVars)
;separator="\n"%>

/* InlineSolver Vars */
<%vars.inlineVars |> var =>
globalDataVarDefine(var, "inlineVars", 0)
;separator="\n"%>

/* Algebraic Vars */
<%vars.algVars |> var =>
globalDataVarDefine(var, "realVars",intMul(2,numStateVars))
globalDataVarDefine(var, "realVars", intMul(2, numStateVars))
;separator="\n"%>

/* Algebraic Parameter */
Expand Down Expand Up @@ -928,9 +934,10 @@ template functionExtraResiduals(list<SimEqSystem> allEquations)
end functionExtraResiduals;

// =============================================================================
//
// section for State Sets
//
// This section generates the followng c functions:
// - void initializeStateSets(STATE_SET_DATA* statesetData, DATA *data)
// =============================================================================

template functionInitialStateSets(list<StateSet> stateSets)
Expand Down Expand Up @@ -974,7 +981,11 @@ end functionInitialStateSets;
// =============================================================================
// section for initialization
//
// This is all the stuff to generate the c code for the initialization.
// This section generates the followng c functions:
// - int updateBoundStartValues(DATA *data)
// - int updateBoundParameters(DATA *data)
// - int initial_residual(DATA *data, double *initialResiduals)
// - int functionInitialEquations(DATA *data)
// =============================================================================

template functionUpdateBoundStartValues(list<SimEqSystem> startValueEquations)
Expand Down Expand Up @@ -1007,6 +1018,34 @@ template functionUpdateBoundStartValues(list<SimEqSystem> startValueEquations)
>>
end functionUpdateBoundStartValues;

template functionUpdateBoundParameters(list<SimEqSystem> parameterEquations)
"Generates function in simulation file."
::=
let () = System.tmpTickReset(0)
let &varDecls = buffer "" /*BUFD*/
let &tmp = buffer ""
/*TODO: make possible to call updateBoundParameters
* discrete and continuous for current initialization.
* currently it only possible to call it with discontinuities
*/
let body = (parameterEquations |> eq =>
equation_(eq, contextSimulationDiscrete, &varDecls /*BUFD*/, &tmp)
;separator="\n")
<<
<%&tmp%>
int updateBoundParameters(DATA *data)
{
state mem_state;
<%varDecls%>
mem_state = get_memory_state();
<%body%>
restore_memory_state(mem_state);
return 0;
}
>>
end functionUpdateBoundParameters;

template functionInitialResidualBody(SimEqSystem eq, Text &varDecls /*BUFP*/, Text &eqs)
"Generates an equation."
::=
Expand Down Expand Up @@ -1118,7 +1157,8 @@ end functionInitialEquations;
// =============================================================================
// section for inline solver
//
// This is all the stuff to generate the c code for the inline solver.
// This section generates the followng c functions:
// - int functionInlineEquations(DATA *data)
// =============================================================================

template functionInlineEquations(list<SimEqSystem> inlineEquations)
Expand Down Expand Up @@ -1146,34 +1186,6 @@ template functionInlineEquations(list<SimEqSystem> inlineEquations)
>>
end functionInlineEquations;

template functionUpdateBoundParameters(list<SimEqSystem> parameterEquations)
"Generates function in simulation file."
::=
let () = System.tmpTickReset(0)
let &varDecls = buffer "" /*BUFD*/
let &tmp = buffer ""
/*TODO: make possible to call updateBoundParameters
* discrete and continuous for current initialization.
* currently it only possible to call it with discontinuities
*/
let body = (parameterEquations |> eq =>
equation_(eq, contextSimulationDiscrete, &varDecls /*BUFD*/, &tmp)
;separator="\n")
<<
<%&tmp%>
int updateBoundParameters(DATA *data)
{
state mem_state;
<%varDecls%>
mem_state = get_memory_state();
<%body%>
restore_memory_state(mem_state);
return 0;
}
>>
end functionUpdateBoundParameters;

template functionStoreDelayed(DelayedExpression delayed)
"Generates function in simulation file."
::=
Expand Down
15 changes: 9 additions & 6 deletions SimulationRuntime/c/simulation_data.h
Expand Up @@ -330,7 +330,7 @@ typedef struct MODEL_DATA
modelica_string_t modelGUID;

fortran_integer nStates;
long nVariablesReal; /* all Real Variables of the model (states,statesderivatives,algebraics) */
long nVariablesReal; /* all Real Variables of the model (states, statesderivatives, algebraics) */
long nVariablesInteger;
long nVariablesBoolean;
long nVariablesString;
Expand All @@ -340,22 +340,23 @@ typedef struct MODEL_DATA
long nParametersString;
long nInputVars;
long nOutputVars;
long nHelpVars; /* results of relations in when equation */
long nHelpVars; /* results of relations in when equation */

long nZeroCrossings;
long nSamples;
long nRelations;
long nMathEvents; /* number of math triggering functions e.g. cail, floor, integer */
long nMathEvents; /* number of math triggering functions e.g. cail, floor, integer */
long nDelayExpressions;
long nInitEquations; /* number of initial equations */
long nInitAlgorithms; /* number of initial algorithms */
long nInitResiduals; /* number of initial residuals */
long nInitEquations; /* number of initial equations */
long nInitAlgorithms; /* number of initial algorithms */
long nInitResiduals; /* number of initial residuals */
long nExtObjs;
long nFunctions;
long nEquations;
long nProfileBlocks;
long nNonLinearSystems;
long nStateSets;
long nInlineVars; /* number of additional variables for the inline solverr */

long nAliasReal;
long nAliasInteger;
Expand Down Expand Up @@ -448,6 +449,8 @@ typedef struct SIMULATION_DATA
modelica_integer* integerVars;
modelica_boolean* booleanVars;
modelica_string* stringVars;

modelica_real* inlineVars; /* needed for the inline solver */

}SIMULATION_DATA;

Expand Down

0 comments on commit e31c5c4

Please sign in to comment.