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 3140 : DebugResidualAux::validParams() 19 : { 20 3140 : InputParameters params = AuxKernel::validParams(); 21 6280 : params.addClassDescription( 22 : "Populate an auxiliary variable with the residual contribution of a variable."); 23 9420 : params.addRequiredParam<NonlinearVariableName>("debug_variable", 24 : "The variable that is being debugged."); 25 3140 : return params; 26 0 : } 27 : 28 43 : DebugResidualAux::DebugResidualAux(const InputParameters & parameters) 29 : : AuxKernel(parameters), 30 43 : _debug_var(_nl_sys.getVariable(_tid, getParam<NonlinearVariableName>("debug_variable"))), 31 86 : _residual_copy(_nl_sys.residualGhosted()) 32 : { 33 : // Check that variable order/family match aux_variable order/family 34 86 : auto var_order = Utility::string_to_enum<Order>(_var.getParam<MooseEnum>("order")); 35 86 : auto debug_order = Utility::string_to_enum<Order>(_debug_var.getParam<MooseEnum>("order")); 36 86 : auto var_family = Utility::string_to_enum<FEFamily>(_var.getParam<MooseEnum>("family")); 37 86 : auto debug_family = Utility::string_to_enum<FEFamily>(_debug_var.getParam<MooseEnum>("family")); 38 43 : if (var_order != debug_order || var_family != debug_family) 39 9 : paramError("variable", 40 : "A mismatch was found between family and order parameters for ", 41 3 : _var.name(), 42 : " and ", 43 3 : _debug_var.name()); 44 40 : if (!_nodal && debug_order > 0) 45 0 : mooseWarning("Residual output is approximate for variable order " + 46 0 : Moose::stringify(debug_order)); 47 40 : } 48 : 49 : Real 50 551943 : DebugResidualAux::computeValue() 51 : { 52 551943 : if (_nodal) 53 : { 54 494343 : dof_id_type dof = _current_node->dof_number(_nl_sys.number(), _debug_var.number(), 0); 55 494343 : return _residual_copy(dof); 56 : } 57 : else 58 : { 59 57600 : dof_id_type dof = _current_elem->dof_number(_nl_sys.number(), _debug_var.number(), 0); 60 57600 : return _residual_copy(dof); 61 : } 62 : }