14#include "libmesh/dof_map.h"
24 "The name of the variable to compute the residual for");
25 MooseEnum norm_type(
"l_1=0 l_2=1 l_inf=2");
26 norm_type.addDocumentation(
"l_1",
"l-1 norm");
27 norm_type.addDocumentation(
"l_2",
"l-2 norm");
28 norm_type.addDocumentation(
"l_inf",
"l-infinity norm");
33 "If set to true, correct the mesh size bias associated with the selected norm. For l-1, "
34 "divide by N, the number of block-restricted DoFs for the variable. For l-2, divide by "
35 "sqrt(N). For l-infinity, no correction needs to be made.");
36 params.
addParam<
bool>(
"include_scaling_factor",
38 "If set to true, include the residual scaling factor in the norm; "
39 "otherwise, divide by the scaling factor");
41 params.
addClassDescription(
"Computes a discrete norm for a block-restricted variable residual.");
48 _var(_fe_problem.getVariable(_tid,
49 getParam<VariableName>(
"variable"),
50 Moose::VarKindType::VAR_SOLVER,
51 Moose::VarFieldType::VAR_FIELD_STANDARD)),
53 _correct_mesh_bias(getParam<bool>(
"correct_mesh_bias")),
54 _include_scaling_factor(getParam<bool>(
"include_scaling_factor")),
55 _nl_residual_vector(_fe_problem.getNonlinearSystemBase(_sys.number()).RHS())
88 _local_dof_indices.insert(pps._local_dof_indices.begin(), pps._local_dof_indices.end());
95 auto receive_functor = [&](processor_id_type ,
const std::vector<dof_id_type> & indices)
registerMooseObject("MooseApp", DiscreteVariableResidualNorm)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Real PostprocessorValue
various MOOSE typedefs
Computes a discrete norm for a block-restricted variable residual.
DiscreteVariableResidualNorm(const InputParameters ¶meters)
virtual void threadJoin(const UserObject &y) override
Must override.
const bool _correct_mesh_bias
If true, correct mesh-size bias in norm.
NumericVector< Number > & _nl_residual_vector
Nonlinear residual vector.
static InputParameters validParams()
virtual PostprocessorValue getValue() const override
This will get called to actually grab the final value the postprocessor has calculated.
virtual void initialize() override
Called before execute() is ever called so that data can be cleared.
std::set< dof_id_type > _local_dof_indices
Local DoF indices for the variable, block-restricted.
const bool _include_scaling_factor
If false, divide by residual scaling factor.
NormType
Type of discrete norm.
std::map< processor_id_type, std::vector< dof_id_type > > _nonlocal_dof_indices_map
Non-local DoF indices map, indexed by the owning PID.
virtual void execute() override
Execute method.
MooseVariableFieldBase & _var
The variable we compute the residual for.
const NormType _norm_type
Type of norm to compute.
virtual void finalize() override
This is called after execute() and after threadJoin()! This is probably where you want to do MPI comm...
Real _norm
The computed residual norm.
static InputParameters validParams()
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
const libMesh::DofMap & dofMap() const
The DofMap associated with the system this variable is in.
void scalingFactor(const std::vector< Real > &factor)
Set the scaling factor for this variable.
void gatherSum(T &value)
Gather the parallel sum of the variable passed in.
Base class for user-specific data.
processor_id_type dof_owner(const dof_id_type dof) const
bool local_index(dof_id_type dof_index) const
virtual Real subset_l1_norm(const std::set< numeric_index_type > &indices) const
virtual Real subset_l2_norm(const std::set< numeric_index_type > &indices) const
virtual Real subset_linfty_norm(const std::set< numeric_index_type > &indices) const
const Parallel::Communicator & _communicator
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...