Skip to content

Commit

Permalink
[newSimulationRuntime]
Browse files Browse the repository at this point in the history
 - fixed bug with delay and string parameter

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@10852 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Jan 2, 2012
1 parent 1862310 commit eaa36f7
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 25 deletions.
1 change: 1 addition & 0 deletions SimulationRuntime/c/Makefile.common
Expand Up @@ -68,6 +68,7 @@ install: ModelicaExternalC/libModelicaExternalC.a libSimulationRuntimeC.a simula
cp ./math-support/matrix.h $(builddir_inc)
cp ./math-support/blaswrap.h $(builddir_inc)
cp ./math-support/model_help.h $(builddir_inc)
cp ./math-support/delay.h $(builddir_inc)
cp ./simulation/simulation_runtime.h $(builddir_inc)
cp ./simulation/libf2c/f2c.h $(builddir_inc)
cp ./simulation/solver/simulation_inline_solver.h $(builddir_inc)
Expand Down
21 changes: 11 additions & 10 deletions SimulationRuntime/c/math-support/delay.c
Expand Up @@ -78,7 +78,7 @@ void storeDelayedExpression(_X_DATA* data, int exprNumber, double exprValue, dou
{
TIME_AND_VALUE tpl;

DEBUG_INFO3(LOG_EVENTS,"storeDelayed[%d] %g:%g", exprNumber, time, exprValue);
DEBUG_INFO3(LOG_EVENTS, "storeDelayed[%d] %g:%g", exprNumber, time, exprValue);

/* Allocate more space for expressions */
ASSERT1(exprNumber < data->modelData.nDelayExpressions, "storeDelayedExpression: invalid expression number %d", exprNumber);
Expand All @@ -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", 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 @@ -104,7 +104,7 @@ 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);
DEBUG_INFO1(LOG_EVENTS, "delayImpl: Entered at time < starting time: %g.", exprValue);
return (exprValue);
}

Expand All @@ -117,7 +117,7 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
if(length == 0)
{
/* This occurs in the initialization phase */
DEBUG_INFO1(LOG_EVENTS,"delayImpl: Missing initial value, using argument value %g instead.", exprValue);
DEBUG_INFO1(LOG_EVENTS, "delayImpl: Missing initial value, using argument value %g instead.", exprValue);
return (exprValue);
}

Expand All @@ -134,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;
DEBUG_INFO2(LOG_EVENTS,"findTime: time <= tStart + delayTime: [%d] = %g\n",exprNumber, res);
DEBUG_INFO2(LOG_EVENTS, "findTime: time <= tStart + delayTime: [%d] = %g",exprNumber, res);
return res;
}
else
Expand Down Expand Up @@ -167,7 +167,7 @@ double delayImpl(_X_DATA* data, int exprNumber, double exprValue, double time, d
{
if(0 < i && delayMax == delayTime)
dequeueNFirstRingDatas(delayStruct, i-1);
DEBUG_INFO3(LOG_EVENTS,"delayImpl: dequeueNFirstRingDatas[%d] %g = %g", i, delayMax, delayTime);
DEBUG_INFO3(LOG_EVENTS, "delayImpl: dequeueNFirstRingDatas[%d] %g = %g", i, delayMax, delayTime);
return value0;
}
time1 = ((TIME_AND_VALUE*)getRingData(delayStruct, i+1))->time;
Expand All @@ -177,11 +177,11 @@ 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);
DEBUG_INFO2(LOG_EVENTS, "delayImpl: Exact match at %g = %g", timeStamp, value0);

return value0;
} else if(time1 == timeStamp) {
DEBUG_INFO2(LOG_EVENTS,"delayImpl: Exact match at %g = %g", timeStamp, value1);
DEBUG_INFO2(LOG_EVENTS, "delayImpl: Exact match at %g = %g", timeStamp, value1);

return value1;
} else {
Expand All @@ -190,11 +190,12 @@ 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", 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", timeStamp, value0, value1, retVal);
DEBUG_INFO4(LOG_EVENTS, "delayImpl: Linear interpolation of %g value: %g and %g = %g", timeStamp, value0, value1, retVal);
return retVal;
}
}

}

28 changes: 16 additions & 12 deletions SimulationRuntime/c/math-support/model_help.c
Expand Up @@ -112,6 +112,7 @@ void copyStartValuestoInitValues(_X_DATA *data)

/* just copy all start values to initial */
storeStartValuesParam(data);
storeInitialValuesParam(data);
storeStartValues(data);
storePreValues(data);
overwriteOldSimulationData(data);
Expand Down Expand Up @@ -212,7 +213,7 @@ void storeStartValues(_X_DATA* data)
DEBUG_INFO2(LOG_DEBUG,"Set Boolean var %s = %s",mData->booleanVarsData[i].info.name, sData->booleanVars[i]?"true":"false");
}
for(i=0; i<mData->nVariablesString; ++i){
sData->stringVars[i] = copy_modelica_string((modelica_string_const)mData->stringVarsData[i].attribute.start);
sData->stringVars[i] = mData->stringVarsData[i].attribute.start;
DEBUG_INFO2(LOG_DEBUG,"Set String var %s = %s",mData->stringVarsData[i].info.name, sData->stringVars[i]);
}
}
Expand All @@ -231,23 +232,24 @@ void storeStartValuesParam(_X_DATA *data)
for(i=0; i<mData->nParametersReal; ++i){
mData->realParameterData[i].attribute.initial = mData->realParameterData[i].attribute.start;
data->simulationInfo.realParameter[i] = mData->realParameterData[i].attribute.start;
DEBUG_INFO2(LOG_DEBUG,"Set Real var %s = %g",mData->realParameterData[i].info.name,data->simulationInfo.realParameter[i]);
DEBUG_INFO2(LOG_INIT,"Set Real var %s = %g",mData->realParameterData[i].info.name,data->simulationInfo.realParameter[i]);
}
for(i=0; i<mData->nParametersInteger; ++i){
mData->integerParameterData[i].attribute.initial = mData->integerParameterData[i].attribute.start;
data->simulationInfo.integerParameter[i] = mData->integerParameterData[i].attribute.start;
DEBUG_INFO2(LOG_DEBUG,"Set Integer var %s = %ld",mData->integerParameterData[i].info.name, data->simulationInfo.integerParameter[i]);
DEBUG_INFO2(LOG_INIT,"Set Integer var %s = %ld",mData->integerParameterData[i].info.name, data->simulationInfo.integerParameter[i]);
}
for(i=0; i<mData->nParametersBoolean; ++i){
mData->booleanParameterData[i].attribute.initial = mData->booleanParameterData[i].attribute.start;
data->simulationInfo.booleanParameter[i] = mData->booleanParameterData[i].attribute.start;
DEBUG_INFO2(LOG_DEBUG,"Set Boolean var %s = %s",mData->booleanParameterData[i].info.name, data->simulationInfo.booleanParameter[i]?"true":"false");
DEBUG_INFO2(LOG_INIT,"Set Boolean var %s = %s",mData->booleanParameterData[i].info.name, data->simulationInfo.booleanParameter[i]?"true":"false");
}
for(i=0; i<mData->nParametersString; ++i){
mData->stringParameterData[i].attribute.initial = copy_modelica_string((modelica_string_const)mData->stringParameterData[i].attribute.start);
data->simulationInfo.stringParameter[i] = copy_modelica_string((modelica_string_const)mData->stringParameterData[i].attribute.start);
DEBUG_INFO2(LOG_DEBUG,"Set String var %s = %s",mData->stringParameterData[i].info.name, data->simulationInfo.stringParameter[i]);
mData->stringParameterData[i].attribute.initial = mData->stringParameterData[i].attribute.start;
data->simulationInfo.stringParameter[i] = mData->stringParameterData[i].attribute.start;
DEBUG_INFO2(LOG_INIT,"Set String var %s = %s",mData->stringParameterData[i].info.name, data->simulationInfo.stringParameter[i]);
}

}

/*! \fn void storeInitialValuesParam(_X_DATA *data)
Expand All @@ -263,20 +265,21 @@ void storeInitialValuesParam(_X_DATA *data)

for(i=0; i<mData->nParametersReal; ++i){
mData->realParameterData[i].attribute.initial = data->simulationInfo.realParameter[i];
DEBUG_INFO2(LOG_DEBUG,"Set Real Parameter var %s = %g",mData->realParameterData[i].info.name,data->simulationInfo.realParameter[i]);
DEBUG_INFO2(LOG_INIT,"Set Real Parameter var %s = %g",mData->realParameterData[i].info.name,data->simulationInfo.realParameter[i]);
}
for(i=0; i<mData->nParametersInteger; ++i){
mData->integerParameterData[i].attribute.initial = data->simulationInfo.integerParameter[i];
DEBUG_INFO2(LOG_DEBUG,"Set Integer Parameter var %s = %ld",mData->integerParameterData[i].info.name, data->simulationInfo.integerParameter[i]);
DEBUG_INFO2(LOG_INIT,"Set Integer Parameter var %s = %ld",mData->integerParameterData[i].info.name, data->simulationInfo.integerParameter[i]);
}
for(i=0; i<mData->nParametersBoolean; ++i){
mData->booleanParameterData[i].attribute.initial = data->simulationInfo.booleanParameter[i];
DEBUG_INFO2(LOG_DEBUG,"Set Boolean Parameter var %s = %s",mData->booleanParameterData[i].info.name, data->simulationInfo.booleanParameter[i]?"true":"false");
DEBUG_INFO2(LOG_INIT,"Set Boolean Parameter var %s = %s",mData->booleanParameterData[i].info.name, data->simulationInfo.booleanParameter[i]?"true":"false");
}
for(i=0; i<mData->nParametersString; ++i){
mData->stringParameterData[i].attribute.initial = copy_modelica_string((modelica_string_const)data->simulationInfo.stringParameter[i]);
DEBUG_INFO2(LOG_DEBUG,"Set String Parameter var %s = %s",mData->stringParameterData[i].info.name, data->simulationInfo.stringParameter[i]);
mData->stringParameterData[i].attribute.initial = data->simulationInfo.stringParameter[i];
DEBUG_INFO2(LOG_INIT,"Set String initial Parameter var %s = %s",mData->stringParameterData[i].info.name, mData->stringParameterData[i].attribute.initial);
}

}


Expand Down Expand Up @@ -418,6 +421,7 @@ void initializeXDataStruc(_X_DATA *data)
/* buffer for external objects */
data->simulationInfo.extObjs = NULL;
data->simulationInfo.extObjs = (void**) calloc(data->modelData.nExtObjs, sizeof(void*));

ASSERT(data->simulationInfo.extObjs,"error allocating external objects");

/* initial build calls terminal, initial */
Expand Down
1 change: 1 addition & 0 deletions SimulationRuntime/c/openmodelica_func.h
Expand Up @@ -52,6 +52,7 @@
#include "utility.h"

#include "model_help.h"
#include "delay.h"

#ifdef __cplusplus
extern "C" {
Expand Down
3 changes: 0 additions & 3 deletions SimulationRuntime/c/simulation/solver/solver_main.c
Expand Up @@ -228,9 +228,6 @@ solver_main(_X_DATA* simData, double start, double stop, double step, long outpu

/* initial sample and delay again, due to maybe change
* parameters during Initialization */
/*
callExternalObjectConstructors(simData);
*/
initSample(simData, simInfo->startTime, simInfo->stopTime);
initDelay(simData, simInfo->startTime);

Expand Down

0 comments on commit eaa36f7

Please sign in to comment.