www.mooseframework.org
KKSMultiFreeEnergy.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 "KKSMultiFreeEnergy.h"
11 
12 registerMooseObject("PhaseFieldApp", KKSMultiFreeEnergy);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<TotalFreeEnergyBase>();
19  params.addClassDescription("Total free energy in multi-phase KKS system, including chemical, "
20  "barrier and gradient terms");
21  params.addRequiredParam<std::vector<MaterialPropertyName>>(
22  "Fj_names",
23  "List of free energies for each phase. Place in same order as hj_names and gj_names!");
24  params.addRequiredParam<std::vector<MaterialPropertyName>>(
25  "hj_names",
26  "Switching Function Materials that provide h. Place in same order as Fj_names and gj_names!");
27  params.addRequiredParam<std::vector<MaterialPropertyName>>(
28  "gj_names",
29  "Barrier Function Materials that provide g. Place in same order as Fj_names and hj_names!");
30  params.addRequiredParam<Real>("w", "Double well height parameter");
31  params.addParam<std::vector<MaterialPropertyName>>("kappa_names",
32  std::vector<MaterialPropertyName>(),
33  "Vector of kappa names corresponding to "
34  "each variable name in interfacial_vars "
35  "in the same order.");
36  return params;
37 }
38 
39 KKSMultiFreeEnergy::KKSMultiFreeEnergy(const InputParameters & parameters)
40  : TotalFreeEnergyBase(parameters),
41  _Fj_names(getParam<std::vector<MaterialPropertyName>>("Fj_names")),
42  _num_j(_Fj_names.size()),
43  _prop_Fj(_num_j),
44  _hj_names(getParam<std::vector<MaterialPropertyName>>("hj_names")),
45  _prop_hj(_num_j),
46  _gj_names(getParam<std::vector<MaterialPropertyName>>("gj_names")),
47  _prop_gj(_num_j),
48  _w(getParam<Real>("w")),
49  _kappas(_nkappas)
50 {
51  // Check that same number of Fj, hj, and gj are passed in
52  if (_hj_names.size() != _num_j)
53  mooseError("Size of hj_names is not equal to size of Fj_names in KKSMultiFreeEnergy AuxKernel ",
54  name());
55  if (_gj_names.size() != _num_j)
56  mooseError("Size of gj_names is not equal to size of Fj_names in KKSMultiFreeEnergy AuxKernel ",
57  name());
58 
59  // get bulk properties
60  for (unsigned int i = 0; i < _num_j; ++i)
61  {
62  _prop_Fj[i] = &getMaterialPropertyByName<Real>(_Fj_names[i]);
63  _prop_hj[i] = &getMaterialPropertyByName<Real>(_hj_names[i]);
64  _prop_gj[i] = &getMaterialPropertyByName<Real>(_gj_names[i]);
65  }
66 
67  // Check to ensure size of interfacial_vars is the same as kappa_names
68  if (_nvars != _nkappas)
69  mooseError("Size of interfacial_vars is not equal to the size of kappa_names in "
70  "KKSMultiFreeEnergy AuxKernel ",
71  name());
72 
73  // Assign kappa values
74  for (unsigned int i = 0; i < _nkappas; ++i)
75  _kappas[i] = &getMaterialPropertyByName<Real>(_kappa_names[i]);
76 }
77 
78 Real
80 {
81  // Start with any additional energy contribution, which is 0 if not supplied
83  // Add bulk energy contributions
84  for (unsigned int i = 0; i < _num_j; ++i)
85  total_energy += (*_prop_hj[i])[_qp] * (*_prop_Fj[i])[_qp] + _w * (*_prop_gj[i])[_qp];
86 
87  // Add interfacial energy of each variable
88  for (unsigned int i = 0; i < _nvars; ++i)
89  total_energy += (*_kappas[i])[_qp] / 2.0 * (*_grad_vars[i])[_qp].norm_sq();
90 
91  return total_energy;
92 }
TotalFreeEnergyBase
Total free energy (both the bulk and gradient parts), where the bulk free energy has been defined in ...
Definition: TotalFreeEnergyBase.h:24
KKSMultiFreeEnergy.h
KKSMultiFreeEnergy::_hj_names
std::vector< MaterialPropertyName > _hj_names
Switching function names.
Definition: KKSMultiFreeEnergy.h:41
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
KKSMultiFreeEnergy::_prop_Fj
std::vector< const MaterialProperty< Real > * > _prop_Fj
Values of the free energy functions for each phase .
Definition: KKSMultiFreeEnergy.h:38
KKSMultiFreeEnergy
Compute the free energy in the multi-phase KKS Model .
Definition: KKSMultiFreeEnergy.h:25
validParams< KKSMultiFreeEnergy >
InputParameters validParams< KKSMultiFreeEnergy >()
Definition: KKSMultiFreeEnergy.C:16
KKSMultiFreeEnergy::computeValue
virtual Real computeValue()
Definition: KKSMultiFreeEnergy.C:79
KKSMultiFreeEnergy::_gj_names
std::vector< MaterialPropertyName > _gj_names
Barrier function names.
Definition: KKSMultiFreeEnergy.h:47
TotalFreeEnergyBase::_nkappas
unsigned int _nkappas
Definition: TotalFreeEnergyBase.h:39
name
const std::string name
Definition: Setup.h:21
TotalFreeEnergyBase::_additional_free_energy
const VariableValue & _additional_free_energy
Additional free energy contribution.
Definition: TotalFreeEnergyBase.h:42
KKSMultiFreeEnergy::_prop_hj
std::vector< const MaterialProperty< Real > * > _prop_hj
Values of the switching functions for each phase .
Definition: KKSMultiFreeEnergy.h:44
KKSMultiFreeEnergy::_prop_gj
std::vector< const MaterialProperty< Real > * > _prop_gj
Values of the barrier functions for each phase .
Definition: KKSMultiFreeEnergy.h:50
KKSMultiFreeEnergy::KKSMultiFreeEnergy
KKSMultiFreeEnergy(const InputParameters &parameters)
Definition: KKSMultiFreeEnergy.C:39
validParams< TotalFreeEnergyBase >
InputParameters validParams< TotalFreeEnergyBase >()
Definition: TotalFreeEnergyBase.C:14
KKSMultiFreeEnergy::_kappas
std::vector< const MaterialProperty< Real > * > _kappas
Gradient interface free energy coefficients.
Definition: KKSMultiFreeEnergy.h:56
KKSMultiFreeEnergy::_Fj_names
std::vector< MaterialPropertyName > _Fj_names
Names of free energy functions for each phase .
Definition: KKSMultiFreeEnergy.h:34
registerMooseObject
registerMooseObject("PhaseFieldApp", KKSMultiFreeEnergy)
KKSMultiFreeEnergy::_w
const Real _w
Barrier term height.
Definition: KKSMultiFreeEnergy.h:53
TotalFreeEnergyBase::_nvars
unsigned int _nvars
Coupled interface variables.
Definition: TotalFreeEnergyBase.h:33
NS::total_energy
const std::string total_energy
Definition: NS.h:20
KKSMultiFreeEnergy::_num_j
const unsigned int _num_j
Definition: KKSMultiFreeEnergy.h:35