Skip to content

Commit

Permalink
[newSimulationRuntimeC] -added static data from xml-file
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@10483 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Nov 13, 2011
1 parent a28ccf9 commit 92510be
Show file tree
Hide file tree
Showing 8 changed files with 431 additions and 85 deletions.
2 changes: 1 addition & 1 deletion Compiler/susan_codegen/SimCode/CodegenC.tpl
Expand Up @@ -224,7 +224,7 @@ case MODELINFO(varInfo=VARINFO(__)) then
data.modelData.nParametersReal = <%varInfo.numParams%>;
data.modelData.nParametersInteger = <%varInfo.numIntParams%>;
data.modelData.nParametersBoolean = <%varInfo.numBoolParams%>;
data.modelData.nParametersStrings = <%varInfo.numStringParamVars%>;
data.modelData.nParametersString = <%varInfo.numStringParamVars%>;
data.modelData.nInputVars = <%varInfo.numInVars%>;
data.modelData.nOutputVars = <%varInfo.numOutVars%>;

Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/math-support/ringbuffer.c
Expand Up @@ -73,8 +73,8 @@ void freeRingBuffer(RINGBUFFER *rb)

void *getRingData(RINGBUFFER *rb, int i)
{
ASSERT(i < rb->nElements, "index [%d] out of range [%d:%d]", i, -rb->nElements+1, rb->nElements-1);
ASSERT(-rb->nElements < i, "index [%d] out of range [%d:%d]", i, 0, -rb->nElements+1);
ASSERT(i < rb->nElements, "index [%d] out of range [%d:%d]", i, (-rb->nElements+1), (rb->nElements-1));
ASSERT(-rb->nElements < i, "index [%d] out of range [%d:%d]", i, 0, (-rb->nElements+1));
return ((char*)rb->buffer)+(((rb->firstElement+i)%rb->bufferSize)*rb->itemSize);
}

Expand Down
37 changes: 24 additions & 13 deletions SimulationRuntime/c/simulation/simulation_data.c
Expand Up @@ -36,31 +36,42 @@

const size_t SIZERINGBUFFER = 3;

void initializeDataStruc(_X_DATA *data)
void initializeXDataStruc(_X_DATA *data)
{
SIMULATION_DATA *tmpSimData = 0;
SIMULATION_DATA tmpSimData;
size_t i = 0;
/* RingBuffer */
data->simulationData = 0;
data->simulationData = allocRingBuffer(SIZERINGBUFFER, sizeof(SIMULATION_DATA));
if (!data->simulationData)
{
THROW("Your memory is not strong enough for our Ringbuffer!", 1);
THROW("Your memory is not strong enough for our Ringbuffer!");
}

/* prepair RingBuffer */
for(i=0; i<SIZERINGBUFFER; i++)
{
tmpSimData = ((SIMULATION_DATA*)getRingData(data->simulationData, (int)SIZERINGBUFFER));
tmpSimData.realVars = (modelica_real*)calloc(data->modelData.nVariablesReal, sizeof(modelica_real));
tmpSimData.integerVars = (modelica_integer*)calloc(data->modelData.nVariablesInteger, sizeof(modelica_integer));
tmpSimData.booleanVars = (modelica_boolean*)calloc(data->modelData.nVariablesBoolean, sizeof(modelica_boolean));
tmpSimData.stringVars = (modelica_string*)calloc(data->modelData.nVariablesString, sizeof(modelica_string));

tmpSimData->realVars = (modelica_real*)calloc(data->modelData.nVariablesReal, sizeof(modelica_real));
tmpSimData->integerVars = (modelica_integer*)calloc(data->modelData.nVariablesInteger, sizeof(modelica_integer));
tmpSimData->booleanVars = (modelica_boolean*)calloc(data->modelData.nVariablesBoolean, sizeof(modelica_boolean));
tmpSimData->stringVars = (modelica_string*)calloc(data->modelData.nVariablesString, sizeof(modelica_string));

tmpSimData->realVarsPre = (modelica_real*)calloc(data->modelData.nVariablesReal, sizeof(modelica_real));
tmpSimData->integerVarsPre = (modelica_integer*)calloc(data->modelData.nVariablesInteger, sizeof(modelica_integer));
tmpSimData->booleanVarsPre = (modelica_boolean*)calloc(data->modelData.nVariablesBoolean, sizeof(modelica_boolean));
tmpSimData->stringVarsPre = (modelica_string*)calloc(data->modelData.nVariablesString, sizeof(modelica_string));
tmpSimData.realVarsPre = (modelica_real*)calloc(data->modelData.nVariablesReal, sizeof(modelica_real));
tmpSimData.integerVarsPre = (modelica_integer*)calloc(data->modelData.nVariablesInteger, sizeof(modelica_integer));
tmpSimData.booleanVarsPre = (modelica_boolean*)calloc(data->modelData.nVariablesBoolean, sizeof(modelica_boolean));
tmpSimData.stringVarsPre = (modelica_string*)calloc(data->modelData.nVariablesString, sizeof(modelica_string));
appendRingData(data->simulationData,&tmpSimData);
}

/* create modelData var arrays */
data->modelData.realData = (STATIC_REAL_DATA*) calloc(data->modelData.nVariablesReal,sizeof(STATIC_REAL_DATA));
data->modelData.integerData = (STATIC_INTEGER_DATA*) calloc(data->modelData.nVariablesInteger,sizeof(STATIC_INTEGER_DATA));
data->modelData.booleanData = (STATIC_BOOLEAN_DATA*) calloc(data->modelData.nVariablesBoolean,sizeof(STATIC_BOOLEAN_DATA));
data->modelData.stringData = (STATIC_STRING_DATA*) calloc(data->modelData.nVariablesString,sizeof(STATIC_STRING_DATA));

data->modelData.realParameter = (STATIC_REAL_DATA*) calloc(data->modelData.nParametersReal,sizeof(STATIC_REAL_DATA));
data->modelData.integerParameter = (STATIC_INTEGER_DATA*) calloc(data->modelData.nParametersInteger,sizeof(STATIC_INTEGER_DATA));
data->modelData.booleanParameter = (STATIC_BOOLEAN_DATA*) calloc(data->modelData.nParametersBoolean,sizeof(STATIC_BOOLEAN_DATA));
data->modelData.stringParameter = (STATIC_STRING_DATA*) calloc(data->modelData.nParametersString,sizeof(STATIC_STRING_DATA));

}

0 comments on commit 92510be

Please sign in to comment.