Skip to content

Commit

Permalink
Fixed #2763
Browse files Browse the repository at this point in the history
* Override start values of inputs using external input file if available
* Initialize inputs with its start value
  • Loading branch information
lochel committed Sep 15, 2015
1 parent a2f905b commit 7101208
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 6 deletions.
15 changes: 14 additions & 1 deletion Compiler/Template/CodegenC.tpl
Expand Up @@ -888,6 +888,7 @@ template simulationFile(SimCode simCode, String guid)
<%symbolName(modelNamePrefixStr,"functionDAE")%>,
<%symbolName(modelNamePrefixStr,"input_function")%>,
<%symbolName(modelNamePrefixStr,"input_function_init")%>,
<%symbolName(modelNamePrefixStr,"input_function_updateStartValues")%>,
<%symbolName(modelNamePrefixStr,"output_function")%>,
<%symbolName(modelNamePrefixStr,"function_storeDelayed")%>,
<%symbolName(modelNamePrefixStr,"updateBoundVariableAttributes")%>,
Expand Down Expand Up @@ -1511,14 +1512,26 @@ template functionInput(ModelInfo modelInfo, String modelNamePrefix)
TRACE_PUSH
<%vars.inputVars |> SIMVAR(__) hasindex i0 =>
'$P$ATTRIBUTE<%cref(name)%>.start = data->simulationInfo.inputVars[<%i0%>];'
'data->simulationInfo.inputVars[<%i0%>] = $P$ATTRIBUTE<%cref(name)%>.start;'
;separator="\n"
%>
TRACE_POP
return 0;
}

int <%symbolName(modelNamePrefix,"input_function_updateStartValues")%>(DATA *data, threadData_t *threadData)
{
TRACE_PUSH
<%vars.inputVars |> SIMVAR(__) hasindex i0 =>
'$P$ATTRIBUTE<%cref(name)%>.start = data->simulationInfo.inputVars[<%i0%>];'
;separator="\n"
%>
TRACE_POP
return 0;
}
>>
end match
end functionInput;
Expand Down
1 change: 1 addition & 0 deletions SimulationRuntime/c/openmodelica_func.h
Expand Up @@ -110,6 +110,7 @@ int (*functionDAE)(DATA *data, threadData_t*);
/* functions for input and output */
int (*input_function)(DATA*, threadData_t*);
int (*input_function_init)(DATA*, threadData_t*);
int (*input_function_updateStartValues)(DATA*, threadData_t*);
int (*output_function)(DATA*, threadData_t*);

/* function for storing value histories of delayed expressions
Expand Down
7 changes: 2 additions & 5 deletions SimulationRuntime/c/simulation/solver/solver_main.c
Expand Up @@ -388,7 +388,6 @@ int freeSolverData(DATA* data, SOLVER_INFO* solverInfo)
*/
int initializeModel(DATA* data, threadData_t *threadData, const char* init_initMethod,
const char* init_file, double init_time, int lambda_steps)

{
int retValue = 0;

Expand All @@ -397,12 +396,10 @@ int initializeModel(DATA* data, threadData_t *threadData, const char* init_initM
copyStartValuestoInitValues(data);

/* read input vars */
data->callback->input_function_init(data, threadData);
externalInputUpdate(data);
data->callback->input_function_updateStartValues(data, threadData);
data->callback->input_function(data, threadData);
/* update start values for inputs if input is set */
if(data->simulationInfo.external_input.active){
data->callback->input_function_init(data, threadData);
}

data->localData[0]->timeValue = simInfo->startTime;

Expand Down

0 comments on commit 7101208

Please sign in to comment.