www.mooseframework.org
XFEMEqualValueAtInterface.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
11 #include "FEProblem.h"
12 #include "GeometricCutUserObject.h"
13 #include "XFEM.h"
14 
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<ElemElemConstraint>();
22  params.addRequiredParam<Real>("alpha", "Penalty parameter in penalty formulation.");
23  params.addRequiredParam<Real>("value", "Prescribed value at the interface.");
24  params.addParam<UserObjectName>(
25  "geometric_cut_userobject",
26  "Name of GeometricCutUserObject associated with this constraint.");
27  params.addClassDescription("enforce a same value on both sides of the interface.");
28  return params;
29 }
30 
31 XFEMEqualValueAtInterface::XFEMEqualValueAtInterface(const InputParameters & parameters)
32  : ElemElemConstraint(parameters), _alpha(getParam<Real>("alpha")), _value(getParam<Real>("value"))
33 {
34  _xfem = std::dynamic_pointer_cast<XFEM>(_fe_problem.getXFEM());
35  if (_xfem == nullptr)
36  mooseError("Problem casting to XFEM in XFEMEqualValueAtInterface");
37 
38  const UserObject * uo =
39  &(_fe_problem.getUserObjectBase(getParam<UserObjectName>("geometric_cut_userobject")));
40 
41  if (dynamic_cast<const GeometricCutUserObject *>(uo) == nullptr)
42  mooseError("UserObject casting to GeometricCutUserObject in XFEMEqualValueAtInterface");
43 
44  _interface_id = _xfem->getGeometricCutID(dynamic_cast<const GeometricCutUserObject *>(uo));
45 }
46 
48 
49 void
50 XFEMEqualValueAtInterface::reinitConstraintQuadrature(const ElementPairInfo & element_pair_info)
51 {
52  ElemElemConstraint::reinitConstraintQuadrature(element_pair_info);
53 }
54 
55 Real
57 {
58  Real r = 0;
59 
60  switch (type)
61  {
62  case Moose::Element:
63  r += _alpha * (_u[_qp] - _value) * _test[_i][_qp];
64  break;
65 
66  case Moose::Neighbor:
67  r += _alpha * (_u_neighbor[_qp] - _value) * _test_neighbor[_i][_qp];
68  break;
69  }
70  return r;
71 }
72 
73 Real
75 {
76  Real r = 0;
77 
78  switch (type)
79  {
80  case Moose::ElementElement:
81  r += _alpha * _phi[_j][_qp] * _test[_i][_qp];
82  break;
83 
84  case Moose::NeighborNeighbor:
85  r += _alpha * _phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
86  break;
87 
88  default:
89  break;
90  }
91 
92  return r;
93 }
XFEMEqualValueAtInterface::computeQpJacobian
virtual Real computeQpJacobian(Moose::DGJacobianType type) override
Definition: XFEMEqualValueAtInterface.C:74
GeometricCutUserObject.h
XFEMEqualValueAtInterface::_value
Real _value
Value at the interface.
Definition: XFEMEqualValueAtInterface.h:38
XFEMEqualValueAtInterface::_xfem
std::shared_ptr< XFEM > _xfem
Pointer to the XFEM controller object.
Definition: XFEMEqualValueAtInterface.h:41
XFEMEqualValueAtInterface::computeQpResidual
virtual Real computeQpResidual(Moose::DGResidualType type) override
Definition: XFEMEqualValueAtInterface.C:56
XFEM.h
XFEMEqualValueAtInterface::_alpha
Real _alpha
Definition: XFEMEqualValueAtInterface.h:35
registerMooseObject
registerMooseObject("XFEMApp", XFEMEqualValueAtInterface)
XFEMEqualValueAtInterface::reinitConstraintQuadrature
virtual void reinitConstraintQuadrature(const ElementPairInfo &element_pair_info) override
Definition: XFEMEqualValueAtInterface.C:50
XFEMEqualValueAtInterface.h
XFEMEqualValueAtInterface::~XFEMEqualValueAtInterface
virtual ~XFEMEqualValueAtInterface()
Definition: XFEMEqualValueAtInterface.C:47
validParams< XFEMEqualValueAtInterface >
InputParameters validParams< XFEMEqualValueAtInterface >()
Definition: XFEMEqualValueAtInterface.C:19
XFEMEqualValueAtInterface
Definition: XFEMEqualValueAtInterface.h:21
XFEMEqualValueAtInterface::XFEMEqualValueAtInterface
XFEMEqualValueAtInterface(const InputParameters &parameters)
Definition: XFEMEqualValueAtInterface.C:31