Line data Source code
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 "DebugResidualAux.h" 11 : #include "NonlinearSystem.h" 12 : 13 : #include "libmesh/string_to_enum.h" 14 : 15 : registerMooseObject("MooseApp", DebugResidualAux); 16 : 17 : InputParameters 18 14353 : DebugResidualAux::validParams() 19 : { 20 14353 : InputParameters params = AuxKernel::validParams(); 21 14353 : params.addClassDescription( 22 : "Populate an auxiliary variable with the residual contribution of a variable."); 23 14353 : params.addRequiredParam<NonlinearVariableName>("debug_variable", 24 : "The variable that is being debugged."); 25 14353 : return params; 26 0 : } 27 : 28 48 : DebugResidualAux::DebugResidualAux(const InputParameters & parameters) 29 : : AuxKernel(parameters), 30 48 : _debug_var(_nl_sys.getVariable(_tid, getParam<NonlinearVariableName>("debug_variable"))), 31 96 : _residual_copy(_nl_sys.residualGhosted()) 32 : { 33 : // Check that variable order/family match aux_variable order/family 34 48 : auto var_order = Utility::string_to_enum<Order>(_var.getParam<MooseEnum>("order")); 35 48 : auto debug_order = Utility::string_to_enum<Order>(_debug_var.getParam<MooseEnum>("order")); 36 48 : auto var_family = Utility::string_to_enum<FEFamily>(_var.getParam<MooseEnum>("family")); 37 48 : auto debug_family = Utility::string_to_enum<FEFamily>(_debug_var.getParam<MooseEnum>("family")); 38 48 : if (var_order != debug_order || var_family != debug_family) 39 4 : mooseError("A mismatch was found between family and order parameters for ", 40 4 : _var.name(), 41 : " and ", 42 4 : _debug_var.name(), 43 : " in ", 44 : this->getParam<std::string>("_object_name")); 45 44 : if (!_nodal && debug_order > 0) 46 0 : mooseWarning("Residual output is approximate for variable order " + 47 0 : Moose::stringify(debug_order)); 48 44 : } 49 : 50 : Real 51 629016 : DebugResidualAux::computeValue() 52 : { 53 629016 : if (_nodal) 54 : { 55 561816 : dof_id_type dof = _current_node->dof_number(_nl_sys.number(), _debug_var.number(), 0); 56 561816 : return _residual_copy(dof); 57 : } 58 : else 59 : { 60 67200 : dof_id_type dof = _current_elem->dof_number(_nl_sys.number(), _debug_var.number(), 0); 61 67200 : return _residual_copy(dof); 62 : } 63 : }