Skip to content

Commit

Permalink
Added config flag ...
Browse files Browse the repository at this point in the history
for optimization modules used for initialization system
  • Loading branch information
lochel committed Sep 11, 2015
1 parent 56d186b commit c14ac39
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 15 deletions.
26 changes: 26 additions & 0 deletions Compiler/BackEnd/BackendDAEUtil.mo
Expand Up @@ -7275,6 +7275,32 @@ algorithm
postOptModules := listReverse(postOptModules);
end getPostOptModules;

public function getInitOptModules
input Option<list<String>> inInitOptModules;
output list<tuple<BackendDAEFunc.postOptimizationDAEModule, String, Boolean>> outInitOptModules;
protected
list<tuple<BackendDAEFunc.postOptimizationDAEModule, String, Boolean/*stopOnFailure*/>> allInitOptModules;
list<String> initOptModules;
algorithm
allInitOptModules := {(SymbolicJacobian.constantLinearSystem, "constantLinearSystem", false),
(BackendDAEOptimize.simplifyComplexFunction, "simplifyComplexFunction", false),
(SymbolicJacobian.inputDerivativesUsed, "inputDerivativesUsed", false),
(ExpressionSolve.solveSimpleEquations, "solveSimpleEquations", false),
(Tearing.tearingSystem, "tearingSystem", false),
(Tearing.recursiveTearing, "recursiveTearing", false),
(DynamicOptimization.removeLoops, "extendDynamicOptimization", false),
(DynamicOptimization.reduceDynamicOptimization, "reduceDynamicOptimization", false),
(DynamicOptimization.simplifyConstraints, "simplifyConstraints", false),
(BackendDAEOptimize.simplifyLoops, "simplifyLoops", false),
(SymbolicJacobian.calculateStrongComponentJacobians, "calculateStrongComponentJacobians", false)
};

initOptModules := Config.getInitOptModules();
initOptModules := Util.getOptionOrDefault(inInitOptModules, initOptModules);
outInitOptModules := selectOptModules(initOptModules, allInitOptModules, {});
outInitOptModules := listReverse(outInitOptModules);
end getInitOptModules;

protected function selectOptModules
input list<String> strOptModules;
input list<tuple<Type_a,String,Boolean>> inOptModules;
Expand Down
17 changes: 3 additions & 14 deletions Compiler/BackEnd/Initialization.mo
Expand Up @@ -93,7 +93,7 @@ protected
HashSet.HashSet hs "contains all pre variables";
list<BackendDAE.Equation> removedEqns;
list<BackendDAE.Var> dumpVars, dumpVars2;
list<tuple<BackendDAEFunc.postOptimizationDAEModule, String, Boolean>> pastOptModules;
list<tuple<BackendDAEFunc.postOptimizationDAEModule, String, Boolean>> initOptModules;
tuple<BackendDAEFunc.StructurallySingularSystemHandlerFunc, String, BackendDAEFunc.stateDeselectionFunc, String> daeHandler;
tuple<BackendDAEFunc.matchingAlgorithmFunc, String> matchingAlgorithm;
algorithm
Expand Down Expand Up @@ -178,18 +178,7 @@ algorithm
initdae := BackendDAEUtil.mapEqSystem(initdae, solveInitialSystemEqSystem);

// transform and optimize DAE
pastOptModules := BackendDAEUtil.getPostOptModules(SOME({
"constantLinearSystem",
"simplifyComplexFunction",
//"reduceDynamicOptimization", // before tearing
"tearingSystem",
"simplifyLoops",
"recursiveTearing",
"calculateStrongComponentJacobians",
"solveSimpleEquations"
//"inputDerivativesUsed",
//"extendDynamicOptimization"
}));
initOptModules := BackendDAEUtil.getInitOptModules(NONE());

matchingAlgorithm := BackendDAEUtil.getMatchingAlgorithm(NONE());
daeHandler := BackendDAEUtil.getIndexReductionMethod(NONE());
Expand All @@ -198,7 +187,7 @@ algorithm
initdae := BackendDAEUtil.transformBackendDAE(initdae, SOME((BackendDAE.NO_INDEX_REDUCTION(), BackendDAE.EXACT())), NONE(), NONE());

// simplify system
initdae := BackendDAEUtil.postOptimizeDAE(initdae, pastOptModules, matchingAlgorithm, daeHandler);
initdae := BackendDAEUtil.postOptimizeDAE(initdae, initOptModules, matchingAlgorithm, daeHandler);
if Flags.isSet(Flags.DUMP_INITIAL_SYSTEM) then
BackendDump.dumpBackendDAE(initdae, "solved initial system");
if Flags.isSet(Flags.ADDITIONAL_GRAPHVIZ_DUMP) then
Expand Down
6 changes: 6 additions & 0 deletions Compiler/Util/Config.mo
Expand Up @@ -314,6 +314,12 @@ algorithm
outStringLst := Flags.getConfigStringList(Flags.POST_OPT_MODULES);
end getPostOptModules;

public function getInitOptModules
output list<String> outStringLst;
algorithm
outStringLst := Flags.getConfigStringList(Flags.INIT_OPT_MODULES);
end getInitOptModules;

public function setPreOptModules
input list<String> inStringLst;
algorithm
Expand Down
25 changes: 24 additions & 1 deletion Compiler/Util/Flags.mo
Expand Up @@ -1136,6 +1136,28 @@ constant ConfigFlag PARTLINTORN = CONFIG_FLAG(77, "partlintorn",
NONE(), EXTERNAL(), INT_FLAG(0), NONE(),
Util.gettext("Sets the limit for partitionin of linear torn systems."));

constant ConfigFlag INIT_OPT_MODULES = CONFIG_FLAG(78, "initOptModules",
NONE(), EXTERNAL(), STRING_LIST_FLAG({
"constantLinearSystem",
"simplifyComplexFunction",
//"reduceDynamicOptimization", // before tearing
"tearingSystem",
"simplifyLoops",
"recursiveTearing",
"calculateStrongComponentJacobians",
"solveSimpleEquations"
//"inputDerivativesUsed",
//"extendDynamicOptimization"
}),
SOME(STRING_DESC_OPTION({
("extendDynamicOptimization", Util.gettext("Move loops to constraints.")),
("constantLinearSystem", Util.gettext("Evaluates constant linear systems (a*x+b*y=c; d*x+e*y=f; a,b,c,d,e,f are constants) at compile-time.")),
("tearingSystem",Util.notrans("For method selection use flag tearingMethod.")),
("inputDerivativesUsed", Util.gettext("Checks if derivatives of inputs are need to calculate the model.")),
("calculateStrongComponentJacobians", Util.gettext("Generates analytical Jacobian for non-linear strong components."))
})),
Util.gettext("Sets the initialization optimization modules to use in the back end. See --help=optmodules for more info."));

protected
// 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
Expand Down Expand Up @@ -1217,7 +1239,8 @@ constant list<ConfigFlag> allConfigFlags = {
RTEARING,
FLOW_THRESHOLD,
MATRIX_FORMAT,
PARTLINTORN
PARTLINTORN,
INIT_OPT_MODULES
};

public function new
Expand Down

0 comments on commit c14ac39

Please sign in to comment.