www.mooseframework.org
KernelBase.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 
10 #include "KernelBase.h"
11 #include "Assembly.h"
12 #include "MooseVariableFE.h"
13 #include "Problem.h"
14 #include "SubProblem.h"
15 #include "SystemBase.h"
16 #include "NonlinearSystem.h"
17 
18 #include "libmesh/threads.h"
19 
22 {
23  auto params = ResidualObject::validParams();
26 
27  params.addParam<std::vector<AuxVariableName>>(
28  "save_in",
29  {},
30  "The name of auxiliary variables to save this Kernel's residual contributions to. "
31  " Everything about that variable must match everything about this variable (the "
32  "type, what blocks it's on, etc.)");
33  params.addParam<std::vector<AuxVariableName>>(
34  "diag_save_in",
35  {},
36  "The name of auxiliary variables to save this Kernel's diagonal Jacobian "
37  "contributions to. Everything about that variable must match everything "
38  "about this variable (the type, what blocks it's on, etc.)");
39 
40  params.addParam<bool>("use_displaced_mesh",
41  false,
42  "Whether or not this object should use the "
43  "displaced mesh for computation. Note that in "
44  "the case this is true but no displacements "
45  "are provided in the Mesh block the "
46  "undisplaced mesh will still be used.");
47 
48  params.addParamNamesToGroup("diag_save_in save_in use_displaced_mesh", "Advanced");
49  params.addCoupledVar("displacements", "The displacements");
50 
51  // Kernels always couple within their element
52  params.addRelationshipManager("ElementSideNeighborLayers",
54  [](const InputParameters &, InputParameters & rm_params)
55  { rm_params.set<unsigned short>("layers") = 0; });
56  return params;
57 }
58 
60  : ResidualObject(parameters),
61  BlockRestrictable(this),
65  ElementIDInterface(this),
66  _current_elem(_assembly.elem()),
67  _current_elem_volume(_assembly.elemVolume()),
68  _q_point(_assembly.qPoints()),
69  _qrule(_assembly.qRule()),
70  _JxW(_assembly.JxW()),
71  _coord(_assembly.coordTransformation()),
72  _has_save_in(false),
73  _save_in_strings(parameters.get<std::vector<AuxVariableName>>("save_in")),
74  _has_diag_save_in(false),
75  _diag_save_in_strings(parameters.get<std::vector<AuxVariableName>>("diag_save_in")),
76  _use_displaced_mesh(getParam<bool>("use_displaced_mesh"))
77 {
78  auto num_disp = coupledComponents("displacements");
79  for (decltype(num_disp) i = 0; i < num_disp; ++i)
80  _displacements.push_back(coupled("displacements", i));
81 }
virtual unsigned int coupled(const std::string &var_name, unsigned int comp=0) const
Returns the index for a coupled variable by name.
Definition: Coupleable.C:437
T * get(const std::unique_ptr< T > &u)
The MooseUtils::get() specializations are used to support making forwards-compatible code changes fro...
Definition: MooseUtils.h:1147
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
static InputParameters validParams()
KernelBase(const InputParameters &parameters)
Definition: KernelBase.C:59
static InputParameters validParams()
static InputParameters validParams()
std::vector< unsigned int > _displacements
Definition: KernelBase.h:72
unsigned int coupledComponents(const std::string &var_name) const
Number of coupled components.
Definition: Coupleable.C:153
This is the common base class for objects that give residual contributions.
An interface for accessing Materials.
const std::set< BoundaryID > EMPTY_BOUNDARY_IDS
Definition: MooseTypes.h:597
Intermediate base class that ties together all the interfaces for getting MooseVariableFEBases with t...
An interface that restricts an object to subdomains via the &#39;blocks&#39; input parameter.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
static InputParameters validParams()
Definition: KernelBase.C:21