www.mooseframework.org
CHBulk.h
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 #pragma once
11 
12 #include "KernelGrad.h"
13 #include "JvarMapInterface.h"
14 #include "DerivativeMaterialInterface.h"
15 
24 template <typename T>
25 class CHBulk : public DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>
26 {
27 public:
28  CHBulk(const InputParameters & parameters);
29 
30  static InputParameters validParams();
31  virtual void initialSetup();
32 
33 protected:
36  virtual Real computeQpOffDiagJacobian(unsigned int jvar);
37 
39  {
42  };
43 
45 
47  const MaterialProperty<T> & _M;
48 
50  const MaterialProperty<T> & _dMdc;
51 
53  std::vector<const MaterialProperty<T> *> _dMdarg;
54 };
55 
56 template <typename T>
57 CHBulk<T>::CHBulk(const InputParameters & parameters)
58  : DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>(parameters),
59  _M(getMaterialProperty<T>("mob_name")),
60  _dMdc(getMaterialPropertyDerivative<T>("mob_name", _var.name()))
61 {
62  // Get number of coupled variables
63  unsigned int nvar = _coupled_moose_vars.size();
64 
65  // reserve space for derivatives
66  _dMdarg.resize(nvar);
67 
68  // Iterate over all coupled variables
69  for (unsigned int i = 0; i < nvar; ++i)
70  _dMdarg[i] = &getMaterialPropertyDerivative<T>("mob_name", _coupled_moose_vars[i]->name());
71 }
72 
73 template <typename T>
74 InputParameters
76 {
77  InputParameters params = ::validParams<KernelGrad>();
78  params.addClassDescription("Cahn-Hilliard base Kernel");
79  params.addParam<MaterialPropertyName>("mob_name", "M", "The mobility used with the kernel");
80  params.addCoupledVar("args", "Vector of arguments of the mobility");
81  return params;
82 }
83 
84 template <typename T>
85 void
87 {
88  validateNonlinearCoupling<Real>("mob_name");
89 }
90 
91 template <typename T>
94 {
95  return _M[_qp] * computeGradDFDCons(Residual);
96 }
97 
98 template <typename T>
101 {
102  RealGradient grad_value = _M[_qp] * computeGradDFDCons(Jacobian) +
103  _dMdc[_qp] * _phi[_j][_qp] * computeGradDFDCons(Residual);
104 
105  return grad_value;
106 }
107 
108 template <typename T>
109 Real
111 {
112  // get the coupled variable jvar is referring to
113  const unsigned int cvar = mapJvarToCvar(jvar);
114 
115  return (*_dMdarg[cvar])[_qp] * _phi[_j][_qp] * computeGradDFDCons(Residual) * _grad_test[_i][_qp];
116 }
117 
CHBulk::precomputeQpResidual
virtual RealGradient precomputeQpResidual()
Definition: CHBulk.h:93
CHBulk::computeGradDFDCons
virtual RealGradient computeGradDFDCons(PFFunctionType type)=0
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
CHBulk::Jacobian
Definition: CHBulk.h:40
CHBulk::_dMdarg
std::vector< const MaterialProperty< T > * > _dMdarg
Mobility derivative w.r.t coupled variables.
Definition: CHBulk.h:53
CHBulk::Residual
Definition: CHBulk.h:41
name
const std::string name
Definition: Setup.h:21
CHBulk::_dMdc
const MaterialProperty< T > & _dMdc
Mobility derivative w.r.t. concentration.
Definition: CHBulk.h:50
CHBulk< Real >::PFFunctionType
PFFunctionType
Definition: CHBulk.h:38
CHBulk::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: CHBulk.h:110
CHBulk::_M
const MaterialProperty< T > & _M
Mobility.
Definition: CHBulk.h:47
CHBulk::validParams
static InputParameters validParams()
Definition: CHBulk.h:75
CHBulk::precomputeQpJacobian
virtual RealGradient precomputeQpJacobian()
Definition: CHBulk.h:100
CHBulk::CHBulk
CHBulk(const InputParameters &parameters)
Definition: CHBulk.h:57
CHBulk::initialSetup
virtual void initialSetup()
Definition: CHBulk.h:86
CHBulk
This is the Cahn-Hilliard equation base class that implements the bulk or local energy term of the eq...
Definition: CHBulk.h:25