https://mooseframework.inl.gov
Loading...
Searching...
No Matches
InterfaceKernelBase.C
Go to the documentation of this file.
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 "InterfaceKernelBase.h"
11
12// MOOSE includes
13#include "Assembly.h"
14#include "MooseVariableFE.h"
15#include "SystemBase.h"
16
17#include "libmesh/quadrature.h"
18
21{
25
26 params.addParam<bool>("use_displaced_mesh",
27 false,
28 "Whether or not this object should use the "
29 "displaced mesh for computation. Note that in "
30 "the case this is true but no displacements "
31 "are provided in the Mesh block the "
32 "undisplaced mesh will still be used.");
33 params.addParamNamesToGroup("use_displaced_mesh", "Advanced");
34
35 params.declareControllable("enable");
36 params.addRequiredCoupledVar("neighbor_var", "The variable on the other side of the interface.");
37 params.registerBase("InterfaceKernel");
38 params.registerSystemAttributeName("InterfaceKernel");
39 params.addParam<std::vector<AuxVariableName>>(
40 "save_in",
41 {},
42 "The name of auxiliary variables to save this Kernel's residual contributions to. "
43 " Everything about that variable must match everything about this variable (the "
44 "type, what blocks it's on, etc.)");
45 params.addParam<std::vector<AuxVariableName>>(
46 "diag_save_in",
47 {},
48 "The name of auxiliary variables to save this Kernel's diagonal Jacobian "
49 "contributions to. Everything about that variable must match everything "
50 "about this variable (the type, what blocks it's on, etc.)");
51
52 MultiMooseEnum save_in_var_side("m s");
54 "save_in_var_side",
55 save_in_var_side,
56 "This parameter must exist if save_in variables are specified and must have the same length "
57 "as save_in. This vector specifies whether the corresponding aux_var should save-in "
58 "residual contributions from the primary ('p') or secondary side ('s').");
60 "diag_save_in_var_side",
61 save_in_var_side,
62 "This parameter must exist if diag_save_in variables are specified and must have the same "
63 "length as diag_save_in. This vector specifies whether the corresponding aux_var should "
64 "save-in jacobian contributions from the primary ('p') or secondary side ('s').");
65 params.addParamNamesToGroup("diag_save_in save_in save_in_var_side diag_save_in_var_side",
66 "Residual and Jacobian debug output");
67
68 // InterfaceKernels always need one layer of ghosting.
69 params.addRelationshipManager("ElementSideNeighborLayers",
73 return params;
74}
75
77 : NeighborResidualObject(parameters),
78 BoundaryRestrictable(this, false), // false for _not_ nodal
80 TwoMaterialPropertyInterface(this, Moose::EMPTY_BLOCK_IDS, boundaryIDs()),
82 _current_elem(_assembly.elem()),
83 _current_elem_volume(_assembly.elemVolume()),
84 _neighbor_elem(_assembly.neighbor()),
85 _neighbor_elem_volume(_assembly.neighborVolume()),
86 _current_side(_assembly.side()),
87 _current_side_elem(_assembly.sideElem()),
88 _current_side_volume(_assembly.sideElemVolume()),
89 _coord_sys(_assembly.coordSystem()),
90 _q_point(_assembly.qPointsFace()),
91 _qrule(_assembly.qRuleFace()),
92 _JxW(_assembly.JxWFace()),
93 _coord(_assembly.coordTransformation()),
94 _save_in_var_side(parameters.get<MultiMooseEnum>("save_in_var_side")),
95 _save_in_strings(parameters.get<std::vector<AuxVariableName>>("save_in")),
96 _diag_save_in_var_side(parameters.get<MultiMooseEnum>("diag_save_in_var_side")),
97 _diag_save_in_strings(parameters.get<std::vector<AuxVariableName>>("diag_save_in"))
98{
99}
100
101const Real &
106
107void
108InterfaceKernelBase::prepareShapes(const unsigned int var_num)
109{
111}
const Real & neighborVolume()
Returns the reference to the current neighbor volume.
Definition Assembly.h:508
/class BoundaryRestrictable /brief Provides functionality for limiting the object to certain boundary...
static InputParameters validParams()
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void registerSystemAttributeName(const std::string &value)
This method is used to define the MOOSE system name that is used by the TheWarehouse object for stori...
void declareControllable(const std::string &name, std::set< ExecFlagType > execute_flags={})
Declare the given parameters as controllable.
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
This method takes a space delimited list of parameter names and adds them to the specified group name...
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
This method adds a coupled variable name pair.
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.
void registerBase(const std::string &value)
This method must be called from every base "Moose System" to create linkage with the Action System.
void addRelationshipManager(const std::string &name, Moose::RelationshipManagerType rm_type, Moose::RelationshipManagerInputParameterCallback input_parameter_callback=nullptr)
Tells MOOSE about a RelationshipManager that this object needs.
static InputParameters validParams()
void prepareShapes(unsigned int var_num) override final
Prepare shape functions.
InterfaceKernelBase(const InputParameters &parameters)
const Real & getNeighborElemVolume()
The volume of the current neighbor.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type.
Intermediate base class that ties together all the interfaces for getting MooseVariables with the Moo...
This is a base class for objects that can provide residual contributions for both local and neighbor ...
static InputParameters validParams()
THREAD_ID _tid
The thread ID for this kernel.
Assembly & _assembly
Reference to this Kernel's assembly object.
SubProblem & _subproblem
Reference to this kernel's SubProblem.
virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid)=0
This interface is designed for DGKernel, InternalSideUserObject, InterfaceUserObject,...
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...