www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
XFEMSingleVariableConstraint Class Reference

#include <XFEMSingleVariableConstraint.h>

Inheritance diagram for XFEMSingleVariableConstraint:
[legend]

Public Member Functions

 XFEMSingleVariableConstraint (const InputParameters &parameters)
 
virtual ~XFEMSingleVariableConstraint ()
 

Protected Member Functions

virtual void reinitConstraintQuadrature (const ElementPairInfo &element_pair_info) override
 
virtual Real computeQpResidual (Moose::DGResidualType type) override
 
virtual Real computeQpJacobian (Moose::DGJacobianType type) override
 

Protected Attributes

Point _interface_normal
 Vector normal to the internal interface. More...
 
Real _alpha
 Stabilization parameter in Nitsche's formulation and penalty factor in the Penalty Method. More...
 
const Function & _jump
 Change in variable value at the interface. More...
 
const Function & _jump_flux
 Change in flux of variable value at the interface. More...
 
bool _use_penalty
 Use penalty formulation. More...
 
std::shared_ptr< XFEM_xfem
 Pointer to the XFEM controller object. More...
 

Detailed Description

Definition at line 26 of file XFEMSingleVariableConstraint.h.

Constructor & Destructor Documentation

◆ XFEMSingleVariableConstraint()

XFEMSingleVariableConstraint::XFEMSingleVariableConstraint ( const InputParameters &  parameters)

Definition at line 48 of file XFEMSingleVariableConstraint.C.

49  : ElemElemConstraint(parameters),
50  _alpha(getParam<Real>("alpha")),
51  _jump(getFunction("jump")),
52  _jump_flux(getFunction("jump_flux")),
53  _use_penalty(getParam<bool>("use_penalty"))
54 {
55  _xfem = std::dynamic_pointer_cast<XFEM>(_fe_problem.getXFEM());
56  if (_xfem == nullptr)
57  mooseError("Problem casting to XFEM in XFEMSingleVariableConstraint");
58 
59  const UserObject * uo =
60  &(_fe_problem.getUserObjectBase(getParam<UserObjectName>("geometric_cut_userobject")));
61 
62  if (dynamic_cast<const GeometricCutUserObject *>(uo) == nullptr)
63  mooseError("UserObject casting to GeometricCutUserObject in XFEMSingleVariableConstraint");
64 
65  _interface_id = _xfem->getGeometricCutID(dynamic_cast<const GeometricCutUserObject *>(uo));
66 }

◆ ~XFEMSingleVariableConstraint()

XFEMSingleVariableConstraint::~XFEMSingleVariableConstraint ( )
virtual

Definition at line 68 of file XFEMSingleVariableConstraint.C.

68 {}

Member Function Documentation

◆ computeQpJacobian()

Real XFEMSingleVariableConstraint::computeQpJacobian ( Moose::DGJacobianType  type)
overrideprotectedvirtual

Definition at line 116 of file XFEMSingleVariableConstraint.C.

117 {
118  Real r = 0;
119 
120  switch (type)
121  {
122  case Moose::ElementElement:
123  if (!_use_penalty)
124  r += -0.5 * _grad_phi[_j][_qp] * _interface_normal * _test[_i][_qp] -
125  _phi[_j][_qp] * 0.5 * _grad_test[_i][_qp] * _interface_normal;
126  r += _alpha * _phi[_j][_qp] * _test[_i][_qp];
127  break;
128 
129  case Moose::ElementNeighbor:
130  if (!_use_penalty)
131  r += -0.5 * _grad_phi_neighbor[_j][_qp] * _interface_normal * _test[_i][_qp] +
132  _phi_neighbor[_j][_qp] * 0.5 * _grad_test[_i][_qp] * _interface_normal;
133  r -= _alpha * _phi_neighbor[_j][_qp] * _test[_i][_qp];
134  break;
135 
136  case Moose::NeighborElement:
137  if (!_use_penalty)
138  r += 0.5 * _grad_phi[_j][_qp] * _interface_normal * _test_neighbor[_i][_qp] -
139  _phi[_j][_qp] * 0.5 * _grad_test_neighbor[_i][_qp] * _interface_normal;
140  r -= _alpha * _phi[_j][_qp] * _test_neighbor[_i][_qp];
141  break;
142 
143  case Moose::NeighborNeighbor:
144  if (!_use_penalty)
145  r += 0.5 * _grad_phi_neighbor[_j][_qp] * _interface_normal * _test_neighbor[_i][_qp] +
146  _phi_neighbor[_j][_qp] * 0.5 * _grad_test_neighbor[_i][_qp] * _interface_normal;
147  r += _alpha * _phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
148  break;
149  }
150 
151  return r;
152 }

◆ computeQpResidual()

Real XFEMSingleVariableConstraint::computeQpResidual ( Moose::DGResidualType  type)
overrideprotectedvirtual

Definition at line 78 of file XFEMSingleVariableConstraint.C.

79 {
80  Real r = 0;
81 
82  switch (type)
83  {
84  case Moose::Element:
85  if (!_use_penalty)
86  {
87  r -= (0.5 * _grad_u[_qp] * _interface_normal +
88  0.5 * _grad_u_neighbor[_qp] * _interface_normal) *
89  _test[_i][_qp];
90  r -= (_u[_qp] - _u_neighbor[_qp]) * 0.5 * _grad_test[_i][_qp] * _interface_normal;
91  r += 0.5 * _grad_test[_i][_qp] * _interface_normal * _jump.value(_t, _u[_qp]);
92  }
93  r += 0.5 * _test[_i][_qp] * _jump_flux.value(_t, _u[_qp]);
94  r += _alpha * (_u[_qp] - _u_neighbor[_qp] - _jump.value(_t, _u[_qp])) * _test[_i][_qp];
95  break;
96 
97  case Moose::Neighbor:
98  if (!_use_penalty)
99  {
100  r += (0.5 * _grad_u[_qp] * _interface_normal +
101  0.5 * _grad_u_neighbor[_qp] * _interface_normal) *
102  _test_neighbor[_i][_qp];
103  r -= (_u[_qp] - _u_neighbor[_qp]) * 0.5 * _grad_test_neighbor[_i][_qp] * _interface_normal;
104  r += 0.5 * _grad_test_neighbor[_i][_qp] * _interface_normal *
105  _jump.value(_t, _u_neighbor[_qp]);
106  }
107  r += 0.5 * _test_neighbor[_i][_qp] * _jump_flux.value(_t, _u_neighbor[_qp]);
108  r -= _alpha * (_u[_qp] - _u_neighbor[_qp] - _jump.value(_t, _u_neighbor[_qp])) *
109  _test_neighbor[_i][_qp];
110  break;
111  }
112  return r;
113 }

◆ reinitConstraintQuadrature()

void XFEMSingleVariableConstraint::reinitConstraintQuadrature ( const ElementPairInfo &  element_pair_info)
overrideprotectedvirtual

Definition at line 71 of file XFEMSingleVariableConstraint.C.

72 {
73  _interface_normal = element_pair_info._elem1_normal;
74  ElemElemConstraint::reinitConstraintQuadrature(element_pair_info);
75 }

Member Data Documentation

◆ _alpha

Real XFEMSingleVariableConstraint::_alpha
protected

Stabilization parameter in Nitsche's formulation and penalty factor in the Penalty Method.

Definition at line 44 of file XFEMSingleVariableConstraint.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _interface_normal

Point XFEMSingleVariableConstraint::_interface_normal
protected

Vector normal to the internal interface.

Definition at line 40 of file XFEMSingleVariableConstraint.h.

Referenced by computeQpJacobian(), computeQpResidual(), and reinitConstraintQuadrature().

◆ _jump

const Function& XFEMSingleVariableConstraint::_jump
protected

Change in variable value at the interface.

Definition at line 47 of file XFEMSingleVariableConstraint.h.

Referenced by computeQpResidual().

◆ _jump_flux

const Function& XFEMSingleVariableConstraint::_jump_flux
protected

Change in flux of variable value at the interface.

Definition at line 50 of file XFEMSingleVariableConstraint.h.

Referenced by computeQpResidual().

◆ _use_penalty

bool XFEMSingleVariableConstraint::_use_penalty
protected

Use penalty formulation.

Definition at line 53 of file XFEMSingleVariableConstraint.h.

Referenced by computeQpJacobian(), and computeQpResidual().

◆ _xfem

std::shared_ptr<XFEM> XFEMSingleVariableConstraint::_xfem
protected

Pointer to the XFEM controller object.

Definition at line 56 of file XFEMSingleVariableConstraint.h.

Referenced by XFEMSingleVariableConstraint().


The documentation for this class was generated from the following files:
XFEMSingleVariableConstraint::_xfem
std::shared_ptr< XFEM > _xfem
Pointer to the XFEM controller object.
Definition: XFEMSingleVariableConstraint.h:56
XFEMSingleVariableConstraint::_alpha
Real _alpha
Stabilization parameter in Nitsche's formulation and penalty factor in the Penalty Method.
Definition: XFEMSingleVariableConstraint.h:44
XFEMSingleVariableConstraint::_jump
const Function & _jump
Change in variable value at the interface.
Definition: XFEMSingleVariableConstraint.h:47
XFEMSingleVariableConstraint::_jump_flux
const Function & _jump_flux
Change in flux of variable value at the interface.
Definition: XFEMSingleVariableConstraint.h:50
XFEMSingleVariableConstraint::_interface_normal
Point _interface_normal
Vector normal to the internal interface.
Definition: XFEMSingleVariableConstraint.h:40
XFEMSingleVariableConstraint::_use_penalty
bool _use_penalty
Use penalty formulation.
Definition: XFEMSingleVariableConstraint.h:53