Skip to content

Commit da4d075

Browse files
committed
- cleanup
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@23947 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 60bb840 commit da4d075

File tree

1 file changed

+75
-82
lines changed

1 file changed

+75
-82
lines changed

Compiler/SimCode/SimCodeUtil.mo

Lines changed: 75 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -6614,88 +6614,81 @@ protected function createParameterEquations
66146614
input Integer iuniqueEqIndex;
66156615
input list<SimCode.SimEqSystem> acc;
66166616
input Boolean initialSystemSolved;
6617-
output Integer ouniqueEqIndex;
6618-
output list<SimCode.SimEqSystem> parameterEquations;
6619-
algorithm
6620-
(ouniqueEqIndex, parameterEquations) := matchcontinue (inShared, iuniqueEqIndex, acc, initialSystemSolved)
6621-
local
6622-
list<BackendDAE.Equation> parameterEquationsTmp;
6623-
BackendDAE.Variables knvars, extobj, v, kn;
6624-
list<DAE.Constraint> constrs;
6625-
list<DAE.ClassAttributes> clsAttrs;
6626-
BackendDAE.EquationArray ie, pe, emptyeqns, remeqns;
6627-
list<SimCode.SimEqSystem> simvarasserts, inalgs := {};
6628-
list<DAE.Algorithm> varasserts, ialgs;
6629-
BackendDAE.BackendDAE paramdlow;
6630-
BackendDAE.ExternalObjectClasses extObjClasses;
6631-
BackendDAE.IncidenceMatrix m;
6632-
BackendDAE.IncidenceMatrixT mT;
6633-
array<Integer> v1, v2;
6634-
list<Integer> lv1, lv2;
6635-
BackendDAE.StrongComponents comps;
6636-
list<BackendDAE.Var> lv, lkn;
6637-
BackendDAE.Shared shared;
6638-
BackendDAE.EqSystem syst;
6639-
BackendDAE.Variables aliasVars, alisvars;
6640-
6641-
FCore.Cache cache;
6642-
FCore.Graph graph;
6643-
DAE.FunctionTree funcs;
6644-
BackendDAE.EventInfo einfo;
6645-
BackendDAE.BackendDAEType btp;
6646-
BackendDAE.SymbolicJacobians symjacs;
6647-
Integer uniqueEqIndex;
6648-
6649-
BackendDAE.ExtraInfo ei;
6650-
6651-
case (BackendDAE.SHARED(knownVars=knvars, externalObjects=extobj,
6652-
initialEqs=ie, constraints=constrs, classAttrs=clsAttrs, cache=cache, graph=graph,
6653-
extObjClasses=extObjClasses, functionTree=funcs, info=ei), _, _, _)
6654-
equation
6655-
// kvars params
6656-
((parameterEquationsTmp, lv, lkn, lv1, lv2, _)) = BackendVariable.traverseBackendDAEVars(knvars, createInitialParamAssignments, ({}, {}, {}, {}, {}, 1));
6657-
6658-
// sort the equations
6659-
emptyeqns = BackendEquation.emptyEqns();
6660-
pe = BackendEquation.listEquation(parameterEquationsTmp);
6661-
alisvars = BackendVariable.emptyVars();
6662-
v = BackendVariable.listVar(lv);
6663-
kn = BackendVariable.listVar(lkn);
6664-
funcs = DAEUtil.avlTreeNew();
6665-
syst = BackendDAE.EQSYSTEM(v, pe, NONE(), NONE(), BackendDAE.NO_MATCHING(), {}, BackendDAE.UNKNOWN_PARTITION());
6666-
shared = BackendDAE.SHARED(kn, extobj, alisvars, emptyeqns, emptyeqns, constrs, clsAttrs, cache, graph, funcs, BackendDAE.EVENT_INFO({}, {}, {}, {}, {}, 0), extObjClasses, BackendDAE.PARAMETERSYSTEM(), {}, ei);
6667-
(syst,_,_) = BackendDAEUtil.getIncidenceMatrixfromOption(syst, BackendDAE.NORMAL(), SOME(funcs));
6668-
v1 = listArray(lv1);
6669-
v2 = listArray(lv2);
6670-
syst = BackendDAEUtil.setEqSystemMatching(syst, BackendDAE.MATCHING(v1, v2, {}));
6671-
(syst, comps) = BackendDAETransform.strongComponents(syst, shared);
6672-
paramdlow = BackendDAE.DAE({syst}, shared);
6673-
if Flags.isSet(Flags.PARAM_DLOW_DUMP) then
6674-
BackendDump.dumpEqnsSolved(paramdlow, "parameters: eqns in order");
6675-
end if;
6676-
(parameterEquations, _, uniqueEqIndex, _) = createEquations(false, false, true, false, syst, shared, comps, iuniqueEqIndex, {});
6677-
6678-
if not initialSystemSolved then
6679-
ialgs = BackendEquation.traverseEquationArray(ie, traverseAlgorithmFinder, {});
6680-
ialgs = listReverse(ialgs);
6681-
(inalgs, uniqueEqIndex) = List.mapFold(ialgs, dlowAlgToSimEqSystem, uniqueEqIndex);
6682-
end if;
6683-
6684-
// get minmax and nominal asserts
6685-
varasserts = BackendVariable.traverseBackendDAEVars(knvars, createVarAsserts, {});
6686-
(simvarasserts, uniqueEqIndex) = List.mapFold(varasserts, dlowAlgToSimEqSystem, uniqueEqIndex);
6687-
6688-
// do not append the inital algorithms to the parameter equation if the system is solved symbolically
6689-
parameterEquations = listAppend(parameterEquations, listAppend(simvarasserts, inalgs));
6690-
parameterEquations = listAppend(parameterEquations, acc);
6691-
then
6692-
(uniqueEqIndex, parameterEquations);
6693-
6694-
else
6695-
equation
6696-
Error.addMessage(Error.INTERNAL_ERROR, {"createParameterEquations failed"});
6697-
then fail();
6698-
end matchcontinue;
6617+
output Integer ouniqueEqIndex := iuniqueEqIndex;
6618+
output list<SimCode.SimEqSystem> parameterEquations := {};
6619+
protected
6620+
list<BackendDAE.Equation> parameterEquationsTmp;
6621+
BackendDAE.Variables knvars, extobj, v, kn;
6622+
list<DAE.Constraint> constrs;
6623+
list<DAE.ClassAttributes> clsAttrs;
6624+
BackendDAE.EquationArray ie, pe, emptyeqns, remeqns;
6625+
list<SimCode.SimEqSystem> simvarasserts, inalgs := {};
6626+
list<DAE.Algorithm> varasserts, ialgs;
6627+
BackendDAE.BackendDAE paramdlow;
6628+
BackendDAE.ExternalObjectClasses extObjClasses;
6629+
BackendDAE.IncidenceMatrix m;
6630+
BackendDAE.IncidenceMatrixT mT;
6631+
array<Integer> v1, v2;
6632+
list<Integer> lv1, lv2;
6633+
BackendDAE.StrongComponents comps;
6634+
list<BackendDAE.Var> lv, lkn;
6635+
BackendDAE.Shared shared;
6636+
BackendDAE.EqSystem syst;
6637+
BackendDAE.Variables aliasVars, alisvars;
6638+
FCore.Cache cache;
6639+
FCore.Graph graph;
6640+
DAE.FunctionTree funcs;
6641+
BackendDAE.EventInfo einfo;
6642+
BackendDAE.BackendDAEType btp;
6643+
BackendDAE.SymbolicJacobians symjacs;
6644+
Integer uniqueEqIndex;
6645+
BackendDAE.ExtraInfo ei;
6646+
algorithm
6647+
try
6648+
BackendDAE.SHARED(knownVars=knvars, externalObjects=extobj, initialEqs=ie,
6649+
constraints=constrs, classAttrs=clsAttrs, cache=cache, graph=graph,
6650+
extObjClasses=extObjClasses, functionTree=funcs, info=ei) := inShared;
6651+
6652+
// kvars params
6653+
((parameterEquationsTmp, lv, lkn, lv1, lv2, _)) := BackendVariable.traverseBackendDAEVars(knvars, createInitialParamAssignments, ({}, {}, {}, {}, {}, 1));
6654+
6655+
// sort the equations
6656+
emptyeqns := BackendEquation.emptyEqns();
6657+
pe := BackendEquation.listEquation(parameterEquationsTmp);
6658+
alisvars := BackendVariable.emptyVars();
6659+
v := BackendVariable.listVar(lv);
6660+
kn := BackendVariable.listVar(lkn);
6661+
funcs := DAEUtil.avlTreeNew();
6662+
syst := BackendDAE.EQSYSTEM(v, pe, NONE(), NONE(), BackendDAE.NO_MATCHING(), {}, BackendDAE.UNKNOWN_PARTITION());
6663+
shared := BackendDAE.SHARED(kn, extobj, alisvars, emptyeqns, emptyeqns, constrs, clsAttrs, cache, graph, funcs, BackendDAE.EVENT_INFO({}, {}, {}, {}, {}, 0), extObjClasses, BackendDAE.PARAMETERSYSTEM(), {}, ei);
6664+
(syst,_,_) := BackendDAEUtil.getIncidenceMatrixfromOption(syst, BackendDAE.NORMAL(), SOME(funcs));
6665+
v1 := listArray(lv1);
6666+
v2 := listArray(lv2);
6667+
syst := BackendDAEUtil.setEqSystemMatching(syst, BackendDAE.MATCHING(v1, v2, {}));
6668+
(syst, comps) := BackendDAETransform.strongComponents(syst, shared);
6669+
paramdlow := BackendDAE.DAE({syst}, shared);
6670+
if Flags.isSet(Flags.PARAM_DLOW_DUMP) then
6671+
BackendDump.dumpEqnsSolved(paramdlow, "parameters: eqns in order");
6672+
end if;
6673+
(parameterEquations, _, uniqueEqIndex, _) := createEquations(false, false, true, false, syst, shared, comps, iuniqueEqIndex, {});
6674+
6675+
if not initialSystemSolved then
6676+
ialgs := BackendEquation.traverseEquationArray(ie, traverseAlgorithmFinder, {});
6677+
ialgs := listReverse(ialgs);
6678+
(inalgs, uniqueEqIndex) := List.mapFold(ialgs, dlowAlgToSimEqSystem, uniqueEqIndex);
6679+
end if;
6680+
6681+
// get minmax and nominal asserts
6682+
varasserts := BackendVariable.traverseBackendDAEVars(knvars, createVarAsserts, {});
6683+
(simvarasserts, ouniqueEqIndex) := List.mapFold(varasserts, dlowAlgToSimEqSystem, uniqueEqIndex);
6684+
6685+
// do not append the inital algorithms to the parameter equation if the system is solved symbolically
6686+
parameterEquations := listAppend(parameterEquations, listAppend(simvarasserts, inalgs));
6687+
parameterEquations := listAppend(parameterEquations, acc);
6688+
else
6689+
Error.addMessage(Error.INTERNAL_ERROR, {"createParameterEquations failed"});
6690+
fail();
6691+
end try;
66996692
end createParameterEquations;
67006693

67016694
protected function traverseAlgorithmFinder "author: Frenkel TUD 2010-12

0 commit comments

Comments
 (0)