www.mooseframework.org
CrossTermGradientFreeEnergy.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<TotalFreeEnergyBase>();
19  params.addClassDescription("Free energy contribution from the cross terms in ACMultiInterface");
20  params.addRequiredParam<std::vector<MaterialPropertyName>>(
21  "kappa_names",
22  "Matrix of kappa names with rows and columns corresponding to each variable "
23  "name in interfacial_vars in the same order (should be symmetric).");
24  return params;
25 }
26 
28  : TotalFreeEnergyBase(parameters), _kappas(_nvars)
29 {
30  // Error check to ensure size of interfacial_vars is the same as kappa_names
31  if (_nvars * _nvars != _nkappas)
32  paramError("kappa_names",
33  "Size of interfacial_vars squared is not equal to the size of kappa_names in "
34  "CrossTermGradientFreeEnergy");
35 
36  // Assign kappa values
37  for (unsigned int i = 0; i < _nvars; ++i)
38  {
39  _kappas[i].resize(_nvars);
40 
41  for (unsigned int j = 0; j < _nvars; ++j)
42  _kappas[i][j] = &getMaterialPropertyByName<Real>(_kappa_names[i * _nvars + j]);
43  }
44 }
45 
46 Real
48 {
49  // This kernel does _not_ include the bulk energy contribution.
50  // It is to be used as an additional free energy component in TotalFreeEnergy.
51  // additional_free_energy can be used to daisy chain contributions!
53 
54  // Calculate interfacial energy of each variable combination
55  for (unsigned int i = 0; i < _nvars; ++i)
56  for (unsigned int j = 0; j < i; ++j)
57  {
58  const RealGradient cross =
59  (*_vars[i])[_qp] * (*_grad_vars[j])[_qp] + (*_vars[j])[_qp] * (*_grad_vars[i])[_qp];
60  total_energy += (*_kappas[i][j])[_qp] / 2.0 * cross * cross;
61  }
62  return total_energy;
63 }
TotalFreeEnergyBase
Total free energy (both the bulk and gradient parts), where the bulk free energy has been defined in ...
Definition: TotalFreeEnergyBase.h:24
registerMooseObject
registerMooseObject("PhaseFieldApp", CrossTermGradientFreeEnergy)
TotalFreeEnergyBase::_vars
std::vector< const VariableValue * > _vars
Definition: TotalFreeEnergyBase.h:34
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
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
CrossTermGradientFreeEnergy::CrossTermGradientFreeEnergy
CrossTermGradientFreeEnergy(const InputParameters &parameters)
Definition: CrossTermGradientFreeEnergy.C:27
CrossTermGradientFreeEnergy::_kappas
std::vector< std::vector< const MaterialProperty< Real > * > > _kappas
Definition: CrossTermGradientFreeEnergy.h:31
CrossTermGradientFreeEnergy
Cross term gradient free energy contribution used by ACMultiInterface.
Definition: CrossTermGradientFreeEnergy.h:23
validParams< CrossTermGradientFreeEnergy >
InputParameters validParams< CrossTermGradientFreeEnergy >()
Definition: CrossTermGradientFreeEnergy.C:16
CrossTermGradientFreeEnergy::computeValue
virtual Real computeValue()
Definition: CrossTermGradientFreeEnergy.C:47
TotalFreeEnergyBase::_nkappas
unsigned int _nkappas
Definition: TotalFreeEnergyBase.h:39
TotalFreeEnergyBase::_additional_free_energy
const VariableValue & _additional_free_energy
Additional free energy contribution.
Definition: TotalFreeEnergyBase.h:42
validParams< TotalFreeEnergyBase >
InputParameters validParams< TotalFreeEnergyBase >()
Definition: TotalFreeEnergyBase.C:14
TotalFreeEnergyBase::_nvars
unsigned int _nvars
Coupled interface variables.
Definition: TotalFreeEnergyBase.h:33
NS::total_energy
const std::string total_energy
Definition: NS.h:20
CrossTermGradientFreeEnergy.h