From 1cc2a3858d607a5ceaacab986279d0c81b78454d Mon Sep 17 00:00:00 2001 From: Logan Harbour Date: Wed, 10 Aug 2022 11:09:58 -0600 Subject: [PATCH] Use new static exec flag reg and namespace custom exec flags refs #49 --- .../include/base/IsopodAppTypes.h | 3 ++ .../optimization/src/base/IsopodAppTypes.C | 11 +++-- modules/optimization/src/base/isopodApp.C | 6 --- .../src/executioners/OptimizeSolve.C | 49 ++++++++++--------- .../src/multiapps/OptimizeFullSolveMultiApp.C | 5 +- 5 files changed, 41 insertions(+), 33 deletions(-) diff --git a/modules/optimization/include/base/IsopodAppTypes.h b/modules/optimization/include/base/IsopodAppTypes.h index 05574b9fd16e..888d50ef6ba4 100644 --- a/modules/optimization/include/base/IsopodAppTypes.h +++ b/modules/optimization/include/base/IsopodAppTypes.h @@ -1,6 +1,9 @@ #pragma once #include "Moose.h" +namespace IsopodAppTypes +{ extern const ExecFlagType EXEC_FORWARD; extern const ExecFlagType EXEC_ADJOINT; extern const ExecFlagType EXEC_HOMOGENEOUS_FORWARD; +} diff --git a/modules/optimization/src/base/IsopodAppTypes.C b/modules/optimization/src/base/IsopodAppTypes.C index e319ff356181..14c9ffdef2c4 100644 --- a/modules/optimization/src/base/IsopodAppTypes.C +++ b/modules/optimization/src/base/IsopodAppTypes.C @@ -1,6 +1,9 @@ #include "IsopodAppTypes.h" -#include "MooseEnumItem.h" +#include "ExecFlagRegistry.h" -const ExecFlagType EXEC_FORWARD("FORWARD"); -const ExecFlagType EXEC_ADJOINT("ADJOINT"); -const ExecFlagType EXEC_HOMOGENEOUS_FORWARD("HOMOGENEOUS_FORWARD"); +namespace IsopodAppTypes +{ +const ExecFlagType EXEC_FORWARD = registerExecFlag("FORWARD"); +const ExecFlagType EXEC_ADJOINT = registerExecFlag("ADJOINT"); +const ExecFlagType EXEC_HOMOGENEOUS_FORWARD = registerExecFlag("HOMOGENEOUS_FORWARD"); +} diff --git a/modules/optimization/src/base/isopodApp.C b/modules/optimization/src/base/isopodApp.C index 370dc7591cb6..2fa62b7a6d55 100644 --- a/modules/optimization/src/base/isopodApp.C +++ b/modules/optimization/src/base/isopodApp.C @@ -31,12 +31,6 @@ isopodApp::registerAll(Factory & f, ActionFactory & af, Syntax & s) Registry::registerActionsTo(af, {"isopodApp"}); auto & syntax = s; - auto & factory = f; - - // Optimization execution flags - registerExecFlag(EXEC_FORWARD); - registerExecFlag(EXEC_ADJOINT); - registerExecFlag(EXEC_HOMOGENEOUS_FORWARD); // Form Function actions registerSyntaxTask("AddOptimizationReporterAction", "OptimizationReporter", "add_reporter"); diff --git a/modules/optimization/src/executioners/OptimizeSolve.C b/modules/optimization/src/executioners/OptimizeSolve.C index 2a0b0578e059..9e16b885e6cd 100644 --- a/modules/optimization/src/executioners/OptimizeSolve.C +++ b/modules/optimization/src/executioners/OptimizeSolve.C @@ -13,8 +13,13 @@ OptimizeSolve::validParams() params.addRequiredParam( "tao_solver", tao_solver_enum, "Tao solver to use for optimization."); ExecFlagEnum exec_enum = ExecFlagEnum(); - exec_enum.addAvailableFlags(EXEC_NONE, EXEC_FORWARD, EXEC_ADJOINT, EXEC_HOMOGENEOUS_FORWARD); - exec_enum = {EXEC_FORWARD, EXEC_ADJOINT, EXEC_HOMOGENEOUS_FORWARD}; + exec_enum.addAvailableFlags(EXEC_NONE, + IsopodAppTypes::EXEC_FORWARD, + IsopodAppTypes::EXEC_ADJOINT, + IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD); + exec_enum = {IsopodAppTypes::EXEC_FORWARD, + IsopodAppTypes::EXEC_ADJOINT, + IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD}; params.addParam( "solve_on", exec_enum, "List of flags indicating when inner system solve should occur."); return params; @@ -140,9 +145,9 @@ OptimizeSolve::taoSolve() CHKERRQ(ierr); // Backup multiapps so transient problems start with the same initial condition - _problem.backupMultiApps(EXEC_FORWARD); - _problem.backupMultiApps(EXEC_ADJOINT); - _problem.backupMultiApps(EXEC_HOMOGENEOUS_FORWARD); + _problem.backupMultiApps(IsopodAppTypes::EXEC_FORWARD); + _problem.backupMultiApps(IsopodAppTypes::EXEC_ADJOINT); + _problem.backupMultiApps(IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD); // Solve optimization ierr = TaoSolve(_tao); @@ -307,12 +312,12 @@ OptimizeSolve::objectiveFunction() { _form_function->updateParameters(*_parameters.get()); - _problem.execute(EXEC_FORWARD); + _problem.execute(IsopodAppTypes::EXEC_FORWARD); bool multiapp_passed = true; - _problem.restoreMultiApps(EXEC_FORWARD); - if (!_problem.execMultiApps(EXEC_FORWARD)) + _problem.restoreMultiApps(IsopodAppTypes::EXEC_FORWARD); + if (!_problem.execMultiApps(IsopodAppTypes::EXEC_FORWARD)) multiapp_passed = false; - if (_solve_on.contains(EXEC_FORWARD)) + if (_solve_on.contains(IsopodAppTypes::EXEC_FORWARD)) _inner_solve->solve(); _obj_iterate++; @@ -324,11 +329,11 @@ OptimizeSolve::gradientFunction(libMesh::PetscVector & gradient) { _form_function->updateParameters(*_parameters.get()); - _problem.execute(EXEC_ADJOINT); - _problem.restoreMultiApps(EXEC_ADJOINT); - if (!_problem.execMultiApps(EXEC_ADJOINT)) + _problem.execute(IsopodAppTypes::EXEC_ADJOINT); + _problem.restoreMultiApps(IsopodAppTypes::EXEC_ADJOINT); + if (!_problem.execMultiApps(IsopodAppTypes::EXEC_ADJOINT)) mooseError("Adjoint solve multiapp failed!"); - if (_solve_on.contains(EXEC_ADJOINT)) + if (_solve_on.contains(IsopodAppTypes::EXEC_ADJOINT)) _inner_solve->solve(); _grad_iterate++; @@ -341,25 +346,25 @@ OptimizeSolve::applyHessian(libMesh::PetscVector & s, libMesh::PetscVect // What happens for material inversion when the Hessian // is dependent on the parameters? Deal with it later??? // see notes on how this needs to change for Material inversion - if (_problem.hasMultiApps() && !_problem.hasMultiApps(EXEC_HOMOGENEOUS_FORWARD)) + if (_problem.hasMultiApps() && !_problem.hasMultiApps(IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD)) mooseError("Hessian based optimization algorithms require a sub-app with:\n" " execute_on = HOMOGENEOUS_FORWARD"); _form_function->updateParameters(s); - _problem.execute(EXEC_HOMOGENEOUS_FORWARD); - _problem.restoreMultiApps(EXEC_HOMOGENEOUS_FORWARD); - if (!_problem.execMultiApps(EXEC_HOMOGENEOUS_FORWARD)) + _problem.execute(IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD); + _problem.restoreMultiApps(IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD); + if (!_problem.execMultiApps(IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD)) mooseError("Homogeneous forward solve multiapp failed!"); - if (_solve_on.contains(EXEC_HOMOGENEOUS_FORWARD)) + if (_solve_on.contains(IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD)) _inner_solve->solve(); _form_function->setMisfitToSimulatedValues(); - _problem.execute(EXEC_ADJOINT); - _problem.restoreMultiApps(EXEC_ADJOINT); - if (!_problem.execMultiApps(EXEC_ADJOINT)) + _problem.execute(IsopodAppTypes::EXEC_ADJOINT); + _problem.restoreMultiApps(IsopodAppTypes::EXEC_ADJOINT); + if (!_problem.execMultiApps(IsopodAppTypes::EXEC_ADJOINT)) mooseError("Adjoint solve multiapp failed!"); - if (_solve_on.contains(EXEC_ADJOINT)) + if (_solve_on.contains(IsopodAppTypes::EXEC_ADJOINT)) _inner_solve->solve(); _form_function->computeGradient(Hs); diff --git a/modules/optimization/src/multiapps/OptimizeFullSolveMultiApp.C b/modules/optimization/src/multiapps/OptimizeFullSolveMultiApp.C index c8ed695213e2..c849ace4d505 100644 --- a/modules/optimization/src/multiapps/OptimizeFullSolveMultiApp.C +++ b/modules/optimization/src/multiapps/OptimizeFullSolveMultiApp.C @@ -13,7 +13,10 @@ OptimizeFullSolveMultiApp::validParams() InputParameters params = FullSolveMultiApp::validParams(); params.addClassDescription("This is FullSolveMultiApp with some extra flags registered."); ExecFlagEnum exec_enum = ExecFlagEnum(); - exec_enum.addAvailableFlags(EXEC_NONE, EXEC_FORWARD, EXEC_ADJOINT, EXEC_HOMOGENEOUS_FORWARD); + exec_enum.addAvailableFlags(EXEC_NONE, + IsopodAppTypes::EXEC_FORWARD, + IsopodAppTypes::EXEC_ADJOINT, + IsopodAppTypes::EXEC_HOMOGENEOUS_FORWARD); params.addParam( "execute_on", exec_enum, "List of flags indicating when this multiapp should solve.");