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 "ADDGDiffusion.h" 11 : 12 : // MOOSE includes 13 : #include "MooseVariableFE.h" 14 : 15 : #include "libmesh/utility.h" 16 : 17 : registerMooseObject("MooseApp", ADDGDiffusion); 18 : 19 : InputParameters 20 14376 : ADDGDiffusion::validParams() 21 : { 22 14376 : InputParameters params = ADDGKernel::validParams(); 23 : // See header file for sigma and epsilon 24 14376 : params.addRequiredParam<Real>("sigma", "sigma"); 25 14376 : params.addRequiredParam<Real>("epsilon", "epsilon"); 26 43128 : params.addParam<MaterialPropertyName>( 27 28752 : "diff", 1., "The diffusion (or thermal conductivity or viscosity) coefficient."); 28 14376 : params.addClassDescription("DG kernel for diffusion operator"); 29 14376 : return params; 30 0 : } 31 : 32 59 : ADDGDiffusion::ADDGDiffusion(const InputParameters & parameters) 33 : : ADDGKernel(parameters), 34 59 : _epsilon(getParam<Real>("epsilon")), 35 59 : _sigma(getParam<Real>("sigma")), 36 59 : _diff(getADMaterialProperty<Real>("diff")), 37 118 : _diff_neighbor(getNeighborADMaterialProperty<Real>("diff")) 38 : { 39 59 : } 40 : 41 : ADReal 42 134448 : ADDGDiffusion::computeQpResidual(Moose::DGResidualType type) 43 : { 44 134448 : ADReal r = 0.0; 45 : 46 134448 : const int elem_b_order = std::max(libMesh::Order(1), _var.order()); 47 : const Real h_elem = 48 134448 : _current_elem_volume / _current_side_volume * 1.0 / Utility::pow<2>(elem_b_order); 49 : 50 134448 : switch (type) 51 : { 52 67224 : case Moose::Element: 53 134448 : r -= 0.5 * 54 134448 : (_diff[_qp] * _grad_u[_qp] * _normals[_qp] + 55 268896 : _diff_neighbor[_qp] * _grad_u_neighbor[_qp] * _normals[_qp]) * 56 134448 : _test[_i][_qp]; 57 134448 : r += _epsilon * 0.5 * (_u[_qp] - _u_neighbor[_qp]) * _diff[_qp] * _grad_test[_i][_qp] * 58 134448 : _normals[_qp]; 59 67224 : r += _sigma / h_elem * (_u[_qp] - _u_neighbor[_qp]) * _test[_i][_qp]; 60 67224 : break; 61 : 62 67224 : case Moose::Neighbor: 63 134448 : r += 0.5 * 64 134448 : (_diff[_qp] * _grad_u[_qp] * _normals[_qp] + 65 268896 : _diff_neighbor[_qp] * _grad_u_neighbor[_qp] * _normals[_qp]) * 66 134448 : _test_neighbor[_i][_qp]; 67 134448 : r += _epsilon * 0.5 * (_u[_qp] - _u_neighbor[_qp]) * _diff_neighbor[_qp] * 68 134448 : _grad_test_neighbor[_i][_qp] * _normals[_qp]; 69 67224 : r -= _sigma / h_elem * (_u[_qp] - _u_neighbor[_qp]) * _test_neighbor[_i][_qp]; 70 67224 : break; 71 : } 72 : 73 268896 : return r; 74 0 : }