@@ -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