www.mooseframework.org
PolynomialFreeEnergy.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 "PolynomialFreeEnergy.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<DerivativeParsedMaterialHelper>();
19  params.addClassDescription("Polynomial free energy for single component systems");
20  MooseEnum poly_order("4 6 8");
21  params.addRequiredParam<MooseEnum>(
22  "polynomial_order", poly_order, "Order of polynomial free energy");
23  params.addParam<MaterialPropertyName>(
24  "c_eq_name", "c_eq", "Name of material property storing the equilibrium concentration");
25  params.addParam<MaterialPropertyName>(
26  "W_name", "barr_height", "Name of the material property storing the barrier height");
27  params.addRequiredCoupledVar("c", "Concentration");
28  return params;
29 }
30 
31 PolynomialFreeEnergy::PolynomialFreeEnergy(const InputParameters & parameters)
32  : DerivativeParsedMaterialHelper(parameters),
33  _c("c"),
34  _a("c_eq_name"),
35  _W("W_name"),
36  _order(getParam<MooseEnum>("polynomial_order"))
37 {
38  EBFunction free_energy;
39 
40  // Free energy
41  switch (_order)
42  {
43  case 0: // 4th order
44  free_energy(_c, _W, _a) = pow(2.0, 4.0) * _W * pow(_c - _a, 2) * pow(1 - _c - _a, 2);
45  break;
46  case 1: // 6th order
47  free_energy(_c, _W, _a) =
48  pow(2.0, 6.0) * _W * (2.0 * pow(_c, 6) - 6.0 * pow(_c, 5) +
49  (3.0 * _a + 27.0 / 4.0 - 3.0 * _a * _a) * pow(_c, 4) +
50  (-6.0 * _a - 7.0 / 2.0 + 6.0 * _a * _a) * pow(_c, 3) +
51  (9.0 / 2.0 * _a - 9.0 / 2.0 * _a * _a + 3.0 / 4.0) * pow(_c, 2) +
52  (3.0 / 2.0 * _a * _a - 3.0 / 2.0 * _a) * _c);
53  break;
54  case 2: // 8th order
55  free_energy(_c, _W, _a) =
56  pow(2.0, 8.0) * _W *
57  (3.0 * pow(_c, 8) - 12.0 * pow(_c, 7) + (-4.0 * _a * _a + 4.0 * _a + 20.0) * pow(_c, 6) +
58  (12.0 * _a * _a - 12.0 * _a - 18.0) * pow(_c, 5) +
59  (15.0 * _a + 75.0 / 8.0 - 15.0 * _a * _a) * pow(_c, 4) +
60  (-10.0 * _a - 11.0 / 4.0 + 10.0 * _a * _a) * pow(_c, 3) +
61  (15.0 / 4.0 * _a - 15.0 / 4.0 * _a * _a + 3.0 / 8.0) * pow(_c, 2) +
62  (3.0 / 4.0 * _a * _a - 3.0 / 4.0 * _a) * _c);
63  break;
64  default:
65  mooseError("Error in PolynomialFreeEnergy: incorrect polynomial order");
66  }
67 
68  // Parse function
69  functionParse(free_energy, {}, {}, {"W_name", "c_eq_name"}, {}, {});
70 }
ExpressionBuilder::EBFunction
User facing host object for a function. This combines a term with an argument list.
Definition: ExpressionBuilder.h:520
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
PolynomialFreeEnergy.h
PolynomialFreeEnergy::_a
EBTerm _a
Equilibrium concentration.
Definition: PolynomialFreeEnergy.h:35
PolynomialFreeEnergy::_W
EBTerm _W
Barrier height.
Definition: PolynomialFreeEnergy.h:38
registerMooseObject
registerMooseObject("PhaseFieldApp", PolynomialFreeEnergy)
PolynomialFreeEnergy
Derivative free energy material defining polynomial free energies for single component materials,...
Definition: PolynomialFreeEnergy.h:25
PolynomialFreeEnergy::_c
EBTerm _c
Concentration variable used in the free energy expression.
Definition: PolynomialFreeEnergy.h:32
PolynomialFreeEnergy::_order
MooseEnum _order
Polynomial order.
Definition: PolynomialFreeEnergy.h:41
validParams< PolynomialFreeEnergy >
InputParameters validParams< PolynomialFreeEnergy >()
Definition: PolynomialFreeEnergy.C:16
PolynomialFreeEnergy::PolynomialFreeEnergy
PolynomialFreeEnergy(const InputParameters &parameters)
Definition: PolynomialFreeEnergy.C:31