https://mooseframework.inl.gov
SetupDebugAction.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "SetupDebugAction.h"
11 #include "FEProblem.h"
12 #include "ActionWarehouse.h"
13 #include "Factory.h"
14 #include "Output.h"
15 #include "MooseApp.h"
16 #include "MooseObjectAction.h"
17 #include "ActionFactory.h"
18 #include "AddAuxVariableAction.h"
19 #include "MooseUtils.h"
21 
22 using namespace libMesh;
23 
24 registerMooseAction("MooseApp", SetupDebugAction, "add_output");
25 
28 {
30  params.addParam<unsigned int>(
31  "show_top_residuals", 0, "The number of top residuals to print out (0 = no output)");
32  params.addParam<bool>(
33  "show_var_residual_norms",
34  false,
35  "Print the residual norms of the individual solution variables at each nonlinear iteration");
36  params.addParam<bool>("show_action_dependencies", false, "Print out the action dependencies");
37  params.addParam<bool>("show_actions", false, "Print out the actions being executed");
38  params.addParam<bool>(
39  "show_parser", false, "Shows parser block extraction and debugging information");
40  params.addParam<bool>(
41  "show_material_props",
42  false,
43  "Print out the material properties supplied for each block, face, neighbor, and/or sideset");
44  params.addParam<bool>("show_chain_control_data",
45  false,
46  "Print out the chain control data on every time step setup");
47  params.addParam<bool>("show_controllable",
48  false,
49  "Print out the controllable parameters from all input parameters");
50  params.addParam<bool>("show_mesh_meta_data", false, "Print out the available mesh meta data");
51  params.addParam<bool>(
52  "show_reporters", false, "Print out information about the declared and requested Reporters");
53  params.addParam<bool>(
54  "show_mesh_generators", false, "Print out the mesh generators being executed");
55 
57  print_on.addAvailableFlags(EXEC_TRANSFER);
58  print_on.addAvailableFlags(EXEC_FAILED);
59  print_on.addAvailableFlags(EXEC_ALWAYS);
60  params.addParam<ExecFlagEnum>(
61  "show_execution_order",
62  print_on,
63  "Print more information about the order of execution during calculations");
64  params.addDeprecatedParam<bool>(
65  "pid_aux",
66  "Add a AuxVariable named \"pid\" that shows the processors and partitioning",
67  "pid_aux is deprecated, use output_process_domains");
68  params.addParam<bool>(
69  "output_process_domains",
70  false,
71  "Add a AuxVariable named \"pid\" that shows the partitioning for each process");
72  params.addParam<bool>(
73  "show_functors", false, "Whether to print information about the functors in the problem");
74  params.addParam<MultiMooseEnum>(
75  "show_block_restriction",
77  "Print out active objects like variables supplied for each block.");
78  params.addParam<bool>(
79  "error_on_residual_nan",
80  false,
81  "This option applies only to dbg and devel modes. If enabled, residual contributions are "
82  "checked for NaN or Inf values; if found, an error is reported.");
83 
84  params.addClassDescription("Adds various debugging type output to the simulation system.");
85 
86  return params;
87 }
88 
90 {
91  _awh.showActionDependencies(getParam<bool>("show_action_dependencies"));
92  _awh.showActions(getParam<bool>("show_actions"));
93  _awh.showParser(getParam<bool>("show_parser"));
94  _awh.mooseApp().getMeshGeneratorSystem().setVerbose(getParam<bool>("show_mesh_generators"));
95 }
96 
97 void
99 {
100  // Material properties
101  if (_pars.get<bool>("show_material_props"))
102  {
103  const std::string type = "MaterialPropertyDebugOutput";
104  auto params = _factory.getValidParams(type);
105  _problem->addOutput(type, "_moose_material_property_debug_output", params);
106  }
107 
108  // Variable residual norms
109  if (_pars.get<bool>("show_var_residual_norms"))
110  {
111  const std::string type = "VariableResidualNormsDebugOutput";
112  auto params = _factory.getValidParams(type);
113  // Add one for every nonlinear system
114  for (const auto & sys_name : _problem->getNonlinearSystemNames())
115  {
116  params.set<NonlinearSystemName>("nl_sys") = sys_name;
117  _problem->addOutput(type, "_moose_variable_residual_norms_debug_output_" + sys_name, params);
118  }
119  }
120 
121  // Top residuals
122  if (_pars.get<unsigned int>("show_top_residuals") > 0)
123  {
124  const std::string type = "TopResidualDebugOutput";
125  auto params = _factory.getValidParams(type);
126  params.set<unsigned int>("num_residuals") = _pars.get<unsigned int>("show_top_residuals");
127  _problem->addOutput(type, "_moose_top_residual_debug_output", params);
128  }
129 
130  // Print full names of mesh meta data
131  if (getParam<bool>("show_mesh_meta_data"))
132  {
133  _console << "Mesh meta data:\n";
134  for (auto it = _app.getRestartableDataMapBegin(); it != _app.getRestartableDataMapEnd(); ++it)
135  if (it->first == MooseApp::MESH_META_DATA)
136  for (auto & data : it->second.first)
137  _console << " " << data.name() << std::endl;
138  }
139 
140  // Print Reporter information
141  if (getParam<bool>("show_reporters"))
142  {
143  const std::string type = "ReporterDebugOutput";
144  auto params = _factory.getValidParams(type);
145  _problem->addOutput(type, "_moose_reporter_debug_output", params);
146  }
147 
148  // Print execution information in all loops
149  if (parameters().isParamSetByUser("show_execution_order"))
150  _problem->setExecutionPrinting(getParam<ExecFlagEnum>("show_execution_order"));
151 
152  // Add pid aux
153  if (getParam<bool>("output_process_domains") ||
154  (isParamValid("pid_aux") && getParam<bool>("pid_aux")))
155  {
156  if (_problem->hasVariable("pid"))
157  paramError("output_process_domains", "Variable with the name \"pid\" already exists");
158 
159  auto fe_type = FEType(CONSTANT, MONOMIAL);
161  auto var_params = _factory.getValidParams(type);
162  _problem->addAuxVariable(type, "pid", var_params);
163 
164  InputParameters params = _factory.getValidParams("ProcessorIDAux");
165  params.set<AuxVariableName>("variable") = "pid";
166  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_BEGIN};
167  _problem->addAuxKernel("ProcessorIDAux", "pid_aux", params);
168  }
169 
170  // Add functor output
171  if (getParam<bool>("show_functors"))
172  _problem->setFunctorOutput(getParam<bool>("show_functors"));
173 
174  // Add chain control data output
175  if (getParam<bool>("show_chain_control_data"))
176  _problem->setChainControlDataOutput(true);
177 
178  // Block-restriction
179  const MultiMooseEnum & block_restriction_scope =
180  _pars.get<MultiMooseEnum>("show_block_restriction");
181  if (block_restriction_scope.isValid() && !block_restriction_scope.contains("none"))
182  {
183  const std::string type = "BlockRestrictionDebugOutput";
184  auto params = _factory.getValidParams(type);
185  params.set<MultiMooseEnum>("scope") = block_restriction_scope;
186  _problem->addOutput(type, "_moose_block_restriction_debug_output", params);
187  }
188 
189  // Controllable output
190  if (getParam<bool>("show_controllable"))
191  {
192  const std::string type = "ControlOutput";
193  auto params = _factory.getValidParams(type);
194  _problem->addOutput(type, "_moose_controllable_debug_output", params);
195  }
196 
197  // Enable residual NaN/Inf-checking
198  if (getParam<bool>("error_on_residual_nan"))
199  {
200 #ifdef NDEBUG
201  mooseError("The parameter 'error_on_residual_nan' may only be set to 'true' for 'dbg' and "
202  "'devel' modes.");
203 #else
204  _problem->setCheckResidualForNans(true);
205 #endif
206  }
207 }
const ExecFlagType EXEC_TRANSFER
Definition: Moose.C:55
const ExecFlagType EXEC_FAILED
Definition: Moose.C:48
A MultiMooseEnum object to hold "execute_on" flags.
Definition: ExecFlagEnum.h:21
void setVerbose(const bool verbose)
Set the verbose flag.
auto getRestartableDataMapBegin()
Iterator based access to the extra RestartableDataMap objects; see Checkpoint.C for use case...
Definition: MooseApp.h:1053
const InputParameters & _pars
The object&#39;s parameters.
Definition: MooseBase.h:394
void addDeprecatedParam(const std::string &name, const T &value, const std::string &doc_string, const std::string &deprecation_message)
MooseApp & mooseApp()
ActionWarehouse & _awh
Reference to ActionWarehouse where we store object build by actions.
Definition: Action.h:169
void paramError(const std::string &param, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition: MooseBase.h:467
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
Combine two vector parameters into a single vector of pairs.
Factory & _factory
The Factory associated with the MooseApp.
static const RestartableDataMapName MESH_META_DATA
Definition: MooseApp.h:135
virtual bool isValid() const override
IsValid.
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:131
virtual void act() override
Method to add objects to the simulation or perform other setup tasks.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
void showActions(bool state=true)
This method sets a Boolean which is used to show information about action execution of various wareho...
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
void showActionDependencies(bool state=true)
This method sets a Boolean which is used to print information about action dependencies before variou...
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
const ExecFlagType EXEC_ALWAYS
Definition: Moose.C:51
registerMooseAction("MooseApp", SetupDebugAction, "add_output")
Base class for actions.
Definition: Action.h:34
SetupDebugAction(const InputParameters &parameters)
ExecFlagEnum getDefaultExecFlagEnum()
Definition: MooseUtils.C:961
bool contains(const std::string &value) const
Methods for seeing if a value is set in the MultiMooseEnum.
CONSTANT
void showParser(bool state=true)
This method sets a Boolean which is used to show debugging information when actions are inserted in t...
static InputParameters validParams()
Definition: Action.C:26
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition: Moose.C:37
const std::string & type() const
Get the type of this class.
Definition: MooseBase.h:93
static std::string variableType(const libMesh::FEType &fe_type, const bool is_fv=false, const bool is_array=false)
Determines a variable type.
MooseApp & _app
The MOOSE application this is associated with.
Definition: MooseBase.h:385
MONOMIAL
auto getRestartableDataMapEnd()
Definition: MooseApp.h:1055
static MultiMooseEnum getScopes(std::string default_scopes="")
Get the supported scopes of output (e.g., variables, etc.)
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition: MooseBase.h:281
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump...
std::shared_ptr< FEProblemBase > & _problem
Convenience reference to a problem this action works on.
Definition: Action.h:178
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object...
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition: MooseBase.h:209
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type...
MeshGeneratorSystem & getMeshGeneratorSystem()
Gets the system that manages the MeshGenerators.
Definition: MooseApp.h:860
static InputParameters validParams()
bool isParamSetByUser(const std::string &name) const
Test if the supplied parameter is set by a user, as opposed to not set or set to default.
Definition: MooseBase.h:215
const ExecFlagType EXEC_INITIAL
Definition: Moose.C:30