www.mooseframework.org
TotalFreeEnergy.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 "TotalFreeEnergy.h"
11 
12 registerMooseObject("PhaseFieldApp", TotalFreeEnergy);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<TotalFreeEnergyBase>();
19  params.addClassDescription("Total free energy (both the bulk and gradient parts), where the bulk "
20  "free energy has been defined in a material");
21  params.addParam<MaterialPropertyName>("f_name", "F", " Base name of the free energy function");
22  params.addParam<std::vector<MaterialPropertyName>>("kappa_names",
23  std::vector<MaterialPropertyName>(),
24  "Vector of kappa names corresponding to "
25  "each variable name in interfacial_vars "
26  "in the same order.");
27  return params;
28 }
29 
30 TotalFreeEnergy::TotalFreeEnergy(const InputParameters & parameters)
31  : TotalFreeEnergyBase(parameters), _F(getMaterialProperty<Real>("f_name")), _kappas(_nkappas)
32 {
33  // Error check to ensure size of interfacial_vars is the same as kappa_names
34  if (_nvars != _nkappas)
35  mooseError(
36  "Size of interfacial_vars is not equal to the size of kappa_names in TotalFreeEnergy");
37 
38  // Assign kappa values
39  for (unsigned int i = 0; i < _nkappas; ++i)
40  _kappas[i] = &getMaterialPropertyByName<Real>(_kappa_names[i]);
41 }
42 
43 Real
45 {
46  // Include bulk energy contribution and additional contributions
47  Real total_energy = _F[_qp] + _additional_free_energy[_qp];
48 
49  // Calculate interfacial energy of each variable
50  for (unsigned int i = 0; i < _nvars; ++i)
51  total_energy += (*_kappas[i])[_qp] / 2.0 * (*_grad_vars[i])[_qp].norm_sq();
52 
53  return total_energy;
54 }
TotalFreeEnergyBase
Total free energy (both the bulk and gradient parts), where the bulk free energy has been defined in ...
Definition: TotalFreeEnergyBase.h:24
TotalFreeEnergy::_F
const MaterialProperty< Real > & _F
Bulk free energy material property.
Definition: TotalFreeEnergy.h:33
TotalFreeEnergy::computeValue
virtual Real computeValue()
Definition: TotalFreeEnergy.C:44
registerMooseObject
registerMooseObject("PhaseFieldApp", TotalFreeEnergy)
TotalFreeEnergy
Total free energy (both the bulk and gradient parts), where the bulk free energy has been defined in ...
Definition: TotalFreeEnergy.h:24
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
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
TotalFreeEnergy::_kappas
std::vector< const MaterialProperty< Real > * > _kappas
Gradient interface free energy coefficients.
Definition: TotalFreeEnergy.h:36
validParams< TotalFreeEnergy >
InputParameters validParams< TotalFreeEnergy >()
Definition: TotalFreeEnergy.C:16
TotalFreeEnergy::TotalFreeEnergy
TotalFreeEnergy(const InputParameters &parameters)
Definition: TotalFreeEnergy.C:30
TotalFreeEnergyBase::_nvars
unsigned int _nvars
Coupled interface variables.
Definition: TotalFreeEnergyBase.h:33
TotalFreeEnergy.h
NS::total_energy
const std::string total_energy
Definition: NS.h:20