@@ -93,7 +93,7 @@ protected
9393 BackendDAE . Shared shared ;
9494 BackendDAE . Variables initVars;
9595 BackendDAE . Variables vars, fixvars;
96- Boolean b, b1, b2, useHomotopy;
96+ Boolean b, b1, b2, useHomotopy, datarecon = false ;
9797 String msg;
9898 list< String > enabledModules, disabledModules;
9999 HashSet . HashSet hs "contains all pre variables" ;
@@ -149,10 +149,13 @@ algorithm
149149 for v in outAllPrimaryParameters loop
150150 allPrimaryParameters := AvlSetCR . add(allPrimaryParameters, BackendVariable . varCref(v));
151151 end for ;
152-
152+ // check for datareconciliation and set the Flag, to set the Qualified Component names as TopLevel Input
153+ if Util . isSome(inDAE. shared . dataReconciliationData) then
154+ datarecon := true ;
155+ end if ;
153156 ((vars, fixvars, eqns, _)) := BackendVariable . traverseBackendDAEVars(dae. shared . aliasVars, introducePreVarsForAliasVariables, (vars, fixvars, eqns, hs));
154- ((vars, fixvars, eqns, _, _)) := BackendVariable . traverseBackendDAEVars(dae. shared . globalKnownVars, collectInitialVars, (vars, fixvars, eqns, hs, allPrimaryParameters));
155- ((vars, fixvars, eqns, _, _)) := BackendVariable . traverseBackendDAEVars(dae. shared . localKnownVars, collectInitialVars, (vars, fixvars, eqns, hs, allPrimaryParameters));
157+ ((vars, fixvars, eqns, _, _, _ )) := BackendVariable . traverseBackendDAEVars(dae. shared . globalKnownVars, collectInitialVars, (vars, fixvars, eqns, hs, allPrimaryParameters,datarecon ));
158+ ((vars, fixvars, eqns, _, _, _ )) := BackendVariable . traverseBackendDAEVars(dae. shared . localKnownVars, collectInitialVars, (vars, fixvars, eqns, hs, allPrimaryParameters,datarecon ));
156159 ((eqns, reeqns)) := BackendEquation . traverseEquationArray(dae. shared . initialEqs, collectInitialEqns, (eqns, reeqns));
157160 ((eqns, reeqns)) := BackendEquation . traverseEquationArray(dae. shared . removedEqs, collectInitialEqns, (eqns, reeqns));
158161 // if Flags.isSet(Flags.DUMP_INITIAL_SYSTEM) then
@@ -161,7 +164,7 @@ algorithm
161164 execStat("collectInitialEqns (initialization)" );
162165
163166 // ((vars, fixvars, eqns, reeqns, _, _)) := List.fold(dae.eqs, collectInitialVarsEqnsSystem, ((vars, fixvars, eqns, reeqns, hs, allPrimaryParameters)));
164- (vars, fixvars, eqns, reeqns) := collectInitialVarsEqnsSystem(dae. eqs, vars, fixvars, eqns, reeqns, hs, allPrimaryParameters);
167+ (vars, fixvars, eqns, reeqns) := collectInitialVarsEqnsSystem(dae. eqs, vars, fixvars, eqns, reeqns, hs, allPrimaryParameters, datarecon );
165168 ((eqns, reeqns)) := BackendVariable . traverseBackendDAEVars(vars, collectInitialBindings, (eqns, reeqns));
166169 execStat("collectInitialBindings (initialization)" );
167170
@@ -2062,6 +2065,7 @@ protected function collectInitialVarsEqnsSystem
20622065 input output BackendDAE . EquationArray reEqns;
20632066 input HashSet . HashSet hs;
20642067 input AvlSetCR . Tree allPrimaryParams;
2068+ input Boolean datareconFlag;
20652069algorithm
20662070 for eq in eqSystems loop
20672071 () := match eq
@@ -2074,8 +2078,8 @@ algorithm
20742078
20752079 else
20762080 algorithm
2077- (vars, fixVars, eqns, _, _) := BackendVariable . traverseBackendDAEVars(eq. orderedVars,
2078- collectInitialVars, (vars, fixVars, eqns, hs, allPrimaryParams));
2081+ (vars, fixVars, eqns, _, _, _ ) := BackendVariable . traverseBackendDAEVars(eq. orderedVars,
2082+ collectInitialVars, (vars, fixVars, eqns, hs, allPrimaryParams, datareconFlag ));
20792083 (eqns, reEqns) := BackendEquation . traverseEquationArray(eq. orderedEqs, collectInitialEqns, (eqns, reEqns));
20802084 then
20812085 ();
@@ -2087,9 +2091,9 @@ protected function collectInitialVars "author: lochel
20872091 This function collects all the vars for the initial system.
20882092 TODO: return additional equations for pre-variables"
20892093 input BackendDAE . Var inVar;
2090- input tuple< BackendDAE . Variables , BackendDAE . Variables , BackendDAE . EquationArray , HashSet . HashSet , AvlSetCR . Tree > inTpl;
2094+ input tuple< BackendDAE . Variables , BackendDAE . Variables , BackendDAE . EquationArray , HashSet . HashSet , AvlSetCR . Tree , Boolean > inTpl;
20912095 output BackendDAE . Var outVar;
2092- output tuple< BackendDAE . Variables , BackendDAE . Variables , BackendDAE . EquationArray , HashSet . HashSet , AvlSetCR . Tree > outTpl;
2096+ output tuple< BackendDAE . Variables , BackendDAE . Variables , BackendDAE . EquationArray , HashSet . HashSet , AvlSetCR . Tree , Boolean > outTpl;
20932097algorithm
20942098 (outVar, outTpl) := matchcontinue (inVar, inTpl)
20952099 local
@@ -2098,7 +2102,7 @@ algorithm
20982102 BackendDAE . EquationArray eqns;
20992103 BackendDAE . Equation eqn;
21002104 DAE . ComponentRef cr, preCR, derCR, startCR;
2101- Boolean isFixed, isInput, b, preUsed;
2105+ Boolean isFixed, isInput, b, preUsed, datarecon ;
21022106 DAE . Type ty;
21032107 DAE . InstDims arryDim;
21042108 Option < DAE . Exp > startValue;
@@ -2112,7 +2116,7 @@ algorithm
21122116 list< DAE . ComponentRef > parameters;
21132117
21142118 // state
2115- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . STATE (), varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2119+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . STATE (), varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters,datarecon )) equation
21162120 isFixed = BackendVariable . varFixed(var );
21172121 // _ = BackendVariable.varStartValueOption(var);
21182122 preUsed = BaseHashSet . has(cr, hs);
@@ -2162,10 +2166,10 @@ algorithm
21622166 vars = BackendVariable . addVar(var , vars);
21632167 vars = if preUsed then BackendVariable . addVar(preVar, vars) else vars;
21642168 eqns = if preUsed then BackendEquation . add(eqn, eqns) else eqns;
2165- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2169+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
21662170
21672171 // discrete (preUsed=true)
2168- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . DISCRETE (), varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2172+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . DISCRETE (), varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
21692173 true = BaseHashSet . has(cr, hs);
21702174 true = BackendVariable . varFixed(var );
21712175 startValue_ = BackendVariable . varStartValue(var );
@@ -2184,10 +2188,10 @@ algorithm
21842188 vars = BackendVariable . addVar(var , vars);
21852189 vars = BackendVariable . addVar(preVar, vars);
21862190 eqns = BackendEquation . add(eqn, eqns);
2187- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2191+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
21882192
21892193 // discrete
2190- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . DISCRETE ()), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2194+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . DISCRETE ()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
21912195 preUsed = BaseHashSet . has(cr, hs);
21922196 startValue = BackendVariable . varStartValueOption(var );
21932197
@@ -2202,10 +2206,10 @@ algorithm
22022206
22032207 vars = BackendVariable . addVar(var , vars);
22042208 vars = if preUsed then BackendVariable . addVar(preVar, vars) else vars;
2205- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2209+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22062210
22072211 // parameter without binding and fixed=true
2208- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= NONE ()), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2212+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= NONE ()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
22092213 true = BackendVariable . varFixed(var );
22102214 startExp = BackendVariable . varStartValueType(var );
22112215
@@ -2224,10 +2228,10 @@ algorithm
22242228 Error . addSourceMessage(Error . UNBOUND_PARAMETER_WITH_START_VALUE_WARNING , {s, str}, info);
22252229
22262230 // vars = BackendVariable.addVar(var, vars);
2227- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2231+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22282232
22292233 // parameter with binding and fixed=false
2230- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= SOME (bindExp), varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2234+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= SOME (bindExp), varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
22312235 true = intGt(Flags . getConfigEnum(Flags . LANGUAGE_STANDARD ), 31 );
22322236 false = BackendVariable . varFixed(var );
22332237 var = BackendVariable . setVarKind(var , BackendDAE . VARIABLE ());
@@ -2242,12 +2246,12 @@ algorithm
22422246 eqns = BackendEquation . add(eqn, eqns);
22432247
22442248 vars = BackendVariable . addVar(var , vars);
2245- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2249+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22462250
22472251 // *** MODELICA 3.1 COMPATIBLE ***
22482252 // parameter with binding and fixed=false and no start value
22492253 // use the binding as start value
2250- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= SOME (bindExp)), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2254+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= SOME (bindExp)), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
22512255 true = intLe(Flags . getConfigEnum(Flags . LANGUAGE_STANDARD ), 31 );
22522256 false = BackendVariable . varFixed(var );
22532257 var = BackendVariable . setVarKind(var , BackendDAE . VARIABLE ());
@@ -2261,12 +2265,12 @@ algorithm
22612265 Error . addSourceMessage(Error . UNFIXED_PARAMETER_WITH_BINDING_31 , {s, s, str}, info);
22622266
22632267 vars = BackendVariable . addVar(var , vars);
2264- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2268+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22652269
22662270 // *** MODELICA 3.1 COMPATIBLE ***
22672271 // parameter with binding and fixed=false and a start value
22682272 // ignore the binding and use the start value
2269- case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= SOME (bindExp)), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2273+ case (var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . PARAM (), bindExp= SOME (bindExp)), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
22702274 true = intLe(Flags . getConfigEnum(Flags . LANGUAGE_STANDARD ), 31 );
22712275 false = BackendVariable . varFixed(var );
22722276 var = BackendVariable . setVarKind(var , BackendDAE . VARIABLE ());
@@ -2280,21 +2284,21 @@ algorithm
22802284 Error . addSourceMessage(Error . UNFIXED_PARAMETER_WITH_BINDING_AND_START_VALUE_31 , {s, sv, s, str}, info);
22812285
22822286 vars = BackendVariable . addVar(var , vars);
2283- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2287+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22842288
22852289 // secondary parameter
2286- case (var as BackendDAE . VAR (varKind= BackendDAE . PARAM ()), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2290+ case (var as BackendDAE . VAR (varKind= BackendDAE . PARAM ()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
22872291 // true = BackendVariable.varFixed(var);
22882292 var = BackendVariable . setVarKind(var , BackendDAE . VARIABLE ());
22892293 vars = BackendVariable . addVar(var , vars);
2290- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2294+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22912295
22922296 // external objects
2293- case (var as BackendDAE . VAR (varKind= BackendDAE . EXTOBJ ()), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2297+ case (var as BackendDAE . VAR (varKind= BackendDAE . EXTOBJ ()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
22942298 // var = BackendVariable.setVarFixed(var, false);
22952299 // var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
22962300 vars = BackendVariable . addVar(var , vars);
2297- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2301+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
22982302
22992303 // skip constant
23002304 case (var as BackendDAE . VAR (varKind= BackendDAE . CONST ()), _) // equation
@@ -2303,11 +2307,15 @@ algorithm
23032307
23042308 // VARIABLE (fixed=true)
23052309 // DUMMY_STATE
2306- case (var as BackendDAE . VAR (varName= cr, varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2310+ case (var as BackendDAE . VAR (varName= cr, varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
23072311 true = BackendVariable . varFixed(var );
2308- isInput = BackendVariable . isVarOnTopLevelAndInput(var );
2312+ // check if dataReconciliation is present and set the Input variables to true, as Qualified components are not handled as toplevel inputs
2313+ if datarecon then
2314+ isInput = checkComponentNames(var . varDirection, cr);
2315+ else
2316+ isInput = BackendVariable . isVarOnTopLevelAndInput(var );
2317+ end if ;
23092318 preUsed = BaseHashSet . has(cr, hs);
2310-
23112319 _ = Expression . crefExp(cr);
23122320
23132321 startCR = ComponentReference . crefPrefixStart(cr);
@@ -2345,15 +2353,19 @@ algorithm
23452353 eqns = BackendEquation . add(eqn, eqns);
23462354
23472355 // Error.addCompilerNotification("VARIABLE (fixed=true): " + BackendDump.varString(var));
2348- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2356+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
23492357
23502358 // VARIABLE (fixed=false)
23512359 // DUMMY_STATE
2352- case (var as BackendDAE . VAR (varName= cr, varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters)) equation
2360+ case (var as BackendDAE . VAR (varName= cr, varType= ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon )) equation
23532361 false = BackendVariable . varFixed(var );
2354- isInput = BackendVariable . isVarOnTopLevelAndInput(var );
2362+ // check if dataReconciliation is present and set the Input variables to true, as Qualified components are not handled as toplevel inputs
2363+ if datarecon then
2364+ isInput = checkComponentNames(var . varDirection, cr);
2365+ else
2366+ isInput = BackendVariable . isVarOnTopLevelAndInput(var );
2367+ end if ;
23552368 preUsed = BaseHashSet . has(cr, hs);
2356-
23572369 _ = Expression . crefExp(cr);
23582370
23592371 startCR = ComponentReference . crefPrefixStart(cr);
@@ -2389,14 +2401,28 @@ algorithm
23892401 eqns = if preUsed then BackendEquation . add(eqn, eqns) else eqns;
23902402
23912403 // Error.addCompilerNotification("VARIABLE (fixed=false); " + BackendDump.varString(var));
2392- then (var , (vars, fixvars, eqns, hs, allPrimaryParameters));
2404+ then (var , (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon ));
23932405
23942406 else equation
23952407 Error . addInternalError("function collectInitialVars failed for: " + BackendDump . varString(inVar), sourceInfo());
23962408 then fail();
23972409 end matchcontinue;
23982410end collectInitialVars;
23992411
2412+ protected function checkComponentNames "author: arun
2413+ This is a special function which sets the inputs for dataReconciliation
2414+ Inorder to handle Qualified component names as inputs."
2415+ input DAE . VarDirection inVarDirection;
2416+ input DAE . ComponentRef inComponentRef;
2417+ output Boolean isTopLevel;
2418+ algorithm
2419+ isTopLevel := match (inVarDirection, inComponentRef)
2420+ case (DAE . INPUT (), DAE . CREF_IDENT ()) then true ;
2421+ case (DAE . INPUT (), DAE . CREF_QUAL ()) then true ;
2422+ case (_ , _) then false ;
2423+ end match;
2424+ end checkComponentNames;
2425+
24002426protected function collectInitialClockedVarsEqns "author: rfranke
24012427 This function creates initial equations for a clocked partition.
24022428 Previous states are initialized with the states. All other variables are initialized with start values."
0 commit comments