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 28706 : params.addClassDescription( 22 : "Populate an auxiliary variable with the residual contribution of a variable."); 23 43059 : 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 96 : auto var_order = Utility::string_to_enum<Order>(_var.getParam<MooseEnum>("order")); 35 96 : auto debug_order = Utility::string_to_enum<Order>(_debug_var.getParam<MooseEnum>("order")); 36 96 : auto var_family = Utility::string_to_enum<FEFamily>(_var.getParam<MooseEnum>("family")); 37 96 : 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 12 : paramError("variable", 40 : "A mismatch was found between family and order parameters for ", 41 4 : _var.name(), 42 : " and ", 43 4 : _debug_var.name()); 44 44 : if (!_nodal && debug_order > 0) 45 0 : mooseWarning("Residual output is approximate for variable order " + 46 0 : Moose::stringify(debug_order)); 47 44 : } 48 : 49 : Real 50 629016 : DebugResidualAux::computeValue() 51 : { 52 629016 : if (_nodal) 53 : { 54 561816 : dof_id_type dof = _current_node->dof_number(_nl_sys.number(), _debug_var.number(), 0); 55 561816 : return _residual_copy(dof); 56 : } 57 : else 58 : { 59 67200 : dof_id_type dof = _current_elem->dof_number(_nl_sys.number(), _debug_var.number(), 0); 60 67200 : return _residual_copy(dof); 61 : } 62 : }