Changeset b875dff in OpenModelica


Ignore:
Timestamp:
2013-12-12T10:27:28+01:00 (10 years ago)
Author:
Martin Sjölund <martin.sjolund@…>
Branches:
Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, master, omlib-staging
Children:
2f686d3
Parents:
cb9f6f32
Message:

#2508

  • Don't enable output of variables unless they match the regex
  • Don't output all alias variables for csv and plt

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18466 f25d12d1-65f4-0310-ae8a-bbce733d8d8e

Location:
SimulationRuntime/c/simulation
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • SimulationRuntime/c/simulation/results/simulation_result_mat.cpp

    r1d852115 rb875dff  
    218218  matData->stopTime = data->simulationInfo.stopTime;
    219219
    220   try
    221   {
     220  try {
    222221    /* open file */
    223222    matData->fp.open(self->filename, std::ofstream::binary|std::ofstream::trunc);
  • SimulationRuntime/c/simulation/simulation_runtime.cpp

    r6e97464 rb875dff  
    331331 * This phase is skipped for interactive simulations
    332332 */
    333 void initializeOutputFilter(MODEL_DATA *modelData, modelica_string variableFilter)
     333void initializeOutputFilter(MODEL_DATA *modelData, modelica_string variableFilter, int resultFormatHasCheapAliasesAndParameters)
    334334{
    335335#ifndef _MSC_VER
     336  int cheap = resultFormatHasCheapAliasesAndParameters;
    336337  std::string varfilter(variableFilter);
    337338  regex_t myregex;
     
    340341  string tmp = ("^(" + varfilter + ")$");
    341342  const char *filter = tmp.c_str(); // C++ strings are horrible to work with...
    342   if(modelData->nStates > 0 && 0 == strcmp(modelData->realVarsData[0].info.name, "$dummy")) {
     343  if (modelData->nStates > 0 && 0 == strcmp(modelData->realVarsData[0].info.name, "$dummy")) {
    343344    modelData->realVarsData[0].filterOutput = 1;
    344345    modelData->realVarsData[modelData->nStates].filterOutput = 1;
    345346  }
    346   if(0 == strcmp(filter, ".*")) // This matches all variables, so we don't need to do anything
     347  if(0 == strcmp(filter, ".*")) { // This matches all variables, so we don't need to do anything
    347348    return;
     349  }
    348350
    349351#if defined(OMC_EMCC)
     
    352354#endif
    353355  rc = regcomp(&myregex, filter, flags);
    354   if(rc)
    355   {
     356  if(rc) {
    356357    char err_buf[2048] = {0};
    357358    regerror(rc, &myregex, err_buf, 2048);
     
    360361  }
    361362
    362   /* new imple */
    363   for(long i=0; i<modelData->nVariablesReal; i++) if(!modelData->realVarsData[i].filterOutput)
     363  for(long i=0; i<modelData->nVariablesReal; i++) if(!modelData->realVarsData[i].filterOutput) {
    364364    modelData->realVarsData[i].filterOutput = regexec(&myregex, modelData->realVarsData[i].info.name, 0, NULL, 0) != 0;
    365   for(long i=0; i<modelData->nAliasReal; i++)
    366   {
    367     if(modelData->realAlias[i].aliasType == 0)  /* variable */
    368     {
    369       if(!modelData->realAlias[i].filterOutput && !modelData->realVarsData[modelData->realAlias[i].nameID].filterOutput)
    370         modelData->realAlias[i].filterOutput = regexec(&myregex, modelData->realAlias[i].info.name, 0, NULL, 0) != 0;
    371       else
    372       {
    373         modelData->realAlias[i].filterOutput = 0;
     365  }
     366  for(long i=0; i<modelData->nAliasReal; i++) {
     367    if(modelData->realAlias[i].aliasType == 0)  /* variable */ {
     368      modelData->realAlias[i].filterOutput = regexec(&myregex, modelData->realAlias[i].info.name, 0, NULL, 0) != 0;
     369      if (0 == modelData->realAlias[i].filterOutput) {
    374370        modelData->realVarsData[modelData->realAlias[i].nameID].filterOutput = 0;
    375371      }
    376     }
    377     else if(modelData->realAlias[i].aliasType == 1)  /* parameter */
    378     {
    379       if(!modelData->realAlias[i].filterOutput && !modelData->realParameterData[modelData->realAlias[i].nameID].filterOutput)
    380         modelData->realAlias[i].filterOutput = regexec(&myregex, modelData->realAlias[i].info.name, 0, NULL, 0) != 0;
    381       else
    382       {
    383         modelData->realAlias[i].filterOutput = 0;
     372    } else if(modelData->realAlias[i].aliasType == 1)  /* parameter */ {
     373      modelData->realAlias[i].filterOutput = regexec(&myregex, modelData->realAlias[i].info.name, 0, NULL, 0) != 0;
     374      if (0 == modelData->realAlias[i].filterOutput && resultFormatHasCheapAliasesAndParameters) {
    384375        modelData->realParameterData[modelData->realAlias[i].nameID].filterOutput = 0;
    385376      }
    386377    }
    387378  }
    388   for(long i=0; i<modelData->nVariablesInteger; i++) if(!modelData->integerVarsData[i].filterOutput)
     379  for (long i=0; i<modelData->nVariablesInteger; i++) if(!modelData->integerVarsData[i].filterOutput) {
    389380    modelData->integerVarsData[i].filterOutput = regexec(&myregex, modelData->integerVarsData[i].info.name, 0, NULL, 0) != 0;
    390   for(long i=0; i<modelData->nAliasInteger; i++)
    391   {
    392     if(modelData->integerAlias[i].aliasType == 0)  /* variable */
    393     {
    394       if(!modelData->integerAlias[i].filterOutput && !modelData->integerVarsData[modelData->integerAlias[i].nameID].filterOutput)
    395         modelData->integerAlias[i].filterOutput = regexec(&myregex, modelData->integerAlias[i].info.name, 0, NULL, 0) != 0;
    396       else
    397       {
    398         modelData->integerAlias[i].filterOutput = 0;
     381  }
     382  for (long i=0; i<modelData->nAliasInteger; i++) {
     383    if(modelData->integerAlias[i].aliasType == 0)  /* variable */ {
     384      modelData->integerAlias[i].filterOutput = regexec(&myregex, modelData->integerAlias[i].info.name, 0, NULL, 0) != 0;
     385      if (0 == modelData->integerAlias[i].filterOutput) {
    399386        modelData->integerVarsData[modelData->integerAlias[i].nameID].filterOutput = 0;
    400387      }
    401     }
    402     else if(modelData->integerAlias[i].aliasType == 1)  /* parameter */
    403     {
    404       if(!modelData->integerAlias[i].filterOutput && !modelData->integerParameterData[modelData->integerAlias[i].nameID].filterOutput)
    405         modelData->integerAlias[i].filterOutput = regexec(&myregex, modelData->integerAlias[i].info.name, 0, NULL, 0) != 0;
    406       else
    407       {
    408         modelData->integerAlias[i].filterOutput = 0;
     388    } else if(modelData->integerAlias[i].aliasType == 1)  /* parameter */ {
     389      modelData->integerAlias[i].filterOutput = regexec(&myregex, modelData->integerAlias[i].info.name, 0, NULL, 0) != 0;
     390      if (0 == modelData->integerAlias[i].filterOutput && resultFormatHasCheapAliasesAndParameters) {
    409391        modelData->integerParameterData[modelData->integerAlias[i].nameID].filterOutput = 0;
    410392      }
    411393    }
    412394  }
    413   for(long i=0; i<modelData->nVariablesBoolean; i++) if(!modelData->booleanVarsData[i].filterOutput)
     395  for (long i=0; i<modelData->nVariablesBoolean; i++) if(!modelData->booleanVarsData[i].filterOutput) {
    414396    modelData->booleanVarsData[i].filterOutput = regexec(&myregex, modelData->booleanVarsData[i].info.name, 0, NULL, 0) != 0;
    415   for(long i=0; i<modelData->nAliasBoolean; i++)
    416   {
    417     if(modelData->booleanAlias[i].aliasType == 0)  /* variable */
    418     {
    419       if(!modelData->booleanAlias[i].filterOutput && !modelData->booleanVarsData[modelData->booleanAlias[i].nameID].filterOutput)
    420         modelData->booleanAlias[i].filterOutput = regexec(&myregex, modelData->booleanAlias[i].info.name, 0, NULL, 0) != 0;
    421       else
    422       {
    423         modelData->booleanAlias[i].filterOutput = 0;
     397  }
     398  for (long i=0; i<modelData->nAliasBoolean; i++) {
     399    if(modelData->booleanAlias[i].aliasType == 0)  /* variable */ {
     400      modelData->booleanAlias[i].filterOutput = regexec(&myregex, modelData->booleanAlias[i].info.name, 0, NULL, 0) != 0;
     401      if (0 == modelData->booleanAlias[i].filterOutput) {
    424402        modelData->booleanVarsData[modelData->booleanAlias[i].nameID].filterOutput = 0;
    425403      }
    426     }
    427     else if(modelData->booleanAlias[i].aliasType == 1)  /* parameter */
    428     {
    429       if(!modelData->booleanAlias[i].filterOutput && !modelData->booleanParameterData[modelData->booleanAlias[i].nameID].filterOutput)
    430         modelData->booleanAlias[i].filterOutput = regexec(&myregex, modelData->booleanAlias[i].info.name, 0, NULL, 0) != 0;
    431       else
    432       {
    433         modelData->booleanAlias[i].filterOutput = 0;
     404    } else if(modelData->booleanAlias[i].aliasType == 1)  /* parameter */ {
     405      modelData->booleanAlias[i].filterOutput = regexec(&myregex, modelData->booleanAlias[i].info.name, 0, NULL, 0) != 0;
     406      if (0 == modelData->booleanAlias[i].filterOutput && resultFormatHasCheapAliasesAndParameters) {
    434407        modelData->booleanParameterData[modelData->booleanAlias[i].nameID].filterOutput = 0;
    435408      }
    436409    }
    437410  }
    438   for(long i=0; i<modelData->nVariablesString; i++) if(!modelData->stringVarsData[i].filterOutput)
     411  for (long i=0; i<modelData->nVariablesString; i++) if(!modelData->stringVarsData[i].filterOutput) {
    439412    modelData->stringVarsData[i].filterOutput = regexec(&myregex, modelData->stringVarsData[i].info.name, 0, NULL, 0) != 0;
    440   for(long i=0; i<modelData->nAliasString; i++)
    441   {
    442     if(modelData->stringAlias[i].aliasType == 0)  /* variable */
    443     {
    444       if(!modelData->stringAlias[i].filterOutput && !modelData->stringVarsData[modelData->stringAlias[i].nameID].filterOutput)
    445         modelData->stringAlias[i].filterOutput = regexec(&myregex, modelData->stringAlias[i].info.name, 0, NULL, 0) != 0;
    446       else
    447       {
    448         modelData->stringAlias[i].filterOutput = 0;
     413  }
     414  for (long i=0; i<modelData->nAliasString; i++) {
     415    if(modelData->stringAlias[i].aliasType == 0)  /* variable */ {
     416      modelData->stringAlias[i].filterOutput = regexec(&myregex, modelData->stringAlias[i].info.name, 0, NULL, 0) != 0;
     417      if (0 == modelData->stringAlias[i].filterOutput) {
    449418        modelData->stringVarsData[modelData->stringAlias[i].nameID].filterOutput = 0;
    450419      }
    451     }
    452     else if(modelData->stringAlias[i].aliasType == 1)  /* parameter */
    453     {
    454       if(!modelData->stringAlias[i].filterOutput && !modelData->stringParameterData[modelData->stringAlias[i].nameID].filterOutput)
    455         modelData->stringAlias[i].filterOutput = regexec(&myregex, modelData->stringAlias[i].info.name, 0, NULL, 0) != 0;
    456       else
    457       {
    458         modelData->stringAlias[i].filterOutput = 0;
     420    } else if(modelData->stringAlias[i].aliasType == 1)  /* parameter */ {
     421      modelData->stringAlias[i].filterOutput = regexec(&myregex, modelData->stringAlias[i].info.name, 0, NULL, 0) != 0;
     422      if (0 == modelData->stringAlias[i].filterOutput && resultFormatHasCheapAliasesAndParameters) {
    459423        modelData->stringParameterData[modelData->stringAlias[i].nameID].filterOutput = 0;
    460424      }
     
    636600int initializeResultData(DATA* simData, string result_file_cstr, int cpuTime)
    637601{
     602  int resultFormatHasCheapAliasesAndParameters = 0;
    638603  int retVal = 0;
    639604  long maxSteps = 4 * simData->simulationInfo.numSteps;
     
    653618    sim_result.writeParameterData = mat4_writeParameterData;
    654619    sim_result.free = mat4_free;
     620    resultFormatHasCheapAliasesAndParameters = 1;
    655621  } else if(0 == strcmp("plt", simData->simulationInfo.outputFormat)) {
    656622    sim_result.init = plt_init;
     
    662628    return 1;
    663629  }
     630  initializeOutputFilter(&(simData->modelData), simData->simulationInfo.variableFilter, resultFormatHasCheapAliasesAndParameters);
    664631  sim_result.init(&sim_result, simData);
    665632  infoStreamPrint(LOG_SOLVER, 0, "Allocated simulation result data storage for method '%s' and file='%s'", simData->simulationInfo.outputFormat, sim_result.filename);
     
    828795
    829796  read_input_xml(&(data->modelData), &(data->simulationInfo));
    830   initializeOutputFilter(&(data->modelData), data->simulationInfo.variableFilter);
    831797  /* set the global stepsize variable */
    832798  stepSize = data->simulationInfo.stepSize;
Note: See TracChangeset for help on using the changeset viewer.