LCOV - code coverage report
Current view: top level - src/materials - KKSXeVacSolidMaterial.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 39 44 88.6 %
Date: 2025-09-04 07:55:36 Functions: 6 7 85.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14