www.mooseframework.org
MaskedBodyForce.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 "MaskedBodyForce.h"
11 #include "Function.h"
12 
13 registerMooseObject("PhaseFieldApp", MaskedBodyForce);
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<BodyForce>();
20  params.addClassDescription("Kernel that defines a body force modified by a material mask");
21  params.addParam<MaterialPropertyName>("mask", "Material property defining the mask");
22  params.addCoupledVar("args", "Vector of nonlinear variable arguments this object depends on");
23  return params;
24 }
25 
26 MaskedBodyForce::MaskedBodyForce(const InputParameters & parameters)
27  : DerivativeMaterialInterface<JvarMapKernelInterface<BodyForce>>(parameters),
28  _mask(getMaterialProperty<Real>("mask")),
29  _nvar(_coupled_moose_vars.size()),
30  _v_name(_var.name()),
31  _dmaskdv(getMaterialPropertyDerivative<Real>("mask", _v_name)),
32  _dmaskdarg(_nvar)
33 {
34  // Get derivatives of mask wrt coupled variables
35  for (unsigned int i = 0; i < _nvar; ++i)
36  {
37  MooseVariableFEBase * cvar = _coupled_moose_vars[i];
38  _dmaskdarg[i] = &getMaterialPropertyDerivative<Real>("mask", cvar->name());
39  }
40 }
41 
42 void
44 {
45  validateNonlinearCoupling<Real>("mask");
46 }
47 
48 Real
50 {
51  return BodyForce::computeQpResidual() * _mask[_qp];
52 }
53 
54 Real
56 {
57  return _dmaskdv[_qp] * BodyForce::computeQpResidual() * _phi[_j][_qp];
58 }
59 
60 Real
62 {
63  const unsigned int cvar = mapJvarToCvar(jvar);
64  return (*_dmaskdarg[cvar])[_qp] * BodyForce::computeQpResidual() * _phi[_j][_qp];
65 }
validParams< MaskedBodyForce >
InputParameters validParams< MaskedBodyForce >()
Definition: MaskedBodyForce.C:17
MaskedBodyForce::initialSetup
virtual void initialSetup()
Definition: MaskedBodyForce.C:43
MaskedBodyForce::_mask
const MaterialProperty< Real > & _mask
Definition: MaskedBodyForce.h:40
MaskedBodyForce::computeQpJacobian
virtual Real computeQpJacobian()
Definition: MaskedBodyForce.C:55
MaskedBodyForce::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: MaskedBodyForce.C:61
MaskedBodyForce::_dmaskdv
const MaterialProperty< Real > & _dmaskdv
derivative of the mask wrt the kernel's nonlinear variable
Definition: MaskedBodyForce.h:49
MaskedBodyForce.h
name
const std::string name
Definition: Setup.h:21
MaskedBodyForce::computeQpResidual
virtual Real computeQpResidual()
Definition: MaskedBodyForce.C:49
MaskedBodyForce::MaskedBodyForce
MaskedBodyForce(const InputParameters &parameters)
Definition: MaskedBodyForce.C:26
MaskedBodyForce
This kernel creates a body force that is modified by a mask defined as a material.
Definition: MaskedBodyForce.h:29
MaskedBodyForce::_dmaskdarg
std::vector< const MaterialProperty< Real > * > _dmaskdarg
Reaction rate derivatives w.r.t. other coupled variables.
Definition: MaskedBodyForce.h:52
MaskedBodyForce::_nvar
const unsigned int _nvar
number of coupled variables
Definition: MaskedBodyForce.h:43
registerMooseObject
registerMooseObject("PhaseFieldApp", MaskedBodyForce)