www.mooseframework.org
KKSGlobalFreeEnergy.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 "KKSGlobalFreeEnergy.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<TotalFreeEnergyBase>();
19  params.addClassDescription(
20  "Total free energy in KKS system, including chemical, barrier and gradient terms");
21  params.addRequiredParam<MaterialPropertyName>("fa_name",
22  "Base name of the free energy function "
23  "F (f_name in the corresponding "
24  "derivative function material)");
25  params.addRequiredParam<MaterialPropertyName>("fb_name",
26  "Base name of the free energy function "
27  "F (f_name in the corresponding "
28  "derivative function material)");
29  params.addParam<MaterialPropertyName>(
30  "h_name", "h", "Base name for the switching function h(eta)");
31  params.addParam<MaterialPropertyName>(
32  "g_name", "g", "Base name for the double well function g(eta)");
33  params.addRequiredParam<Real>("w", "Double well height parameter");
34  params.addParam<std::vector<MaterialPropertyName>>("kappa_names",
35  std::vector<MaterialPropertyName>(),
36  "Vector of kappa names corresponding to "
37  "each variable name in interfacial_vars "
38  "in the same order. For basic KKS, there "
39  "is 1 kappa, 1 interfacial_var.");
40  return params;
41 }
42 
43 KKSGlobalFreeEnergy::KKSGlobalFreeEnergy(const InputParameters & parameters)
44  : TotalFreeEnergyBase(parameters),
45  _prop_fa(getMaterialProperty<Real>("fa_name")),
46  _prop_fb(getMaterialProperty<Real>("fb_name")),
47  _prop_h(getMaterialProperty<Real>("h_name")),
48  _prop_g(getMaterialProperty<Real>("g_name")),
49  _w(getParam<Real>("w")),
50  _kappas(_nkappas)
51 {
52  // Error check to ensure size of interfacial_vars is the same as kappa_names
53  if (_nvars != _nkappas)
54  mooseError(
55  "Size of interfacial_vars is not equal to the size of kappa_names in KKSGlobalFreeEnergy");
56 
57  // Assign kappa values
58  for (unsigned int i = 0; i < _nkappas; ++i)
59  _kappas[i] = &getMaterialPropertyByName<Real>(_kappa_names[i]);
60 }
61 
62 Real
64 {
65  const Real h = _prop_h[_qp];
66 
67  // Include bulk energy and additional contributions
68  Real total_energy = _prop_fa[_qp] * (1.0 - h) + _prop_fb[_qp] * h + _w * _prop_g[_qp] +
70 
71  // Calculate interfacial energy of each variable
72  for (unsigned int i = 0; i < _nvars; ++i)
73  total_energy += (*_kappas[i])[_qp] / 2.0 * (*_grad_vars[i])[_qp].norm_sq();
74 
75  return total_energy;
76 }
TotalFreeEnergyBase
Total free energy (both the bulk and gradient parts), where the bulk free energy has been defined in ...
Definition: TotalFreeEnergyBase.h:24
KKSGlobalFreeEnergy.h
registerMooseObject
registerMooseObject("PhaseFieldApp", KKSGlobalFreeEnergy)
KKSGlobalFreeEnergy::KKSGlobalFreeEnergy
KKSGlobalFreeEnergy(const InputParameters &parameters)
Definition: KKSGlobalFreeEnergy.C:43
KKSGlobalFreeEnergy::_prop_h
const MaterialProperty< Real > & _prop_h
Definition: KKSGlobalFreeEnergy.h:35
TotalFreeEnergyBase::_kappa_names
std::vector< MaterialPropertyName > _kappa_names
Gradient free energy prefactor kappa.
Definition: TotalFreeEnergyBase.h:38
TotalFreeEnergyBase::_grad_vars
std::vector< const VariableGradient * > _grad_vars
Definition: TotalFreeEnergyBase.h:35
KKSGlobalFreeEnergy::_w
const Real _w
Barrier term height.
Definition: KKSGlobalFreeEnergy.h:39
KKSGlobalFreeEnergy::_prop_fa
const MaterialProperty< Real > & _prop_fa
Definition: KKSGlobalFreeEnergy.h:33
TotalFreeEnergyBase::_nkappas
unsigned int _nkappas
Definition: TotalFreeEnergyBase.h:39
KKSGlobalFreeEnergy::_prop_g
const MaterialProperty< Real > & _prop_g
Definition: KKSGlobalFreeEnergy.h:36
TotalFreeEnergyBase::_additional_free_energy
const VariableValue & _additional_free_energy
Additional free energy contribution.
Definition: TotalFreeEnergyBase.h:42
KKSGlobalFreeEnergy::_kappas
std::vector< const MaterialProperty< Real > * > _kappas
Gradient interface free energy coefficients.
Definition: KKSGlobalFreeEnergy.h:42
validParams< TotalFreeEnergyBase >
InputParameters validParams< TotalFreeEnergyBase >()
Definition: TotalFreeEnergyBase.C:14
KKSGlobalFreeEnergy
Compute the global free energy in the KKS Model .
Definition: KKSGlobalFreeEnergy.h:25
KKSGlobalFreeEnergy::computeValue
virtual Real computeValue()
Definition: KKSGlobalFreeEnergy.C:63
validParams< KKSGlobalFreeEnergy >
InputParameters validParams< KKSGlobalFreeEnergy >()
Definition: KKSGlobalFreeEnergy.C:16
TotalFreeEnergyBase::_nvars
unsigned int _nvars
Coupled interface variables.
Definition: TotalFreeEnergyBase.h:33
NS::total_energy
const std::string total_energy
Definition: NS.h:20
KKSGlobalFreeEnergy::_prop_fb
const MaterialProperty< Real > & _prop_fb
Definition: KKSGlobalFreeEnergy.h:34