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 14336 : HFEMTrialJump::validParams() 16 : { 17 14336 : InputParameters params = DGKernel::validParams(); 18 14336 : params.addRequiredCoupledVar("interior_variable", "interior variable to find jumps in"); 19 14336 : params.addClassDescription("Imposes constraints for HFEM with side-discontinuous variables."); 20 14336 : return params; 21 0 : } 22 : 23 37 : HFEMTrialJump::HFEMTrialJump(const InputParameters & parameters) 24 : : DGKernel(parameters), 25 37 : _interior_var(*getVar("interior_variable", 0)), 26 37 : _interior(_is_implicit ? _interior_var.sln() : _interior_var.slnOld()), 27 37 : _interior_neighbor(_is_implicit ? _interior_var.slnNeighbor() : _interior_var.slnOldNeighbor()), 28 37 : _phi_interior(_interior_var.phiFace()), 29 37 : _phi_interior_neighbor(_assembly.phiFaceNeighbor(_interior_var)), 30 37 : _test_interior(_interior_var.phiFace()), 31 74 : _interior_id(coupled("interior_variable")) 32 : { 33 37 : } 34 : 35 : Real 36 1263744 : 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 1263744 : const Real sign = (_normals[0] > Point()) ? 1 : -1; 42 : 43 1263744 : switch (type) 44 : { 45 631872 : case Moose::Element: 46 631872 : return sign * _test[_i][_qp] * (_interior_neighbor[_qp] - _interior[_qp]); 47 : break; 48 : 49 631872 : case Moose::Neighbor: 50 631872 : return 0; 51 : break; 52 : } 53 0 : return 0; 54 : } 55 : 56 : Real 57 266880 : HFEMTrialJump::computeQpOffDiagJacobian(Moose::DGJacobianType type, unsigned int jvar) 58 : { 59 266880 : if (jvar != _interior_id) 60 0 : return 0; 61 : 62 266880 : const Real sign = (_normals[0] > Point()) ? 1 : -1; 63 : 64 266880 : switch (type) 65 : { 66 66720 : case Moose::ElementElement: 67 66720 : return -sign * _test[_i][_qp] * _phi_interior[_j][_qp]; 68 : 69 66720 : case Moose::NeighborElement: 70 66720 : return 0; 71 : 72 66720 : case Moose::ElementNeighbor: 73 66720 : return sign * _test[_i][_qp] * _phi_interior_neighbor[_j][_qp]; 74 : 75 66720 : case Moose::NeighborNeighbor: 76 66720 : return 0; 77 : 78 0 : default: 79 0 : break; 80 : } 81 : 82 0 : return 0; 83 : }