https://mooseframework.inl.gov
Loading...
Searching...
No Matches
CHBulk.h
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#pragma once
11
12#include "KernelGrad.h"
13#include "JvarMapInterface.h"
15
24template <typename T>
25class CHBulk : public DerivativeMaterialInterface<JvarMapKernelInterface<KernelGrad>>
26{
27public:
28 CHBulk(const InputParameters & parameters);
29
31 virtual void initialSetup();
32
33protected:
34 virtual RealGradient precomputeQpResidual();
35 virtual RealGradient precomputeQpJacobian();
36 virtual Real computeQpOffDiagJacobian(unsigned int jvar);
37
43
44 virtual RealGradient computeGradDFDCons(PFFunctionType type) = 0;
45
48
51
53 std::vector<const MaterialProperty<T> *> _dMdarg;
54};
55
56template <typename T>
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
73template <typename T>
76{
78 params.addClassDescription("Cahn-Hilliard base Kernel");
79 params.addParam<MaterialPropertyName>("mob_name", "M", "The mobility used with the kernel");
80 params.addCoupledVar("coupled_variables", "Vector of variable arguments of the mobility");
81 return params;
82}
83
84template <typename T>
85void
87{
88 validateNonlinearCoupling<Real>("mob_name");
89}
90
91template <typename T>
92RealGradient
94{
95 return _M[_qp] * computeGradDFDCons(Residual);
96}
97
98template <typename T>
99RealGradient
101{
102 RealGradient grad_value = _M[_qp] * computeGradDFDCons(Jacobian) +
103 _dMdc[_qp] * _phi[_j][_qp] * computeGradDFDCons(Residual);
104
105 return grad_value;
106}
107
108template <typename T>
109Real
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}
const double T
const std::string name
Definition Setup.h:21
This is the Cahn-Hilliard equation base class that implements the bulk or local energy term of the eq...
Definition CHBulk.h:26
virtual RealGradient precomputeQpJacobian()
Definition CHBulk.h:100
std::vector< const MaterialProperty< T > * > _dMdarg
Mobility derivative w.r.t coupled variables.
Definition CHBulk.h:53
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition CHBulk.h:110
static InputParameters validParams()
Definition CHBulk.h:75
PFFunctionType
Definition CHBulk.h:39
@ Jacobian
Definition CHBulk.h:40
const MaterialProperty< T > & _M
Mobility.
Definition CHBulk.h:47
virtual RealGradient computeGradDFDCons(PFFunctionType type)=0
virtual RealGradient precomputeQpResidual()
Definition CHBulk.h:93
const MaterialProperty< T > & _dMdc
Mobility derivative w.r.t. concentration.
Definition CHBulk.h:50
virtual void initialSetup()
Definition CHBulk.h:86
CHBulk(const InputParameters &parameters)
Definition CHBulk.h:57
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)
static InputParameters validParams()