www.mooseframework.org
AsymmetricCrossTermBarrierFunctionMaterial.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 
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<CrossTermBarrierFunctionBase>();
19  params.addClassDescription(
20  "Free energy contribution asymmetric across interfaces between arbitrary pairs of phases.");
21  params.addParam<std::vector<MaterialPropertyName>>(
22  "hi_names", "Switching Function Materials that provide h(eta_i)");
23  return params;
24 }
25 
27  const InputParameters & parameters)
28  : CrossTermBarrierFunctionBase(parameters), _h(_num_eta), _dh(_num_eta), _d2h(_num_eta)
29 {
30  // switching functions
31  const std::vector<MaterialPropertyName> & hi_names =
32  getParam<std::vector<MaterialPropertyName>>("hi_names");
33  if (hi_names.size() != _num_eta)
34  paramError("hi_names", "The number of hi_names must be equal to the number of coupled etas");
35 
36  for (unsigned int i = 0; i < _num_eta; ++i)
37  {
38  _h[i] = &getMaterialProperty<Real>(hi_names[i]);
39  _dh[i] = &getMaterialPropertyDerivative<Real>(hi_names[i], _eta_names[i]);
40  _d2h[i] = &getMaterialPropertyDerivative<Real>(hi_names[i], _eta_names[i], _eta_names[i]);
41  }
42 }
43 
44 void
46 {
47  // Initialize properties to zero before accumulating
49 
50  // Sum the components of our W_ij matrix to get constant used in our g function
51  for (unsigned int i = 0; i < _num_eta; ++i)
52  for (unsigned int j = i + 1; j < _num_eta; ++j)
53  {
54  // readable aliases
55  const Real ni = (*_eta[i])[_qp];
56  const Real nj = (*_eta[j])[_qp];
57 
58  const Real Wij = _W_ij[_num_eta * i + j];
59  const Real Wji = _W_ij[_num_eta * j + i];
60 
61  const Real hi = (*_h[i])[_qp];
62  const Real hj = (*_h[j])[_qp];
63  const Real dhi = (*_dh[i])[_qp];
64  const Real dhj = (*_dh[j])[_qp];
65  const Real d2hi = (*_d2h[i])[_qp];
66  const Real d2hj = (*_d2h[j])[_qp];
67 
68  // raw barrier term and derivatives
69  Real B, dBi, dBj, d2Bii, d2Bjj, d2Bij;
70  switch (_g_order)
71  {
72  case 0: // SIMPLE
73  B = 16.0 * ni * ni * nj * nj;
74  dBi = 16.0 * 2.0 * ni * nj * nj;
75  dBj = 16.0 * 2.0 * ni * ni * nj;
76  d2Bii = 16.0 * 2.0 * nj * nj;
77  d2Bjj = 16.0 * 2.0 * ni * ni;
78  d2Bij = 16.0 * 4.0 * ni * nj;
79  break;
80 
81  case 1: // LOW
82  B = 4.0 * ni * nj;
83  dBi = 4.0 * nj;
84  dBj = 4.0 * ni;
85  d2Bii = 0.0;
86  d2Bjj = 0.0;
87  d2Bij = 4.0;
88  break;
89 
90  default:
91  mooseError("Internal error");
92  }
93 
94  _prop_g[_qp] += (Wij * hi + Wji * hj) * B;
95  // first derivatives
96  (*_prop_dg[i])[_qp] += (Wij * hi + Wji * hj) * dBi + (Wij * dhi) * B;
97  (*_prop_dg[j])[_qp] += (Wij * hi + Wji * hj) * dBj + (Wji * dhj) * B;
98  // second derivatives (diagonal)
99  (*_prop_d2g[i][i])[_qp] +=
100  (Wij * hi + Wji * hj) * d2Bii + 2 * (Wij * dhi) * dBi + (Wij * d2hi) * B;
101  (*_prop_d2g[j][j])[_qp] +=
102  (Wij * hi + Wji * hj) * d2Bjj + 2 * (Wji * dhj) * dBj + (Wji * d2hj) * B;
103  // second derivatives (off-diagonal)
104  (*_prop_d2g[i][j])[_qp] =
105  (Wij * hi + Wji * hj) * (d2Bij) + (Wji * dhj) * dBi + (Wij * dhi) * dBj;
106  }
107 }
AsymmetricCrossTermBarrierFunctionMaterial.h
CrossTermBarrierFunctionBase::_prop_d2g
std::vector< std::vector< MaterialProperty< Real > * > > _prop_d2g
Definition: CrossTermBarrierFunctionBase.h:50
AsymmetricCrossTermBarrierFunctionMaterial
AsymmetricCrossTermBarrierFunctionMaterial adds a free energy contribution on the interfaces between ...
Definition: AsymmetricCrossTermBarrierFunctionMaterial.h:25
CrossTermBarrierFunctionBase::_num_eta
unsigned int _num_eta
order parameters
Definition: CrossTermBarrierFunctionBase.h:43
CrossTermBarrierFunctionBase::_eta_names
std::vector< VariableName > _eta_names
Definition: CrossTermBarrierFunctionBase.h:44
AsymmetricCrossTermBarrierFunctionMaterial::AsymmetricCrossTermBarrierFunctionMaterial
AsymmetricCrossTermBarrierFunctionMaterial(const InputParameters &parameters)
Definition: AsymmetricCrossTermBarrierFunctionMaterial.C:26
validParams< AsymmetricCrossTermBarrierFunctionMaterial >
InputParameters validParams< AsymmetricCrossTermBarrierFunctionMaterial >()
Definition: AsymmetricCrossTermBarrierFunctionMaterial.C:16
AsymmetricCrossTermBarrierFunctionMaterial::_h
std::vector< const MaterialProperty< Real > * > _h
Switching functions and their drivatives.
Definition: AsymmetricCrossTermBarrierFunctionMaterial.h:34
CrossTermBarrierFunctionBase::computeQpProperties
virtual void computeQpProperties()
Definition: CrossTermBarrierFunctionBase.C:70
CrossTermBarrierFunctionBase::_prop_g
MaterialProperty< Real > & _prop_g
Barrier function and its derivatives.
Definition: CrossTermBarrierFunctionBase.h:48
AsymmetricCrossTermBarrierFunctionMaterial::computeQpProperties
virtual void computeQpProperties()
Definition: AsymmetricCrossTermBarrierFunctionMaterial.C:45
validParams< CrossTermBarrierFunctionBase >
InputParameters validParams< CrossTermBarrierFunctionBase >()
Definition: CrossTermBarrierFunctionBase.C:14
CrossTermBarrierFunctionBase::_prop_dg
std::vector< MaterialProperty< Real > * > _prop_dg
Definition: CrossTermBarrierFunctionBase.h:49
AsymmetricCrossTermBarrierFunctionMaterial::_d2h
std::vector< const MaterialProperty< Real > * > _d2h
Definition: AsymmetricCrossTermBarrierFunctionMaterial.h:36
CrossTermBarrierFunctionBase
CrossTermBarrierFunctionBase is the base to a set of free energy penalties that set the phase interfa...
Definition: CrossTermBarrierFunctionBase.h:25
CrossTermBarrierFunctionBase::_g_order
unsigned int _g_order
polynomial order of the switching function
Definition: CrossTermBarrierFunctionBase.h:37
CrossTermBarrierFunctionBase::_W_ij
std::vector< Real > _W_ij
barrier function height matrix
Definition: CrossTermBarrierFunctionBase.h:40
AsymmetricCrossTermBarrierFunctionMaterial::_dh
std::vector< const MaterialProperty< Real > * > _dh
Definition: AsymmetricCrossTermBarrierFunctionMaterial.h:35
registerMooseObject
registerMooseObject("PhaseFieldApp", AsymmetricCrossTermBarrierFunctionMaterial)
CrossTermBarrierFunctionBase::_eta
std::vector< const VariableValue * > _eta
Definition: CrossTermBarrierFunctionBase.h:45