Skip to content

Commit

Permalink
[newSimulationRuntime]
Browse files Browse the repository at this point in the history
 - activated jacobian in DASSL again
 - added some memory frees to get rid of valgrind claims



git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@10811 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Dec 21, 2011
1 parent 0e1e27b commit 81bc7ab
Show file tree
Hide file tree
Showing 12 changed files with 287 additions and 176 deletions.
14 changes: 5 additions & 9 deletions SimulationRuntime/c/math-support/delay.c
Expand Up @@ -95,7 +95,7 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
RINGBUFFER* delayStruct = data->simulationInfo.delayStructure[exprNumber];
int length = ringBufferLength(delayStruct);

DEBUG_INFO4(LOG_EVENTS,"delayImpl: exprNumber = %d, exprValue = %g, time = %g, delayTime = %g\n", exprNumber, exprValue, time, delayTime);
DEBUG_INFO4(LOG_EVENTS,"delayImpl: exprNumber = %d, exprValue = %g, time = %g, delayTime = %g", exprNumber, exprValue, time, delayTime);

/* Check for errors */

Expand All @@ -105,7 +105,6 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
if(time <= data->simulationInfo.tStart)
{
DEBUG_INFO1(LOG_EVENTS,"delayImpl: Entered at time < starting time: %g.", exprValue);
/* printf("delayImpl: Entered at time < starting time: %g.\n", exprValue); fflush(NULL);*/
return (exprValue);
}

Expand All @@ -119,7 +118,6 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
{
/* This occurs in the initialization phase */
DEBUG_INFO1(LOG_EVENTS,"delayImpl: Missing initial value, using argument value %g instead.", exprValue);
/* printf("delayImpl: Missing initial value, using argument value %g instead.\n", exprValue); fflush(NULL);*/
return (exprValue);
}

Expand All @@ -136,7 +134,7 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
if(time <= data->simulationInfo.tStart + delayTime)
{
double res = ((TIME_AND_VALUE*)getRingData(delayStruct, 0))->value;
/*printf("findTime: time <= tStart + delayTime: [%d] = %g\n",exprNumber, res);fflush(NULL);*/
DEBUG_INFO2(LOG_EVENTS,"findTime: time <= tStart + delayTime: [%d] = %g\n",exprNumber, res);
return res;
}
else
Expand Down Expand Up @@ -180,12 +178,10 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
/* was it an exact match?*/
if(time0 == timeStamp){
DEBUG_INFO2(LOG_EVENTS,"delayImpl: Exact match at %g = %g", timeStamp, value0);
/*printf("delayImpl: Exact match at %g = %g\n", timeStamp, value0);fflush(NULL);*/

return value0;
} else if(time1 == timeStamp) {
DEBUG_INFO2(LOG_EVENTS,"delayImpl: Exact match at %g = %g", timeStamp, value1);
/*printf("delayImpl: Exact match at %g = %g\n", timeStamp, value1);fflush(NULL);*/

return value1;
} else {
Expand All @@ -194,10 +190,10 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
double dt0 = time1 - timeStamp;
double dt1 = timeStamp - time0;
double retVal = (value0 * dt0 + value1 * dt1) / timedif;
DEBUG_INFO3(LOG_EVENTS,"delayImpl: Linear interpolation of %g between %g and %g\n", timeStamp, time0, time1);
DEBUG_INFO3(LOG_EVENTS,"delayImpl: Linear interpolation of %g between %g and %g", timeStamp, time0, time1);

DEBUG_INFO4(LOG_EVENTS,"delayImpl: Linear interpolation of %g value: %g and %g = %g\n", timeStamp, value0, value1, retVal);
return (retVal);
DEBUG_INFO4(LOG_EVENTS,"delayImpl: Linear interpolation of %g value: %g and %g = %g", timeStamp, value0, value1, retVal);
return retVal;
}
}
}
Expand Down
39 changes: 38 additions & 1 deletion SimulationRuntime/c/math-support/model_help.c
Expand Up @@ -448,26 +448,59 @@ void DeinitializeXDataStruc(_X_DATA *data)
free(tmpSimData->stringVars);
}
free(data->localData);
freeRingBuffer(data->simulationData);

/* free modelData var arrays */
for(i=0; i < data->modelData.nVariablesReal;i++)
freeVarInfo(&((data->modelData.realVarsData[i]).info));
free(data->modelData.realVarsData);

for(i=0; i < data->modelData.nVariablesInteger;i++)
freeVarInfo(&((data->modelData.integerVarsData[i]).info));
free(data->modelData.integerVarsData);

for(i=0; i < data->modelData.nVariablesBoolean;i++)
freeVarInfo(&((data->modelData.booleanVarsData[i]).info));
free(data->modelData.booleanVarsData);

for(i=0; i < data->modelData.nVariablesString;i++)
freeVarInfo(&((data->modelData.stringVarsData[i]).info));
free(data->modelData.stringVarsData);

/* free modelica parameter static data */
for(i=0; i < data->modelData.nParametersReal;i++)
freeVarInfo(&((data->modelData.realParameterData[i]).info));
free(data->modelData.realParameterData);

for(i=0; i < data->modelData.nParametersInteger;i++)
freeVarInfo(&((data->modelData.integerParameterData[i]).info));
free(data->modelData.integerParameterData);

for(i=0; i < data->modelData.nParametersBoolean;i++)
freeVarInfo(&((data->modelData.booleanParameterData[i]).info));
free(data->modelData.booleanParameterData);

for(i=0; i < data->modelData.nParametersString;i++)
freeVarInfo(&((data->modelData.stringParameterData[i]).info));
free(data->modelData.stringParameterData);

/* free alias static data */
for(i=0; i < data->modelData.nAliasReal;i++)
freeVarInfo(&((data->modelData.realAlias[i]).info));
free(data->modelData.realAlias);
for(i=0; i < data->modelData.nAliasInteger;i++)
freeVarInfo(&((data->modelData.integerAlias[i]).info));
free(data->modelData.integerAlias);
for(i=0; i < data->modelData.nAliasBoolean;i++)
freeVarInfo(&((data->modelData.booleanAlias[i]).info));
free(data->modelData.booleanAlias);
for(i=0; i < data->modelData.nAliasString;i++)
freeVarInfo(&((data->modelData.stringAlias[i]).info));
free(data->modelData.stringAlias);

/* free simulationInfo arrays */
free(data->simulationInfo.rawSampleExps);
free(data->simulationInfo.sampleTimes);
free(data->simulationInfo.rawSampleExps);

free(data->simulationInfo.helpVars);
free(data->simulationInfo.helpVarsPre);
Expand Down Expand Up @@ -505,12 +538,16 @@ void DeinitializeXDataStruc(_X_DATA *data)
free(data->modelData.equationInfo[i].vars);
free(data->modelData.equationInfo);

free(data->modelData.equationInfo_reverse_prof_index);

/* free delay structure */
for(i=0; i<data->modelData.nDelayExpressions; i++)
freeRingBuffer(data->simulationInfo.delayStructure[i]);

free(data->simulationInfo.delayStructure);

pop_memory_states(NULL);

}

/* relation functions used in zero crossing detection */
Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/c/simulation/options.cpp
Expand Up @@ -61,7 +61,7 @@ const string* getFlagValue(const char *option, int argc, char **argv)
string tmpStr=string(argv[i]);
if (("-"+string(option))==string(argv[i])) {
if (argc > i+1) {
return new string(argv[i+1]);
return new string(argv[i+1]);
}
}
}
Expand Down
11 changes: 7 additions & 4 deletions SimulationRuntime/c/simulation/results/simulation_result_mat.cpp
Expand Up @@ -127,7 +127,7 @@ void simulation_result_mat::writeParameterData(MODEL_DATA *modelData)
fp.seekp(remember);
} catch(...) {
fp.close();
delete[] doubleMatrix;
free(doubleMatrix);
throw;
}
};
Expand Down Expand Up @@ -192,14 +192,17 @@ simulation_result_mat::simulation_result_mat(const char* filename,
writeMatVer4MatrixHeader("data_2", r_indx_map.size() + i_indx_map.size() + b_indx_map.size() + 1 /* add one more for timeValue*/, 0, sizeof(double));

free(doubleMatrix);
free(intMatrix);
doubleMatrix = NULL;
intMatrix = NULL;
fp.flush();

} catch(...) {
fp.close();
free(names); names=NULL;
delete[] stringMatrix;
delete[] doubleMatrix;
free(stringMatrix);
free(doubleMatrix);
free(intMatrix);
rt_accumulate(SIM_TIMER_OUTPUT);
THROW1("Error while writing mat file %s",filename);
}
Expand Down Expand Up @@ -367,7 +370,7 @@ void simulation_result_mat::generateDataInfo(int32_t* &dataInfo,
rows = nVars + nParams;
cols = 4;

dataInfo = new int[rows*cols];
dataInfo = (int*) calloc(rows*cols,sizeof(int));
ASSERT(dataInfo,"Cannot alloc memory");
/* continuous and discrete variables, including time */
for(size_t i = 0; i < (size_t)(r_indx_map.size() + i_indx_map.size() + b_indx_map.size() + 1/* add one more for timeValue*/ ); ++i) {
Expand Down
6 changes: 3 additions & 3 deletions SimulationRuntime/c/simulation/simulation_input_xml.cpp
Expand Up @@ -462,11 +462,11 @@ void read_input_xml(int argc, char **argv,
read_value(mi.rAlg[i]["fixed"], (signed char*)&(modelData->realVarsData[j].attribute.fixed));
DEBUG_INFO2(LOG_SOLVER, "read fixed-value for %s = %s from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.fixed?"true":"false");
read_value(mi.rAlg[i]["nominal"], &(modelData->realVarsData[j].attribute.nominal));
DEBUG_INFO2(LOG_SOLVER, "read nominal-value for %s = %s from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.nominal);
DEBUG_INFO2(LOG_SOLVER, "read nominal-value for %s = %f from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.nominal);
read_value(mi.rAlg[i]["min"], &(modelData->realVarsData[j].attribute.min));
DEBUG_INFO2(LOG_SOLVER, "read min-value for %s = %s from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.min);
DEBUG_INFO2(LOG_SOLVER, "read min-value for %s = %f from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.min);
read_value(mi.rAlg[i]["max"], &(modelData->realVarsData[j].attribute.max));
DEBUG_INFO2(LOG_SOLVER, "read max-value for %s = %s from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.max);
DEBUG_INFO2(LOG_SOLVER, "read max-value for %s = %f from init file", modelData->realVarsData[j].info.name, modelData->realVarsData[j].attribute.max);

/* create a mapping for Alias variable to get the correct index */
mapAlias[(modelData->realVarsData[j].info.name)]= j;
Expand Down
2 changes: 2 additions & 0 deletions SimulationRuntime/c/simulation/simulation_runtime.cpp
Expand Up @@ -208,6 +208,8 @@ int verboseLevel(int argc, char**argv) {
res = INT_MAX;
globalDebugFlags = UINT_MAX;
}

delete flags;
return res;
}

Expand Down

0 comments on commit 81bc7ab

Please sign in to comment.