https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KernelBase.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 "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();
27 params.registerSystemAttributeName("Kernel");
28
29 params.addParam<std::vector<AuxVariableName>>(
30 "save_in",
31 {},
32 "The name of auxiliary variables to save this Kernel's residual contributions to. "
33 " Everything about that variable must match everything about this variable (the "
34 "type, what blocks it's on, etc.)");
35 params.addParam<std::vector<AuxVariableName>>(
36 "diag_save_in",
37 {},
38 "The name of auxiliary variables to save this Kernel's diagonal Jacobian "
39 "contributions to. Everything about that variable must match everything "
40 "about this variable (the type, what blocks it's on, etc.)");
41
42 params.addParam<bool>("use_displaced_mesh",
43 false,
44 "Whether or not this object should use the "
45 "displaced mesh for computation. Note that in "
46 "the case this is true but no displacements "
47 "are provided in the Mesh block the "
48 "undisplaced mesh will still be used.");
49
50 params.addParamNamesToGroup("diag_save_in save_in use_displaced_mesh", "Advanced");
51 params.addCoupledVar("displacements", "The displacements");
52
53 // Kernels always couple within their element
54 params.addRelationshipManager("ElementSideNeighborLayers",
56 [](const InputParameters &, InputParameters & rm_params)
57 { rm_params.set<unsigned short>("layers") = 0; });
58 return params;
59}
60
62 : ResidualObject(parameters),
65 MaterialPropertyInterface(this, blockIDs(), Moose::EMPTY_BOUNDARY_IDS),
68 _current_elem(_assembly.elem()),
69 _current_elem_volume(_assembly.elemVolume()),
70 _q_point(_assembly.qPoints()),
71 _qrule(_assembly.qRule()),
72 _JxW(_assembly.JxW()),
73 _coord(_assembly.coordTransformation()),
74 _has_save_in(false),
75 _save_in_strings(parameters.get<std::vector<AuxVariableName>>("save_in")),
76 _has_diag_save_in(false),
77 _diag_save_in_strings(parameters.get<std::vector<AuxVariableName>>("diag_save_in")),
78 _use_displaced_mesh(getParam<bool>("use_displaced_mesh"))
79{
80 auto num_disp = coupledComponents("displacements");
81 for (decltype(num_disp) i = 0; i < num_disp; ++i)
82 _displacements.push_back(coupled("displacements", i));
83}
An interface that restricts an object to subdomains via the 'blocks' input parameter.
static InputParameters validParams()
Intermediate base class that ties together all the interfaces for getting MooseVariableFEBases with t...
unsigned int coupledComponents(const std::string &var_name) const
Number of coupled components.
Definition Coupleable.C:183
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:473
static InputParameters validParams()
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
std::vector< unsigned int > _displacements
Definition KernelBase.h:73
static InputParameters validParams()
Definition KernelBase.C:21
KernelBase(const InputParameters &parameters)
Definition KernelBase.C:61
An interface for accessing Materials.
static InputParameters validParams()
This is the common base class for objects that give residual contributions.
static InputParameters validParams()
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...