Skip to content

Commit 3b5a5ea

Browse files
ptaeuberOpenModelica-Hudson
authored andcommitted
Show warning if parameter is overwritten with small value or zero
1 parent 3ad0767 commit 3b5a5ea

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

SimulationRuntime/c/simulation/simulation_input_xml.c

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -985,8 +985,6 @@ void doOverride(omc_ModelInput *mi, MODEL_DATA *modelData, const char *override,
985985
addHashStringString(&mOverrides, p, value);
986986
addHashStringLong(&mOverridesUses, p, OMC_OVERRIDE_UNUSED);
987987

988-
infoStreamPrint(LOG_SOLVER, 0, "override %s = %s", p, value);
989-
990988
// move to next
991989
p = strtok(NULL, "!");
992990
}
@@ -1000,10 +998,13 @@ void doOverride(omc_ModelInput *mi, MODEL_DATA *modelData, const char *override,
1000998
}
1001999
}
10021000

1003-
#define CHECK_OVERRIDE(v) \
1001+
#define CHECK_OVERRIDE(v,b) \
10041002
if (findHashStringStringNull(mOverrides, findHashStringString(*findHashLongVar(mi->v,i),"name"))) { \
10051003
if (0 == strcmp(findHashStringString(*findHashLongVar(mi->v,i), "isValueChangeable"), "true")){ \
1006-
addHashStringString(findHashLongVar(mi->v,i), "start", getOverrideValue(mOverrides, &mOverridesUses, findHashStringString(*findHashLongVar(mi->v,i),"name"))); \
1004+
infoStreamPrint(LOG_SOLVER, 0, "override %s = %s", findHashStringString(*findHashLongVar(mi->v,i),"name"), getOverrideValue(mOverrides, &mOverridesUses, findHashStringString(*findHashLongVar(mi->v,i),"name"))); \
1005+
if (b && fabs(atof(getOverrideValue(mOverrides, &mOverridesUses, findHashStringString(*findHashLongVar(mi->v,i),"name")))) < 1e-6) \
1006+
warningStreamPrint(LOG_STDOUT, 0, "You are overriding %s with a small value or zero.\nThis could lead to numerically dirty solutions or divisions by zero if not tearingStrictness=veryStrict.", findHashStringString(*findHashLongVar(mi->v,i),"name")); \
1007+
addHashStringString(findHashLongVar(mi->v,i), "start", getOverrideValue(mOverrides, &mOverridesUses, findHashStringString(*findHashLongVar(mi->v,i),"name"))); \
10071008
} \
10081009
else{ \
10091010
addHashStringLong(&mOverridesUses, findHashStringString(*findHashLongVar(mi->v,i),"name"), OMC_OVERRIDE_USED); \
@@ -1013,48 +1014,48 @@ void doOverride(omc_ModelInput *mi, MODEL_DATA *modelData, const char *override,
10131014

10141015
// override all found!
10151016
for(i=0; i<modelData->nStates; i++) {
1016-
CHECK_OVERRIDE(rSta);
1017-
CHECK_OVERRIDE(rDer);
1017+
CHECK_OVERRIDE(rSta,0);
1018+
CHECK_OVERRIDE(rDer,0);
10181019
}
10191020
for(i=0; i<(modelData->nVariablesReal - 2*modelData->nStates); i++) {
1020-
CHECK_OVERRIDE(rAlg);
1021+
CHECK_OVERRIDE(rAlg,0);
10211022
}
10221023
for(i=0; i<modelData->nVariablesInteger; i++) {
1023-
CHECK_OVERRIDE(iAlg);
1024+
CHECK_OVERRIDE(iAlg,0);
10241025
}
10251026
for(i=0; i<modelData->nVariablesBoolean; i++) {
1026-
CHECK_OVERRIDE(bAlg);
1027+
CHECK_OVERRIDE(bAlg,0);
10271028
}
10281029
for(i=0; i<modelData->nVariablesString; i++) {
1029-
CHECK_OVERRIDE(sAlg);
1030+
CHECK_OVERRIDE(sAlg,0);
10301031
}
10311032
for(i=0; i<modelData->nParametersReal; i++) {
10321033
// TODO: only allow to override primary parameters
1033-
CHECK_OVERRIDE(rPar);
1034+
CHECK_OVERRIDE(rPar,1);
10341035
}
10351036
for(i=0; i<modelData->nParametersInteger; i++) {
10361037
// TODO: only allow to override primary parameters
1037-
CHECK_OVERRIDE(iPar);
1038+
CHECK_OVERRIDE(iPar,1);
10381039
}
10391040
for(i=0; i<modelData->nParametersBoolean; i++) {
10401041
// TODO: only allow to override primary parameters
1041-
CHECK_OVERRIDE(bPar);
1042+
CHECK_OVERRIDE(bPar,0);
10421043
}
10431044
for(i=0; i<modelData->nParametersString; i++) {
10441045
// TODO: only allow to override primary parameters
1045-
CHECK_OVERRIDE(sPar);
1046+
CHECK_OVERRIDE(sPar,0);
10461047
}
10471048
for(i=0; i<modelData->nAliasReal; i++) {
1048-
CHECK_OVERRIDE(rAli);
1049+
CHECK_OVERRIDE(rAli,0);
10491050
}
10501051
for(i=0; i<modelData->nAliasInteger; i++) {
1051-
CHECK_OVERRIDE(iAli);
1052+
CHECK_OVERRIDE(iAli,0);
10521053
}
10531054
for(i=0; i<modelData->nAliasBoolean; i++) {
1054-
CHECK_OVERRIDE(bAli);
1055+
CHECK_OVERRIDE(bAli,0);
10551056
}
10561057
for(i=0; i<modelData->nAliasString; i++) {
1057-
CHECK_OVERRIDE(sAli);
1058+
CHECK_OVERRIDE(sAli,0);
10581059
}
10591060

10601061
// give a warning if an override is not used #3204

0 commit comments

Comments
 (0)