www.mooseframework.org
KKSXeVacSolidMaterial.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 "KKSXeVacSolidMaterial.h"
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<DerivativeFunctionMaterialBase>();
19  params.addClassDescription("KKS Solid phase free energy for Xe,Vac in UO2. Fm(cmg,cmv)");
20  params.addRequiredParam<Real>("T", "Temperature in [K]");
21  params.addRequiredCoupledVar("cmg", "Gas concentration");
22  params.addRequiredCoupledVar("cmv", "Vacancy concentration");
23  return params;
24 }
25 
26 KKSXeVacSolidMaterial::KKSXeVacSolidMaterial(const InputParameters & parameters)
27  : DerivativeFunctionMaterialBase(parameters),
28  _T(getParam<Real>("T")),
29  _Omega(2.53),
30  _kB(8.6173324e-5),
31  _Efv(3.0),
32  _Efg(3.0),
33  _cmg(coupledValue("cmg")),
34  _cmg_var(coupled("cmg")),
35  _cmv(coupledValue("cmv")),
36  _cmv_var(coupled("cmv"))
37 {
38 }
39 
40 // Catch fixable singularity at 0
41 Real
43 {
44  return c <= 0.0 ? 0.0 : c * std::log(c);
45 }
46 
47 // / Fm(cmg,cmv) takes three arguments
48 unsigned int
50 {
51  return 2;
52 }
53 
54 // Free energy value
55 Real
57 {
58  return 1.0 / _Omega *
59  (_kB * _T * (cLogC(_cmv[_qp]) + cLogC(1.0 - _cmv[_qp])) + _Efv * _cmv[_qp] +
60  _kB * _T * (cLogC(_cmg[_qp]) + cLogC(1.0 - _cmg[_qp])) + _Efg * _cmg[_qp]);
61 }
62 
63 // Derivative of the Free energy
64 Real
66 {
67  const Real tol = 1e-10;
68  Real cmg = _cmg[_qp] < tol ? tol : (_cmg[_qp] > (1.0 - tol) ? (1.0 - tol) : _cmg[_qp]);
69  Real cmv = _cmv[_qp] < tol ? tol : (_cmv[_qp] > (1.0 - tol) ? (1.0 - tol) : _cmv[_qp]);
70 
71  if (i_var == _cmg_var)
72  return 1.0 / _Omega * (_Efg + _kB * _T * (std::log(cmg) - std::log(-cmg + 1.0)));
73 
74  if (i_var == _cmv_var)
75  return 1.0 / _Omega * (_Efv + _kB * _T * (std::log(cmv) - std::log(-cmv + 1.0)));
76 
77  mooseError("Unknown derivative requested");
78 }
79 
80 // Derivative of the Free energy
81 Real
82 KKSXeVacSolidMaterial::computeD2F(unsigned int i_var, unsigned int j_var)
83 {
84  if (i_var != j_var)
85  return 0.0;
86 
87  const Real tol = 1e-10;
88  Real cmg = _cmg[_qp] < tol ? tol : (_cmg[_qp] > (1.0 - tol) ? (1.0 - tol) : _cmg[_qp]);
89  Real cmv = _cmv[_qp] < tol ? tol : (_cmv[_qp] > (1.0 - tol) ? (1.0 - tol) : _cmv[_qp]);
90 
91  if (i_var == _cmg_var)
92  return 1.0 / _Omega * _kB * _T * (1.0 / (1.0 - cmg) + 1.0 / cmg);
93 
94  if (i_var == _cmv_var)
95  return 1.0 / _Omega * _kB * _T * (1.0 / (1.0 - cmv) + 1.0 / cmv);
96 
97  mooseError("Unknown derivative requested");
98 }
99 
100 // note that the second cross derivatives are actually 0.0!
101 
102 // Third derivative: 1.0/Omega * kB*T*((-c^m_v + 1.0)**(-2) - 1/c^m_v**2)
KKSXeVacSolidMaterial::_cmv
const VariableValue & _cmv
Definition: KKSXeVacSolidMaterial.h:51
KKSXeVacSolidMaterial::_cmg
const VariableValue & _cmg
Definition: KKSXeVacSolidMaterial.h:49
registerMooseObject
registerMooseObject("PhaseFieldApp", KKSXeVacSolidMaterial)
KKSXeVacSolidMaterial::_cmg_var
unsigned int _cmg_var
Definition: KKSXeVacSolidMaterial.h:50
KKSXeVacSolidMaterial::_kB
const Real _kB
Bolzmann constant.
Definition: KKSXeVacSolidMaterial.h:40
KKSXeVacSolidMaterial.h
KKSXeVacSolidMaterial::expectedNumArgs
virtual unsigned int expectedNumArgs()
Definition: KKSXeVacSolidMaterial.C:49
KKSXeVacSolidMaterial::_Efv
const Real _Efv
Formation energy of a tri-vacancy in UO2.
Definition: KKSXeVacSolidMaterial.h:43
KKSXeVacSolidMaterial
Definition: KKSXeVacSolidMaterial.h:20
KKSXeVacSolidMaterial::cLogC
Real cLogC(Real c)
Definition: KKSXeVacSolidMaterial.C:42
KKSXeVacSolidMaterial::KKSXeVacSolidMaterial
KKSXeVacSolidMaterial(const InputParameters &parameters)
Definition: KKSXeVacSolidMaterial.C:26
KKSXeVacSolidMaterial::_cmv_var
unsigned int _cmv_var
Definition: KKSXeVacSolidMaterial.h:52
tol
const double tol
Definition: Setup.h:18
KKSXeVacSolidMaterial::computeD2F
virtual Real computeD2F(unsigned int arg1, unsigned int arg2)
Definition: KKSXeVacSolidMaterial.C:82
KKSXeVacSolidMaterial::_T
const Real _T
Temperature in [K].
Definition: KKSXeVacSolidMaterial.h:34
KKSXeVacSolidMaterial::computeF
virtual Real computeF()
Definition: KKSXeVacSolidMaterial.C:56
KKSXeVacSolidMaterial::_Efg
const Real _Efg
Formation energy of a Xenon Atom in a tri-vacancy (TODO: if cmg>cmv consider interstitial Xe)
Definition: KKSXeVacSolidMaterial.h:47
KKSXeVacSolidMaterial::_Omega
const Real _Omega
Atomic volume in [Ang^3].
Definition: KKSXeVacSolidMaterial.h:37
validParams< KKSXeVacSolidMaterial >
InputParameters validParams< KKSXeVacSolidMaterial >()
Definition: KKSXeVacSolidMaterial.C:16
KKSXeVacSolidMaterial::computeDF
virtual Real computeDF(unsigned int arg)
Definition: KKSXeVacSolidMaterial.C:65