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 "HFEMTrialJump.h" 11 : 12 : registerMooseObject("MooseApp", HFEMTrialJump); 13 : 14 : InputParameters 15 3130 : HFEMTrialJump::validParams() 16 : { 17 3130 : InputParameters params = DGKernel::validParams(); 18 12520 : params.addRequiredCoupledVar("interior_variable", "interior variable to find jumps in"); 19 3130 : params.addClassDescription("Imposes constraints for HFEM with side-discontinuous variables."); 20 3130 : return params; 21 0 : } 22 : 23 36 : HFEMTrialJump::HFEMTrialJump(const InputParameters & parameters) 24 : : DGKernel(parameters), 25 36 : _interior_var(*getVar("interior_variable", 0)), 26 36 : _interior(_is_implicit ? _interior_var.sln() : _interior_var.slnOld()), 27 36 : _interior_neighbor(_is_implicit ? _interior_var.slnNeighbor() : _interior_var.slnOldNeighbor()), 28 36 : _phi_interior(_interior_var.phiFace()), 29 36 : _phi_interior_neighbor(_assembly.phiFaceNeighbor(_interior_var)), 30 36 : _test_interior(_interior_var.phiFace()), 31 108 : _interior_id(coupled("interior_variable")) 32 : { 33 36 : } 34 : 35 : Real 36 1084224 : HFEMTrialJump::computeQpResidual(Moose::DGResidualType type) 37 : { 38 : // Use normal vector at qp 0 to make solution depend on geometry 39 : // (well, geometry and quadrature rule, with curved boundaries...) 40 : // rather than element numbering 41 1084224 : const Real sign = (_normals[0] > Point()) ? 1 : -1; 42 : 43 1084224 : switch (type) 44 : { 45 542112 : case Moose::Element: 46 542112 : return sign * _test[_i][_qp] * (_interior_neighbor[_qp] - _interior[_qp]); 47 : break; 48 : 49 542112 : case Moose::Neighbor: 50 542112 : return 0; 51 : break; 52 : } 53 0 : return 0; 54 : } 55 : 56 : Real 57 238080 : HFEMTrialJump::computeQpOffDiagJacobian(Moose::DGJacobianType type, unsigned int jvar) 58 : { 59 238080 : if (jvar != _interior_id) 60 0 : return 0; 61 : 62 238080 : const Real sign = (_normals[0] > Point()) ? 1 : -1; 63 : 64 238080 : switch (type) 65 : { 66 59520 : case Moose::ElementElement: 67 59520 : return -sign * _test[_i][_qp] * _phi_interior[_j][_qp]; 68 : 69 59520 : case Moose::NeighborElement: 70 59520 : return 0; 71 : 72 59520 : case Moose::ElementNeighbor: 73 59520 : return sign * _test[_i][_qp] * _phi_interior_neighbor[_j][_qp]; 74 : 75 59520 : case Moose::NeighborNeighbor: 76 59520 : return 0; 77 : 78 0 : default: 79 0 : break; 80 : } 81 : 82 0 : return 0; 83 : }