From 6301665ec2c4a5699d1bda17e1e5f3f6a3f876a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Meier?= Date: Fri, 12 Jul 2024 08:41:39 +0200 Subject: [PATCH] Improved user control over kernel and material coverage check closes #28117 --- framework/include/problems/FEProblemBase.h | 44 ++++++- framework/src/problems/ExternalProblem.C | 2 +- framework/src/problems/FEProblemBase.C | 119 ++++++++++++++++-- .../AddFluidPropertiesInterrogatorAction.C | 2 +- .../AddGeochemicalModelInterrogatorAction.C | 2 +- .../actions/AddSpatialReactionSolverAction.C | 4 +- .../AddTimeDependentReactionSolverAction.C | 4 +- .../AddTimeIndependentReactionSolverAction.C | 4 +- .../src/hdgkernels/NavierStokesHDGKernel.C | 2 +- .../src/actions/OptimizationAction.C | 2 +- .../src/actions/StochasticToolsAction.C | 4 +- .../test/src/actions/TestAction.C | 2 +- .../gold/kernel_coverage_only_list_out.e | Bin 0 -> 59196 bytes .../gold/kernel_coverage_skip_list_out.e | Bin 0 -> 59196 bytes .../kernel_coverage_only_list.i | 63 ++++++++++ .../kernel_coverage_skip_list.i | 63 ++++++++++ .../problems/no_kernel_coverage_check/tests | 23 +++- .../gold/material_coverage_only_list_out.e | Bin 0 -> 59280 bytes .../gold/material_coverage_skip_list_out.e | Bin 0 -> 59280 bytes .../material_coverage_only_list.i | 67 ++++++++++ .../material_coverage_skip_list.i | 67 ++++++++++ .../problems/no_material_coverage_check/tests | 23 +++- 22 files changed, 461 insertions(+), 36 deletions(-) create mode 100644 test/tests/problems/no_kernel_coverage_check/gold/kernel_coverage_only_list_out.e create mode 100644 test/tests/problems/no_kernel_coverage_check/gold/kernel_coverage_skip_list_out.e create mode 100644 test/tests/problems/no_kernel_coverage_check/kernel_coverage_only_list.i create mode 100644 test/tests/problems/no_kernel_coverage_check/kernel_coverage_skip_list.i create mode 100644 test/tests/problems/no_material_coverage_check/gold/material_coverage_only_list_out.e create mode 100644 test/tests/problems/no_material_coverage_check/gold/material_coverage_skip_list_out.e create mode 100644 test/tests/problems/no_material_coverage_check/material_coverage_only_list.i create mode 100644 test/tests/problems/no_material_coverage_check/material_coverage_skip_list.i diff --git a/framework/include/problems/FEProblemBase.h b/framework/include/problems/FEProblemBase.h index cd6856dbc464..2a837c289d07 100644 --- a/framework/include/problems/FEProblemBase.h +++ b/framework/include/problems/FEProblemBase.h @@ -153,6 +153,16 @@ class FEProblemBase : public SubProblem, public Restartable FEProblemBase(const InputParameters & parameters); virtual ~FEProblemBase(); + enum class CoverageCheckMode + { + FALSE, + TRUE, + OFF, + ON, + SKIP_LIST, + ONLY_LIST, + }; + virtual EquationSystems & es() override { return _req.set().es(); } virtual MooseMesh & mesh() override { return _mesh; } virtual const MooseMesh & mesh() const override { return _mesh; } @@ -1735,7 +1745,16 @@ class FEProblemBase : public SubProblem, public Restartable * Set flag to indicate whether kernel coverage checks should be performed. This check makes * sure that at least one kernel is active on all subdomains in the domain (default: true). */ - void setKernelCoverageCheck(bool flag) { _kernel_coverage_check = flag; } + void setKernelCoverageCheck(CoverageCheckMode mode) { _kernel_coverage_check = mode; } + + /** + * Set flag to indicate whether kernel coverage checks should be performed. This check makes + * sure that at least one kernel is active on all subdomains in the domain (default: true). + */ + void setKernelCoverageCheck(bool flag) + { + _kernel_coverage_check = flag ? CoverageCheckMode::TRUE : CoverageCheckMode::FALSE; + } /** * Set flag to indicate whether material coverage checks should be performed. This check makes @@ -1743,7 +1762,18 @@ class FEProblemBase : public SubProblem, public Restartable * supplied. If no materials are supplied anywhere, a simulation is still considered OK as long as * no properties are being requested anywhere. */ - void setMaterialCoverageCheck(bool flag) { _material_coverage_check = flag; } + void setMaterialCoverageCheck(CoverageCheckMode mode) { _material_coverage_check = mode; } + + /** + * Set flag to indicate whether material coverage checks should be performed. This check makes + * sure that at least one material is active on all subdomains in the domain if any material is + * supplied. If no materials are supplied anywhere, a simulation is still considered OK as long as + * no properties are being requested anywhere. + */ + void setMaterialCoverageCheck(bool flag) + { + _material_coverage_check = flag ? CoverageCheckMode::TRUE : CoverageCheckMode::FALSE; + } /** * Toggle parallel barrier messaging (defaults to on). @@ -2640,8 +2670,9 @@ class FEProblemBase : public SubProblem, public Restartable SolverParams _solver_params; - /// Determines whether a check to verify an active kernel on every subdomain - bool _kernel_coverage_check; + /// Determines whether and which subdomains are to be checked to ensure that they have an active kernel + CoverageCheckMode _kernel_coverage_check; + std::vector _kernel_coverage_blocks; /// whether to perform checking of boundary restricted nodal object variable dependencies, /// e.g. whether the variable dependencies are defined on the selected boundaries @@ -2651,8 +2682,9 @@ class FEProblemBase : public SubProblem, public Restartable /// e.g. whether the variable dependencies are defined on the selected boundaries const bool _boundary_restricted_elem_integrity_check; - /// Determines whether a check to verify an active material on every subdomain - bool _material_coverage_check; + /// Determines whether and which subdomains are to be checked to ensure that they have an active material + CoverageCheckMode _material_coverage_check; + std::vector _material_coverage_blocks; /// Whether to check overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset bool _fv_bcs_integrity_check; diff --git a/framework/src/problems/ExternalProblem.C b/framework/src/problems/ExternalProblem.C index e20990bba0bb..92ea54838e7a 100644 --- a/framework/src/problems/ExternalProblem.C +++ b/framework/src/problems/ExternalProblem.C @@ -20,7 +20,7 @@ ExternalProblem::validParams() // there is no nonlinear system (we set it as empty in the constructor) params.suppressParameter("ignore_zeros_in_jacobian"); - params.suppressParameter("kernel_coverage_check"); + params.suppressParameter("kernel_coverage_check"); params.suppressParameter>("nl_sys_names"); params.suppressParameter("previous_nl_solution_required"); params.suppressParameter("skip_nl_system_check"); diff --git a/framework/src/problems/FEProblemBase.C b/framework/src/problems/FEProblemBase.C index 73b34f440eba..4ceb16baef14 100644 --- a/framework/src/problems/FEProblemBase.C +++ b/framework/src/problems/FEProblemBase.C @@ -205,8 +205,29 @@ FEProblemBase::validParams() rz_coord_axis, "The rotation axis (X | Y) for axisymetric coordinates", "Please use 'Mesh/rz_coord_axis' instead"); - params.addParam( - "kernel_coverage_check", true, "Set to false to disable kernel->subdomain coverage check"); + auto coverage_check_description = [](std::string scope, std::string list_param_name) + { + return "Controls, if and how a " + scope + + " subdomain coverage check is performed. " + "With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' " + "will disable the check for all subdomains. " + "To exclude a predefined set of subdomains 'SKIP_LIST' is to " + "be used, while the subdomains to skip are to be defined in the parameter '" + + list_param_name + + "'. To limit the check to a list of subdomains, 'ONLY_LIST' is to " + "be used (again, using the parameter '" + + list_param_name + "')."; + }; + MooseEnum kernel_coverage_check_modes("FALSE TRUE OFF ON SKIP_LIST ONLY_LIST", "TRUE"); + params.addParam("kernel_coverage_check", + kernel_coverage_check_modes, + coverage_check_description("kernel", "kernel_coverage_block_list")); + params.addParam>( + "kernel_coverage_block_list", + {}, + "List of subdomains for kernel coverage check. The meaning of this list is controlled by the " + "parameter 'kernel_coverage_check' (whether this is the list of subdomains to be checked, " + "not to be checked or not taken into account)."); params.addParam( "boundary_restricted_node_integrity_check", true, @@ -217,9 +238,18 @@ FEProblemBase::validParams() "Set to false to disable checking of boundary restricted elemental object " "variable dependencies, e.g. are the variable dependencies defined on the " "selected boundaries?"); - params.addParam("material_coverage_check", - true, - "Set to false to disable material->subdomain coverage check"); + MooseEnum material_coverage_check_modes("FALSE TRUE OFF ON SKIP_LIST ONLY_LIST", "TRUE"); + params.addParam( + "material_coverage_check", + material_coverage_check_modes, + coverage_check_description("material", "material_coverage_block_list")); + params.addParam>( + "material_coverage_block_list", + {}, + "List of subdomains for material coverage check. The meaning of this list is controlled by " + "the " + "parameter 'kernel_coverage_check' (whether this is the list of subdomains to be checked, " + "not to be checked or not taken into account)."); params.addParam("fv_bcs_integrity_check", true, "Set to false to disable checking of overlapping Dirichlet and Flux BCs " @@ -309,8 +339,10 @@ FEProblemBase::validParams() "specific handling, immediately error instead of allowing the time step to be cut"); params.addParamNamesToGroup( - "skip_nl_system_check kernel_coverage_check boundary_restricted_node_integrity_check " - "boundary_restricted_elem_integrity_check material_coverage_check fv_bcs_integrity_check " + "skip_nl_system_check kernel_coverage_check kernel_coverage_block_list " + "boundary_restricted_node_integrity_check " + "boundary_restricted_elem_integrity_check material_coverage_check " + "material_coverage_block_list fv_bcs_integrity_check " "material_dependency_check check_uo_aux_state error_on_jacobian_nonzero_reallocation", "Simulation checks"); params.addParamNamesToGroup("use_nonlinear previous_nl_solution_required nl_sys_names " @@ -397,12 +429,16 @@ FEProblemBase::FEProblemBase(const InputParameters & parameters) _needs_old_newton_iter(false), _has_nonlocal_coupling(false), _calculate_jacobian_in_uo(false), - _kernel_coverage_check(getParam("kernel_coverage_check")), + _kernel_coverage_check( + getParam("kernel_coverage_check").getEnum()), + _kernel_coverage_blocks(getParam>("kernel_coverage_block_list")), _boundary_restricted_node_integrity_check( getParam("boundary_restricted_node_integrity_check")), _boundary_restricted_elem_integrity_check( getParam("boundary_restricted_elem_integrity_check")), - _material_coverage_check(getParam("material_coverage_check")), + _material_coverage_check( + getParam("material_coverage_check").getEnum()), + _material_coverage_blocks(getParam>("material_coverage_block_list")), _fv_bcs_integrity_check(getParam("fv_bcs_integrity_check")), _material_dependency_check(getParam("material_dependency_check")), _uo_aux_state_check(getParam("check_uo_aux_state")), @@ -7760,9 +7796,38 @@ FEProblemBase::checkProblemIntegrity() const std::set & mesh_subdomains = _mesh.meshSubdomains(); // Check kernel coverage of subdomains (blocks) in the mesh - if (!_skip_nl_system_check && _solve && _kernel_coverage_check) - for (auto & nl : _nl) - nl->checkKernelCoverage(mesh_subdomains); + if (!_skip_nl_system_check && _solve && _kernel_coverage_check != CoverageCheckMode::FALSE && + _kernel_coverage_check != CoverageCheckMode::OFF) + { + std::set blocks; + if (_kernel_coverage_check == CoverageCheckMode::TRUE || + _kernel_coverage_check == CoverageCheckMode::ON) + blocks = mesh_subdomains; + else if (_kernel_coverage_check == CoverageCheckMode::SKIP_LIST) + { + blocks = mesh_subdomains; + for (const auto & subdomain_name : _kernel_coverage_blocks) + { + const auto id = _mesh.getSubdomainID(subdomain_name); + if (id == Moose::INVALID_BLOCK_ID) + paramError("kernel_coverage_block_list", + "Subdomain \"" + subdomain_name + "\" not found in mesh."); + blocks.erase(id); + } + } + else if (_kernel_coverage_check == CoverageCheckMode::ONLY_LIST) + for (const auto & subdomain_name : _kernel_coverage_blocks) + { + const auto id = _mesh.getSubdomainID(subdomain_name); + if (id == Moose::INVALID_BLOCK_ID) + paramError("kernel_coverage_block_list", + "Subdomain \"" + subdomain_name + "\" not found in mesh."); + blocks.insert(id); + } + if (!blocks.empty()) + for (auto & nl : _nl) + nl->checkKernelCoverage(blocks); + } // Check materials { @@ -7778,7 +7843,8 @@ FEProblemBase::checkProblemIntegrity() std::set local_mesh_subs(mesh_subdomains); - if (_material_coverage_check) + if (_material_coverage_check != CoverageCheckMode::FALSE && + _material_coverage_check != CoverageCheckMode::OFF) { /** * If a material is specified for any block in the simulation, then all blocks must @@ -7792,6 +7858,33 @@ FEProblemBase::checkProblemIntegrity() check_material_coverage = true; } + // did the user limit the subdomains to be checked? + if (_material_coverage_check == CoverageCheckMode::SKIP_LIST) + { + for (const auto & subdomain_name : _material_coverage_blocks) + { + const auto id = _mesh.getSubdomainID(subdomain_name); + if (id == Moose::INVALID_BLOCK_ID) + paramError("material_coverage_block_list", + "Subdomain \"" + subdomain_name + "\" not found in mesh."); + local_mesh_subs.erase(id); + } + } + else if (_material_coverage_check == CoverageCheckMode::ONLY_LIST) + { + std::set blocks(local_mesh_subs); + for (const auto & subdomain_name : _material_coverage_blocks) + { + const auto id = _mesh.getSubdomainID(subdomain_name); + if (id == Moose::INVALID_BLOCK_ID) + paramError("material_coverage_block_list", + "Subdomain \"" + subdomain_name + "\" not found in mesh."); + blocks.erase(id); + } + for (const auto id : blocks) + local_mesh_subs.erase(id); + } + // also exclude mortar spaces from the material check auto && mortar_subdomain_ids = _mortar_data.getMortarSubdomainIDs(); for (auto subdomain_id : mortar_subdomain_ids) diff --git a/modules/fluid_properties/src/actions/AddFluidPropertiesInterrogatorAction.C b/modules/fluid_properties/src/actions/AddFluidPropertiesInterrogatorAction.C index 5fd7acecfa74..4048f40b5b41 100644 --- a/modules/fluid_properties/src/actions/AddFluidPropertiesInterrogatorAction.C +++ b/modules/fluid_properties/src/actions/AddFluidPropertiesInterrogatorAction.C @@ -87,7 +87,7 @@ AddFluidPropertiesInterrogatorAction::act() params.set("use_nonlinear") = true; params.set("solve") = false; _problem = _factory.create(class_name, "Problem", params); - _problem->setKernelCoverageCheck(false); + _problem->setKernelCoverageCheck(FEProblemBase::CoverageCheckMode::FALSE); } // Add the fluid properties interrogator user object else if (_current_task == "add_user_object") diff --git a/modules/geochemistry/src/actions/AddGeochemicalModelInterrogatorAction.C b/modules/geochemistry/src/actions/AddGeochemicalModelInterrogatorAction.C index 722feccec1be..a3ccf2135d93 100644 --- a/modules/geochemistry/src/actions/AddGeochemicalModelInterrogatorAction.C +++ b/modules/geochemistry/src/actions/AddGeochemicalModelInterrogatorAction.C @@ -59,7 +59,7 @@ AddGeochemicalModelInterrogatorAction::act() params.set("use_nonlinear") = true; params.set("solve") = false; _problem = _factory.create(class_name, "Problem", params); - _problem->setKernelCoverageCheck(false); + _problem->setKernelCoverageCheck(FEProblemBase::CoverageCheckMode::FALSE); } // Set up an arbitrary steady executioner else if (_current_task == "setup_executioner") diff --git a/modules/geochemistry/src/actions/AddSpatialReactionSolverAction.C b/modules/geochemistry/src/actions/AddSpatialReactionSolverAction.C index 497fb3e9a36b..aa2229409df9 100644 --- a/modules/geochemistry/src/actions/AddSpatialReactionSolverAction.C +++ b/modules/geochemistry/src/actions/AddSpatialReactionSolverAction.C @@ -52,7 +52,9 @@ AddSpatialReactionSolverAction::act() params.set("use_nonlinear") = true; params.set("solve") = getParam("include_moose_solve"); _problem = _factory.create(class_name, "Problem", params); - _problem->setKernelCoverageCheck(getParam("include_moose_solve")); + _problem->setKernelCoverageCheck(getParam("include_moose_solve") + ? FEProblemBase::CoverageCheckMode::TRUE + : FEProblemBase::CoverageCheckMode::FALSE); } else if (_current_task == "add_geochemistry_reactor") { diff --git a/modules/geochemistry/src/actions/AddTimeDependentReactionSolverAction.C b/modules/geochemistry/src/actions/AddTimeDependentReactionSolverAction.C index b0f4c8e58693..16aa4064738e 100644 --- a/modules/geochemistry/src/actions/AddTimeDependentReactionSolverAction.C +++ b/modules/geochemistry/src/actions/AddTimeDependentReactionSolverAction.C @@ -70,7 +70,9 @@ AddTimeDependentReactionSolverAction::act() params.set("use_nonlinear") = true; params.set("solve") = getParam("include_moose_solve"); _problem = _factory.create(class_name, "Problem", params); - _problem->setKernelCoverageCheck(getParam("include_moose_solve")); + _problem->setKernelCoverageCheck(getParam("include_moose_solve") + ? FEProblemBase::CoverageCheckMode::TRUE + : FEProblemBase::CoverageCheckMode::FALSE); } else if (_current_task == "add_geochemistry_reactor") { diff --git a/modules/geochemistry/src/actions/AddTimeIndependentReactionSolverAction.C b/modules/geochemistry/src/actions/AddTimeIndependentReactionSolverAction.C index 223870385a9f..e056ed948b04 100644 --- a/modules/geochemistry/src/actions/AddTimeIndependentReactionSolverAction.C +++ b/modules/geochemistry/src/actions/AddTimeIndependentReactionSolverAction.C @@ -73,7 +73,9 @@ AddTimeIndependentReactionSolverAction::act() params.set("use_nonlinear") = true; params.set("solve") = getParam("include_moose_solve"); _problem = _factory.create(class_name, "Problem", params); - _problem->setKernelCoverageCheck(getParam("include_moose_solve")); + _problem->setKernelCoverageCheck(getParam("include_moose_solve") + ? FEProblemBase::CoverageCheckMode::TRUE + : FEProblemBase::CoverageCheckMode::FALSE); } // Set up an arbitrary steady executioner else if (_current_task == "setup_executioner") diff --git a/modules/navier_stokes/src/hdgkernels/NavierStokesHDGKernel.C b/modules/navier_stokes/src/hdgkernels/NavierStokesHDGKernel.C index fe1b47a3b244..b64ec93d751e 100644 --- a/modules/navier_stokes/src/hdgkernels/NavierStokesHDGKernel.C +++ b/modules/navier_stokes/src/hdgkernels/NavierStokesHDGKernel.C @@ -45,7 +45,7 @@ NavierStokesHDGKernel::NavierStokesHDGKernel(const InputParameters & parameters) _pressure_mms_forcing_function(getFunctor("pressure_mms_forcing_function")) { // This class handles residuals and Jacobians for multiple variables - _fe_problem.setKernelCoverageCheck(false); + _fe_problem.setKernelCoverageCheck(FEProblemBase::CoverageCheckMode::FALSE); _body_forces.push_back(&_body_force_x); _body_forces.push_back(&_body_force_y); diff --git a/modules/optimization/src/actions/OptimizationAction.C b/modules/optimization/src/actions/OptimizationAction.C index bdedd4bbb415..3bf89f573eec 100644 --- a/modules/optimization/src/actions/OptimizationAction.C +++ b/modules/optimization/src/actions/OptimizationAction.C @@ -79,7 +79,7 @@ OptimizationAction::act() // Set the object parameters InputParameters & params = action->getObjectParams(); - params.set("kernel_coverage_check") = false; + params.set("kernel_coverage_check") = "false"; params.set("skip_nl_system_check") = true; // Add Action to the warehouse diff --git a/modules/stochastic_tools/src/actions/StochasticToolsAction.C b/modules/stochastic_tools/src/actions/StochasticToolsAction.C index 896a3984101d..9dfd4cc6536a 100644 --- a/modules/stochastic_tools/src/actions/StochasticToolsAction.C +++ b/modules/stochastic_tools/src/actions/StochasticToolsAction.C @@ -84,7 +84,7 @@ StochasticToolsAction::act() params.set("solve") = false; if (!params.isParamSetByUser("kernel_coverage_check")) - params.set("kernel_coverage_check") = false; + params.set("kernel_coverage_check") = "false"; if (!params.isParamSetByUser("skip_nl_system_check")) params.set("skip_nl_system_check") = true; @@ -106,7 +106,7 @@ StochasticToolsAction::act() // Set the object parameters InputParameters & params = action->getObjectParams(); params.set("solve") = false; - params.set("kernel_coverage_check") = false; + params.set("kernel_coverage_check") = "false"; params.set("skip_nl_system_check") = true; // Add Action to the warehouse diff --git a/modules/thermal_hydraulics/test/src/actions/TestAction.C b/modules/thermal_hydraulics/test/src/actions/TestAction.C index b4b87b9f9a3a..76a8b7d36e52 100644 --- a/modules/thermal_hydraulics/test/src/actions/TestAction.C +++ b/modules/thermal_hydraulics/test/src/actions/TestAction.C @@ -89,7 +89,7 @@ TestAction::act() std::shared_ptr action = std::static_pointer_cast( _action_factory.create(class_name, "fe_problem", action_params)); - action->getObjectParams().set("kernel_coverage_check") = false; + action->getObjectParams().set("kernel_coverage_check") = "false"; _awh.addActionBlock(action); } } diff --git a/test/tests/problems/no_kernel_coverage_check/gold/kernel_coverage_only_list_out.e b/test/tests/problems/no_kernel_coverage_check/gold/kernel_coverage_only_list_out.e new file mode 100644 index 0000000000000000000000000000000000000000..763e22b85a1020a7a099c16dc5b2f4957ae0bce4 GIT binary patch literal 59196 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 literal 0 HcmV?d00001 diff --git a/test/tests/problems/no_kernel_coverage_check/kernel_coverage_only_list.i b/test/tests/problems/no_kernel_coverage_check/kernel_coverage_only_list.i new file mode 100644 index 000000000000..f3d8ae67b5c2 --- /dev/null +++ b/test/tests/problems/no_kernel_coverage_check/kernel_coverage_only_list.i @@ -0,0 +1,63 @@ +[Problem] + solve = true # coverage check needs solve to be true + + kernel_coverage_check = 'only_list' + kernel_coverage_block_list = 'BaseMesh' + + material_coverage_check = false +[] + +[Mesh] + [generate] + type = GeneratedMeshGenerator + subdomain_name = 'BaseMesh' + dim = 2 + nx = 10 + ny = 10 + [] + add_subdomain_names = 'empty_subdomain' +[] + +[Variables] + [u] + [] +[] + +[Kernels] + [diff] + type = Diffusion + variable = u + block = 'BaseMesh' + [] + [diff2] + type = MatDiffusion + diffusivity = 1e-4 + variable = u + block = 'BaseMesh' + [] +[] + +[BCs] + [left] + type = DirichletBC + variable = u + boundary = left + value = 0 + [] + [right] + type = DirichletBC + variable = u + boundary = right + value = 1 + [] +[] + +[Executioner] + type = Steady + petsc_options_iname = '-pc_type -pc_hypre_type' + petsc_options_value = 'hypre boomeramg' +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/problems/no_kernel_coverage_check/kernel_coverage_skip_list.i b/test/tests/problems/no_kernel_coverage_check/kernel_coverage_skip_list.i new file mode 100644 index 000000000000..49103264e825 --- /dev/null +++ b/test/tests/problems/no_kernel_coverage_check/kernel_coverage_skip_list.i @@ -0,0 +1,63 @@ +[Problem] + solve = true # coverage check needs solve to be true + + kernel_coverage_check = 'skip_list' + kernel_coverage_block_list = 'empty_subdomain' + + material_coverage_check = false +[] + +[Mesh] + [generate] + type = GeneratedMeshGenerator + subdomain_name = 'BaseMesh' + dim = 2 + nx = 10 + ny = 10 + [] + add_subdomain_names = 'empty_subdomain' +[] + +[Variables] + [u] + [] +[] + +[Kernels] + [diff] + type = Diffusion + variable = u + block = 'BaseMesh' + [] + [diff2] + type = MatDiffusion + diffusivity = 1e-4 + variable = u + block = 'BaseMesh' + [] +[] + +[BCs] + [left] + type = DirichletBC + variable = u + boundary = left + value = 0 + [] + [right] + type = DirichletBC + variable = u + boundary = right + value = 1 + [] +[] + +[Executioner] + type = Steady + petsc_options_iname = '-pc_type -pc_hypre_type' + petsc_options_value = 'hypre boomeramg' +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/problems/no_kernel_coverage_check/tests b/test/tests/problems/no_kernel_coverage_check/tests index 0699fe6db4b0..55e56352d61e 100644 --- a/test/tests/problems/no_kernel_coverage_check/tests +++ b/test/tests/problems/no_kernel_coverage_check/tests @@ -1,12 +1,29 @@ [Tests] - [./test] + [no_coverage_check] type = 'Exodiff' input = 'no_coverage_check.i' exodiff = 'no_coverage_check_out.e' - requirement = 'The system shall support the ability to disable the check for' ' PDE operators in all or some parts of the domain.' issues = '#2291' design = 'Problem/index.md' - [../] + [] + [kernel_coverage_only_list] + type = 'Exodiff' + input = 'kernel_coverage_only_list.i' + exodiff = 'kernel_coverage_only_list_out.e' + requirement = 'The system shall support the ability to disable the check for' + ' active kernels in some parts of the domain.' + issues = '#28117' + design = 'Problem/index.md' + [] + [kernel_coverage_skip_list] + type = 'Exodiff' + input = 'kernel_coverage_skip_list.i' + exodiff = 'kernel_coverage_skip_list_out.e' + requirement = 'The system shall support the ability to disable the check for' + ' active kernels in some parts of the domain.' + issues = '#28117' + design = 'Problem/index.md' + [] [] diff --git a/test/tests/problems/no_material_coverage_check/gold/material_coverage_only_list_out.e b/test/tests/problems/no_material_coverage_check/gold/material_coverage_only_list_out.e new file mode 100644 index 0000000000000000000000000000000000000000..01b3f8a8143591555973a5ca04ea1eeeff623ccc GIT binary patch literal 59280 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 R&&^5PCq5-{ANjt<{eQ!ifK~ti literal 0 HcmV?d00001 diff --git a/test/tests/problems/no_material_coverage_check/gold/material_coverage_skip_list_out.e b/test/tests/problems/no_material_coverage_check/gold/material_coverage_skip_list_out.e new file mode 100644 index 0000000000000000000000000000000000000000..4dc0fa001a67f1f8cc04d652913619d9f6279b90 GIT binary patch literal 59280 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 N{waz3==U}5{{xqggL?n~ literal 0 HcmV?d00001 diff --git a/test/tests/problems/no_material_coverage_check/material_coverage_only_list.i b/test/tests/problems/no_material_coverage_check/material_coverage_only_list.i new file mode 100644 index 000000000000..b8fa10166639 --- /dev/null +++ b/test/tests/problems/no_material_coverage_check/material_coverage_only_list.i @@ -0,0 +1,67 @@ +[Problem] + solve = true # coverage check needs solve to be true + + kernel_coverage_check = false + + material_coverage_check = 'only_list' + material_coverage_block_list = 'BaseMesh' +[] + +[Mesh] + [generate] + type = GeneratedMeshGenerator + subdomain_name = 'BaseMesh' + dim = 2 + nx = 10 + ny = 10 + [] + add_subdomain_names = 'empty_subdomain' +[] + +[Variables] + [u] + block = 'BaseMesh' + [] +[] + +[Kernels] + [diff] + type = Diffusion + variable = u + block = 'BaseMesh' + [] +[] + +[BCs] + [left] + type = DirichletBC + variable = u + boundary = left + value = 0 + [] + [right] + type = DirichletBC + variable = u + boundary = right + value = 1 + [] +[] + +[Materials] + [diff] + type = GenericConstantMaterial + prop_names = 'rxn_coeff' + prop_values = '-2' + block = 'BaseMesh' + [] +[] + +[Executioner] + type = Steady + petsc_options_iname = '-pc_type -pc_hypre_type' + petsc_options_value = 'hypre boomeramg' +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/problems/no_material_coverage_check/material_coverage_skip_list.i b/test/tests/problems/no_material_coverage_check/material_coverage_skip_list.i new file mode 100644 index 000000000000..04af314233e4 --- /dev/null +++ b/test/tests/problems/no_material_coverage_check/material_coverage_skip_list.i @@ -0,0 +1,67 @@ +[Problem] + solve = true # coverage check needs solve to be true + + kernel_coverage_check = false + + material_coverage_check = 'skip_list' + material_coverage_block_list = 'empty_subdomain' +[] + +[Mesh] + [generate] + type = GeneratedMeshGenerator + subdomain_name = 'BaseMesh' + dim = 2 + nx = 10 + ny = 10 + [] + add_subdomain_names = 'empty_subdomain' +[] + +[Variables] + [u] + block = 'BaseMesh' + [] +[] + +[Kernels] + [diff] + type = Diffusion + variable = u + block = 'BaseMesh' + [] +[] + +[BCs] + [left] + type = DirichletBC + variable = u + boundary = left + value = 0 + [] + [right] + type = DirichletBC + variable = u + boundary = right + value = 1 + [] +[] + +[Materials] + [diff] + type = GenericConstantMaterial + prop_names = 'rxn_coeff' + prop_values = '-2' + block = 'BaseMesh' + [] +[] + +[Executioner] + type = Steady + petsc_options_iname = '-pc_type -pc_hypre_type' + petsc_options_value = 'hypre boomeramg' +[] + +[Outputs] + exodus = true +[] diff --git a/test/tests/problems/no_material_coverage_check/tests b/test/tests/problems/no_material_coverage_check/tests index 1b1cb716b1d5..77a0aa3726a2 100644 --- a/test/tests/problems/no_material_coverage_check/tests +++ b/test/tests/problems/no_material_coverage_check/tests @@ -1,12 +1,29 @@ [Tests] - [./test] + [no_material_coverage_check] type = 'Exodiff' input = 'no_material_coverage_check.i' exodiff = 'no_material_coverage_check_out.e' - requirement = 'The system shall support the ability to disable the check for' ' active materials in all parts of the domain.' issues = '#5306' design = 'Problem/index.md' - [../] + [] + [material_coverage_only_list] + type = 'Exodiff' + input = 'material_coverage_only_list.i' + exodiff = 'material_coverage_only_list_out.e' + requirement = 'The system shall support the ability to enable the check for' + ' active materials only in some parts of the domain.' + issues = '#28117' + design = 'Problem/index.md' + [] + [material_coverage_skip_list] + type = 'Exodiff' + input = 'material_coverage_skip_list.i' + exodiff = 'material_coverage_skip_list_out.e' + requirement = 'The system shall support the ability to disable the check for' + ' active materials in some parts of the domain.' + issues = '#28117' + design = 'Problem/index.md' + [] []