@@ -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;
66996692end createParameterEquations;
67006693
67016694protected function traverseAlgorithmFinder "author: Frenkel TUD 2010-12
0 commit comments