www.mooseframework.org
EqualGradientLagrangeInterface.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 
12 // MOOSE includes
13 #include "MooseVariable.h"
14 
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<InterfaceKernel>();
22  params.addClassDescription("Enforce componentwise gradient continuity between two different "
23  "variables across a subdomain boundary using a Lagrange multiplier");
24  params.addRequiredParam<unsigned int>("component", "Gradient component to constrain");
25  params.addCoupledVar("lambda",
26  "The gradient constrained variable on this side of the interface.");
27  return params;
28 }
29 
31  : InterfaceKernel(parameters),
32  _component(getParam<unsigned int>("component")),
33  _lambda(getVar("lambda", 0)->sln()),
34  _lambda_jvar(getVar("lambda", 0)->number())
35 {
36 }
37 
38 Real
40 {
41  switch (type)
42  {
43  case Moose::Element:
44  return _lambda[_qp] * _grad_test[_i][_qp](_component);
45 
46  case Moose::Neighbor:
47  return -_lambda[_qp] * _grad_test_neighbor[_i][_qp](_component);
48  }
49 
50  mooseError("Internal error.");
51 }
52 
53 Real EqualGradientLagrangeInterface::computeQpJacobian(Moose::DGJacobianType /*type*/)
54 {
55  return 0.0;
56 }
57 
58 Real
60  unsigned int jvar)
61 {
62  if (jvar != _lambda_jvar)
63  return 0.0;
64 
65  // lambda is only solved on the element side
66  switch (type)
67  {
68  case Moose::ElementElement:
69  return _phi[_j][_qp] * _grad_test[_i][_qp](_component);
70 
71  case Moose::NeighborElement:
72  return -_phi[_j][_qp] * _grad_test_neighbor[_i][_qp](_component);
73 
74  default:
75  return 0.0;
76  }
77 }
EqualGradientLagrangeInterface
InterfaceKernel to enforce a Lagrange-Multiplier based componentwise continuity of a variable gradien...
Definition: EqualGradientLagrangeInterface.h:23
EqualGradientLagrangeInterface::EqualGradientLagrangeInterface
EqualGradientLagrangeInterface(const InputParameters &parameters)
Definition: EqualGradientLagrangeInterface.C:30
EqualGradientLagrangeInterface::computeQpJacobian
virtual Real computeQpJacobian(Moose::DGJacobianType type) override
Definition: EqualGradientLagrangeInterface.C:53
EqualGradientLagrangeInterface::computeQpResidual
virtual Real computeQpResidual(Moose::DGResidualType type) override
Definition: EqualGradientLagrangeInterface.C:39
EqualGradientLagrangeInterface::_component
const unsigned int _component
Definition: EqualGradientLagrangeInterface.h:33
EqualGradientLagrangeInterface::_lambda_jvar
const unsigned int _lambda_jvar
Definition: EqualGradientLagrangeInterface.h:38
EqualGradientLagrangeInterface::_lambda
const VariableValue & _lambda
Lagrange multiplier.
Definition: EqualGradientLagrangeInterface.h:36
validParams< EqualGradientLagrangeInterface >
InputParameters validParams< EqualGradientLagrangeInterface >()
Definition: EqualGradientLagrangeInterface.C:19
EqualGradientLagrangeInterface.h
registerMooseObject
registerMooseObject("PhaseFieldApp", EqualGradientLagrangeInterface)
EqualGradientLagrangeInterface::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(Moose::DGJacobianType type, unsigned int jvar) override
Definition: EqualGradientLagrangeInterface.C:59