Skip to content

Commit 6407ead

Browse files
author
Vitalij Ruge
committed
- variable moved for simplification
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@14490 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 4f0b834 commit 6407ead

File tree

1 file changed

+48
-15
lines changed

1 file changed

+48
-15
lines changed

Compiler/BackEnd/InlineSolver.mo

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ encapsulated package InlineSolver
4040
public import Absyn;
4141
public import BackendDAE;
4242
public import DAE;
43+
public import Env;
4344

4445
protected import BackendDAEUtil;
4546
protected 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

116117
algorithm
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);
134135
end 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+
136162
protected 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;
211238
protected
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;
218246
algorithm
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));
238268
end eliminatedStatesDerivations;
239269

240270
protected function replaceStates_eqs "function replaceStates_eqs
@@ -321,13 +351,13 @@ end crefPrefixStringWithpopCref;
321351

322352
protected 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;
326356
algorithm
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

Comments
 (0)