diff --git a/Compiler/BackEnd/BackendDAECreate.mo b/Compiler/BackEnd/BackendDAECreate.mo index 5aa6e71d9ad..1e3ddd923e6 100644 --- a/Compiler/BackEnd/BackendDAECreate.mo +++ b/Compiler/BackEnd/BackendDAECreate.mo @@ -122,7 +122,7 @@ algorithm // handle alias equations (vars, knvars, extVars, aliasVars, eqns, reqns, ieqns, whenclauses_1) := handleAliasEquations(aliaseqns, vars, knvars, extVars, aliasVars, eqns, reqns, ieqns, whenclauses_1); vars_1 := detectImplicitDiscrete(vars, knvars, eqns); - (vars_1, eqns, clsAttrs) := DynamicOptimization.addOptimizationVarsEqns(vars_1, eqns, Config.acceptOptimicaGrammar(), clsAttrs, constrs, knvars); + (vars_1, eqns, clsAttrs) := DynamicOptimization.addOptimizationVarsEqns(vars_1, eqns, Config.acceptOptimicaGrammar(), clsAttrs, constrs, knvars,Flags.getConfigBool(Flags.GENERATE_DYN_OPTIMIZATION_PROBLEM)); eqnarr := BackendEquation.listEquation(eqns); reqnarr := BackendEquation.listEquation(reqns); ieqnarr := BackendEquation.listEquation(ieqns); diff --git a/Compiler/BackEnd/DynamicOptimization.mo b/Compiler/BackEnd/DynamicOptimization.mo index 5bd0d727417..f614dd21dda 100644 --- a/Compiler/BackEnd/DynamicOptimization.mo +++ b/Compiler/BackEnd/DynamicOptimization.mo @@ -51,6 +51,7 @@ protected import BackendVariable; protected import ComponentReference; protected import Expression; +protected import Flags; protected import List; protected import Util; @@ -63,11 +64,12 @@ public function addOptimizationVarsEqns input list< .DAE.ClassAttributes> inClassAttr; input list< .DAE.Constraint> inConstraint; input BackendDAE.Variables knvars; + input Boolean inDynOptimization; output BackendDAE.Variables outVars; output list outEqns; output list< .DAE.ClassAttributes> outClassAttr; algorithm - (outVars, outEqns, outClassAttr) := match(inVars, inEqns, inOptimicaFlag, inClassAttr, inConstraint, knvars) + (outVars, outEqns, outClassAttr) := match(inVars, inEqns, inOptimicaFlag, inClassAttr, inConstraint, knvars, inDynOptimization) local DAE.ComponentRef leftcref; list objectEqn; @@ -79,8 +81,9 @@ algorithm list< .DAE.Exp> constraintLst; list< .DAE.Constraint> constraints; list varlst; + list< .DAE.ClassAttributes> tmpClassAttr; - case (v, e, true, {DAE.OPTIMIZATION_ATTRS(objetiveE=mayer, objectiveIntegrandE=lagrange)}, _, _) + case (v, e, true, {DAE.OPTIMIZATION_ATTRS(objetiveE=mayer, objectiveIntegrandE=lagrange)}, _, _,_) equation inVarsAndknvars = BackendVariable.mergeVariables(inVars, knvars); varlst = BackendVariable.varList(inVarsAndknvars); @@ -110,9 +113,10 @@ algorithm constraints = findFinalConstraints(varlst, {}); (v, e) = addOptimizationVarsEqns2(constraints, 1, v, e, knvars, "$OMC$finalConstarintTerm", BackendDAE.OPT_FCONSTR()); - - then (v, e,inClassAttr); - case (v, e, true, _, _, _) + + Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true); + then (v, e, inClassAttr); + case (v, e, true, _, _, _,_) equation inVarsAndknvars = BackendVariable.mergeVariables(inVars, knvars); varlst = BackendVariable.varList(inVarsAndknvars); @@ -139,8 +143,14 @@ algorithm constraints = findFinalConstraints(varlst, {}); (v, e) = addOptimizationVarsEqns2(constraints, 1, v, e, knvars, "$OMC$finalConstarintTerm", BackendDAE.OPT_FCONSTR()); - + + Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true); then (v, e,{DAE.OPTIMIZATION_ATTRS(mayer1, lagrange1, NONE(), NONE())}); + case (v, e, false, _, _, _, true) + equation + Flags.setConfigEnum(Flags.GRAMMAR, Flags.OPTIMICA); + (v, e, tmpClassAttr) = addOptimizationVarsEqns(inVars, inEqns, true, inClassAttr, inConstraint, knvars, true); + then (v,e,tmpClassAttr); else then(inVars, inEqns, inClassAttr); end match; end addOptimizationVarsEqns; diff --git a/Compiler/Script/CevalScript.mo b/Compiler/Script/CevalScript.mo index 78ac5fccd45..ea479874759 100644 --- a/Compiler/Script/CevalScript.mo +++ b/Compiler/Script/CevalScript.mo @@ -482,9 +482,10 @@ protected DAE.Exp startTime, stopTime, numberOfIntervals, stepSize, tolerance, method, fileNamePrefix, options, outputFormat, variableFilter, cflags, simflags; Boolean UseOtimica; algorithm - UseOtimica := Config.acceptOptimicaGrammar(); + UseOtimica := Config.acceptOptimicaGrammar() or Flags.getConfigBool(Flags.GENERATE_DYN_OPTIMIZATION_PROBLEM); GlobalScript.SIMULATION_OPTIONS(startTime, stopTime, numberOfIntervals, stepSize, tolerance, method, _, options, outputFormat, variableFilter, cflags, simflags) := inSimOpt; method := Util.if_(UseOtimica, DAE.SCONST("optimization"),method); + numberOfIntervals := Util.if_(UseOtimica, DAE.ICONST(50),numberOfIntervals); outSimOpt := GlobalScript.SIMULATION_OPTIONS(startTime, stopTime, numberOfIntervals, stepSize, tolerance, method, DAE.SCONST(inFileNamePrefix), options, outputFormat, variableFilter, cflags, simflags); end setFileNamePrefixInSimulationOptions; @@ -1605,8 +1606,9 @@ algorithm System.realtimeTick(GlobalScript.RT_CLOCK_SIMULATE_TOTAL); - b = Flags.getConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION); - Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true); + Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION,true); + Flags.setConfigEnum(Flags.GRAMMAR, Flags.OPTIMICA); + Flags.setConfigBool(Flags.GENERATE_DYN_OPTIMIZATION_PROBLEM,true); (cache,st,compileDir,executable,_,outputFormat_str,_,simflags,resultValues) = buildModel(cache,env,vals,st_1,msg); cit = winCitation(); @@ -1627,8 +1629,6 @@ algorithm timeSimulation = System.realtimeTock(GlobalScript.RT_CLOCK_SIMULATE_SIMULATION); timeTotal = System.realtimeTock(GlobalScript.RT_CLOCK_SIMULATE_TOTAL); (cache,simValue,newst) = createSimulationResultFromcallModelExecutable(resI,timeTotal,timeSimulation,resultValues,cache,className,vals,st,result_file,logFile); - //reset config flag - Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, b); then (cache,simValue,newst); diff --git a/Compiler/Util/Flags.mo b/Compiler/Util/Flags.mo index 559f9ec6eed..5223c3a6653 100644 --- a/Compiler/Util/Flags.mo +++ b/Compiler/Util/Flags.mo @@ -926,6 +926,11 @@ constant ConfigFlag RESHUFFLE = CONFIG_FLAG(58, "reshuffle", constant ConfigFlag NEW_UNIT_CHECKING = CONFIG_FLAG(59, "newUnitChecking", NONE(), INTERNAL(), BOOL_FLAG(false), NONE(), Util.notrans("")); + +constant ConfigFlag GENERATE_DYN_OPTIMIZATION_PROBLEM = CONFIG_FLAG(60, "gDynOpt", + NONE(), EXTERNAL(), BOOL_FLAG(false), NONE(), + Util.gettext("Generate dynamic optimization problem based on annation approach.")); + // This is a list of all configuration flags. A flag can not be used unless it's // in this list, and the list is checked at initialization so that all flags are @@ -989,7 +994,8 @@ constant list allConfigFlags = { INT_ENUM_CONVERSION, PROFILING_LEVEL, RESHUFFLE, - NEW_UNIT_CHECKING + NEW_UNIT_CHECKING, + GENERATE_DYN_OPTIMIZATION_PROBLEM }; public function new