www.mooseframework.org
PFParamsPolyFreeEnergy.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 "PFParamsPolyFreeEnergy.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<Material>();
19  params.addClassDescription(
20  "Phase field parameters for polynomial free energy for single component systems");
21  params.addCoupledVar("T", "Temperature variable in Kelvin");
22  params.addRequiredCoupledVar("c", "Concentration");
23  params.addRequiredParam<Real>(
24  "int_width", "The interfacial width of void surface in the length scale of the problem");
25  params.addParam<Real>(
26  "length_scale", 1.0e-9, "defines the base length scale of the problem in m");
27  params.addParam<Real>("time_scale", 1.0e-9, "defines the base time scale of the problem");
28  MooseEnum poly_order("4 6 8");
29  params.addRequiredParam<MooseEnum>(
30  "polynomial_order", poly_order, "Order of polynomial free energy");
31  params.addRequiredParam<Real>("D0", "Diffusivity prefactor for vacancies in m^2/s");
32  params.addRequiredParam<Real>("Em", "Migration energy in eV");
33  params.addRequiredParam<Real>("Ef", "Formation energy in eV");
34  params.addRequiredParam<Real>("surface_energy", "Surface energy in J/m2");
35  return params;
36 }
37 
38 PFParamsPolyFreeEnergy::PFParamsPolyFreeEnergy(const InputParameters & parameters)
39  : Material(parameters),
40  _c(coupledValue("c")),
41  _T(coupledValue("T")),
42  _M(declareProperty<Real>("M")),
43  _grad_M(declareProperty<RealGradient>("grad_M")),
44  _kappa(declareProperty<Real>("kappa")),
45  _c_eq(declareProperty<Real>("c_eq")),
46  _W(declareProperty<Real>("barr_height")),
47  _Qstar(declareProperty<Real>("Qstar")),
48  _D(declareProperty<Real>("D")),
49  _int_width(getParam<Real>("int_width")),
50  _length_scale(getParam<Real>("length_scale")),
51  _time_scale(getParam<Real>("time_scale")),
52  _order(getParam<MooseEnum>("polynomial_order")),
53  _D0(getParam<Real>("D0")),
54  _Em(getParam<Real>("Em")),
55  _Ef(getParam<Real>("Ef")),
56  _surface_energy(getParam<Real>("surface_energy")),
57  _JtoeV(6.24150974e18), // joule to eV conversion
58  _kb(8.617343e-5) // Boltzmann constant in eV/K
59 {
60 }
61 
62 void
64 {
65  // Convert mobility from m^2/s to the length and time scale
66  Real D0_c = _D0 * _time_scale / (_length_scale * _length_scale);
67 
68  Real kbT = _kb * _T[_qp];
69 
70  // Compute equilibrium concentration and diffusivity
71  _c_eq[_qp] = std::exp(-_Ef / kbT);
72  _D[_qp] = D0_c * std::exp(-_Em / kbT);
73 
74  // Compute free energy integral constant, such that int^1_0 f_loc = KN*sqrt(W)
75  Real KN = 0.0;
76 
77  switch (_order)
78  {
79  case 0: // Fourth oder
80  KN = 2.0 / 3.0;
81  break;
82  case 1: // Sixth order
83  KN = 3.0 / 16.0 * std::sqrt(3.0) + 9.0 / 64.0 * std::sqrt(2.0) *
84  (std::log(-std::sqrt(2.0) + std::sqrt(3.0)) +
85  std::log(std::sqrt(2.0) + std::sqrt(3.0)));
86  break;
87  case 2: // Eigth order
88  KN = 0.835510425;
89  break;
90  default:
91  paramError("polynomial_order", "Incorrect polynomial order");
92  }
93 
94  // Convert surface energy from J/m2 to eV/length_scale
95  Real surf_energy = _surface_energy * _JtoeV * _length_scale * _length_scale;
96 
97  // Set interfacial parameter and energy barrier
98  _kappa[_qp] = surf_energy * _int_width / KN;
99  _W[_qp] = surf_energy / (2.0 * _int_width * KN);
100 
101  Real Co = 0.0;
102  Real a = _c_eq[_qp];
103 
104  switch (_order)
105  {
106  case 0: // 4th order polynomial
107  Co = std::pow(2.0, 5.0) * (1.0 + 2.0 * a - 2.0 * a * a);
108  break;
109  case 1: // 6th order polynomial
110  Co = std::pow(2.0, 7.0) * (9.0 / 2.0 * a - 9.0 / 2.0 * a * a + 3.0 / 4.0);
111  break;
112  case 2: // 8th order polynomial
113  Co = std::pow(2.0, 9.0) * (15.0 / 4.0 * a - 15.0 / 4.0 * a * a + 3.0 / 8.0);
114  break;
115  default:
116  mooseError("Error in PFParamsPolyFreeEnergy: incorrect polynomial order");
117  }
118 
119  _M[_qp] = KN / Co * (_D[_qp] * _int_width / surf_energy);
120  _grad_M[_qp] = 0.0;
121 
122  _Qstar[_qp] = -4.0; // eV
123 }
PFParamsPolyFreeEnergy::_grad_M
MaterialProperty< RealGradient > & _grad_M
Definition: PFParamsPolyFreeEnergy.h:37
registerMooseObject
registerMooseObject("PhaseFieldApp", PFParamsPolyFreeEnergy)
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
PFParamsPolyFreeEnergy::_time_scale
Real _time_scale
Definition: PFParamsPolyFreeEnergy.h:48
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
PFParamsPolyFreeEnergy::PFParamsPolyFreeEnergy
PFParamsPolyFreeEnergy(const InputParameters &parameters)
Definition: PFParamsPolyFreeEnergy.C:38
PFParamsPolyFreeEnergy::_W
MaterialProperty< Real > & _W
Definition: PFParamsPolyFreeEnergy.h:41
PFParamsPolyFreeEnergy::_kappa
MaterialProperty< Real > & _kappa
Definition: PFParamsPolyFreeEnergy.h:39
PFParamsPolyFreeEnergy::_surface_energy
Real _surface_energy
Definition: PFParamsPolyFreeEnergy.h:53
PFParamsPolyFreeEnergy::_D0
Real _D0
Definition: PFParamsPolyFreeEnergy.h:50
PFParamsPolyFreeEnergy::_kb
const Real _kb
Definition: PFParamsPolyFreeEnergy.h:56
PFParamsPolyFreeEnergy::_length_scale
Real _length_scale
Definition: PFParamsPolyFreeEnergy.h:47
PFParamsPolyFreeEnergy::_T
const VariableValue & _T
Definition: PFParamsPolyFreeEnergy.h:33
PFParamsPolyFreeEnergy::_JtoeV
const Real _JtoeV
Definition: PFParamsPolyFreeEnergy.h:55
PFParamsPolyFreeEnergy::computeQpProperties
virtual void computeQpProperties()
Definition: PFParamsPolyFreeEnergy.C:63
validParams< PFParamsPolyFreeEnergy >
InputParameters validParams< PFParamsPolyFreeEnergy >()
Definition: PFParamsPolyFreeEnergy.C:16
PFParamsPolyFreeEnergy::_Qstar
MaterialProperty< Real > & _Qstar
Definition: PFParamsPolyFreeEnergy.h:42
PFParamsPolyFreeEnergy::_Ef
Real _Ef
Definition: PFParamsPolyFreeEnergy.h:52
PFParamsPolyFreeEnergy.h
PFParamsPolyFreeEnergy::_c_eq
MaterialProperty< Real > & _c_eq
Definition: PFParamsPolyFreeEnergy.h:40
PFParamsPolyFreeEnergy::_D
MaterialProperty< Real > & _D
Definition: PFParamsPolyFreeEnergy.h:43
PFParamsPolyFreeEnergy
Calculated properties for a single component phase field model using polynomial free energies.
Definition: PFParamsPolyFreeEnergy.h:23
PFParamsPolyFreeEnergy::_M
MaterialProperty< Real > & _M
Mateiral property declarations.
Definition: PFParamsPolyFreeEnergy.h:36
PFParamsPolyFreeEnergy::_order
MooseEnum _order
Definition: PFParamsPolyFreeEnergy.h:49
PFParamsPolyFreeEnergy::_int_width
Real _int_width
Input parameters.
Definition: PFParamsPolyFreeEnergy.h:46
PFParamsPolyFreeEnergy::_Em
Real _Em
Definition: PFParamsPolyFreeEnergy.h:51