www.mooseframework.org
CrossTermBarrierFunctionMaterial.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 symmetric across interfaces between arbitrary pairs of phases.");
21  return params;
22 }
23 
25  const InputParameters & parameters)
26  : CrossTermBarrierFunctionBase(parameters)
27 {
28  // error out if W_ij is not symmetric
29  for (unsigned int i = 0; i < _num_eta; ++i)
30  for (unsigned int j = 0; j < i; ++j)
31  if (_W_ij[_num_eta * i + j] != _W_ij[_num_eta * j + i])
32  paramError("W_ij", "Please supply a symmetric W_ij matrix");
33 }
34 
35 void
37 {
38  // Initialize properties to zero before accumulating
40 
41  // Sum the components of our W_ij matrix to get constant used in our g function
42  for (unsigned int i = 0; i < _num_eta; ++i)
43  for (unsigned int j = i + 1; j < _num_eta; ++j)
44  {
45  const Real ni = (*_eta[i])[_qp];
46  const Real nj = (*_eta[j])[_qp];
47  const Real Wij = _W_ij[_num_eta * i + j];
48 
49  switch (_g_order)
50  {
51  case 0: // SIMPLE
52  _prop_g[_qp] += 16.0 * Wij * (ni * ni * nj * nj);
53  // first derivatives
54  (*_prop_dg[i])[_qp] += 16.0 * Wij * (2 * ni * nj * nj);
55  (*_prop_dg[j])[_qp] += 16.0 * Wij * (2 * ni * ni * nj);
56  // second derivatives (diagonal)
57  (*_prop_d2g[i][i])[_qp] += 16.0 * Wij * (2 * nj * nj);
58  (*_prop_d2g[j][j])[_qp] += 16.0 * Wij * (2 * ni * ni);
59  // second derivatives (off-diagonal)
60  (*_prop_d2g[i][j])[_qp] = 16.0 * Wij * (4 * ni * nj);
61  break;
62 
63  case 1: // LOW
64  _prop_g[_qp] += 4.0 * Wij * (ni * nj);
65  // first derivatives
66  (*_prop_dg[i])[_qp] += 4.0 * Wij * nj;
67  (*_prop_dg[j])[_qp] += 4.0 * Wij * ni;
68  // second derivatives (diagonal) vanish
69  // second derivatives (off-diagonal)
70  (*_prop_d2g[i][j])[_qp] = 4.0 * Wij;
71  break;
72 
73  default:
74  mooseError("Internal error");
75  }
76  }
77 }
CrossTermBarrierFunctionBase::_prop_d2g
std::vector< std::vector< MaterialProperty< Real > * > > _prop_d2g
Definition: CrossTermBarrierFunctionBase.h:50
CrossTermBarrierFunctionBase::_num_eta
unsigned int _num_eta
order parameters
Definition: CrossTermBarrierFunctionBase.h:43
registerMooseObject
registerMooseObject("PhaseFieldApp", CrossTermBarrierFunctionMaterial)
CrossTermBarrierFunctionMaterial::CrossTermBarrierFunctionMaterial
CrossTermBarrierFunctionMaterial(const InputParameters &parameters)
Definition: CrossTermBarrierFunctionMaterial.C:24
CrossTermBarrierFunctionMaterial.h
validParams< CrossTermBarrierFunctionMaterial >
InputParameters validParams< CrossTermBarrierFunctionMaterial >()
Definition: CrossTermBarrierFunctionMaterial.C:16
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
CrossTermBarrierFunctionMaterial::computeQpProperties
virtual void computeQpProperties()
Definition: CrossTermBarrierFunctionMaterial.C:36
validParams< CrossTermBarrierFunctionBase >
InputParameters validParams< CrossTermBarrierFunctionBase >()
Definition: CrossTermBarrierFunctionBase.C:14
CrossTermBarrierFunctionBase::_prop_dg
std::vector< MaterialProperty< Real > * > _prop_dg
Definition: CrossTermBarrierFunctionBase.h:49
CrossTermBarrierFunctionMaterial
CrossTermBarrierFunctionMaterial adds free energy contribution on the interfaces between arbitrary pa...
Definition: CrossTermBarrierFunctionMaterial.h:24
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
CrossTermBarrierFunctionBase::_eta
std::vector< const VariableValue * > _eta
Definition: CrossTermBarrierFunctionBase.h:45