Changeset 14abf44 in OpenModelica


Ignore:
Timestamp:
2015-03-10T12:11:28+01:00 (9 years ago)
Author:
Adrian Pop <adrian.pop@…>
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, maintenance/v1.23, master, omlib-staging
Children:
9cd11c8
Parents:
6d2afdd6
Message:

Fix #3204

  • give a warning on stdout if override name not find in model
  • i would prefer to do it on stderr but LOG_STDERR doesn't seem to exist

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • SimulationRuntime/c/simulation/simulation_input_xml.cpp

    r120de989 r14abf44  
    9999// a map for overrides
    100100typedef std::map<std::string, std::string> omc_CommandLineOverrides;
     101// a map to find out which names were used
     102#define OMC_OVERRIDE_UNUSED 0
     103#define OMC_OVERRIDE_USED   1
     104typedef std::map<std::string, int> omc_CommandLineOverridesUses;
     105
    101106// function to handle command line settings override
    102107void doOverride(omc_ModelInput& mi, MODEL_DATA* modelData, const char* override, const char* overrideFile);
     
    766771}
    767772
     773std::string getOverrideValue(omc_CommandLineOverrides& mOverrides, omc_CommandLineOverridesUses& mOverridesUses, std::string name)
     774{
     775    mOverridesUses[name] = OMC_OVERRIDE_USED;
     776    return mOverrides[name];
     777}
     778
    768779void doOverride(omc_ModelInput& mi, MODEL_DATA* modelData, const char* override, const char* overrideFile)
    769780{
    770781  omc_CommandLineOverrides mOverrides;
     782  omc_CommandLineOverridesUses mOverridesUses;
    771783  char* overrideStr = NULL;
    772784  if((override != NULL) && (overrideFile != NULL))
     
    846858      // map[key]=value
    847859      mOverrides[key] = value;
     860      mOverridesUses[key] = OMC_OVERRIDE_UNUSED;
    848861
    849862      infoStreamPrint(LOG_SOLVER, 0, "override %s = %s", key.c_str(), value.c_str());
     
    856869
    857870    // now we have all overrides in mOverrides, override mi now
    858     mi.de["solver"]         = mOverrides.count("solver")         ? mOverrides["solver"]         : mi.de["solver"];
    859     mi.de["startTime"]      = mOverrides.count("startTime")      ? mOverrides["startTime"]      : mi.de["startTime"];
    860     mi.de["stopTime"]       = mOverrides.count("stopTime")       ? mOverrides["stopTime"]       : mi.de["stopTime"];
    861     mi.de["stepSize"]       = mOverrides.count("stepSize")       ? mOverrides["stepSize"]       : mi.de["stepSize"];
    862     mi.de["tolerance"]      = mOverrides.count("tolerance")      ? mOverrides["tolerance"]      : mi.de["tolerance"];
    863     mi.de["outputFormat"]   = mOverrides.count("outputFormat")   ? mOverrides["outputFormat"]   : mi.de["outputFormat"];
    864     mi.de["variableFilter"] = mOverrides.count("variableFilter") ? mOverrides["variableFilter"] : mi.de["variableFilter"];
     871    mi.de["solver"]         = mOverrides.count("solver")         ? getOverrideValue(mOverrides, mOverridesUses, "solver")    : mi.de["solver"];
     872    mi.de["startTime"]      = mOverrides.count("startTime")      ? getOverrideValue(mOverrides, mOverridesUses, "startTime") : mi.de["startTime"];
     873    mi.de["stopTime"]       = mOverrides.count("stopTime")       ? getOverrideValue(mOverrides, mOverridesUses, "stopTime")  : mi.de["stopTime"];
     874    mi.de["stepSize"]       = mOverrides.count("stepSize")       ? getOverrideValue(mOverrides, mOverridesUses, "stepSize")  : mi.de["stepSize"];
     875    mi.de["tolerance"]      = mOverrides.count("tolerance")      ? getOverrideValue(mOverrides, mOverridesUses, "tolerance")      : mi.de["tolerance"];
     876    mi.de["outputFormat"]   = mOverrides.count("outputFormat")   ? getOverrideValue(mOverrides, mOverridesUses, "outputFormat")   : mi.de["outputFormat"];
     877    mi.de["variableFilter"] = mOverrides.count("variableFilter") ? getOverrideValue(mOverrides, mOverridesUses, "variableFilter") : mi.de["variableFilter"];
    865878
    866879    // override all found!
    867880    for(long i=0; i<modelData->nStates; i++)
    868881    {
    869       mi.rSta[i]["start"] = mOverrides.count(mi.rSta[i]["name"]) ? mOverrides[mi.rSta[i]["name"]] : mi.rSta[i]["start"];
    870       mi.rDer[i]["start"] = mOverrides.count(mi.rDer[i]["name"]) ? mOverrides[mi.rDer[i]["name"]] : mi.rDer[i]["start"];
     882      mi.rSta[i]["start"] = mOverrides.count(mi.rSta[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.rSta[i]["name"]) : mi.rSta[i]["start"];
     883      mi.rDer[i]["start"] = mOverrides.count(mi.rDer[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.rDer[i]["name"]) : mi.rDer[i]["start"];
    871884    }
    872885    for(long i=0; i<(modelData->nVariablesReal - 2*modelData->nStates); i++)
    873886    {
    874       mi.rAlg[i]["start"] = mOverrides.count(mi.rAlg[i]["name"]) ? mOverrides[mi.rAlg[i]["name"]] : mi.rAlg[i]["start"];
     887      mi.rAlg[i]["start"] = mOverrides.count(mi.rAlg[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.rAlg[i]["name"]) : mi.rAlg[i]["start"];
    875888    }
    876889    for(long i=0; i<modelData->nVariablesInteger; i++)
    877890    {
    878       mi.iAlg[i]["start"] = mOverrides.count(mi.iAlg[i]["name"]) ? mOverrides[mi.iAlg[i]["name"]] : mi.iAlg[i]["start"];
     891      mi.iAlg[i]["start"] = mOverrides.count(mi.iAlg[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.iAlg[i]["name"]) : mi.iAlg[i]["start"];
    879892    }
    880893    for(long i=0; i<modelData->nVariablesBoolean; i++)
    881894    {
    882       mi.bAlg[i]["start"] = mOverrides.count(mi.bAlg[i]["name"]) ? mOverrides[mi.bAlg[i]["name"]] : mi.bAlg[i]["start"];
     895      mi.bAlg[i]["start"] = mOverrides.count(mi.bAlg[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.bAlg[i]["name"]) : mi.bAlg[i]["start"];
    883896    }
    884897    for(long i=0; i<modelData->nVariablesString; i++)
    885898    {
    886       mi.sAlg[i]["start"] = mOverrides.count(mi.sAlg[i]["name"]) ? mOverrides[mi.sAlg[i]["name"]] : mi.sAlg[i]["start"];
     899      mi.sAlg[i]["start"] = mOverrides.count(mi.sAlg[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.sAlg[i]["name"]) : mi.sAlg[i]["start"];
    887900    }
    888901    for(long i=0; i<modelData->nParametersReal; i++)
    889902    {
    890903      // TODO: only allow to override primary parameters
    891       mi.rPar[i]["start"] = mOverrides.count(mi.rPar[i]["name"]) ? mOverrides[mi.rPar[i]["name"]] : mi.rPar[i]["start"];
     904      mi.rPar[i]["start"] = mOverrides.count(mi.rPar[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.rPar[i]["name"]) : mi.rPar[i]["start"];
    892905    }
    893906    for(long i=0; i<modelData->nParametersInteger; i++)
    894907    {
    895908      // TODO: only allow to override primary parameters
    896       mi.iPar[i]["start"] = mOverrides.count(mi.iPar[i]["name"]) ? mOverrides[mi.iPar[i]["name"]] : mi.iPar[i]["start"];
     909      mi.iPar[i]["start"] = mOverrides.count(mi.iPar[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.iPar[i]["name"]) : mi.iPar[i]["start"];
    897910    }
    898911    for(long i=0; i<modelData->nParametersBoolean; i++)
    899912    {
    900913      // TODO: only allow to override primary parameters
    901       mi.bPar[i]["start"] = mOverrides.count(mi.bPar[i]["name"]) ? mOverrides[mi.bPar[i]["name"]] : mi.bPar[i]["start"];
     914      mi.bPar[i]["start"] = mOverrides.count(mi.bPar[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.bPar[i]["name"]) : mi.bPar[i]["start"];
    902915    }
    903916    for(long i=0; i<modelData->nParametersString; i++)
    904917    {
    905918      // TODO: only allow to override primary parameters
    906       mi.sPar[i]["start"] = mOverrides.count(mi.sPar[i]["name"]) ? mOverrides[mi.sPar[i]["name"]] : mi.sPar[i]["start"];
     919      mi.sPar[i]["start"] = mOverrides.count(mi.sPar[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.sPar[i]["name"]) : mi.sPar[i]["start"];
    907920    }
    908921    for(long i=0; i<modelData->nAliasReal; i++)
    909922    {
    910       mi.rAli[i]["start"] = mOverrides.count(mi.rAli[i]["name"]) ? mOverrides[mi.rAli[i]["name"]] : mi.rAli[i]["start"];
     923      mi.rAli[i]["start"] = mOverrides.count(mi.rAli[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.rAli[i]["name"]) : mi.rAli[i]["start"];
    911924    }
    912925    for(long i=0; i<modelData->nAliasInteger; i++)
    913926    {
    914       mi.iAli[i]["start"] = mOverrides.count(mi.iAli[i]["name"]) ? mOverrides[mi.iAli[i]["name"]] : mi.iAli[i]["start"];
     927      mi.iAli[i]["start"] = mOverrides.count(mi.iAli[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.iAli[i]["name"]) : mi.iAli[i]["start"];
    915928    }
    916929    for(long i=0; i<modelData->nAliasBoolean; i++)
    917930    {
    918       mi.bAli[i]["start"] = mOverrides.count(mi.bAli[i]["name"]) ? mOverrides[mi.bAli[i]["name"]] : mi.bAli[i]["start"];
     931      mi.bAli[i]["start"] = mOverrides.count(mi.bAli[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.bAli[i]["name"]) : mi.bAli[i]["start"];
    919932    }
    920933    for(long i=0; i<modelData->nAliasString; i++)
    921934    {
    922       mi.sAli[i]["start"] = mOverrides.count(mi.sAli[i]["name"]) ? mOverrides[mi.sAli[i]["name"]] : mi.sAli[i]["start"];
    923     }
     935      mi.sAli[i]["start"] = mOverrides.count(mi.sAli[i]["name"]) ? getOverrideValue(mOverrides, mOverridesUses, mi.sAli[i]["name"]) : mi.sAli[i]["start"];
     936    }
     937
     938    // give a warning if an override is not used #3204
     939    for (std::map<std::string,int>::iterator it = mOverridesUses.begin(); it != mOverridesUses.end(); ++it)
     940      if (it->second == OMC_OVERRIDE_UNUSED)
     941      {
     942         warningStreamPrint(LOG_STDOUT, 0, "simulation_input_xml.cpp: override variable name not found in model: %s\n", it->first.c_str());
     943      }
     944
    924945    infoStreamPrint(LOG_SOLVER, 0, "override done!");
    925946  }
Note: See TracChangeset for help on using the changeset viewer.