@@ -40,6 +40,7 @@ encapsulated package InlineSolver
4040public import Absyn ;
4141public import BackendDAE ;
4242public import DAE ;
43+ public import Env ;
4344
4445protected import BackendDAEUtil ;
4546protected import BackendDump ;
@@ -104,7 +105,7 @@ protected
104105 BackendDAE . EqSystem timesystem;
105106 BackendDAE . Shared shared ;
106107
107- BackendDAE . Variables orderedVars;
108+ BackendDAE . Variables orderedVars, vars ;
108109 BackendDAE . EquationArray orderedEqs;
109110
110111 /* need for new matching */
@@ -115,10 +116,10 @@ protected
115116
116117algorithm
117118 BackendDAE . DAE (systs, shared ) := inDAE;
118- systs := List . map (systs, eliminatedStatesDerivations);
119+ (( systs,vars)) := List . fold (systs, eliminatedStatesDerivations,({}, BackendVariable . emptyVars()) );
119120 timesystem := timeEquation();
120-
121121 systs := listAppend(systs, {timesystem});
122+ shared := addKnowInitialValueForState(shared ,vars);
122123 dae := BackendDAE . DAE (systs, shared );
123124
124125 Debug . fcall2(Flags . DUMP_INLINE_SOLVER , BackendDump . dumpBackendDAE, dae, "inlineSolver: befor mathching algebraic system" );
@@ -133,6 +134,31 @@ algorithm
133134 (outDAE, Util . SUCCESS ()) := BackendDAEUtil . pastoptimiseDAE(dae, pastOptModules, matchingAlgorithm, daeHandler);
134135end dae_to_algSystem;
135136
137+ protected function addKnowInitialValueForState
138+ input BackendDAE . Shared inShared;
139+ input BackendDAE . Variables invars;
140+ output BackendDAE . Shared outShared;
141+
142+ protected
143+ BackendDAE . Var var ;
144+ BackendDAE . Variables knownVars, externalObjects, aliasVars;
145+ BackendDAE . EquationArray initialEqs;
146+ BackendDAE . EquationArray removedEqs;
147+ array< DAE . Constraint > constraints;
148+ array< DAE . ClassAttributes > classAttrs;
149+ Env . Cache cache;
150+ Env . Env env;
151+ DAE . FunctionTree functionTree;
152+ BackendDAE . EventInfo eventInfo;
153+ BackendDAE . ExternalObjectClasses extObjClasses;
154+ BackendDAE . BackendDAEType backendDAEType;
155+ BackendDAE . SymbolicJacobians symjacs;
156+ algorithm
157+ BackendDAE . SHARED (knownVars= knownVars, externalObjects= externalObjects, aliasVars= aliasVars,initialEqs= initialEqs, removedEqs= removedEqs, constraints= constraints, classAttrs= classAttrs, cache= cache, env= env, functionTree= functionTree, eventInfo= eventInfo, extObjClasses= extObjClasses, backendDAEType= backendDAEType, symjacs= symjacs) := inShared;
158+ knownVars := BackendVariable . mergeVariables(invars, knownVars);
159+ outShared := BackendDAE . SHARED (knownVars, externalObjects, aliasVars,initialEqs, removedEqs, constraints, classAttrs, cache, env, functionTree, eventInfo, extObjClasses, backendDAEType, symjacs);
160+ end addKnowInitialValueForState;
161+
136162protected function timeEquation
137163 output BackendDAE . EqSystem outEqSystem;
138164
@@ -207,16 +233,19 @@ protected function eliminatedStatesDerivations "function eliminatedStatesDerivat
207233 change function call der(x) in variable xder
208234 change kind: state in known variable "
209235 input BackendDAE . EqSystem inEqSystem;
210- output BackendDAE . EqSystem outEqSystem;
236+ input tuple< BackendDAE . EqSystems , BackendDAE . Variables > inTupel ;
237+ output tuple< BackendDAE . EqSystems , BackendDAE . Variables > outTupel;
211238protected
212239 BackendDAE . Variables orderedVars;
213- BackendDAE . Variables vars;
240+ BackendDAE . Variables vars, invars, outvars ;
214241 BackendDAE . EquationArray orderedEqs;
215242 BackendDAE . EquationArray eqns, eqns1, eqns2;
216243 BackendDAE . EqSystem eqSystem;
244+ BackendDAE . EqSystems inSystems;
217245 BackendDAE . StateSets stateSets;
218246algorithm
219247 BackendDAE . EQSYSTEM (orderedVars= orderedVars, orderedEqs= orderedEqs, stateSets= stateSets) := inEqSystem;
248+ (inSystems, invars) := inTupel;
220249 vars := BackendVariable . emptyVars();
221250 eqns := BackendEquation . emptyEqns();
222251 eqns2 := BackendEquation . emptyEqns();
@@ -232,9 +261,10 @@ algorithm
232261 ((_, eqns1,_,_)) := BackendEquation . traverseBackendDAEEqns(orderedEqs, replaceStates_eqs, (orderedVars, eqns,"$t4" ,"$t4_der" ));
233262 eqns2 := BackendEquation . mergeEquationArray(eqns1,eqns2);
234263 // change kind: state in known variable
235- ((vars, eqns)) := BackendVariable . traverseBackendDAEVars(orderedVars, replaceStates_vars, (vars, eqns2));
264+ ((vars, eqns, outvars )) := BackendVariable . traverseBackendDAEVars(orderedVars, replaceStates_vars, (vars, eqns2, invars ));
236265 eqSystem := BackendDAE . EQSYSTEM (vars, eqns, NONE (), NONE (), BackendDAE . NO_MATCHING (), stateSets);
237- (outEqSystem, _, _) := BackendDAEUtil . getIncidenceMatrix(eqSystem, BackendDAE . NORMAL ());
266+ (eqSystem, _, _) := BackendDAEUtil . getIncidenceMatrix(eqSystem, BackendDAE . NORMAL ());
267+ outTupel := (listAppend(inSystems,{eqSystem}), BackendVariable . mergeVariables(invars,outvars));
238268end eliminatedStatesDerivations;
239269
240270protected function replaceStates_eqs "function replaceStates_eqs
@@ -321,13 +351,13 @@ end crefPrefixStringWithpopCref;
321351
322352protected function replaceStates_vars "function replaceStates_vars
323353 author: vruge"
324- input tuple< BackendDAE . Var , tuple< BackendDAE . Variables , BackendDAE . EquationArray >> inTpl;
325- output tuple< BackendDAE . Var , tuple< BackendDAE . Variables , BackendDAE . EquationArray >> outTpl;
354+ input tuple< BackendDAE . Var , tuple< BackendDAE . Variables , BackendDAE . EquationArray , BackendDAE . Variables >> inTpl;
355+ output tuple< BackendDAE . Var , tuple< BackendDAE . Variables , BackendDAE . EquationArray , BackendDAE . Variables >> outTpl;
326356algorithm
327357 outTpl := matchcontinue(inTpl)
328358 local
329359 BackendDAE . Var var ;
330- BackendDAE . Variables vars;
360+ BackendDAE . Variables vars, vars0 ;
331361 DAE . ComponentRef cr, x0, x1, x2, x3, x4, derx0, derx1, derx2, derx3, derx4;
332362 DAE . Type ty;
333363 DAE . InstDims arryDim;
@@ -337,8 +367,11 @@ algorithm
337367 DAE . Exp dt;
338368
339369 // state
340- case ((var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . STATE (), varType= ty, arryDim= arryDim), (vars, eqns))) equation
341- (x0,_) = stringCrVar("$t0" , cr, ty, arryDim);
370+
371+ case ((var as BackendDAE . VAR (varName= cr, varKind= BackendDAE . STATE (), varType= ty, arryDim= arryDim), (vars, eqns,vars0))) equation
372+ (x0,_) = stringCrVar("$t0" , cr, ty, arryDim); // VarDirection = input
373+ var = BackendDAE . VAR (x0, BackendDAE . VARIABLE (), DAE . INPUT (), DAE . NON_PARALLEL (), ty, NONE (), NONE (), arryDim, DAE . emptyElementSource, NONE (), NONE (), DAE . NON_CONNECTOR ());
374+ vars0 = BackendVariable . addVar(var , vars0);
342375
343376 (x1,var ) = stringCrVar("$t1" ,cr,ty,arryDim);
344377 vars = BackendVariable . addVar(var , vars);
@@ -373,12 +406,12 @@ algorithm
373406 eqn = stepLobatt(x0, x1, x2, x3, x4, derx0, derx1, derx2, derx3, derx4,dt,ty);
374407 eqns = BackendEquation . mergeEquationArray(eqn, eqns);
375408
376- then ((var , (vars, eqns)));
409+ then ((var , (vars, eqns,vars0 )));
377410
378411 // else
379- case ((var , (vars, eqns))) equation
412+ case ((var , (vars, eqns,vars0 ))) equation
380413 vars = BackendVariable . addVar(var , vars);
381- then ((var , (vars, eqns)));
414+ then ((var , (vars, eqns,vars0 )));
382415
383416 else equation
384417 Error . addMessage(Error . INTERNAL_ERROR , {"./Compiler/BackEnd/InlineSolver.mo: function replaceStates1_vars failed" });
0 commit comments