LCOV - code coverage report
Current view: top level - src/materials - GrandPotentialSinteringMaterial.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #32971 (54bef8) with base c6cf66 Lines: 247 249 99.2 %
Date: 2026-05-29 20:38:39 Functions: 3 3 100.0 %
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 "GrandPotentialSinteringMaterial.h"
      11             : #include "libmesh/quadrature.h"
      12             : #include "libmesh/utility.h"
      13             : 
      14             : registerMooseObject("PhaseFieldApp", GrandPotentialSinteringMaterial);
      15             : 
      16             : InputParameters
      17         155 : GrandPotentialSinteringMaterial::validParams()
      18             : {
      19         155 :   InputParameters params = Material::validParams();
      20         155 :   params.addClassDescription(
      21             :       "Includes switching and thermodynamic properties for the grand potential sintering model");
      22         310 :   params.addRequiredCoupledVarWithAutoBuild(
      23             :       "etas", "var_name_base", "op_num", "Array of order parameters that describe solid phase");
      24         310 :   params.addRequiredCoupledVar("chemical_potential", "The name of the chemical potential variable");
      25         310 :   params.addRequiredCoupledVar("void_op", "The name of the void phase order parameter");
      26         310 :   params.addRequiredCoupledVar("Temperature", "Name of the temperature variable with units of K");
      27         310 :   params.addParam<MaterialPropertyName>(
      28             :       "solid_energy_coefficient",
      29         310 :       1.0,
      30             :       "Parabolic solid energy coefficient (energy/volume). Only used for parabolic energy.");
      31         310 :   params.addRequiredParam<MaterialPropertyName>(
      32             :       "void_energy_coefficient", "Parabolic void energy coefficient (energy/volume)");
      33         310 :   params.addParam<Real>("surface_energy", 19.7, "Surface energy in units of problem (energy/area)");
      34         310 :   params.addParam<Real>(
      35         310 :       "grainboundary_energy", 9.86, "Grain boundary energy in units of problem (energy/area)");
      36         310 :   params.addParam<Real>("int_width", 1, "Interface width in units of problem (length)");
      37         310 :   params.addParam<Real>("surface_switch_value",
      38         310 :                         0.3,
      39             :                         "Value between 0 and 1 that determines when the interface begins to switch "
      40             :                         "from surface to GB. Small values give less error while large values "
      41             :                         "converge better.");
      42         310 :   params.addRequiredParam<MaterialPropertyName>(
      43             :       "equilibrium_vacancy_concentration",
      44             :       "Name of material that determines the equilibrium vacancy concentration in the solid phase");
      45         310 :   params.addParam<Real>("atomic_volume", 0.04092, "Atomic volume of material");
      46         310 :   MooseEnum solid_energy_model("PARABOLIC DILUTE IDEAL", "PARABOLIC");
      47         310 :   params.addParam<MooseEnum>("solid_energy_model",
      48             :                              solid_energy_model,
      49             :                              "Type of energy function to use for the solid phase.");
      50         310 :   params.addParam<bool>(
      51         310 :       "mass_conservation", false, "imposing strict mass conservation formulation");
      52         155 :   return params;
      53         155 : }
      54             : 
      55         120 : GrandPotentialSinteringMaterial::GrandPotentialSinteringMaterial(const InputParameters & parameters)
      56             :   : DerivativeMaterialInterface<Material>(parameters),
      57         120 :     _neta(coupledComponents("etas")),
      58         120 :     _eta(_neta),
      59         120 :     _eta_name(_neta),
      60         120 :     _w(coupledValue("chemical_potential")),
      61         120 :     _w_name(coupledName("chemical_potential", 0)),
      62         120 :     _phi(coupledValue("void_op")),
      63         120 :     _phi_name(coupledName("void_op", 0)),
      64         120 :     _cs_eq_name(getParam<MaterialPropertyName>("equilibrium_vacancy_concentration")),
      65         120 :     _cs_eq(getMaterialProperty<Real>(_cs_eq_name)),
      66         120 :     _dcs_eq(_neta),
      67         120 :     _d2cs_eq(_neta),
      68         120 :     _T(coupledValue("Temperature")),
      69         240 :     _kv(getMaterialProperty<Real>("void_energy_coefficient")),
      70         240 :     _ks(getMaterialProperty<Real>("solid_energy_coefficient")),
      71         120 :     _hv(declareProperty<Real>("hv")),
      72         120 :     _dhv(declarePropertyDerivative<Real>("hv", _phi_name)),
      73         120 :     _d2hv(declarePropertyDerivative<Real>("hv", _phi_name, _phi_name)),
      74         120 :     _hs(declareProperty<Real>("hs")),
      75         120 :     _dhs(declarePropertyDerivative<Real>("hs", _phi_name)),
      76         120 :     _d2hs(declarePropertyDerivative<Real>("hs", _phi_name, _phi_name)),
      77         120 :     _chi(declareProperty<Real>("chi")),
      78         120 :     _dchidphi(declarePropertyDerivative<Real>("chi", _phi_name)),
      79         120 :     _dchidw(declarePropertyDerivative<Real>("chi", _w_name)),
      80         120 :     _d2chidphi2(declarePropertyDerivative<Real>("chi", _phi_name, _phi_name)),
      81         120 :     _d2chidw2(declarePropertyDerivative<Real>("chi", _w_name, _w_name)),
      82         120 :     _d2chidphidw(declarePropertyDerivative<Real>("chi", _phi_name, _w_name)),
      83         120 :     _rhov(declareProperty<Real>("rhov")),
      84         120 :     _drhovdw(declarePropertyDerivative<Real>("rhov", _w_name)),
      85         120 :     _rhos(declareProperty<Real>("rhos")),
      86         120 :     _drhosdw(declarePropertyDerivative<Real>("rhos", _w_name)),
      87         120 :     _d2rhosdw2(declarePropertyDerivative<Real>("rhos", _w_name, _w_name)),
      88         120 :     _drhos(_neta),
      89         120 :     _d2rhosdwdeta(_neta),
      90         120 :     _d2rhos(_neta),
      91         120 :     _omegav(declareProperty<Real>("omegav")),
      92         120 :     _domegavdw(declarePropertyDerivative<Real>("omegav", _w_name)),
      93         120 :     _d2omegavdw2(declarePropertyDerivative<Real>("omegav", _w_name, _w_name)),
      94         120 :     _omegas(declareProperty<Real>("omegas")),
      95         120 :     _domegasdw(declarePropertyDerivative<Real>("omegas", _w_name)),
      96         120 :     _d2omegasdw2(declarePropertyDerivative<Real>("omegas", _w_name, _w_name)),
      97         120 :     _domegasdeta(_neta),
      98         120 :     _d2omegasdwdeta(_neta),
      99         120 :     _d2omegasdetadeta(_neta),
     100         120 :     _mu(declareProperty<Real>("mu")),
     101         120 :     _dmu(declarePropertyDerivative<Real>("mu", _phi_name)),
     102         120 :     _d2mu(declarePropertyDerivative<Real>("mu", _phi_name, _phi_name)),
     103         120 :     _kappa(declareProperty<Real>("kappa")),
     104         120 :     _dkappa(declarePropertyDerivative<Real>("kappa", _phi_name)),
     105         120 :     _d2kappa(declarePropertyDerivative<Real>("kappa", _phi_name, _phi_name)),
     106         120 :     _gamma(declareProperty<Real>("gamma")),
     107         120 :     _hv_c_min(declareProperty<Real>("hv_c_min")),
     108         120 :     _dhv_c_mindphi(declarePropertyDerivative<Real>("hv_c_min", _phi_name)),
     109         120 :     _d2hv_c_mindphi2(declarePropertyDerivative<Real>("hv_c_min", _phi_name, _phi_name)),
     110         120 :     _hs_c_min(declareProperty<Real>("hs_c_min")),
     111         120 :     _dhs_c_mindphi(declarePropertyDerivative<Real>("hs_c_min", _phi_name)),
     112         120 :     _d2hs_c_mindphi2(declarePropertyDerivative<Real>("hs_c_min", _phi_name, _phi_name)),
     113         120 :     _dhs_c_min(_neta),
     114         120 :     _d2hs_c_min(_neta),
     115         120 :     _hv_over_kVa(declareProperty<Real>("hv_over_kVa")),
     116         120 :     _dhv_over_kVadphi(declarePropertyDerivative<Real>("hv_over_kVa", _phi_name)),
     117         120 :     _d2hv_over_kVadphi2(declarePropertyDerivative<Real>("hv_over_kVa", _phi_name, _phi_name)),
     118         120 :     _hs_over_kVa(declareProperty<Real>("hs_over_kVa")),
     119         120 :     _dhs_over_kVadphi(declarePropertyDerivative<Real>("hs_over_kVa", _phi_name)),
     120         120 :     _d2hs_over_kVadphi2(declarePropertyDerivative<Real>("hs_over_kVa", _phi_name, _phi_name)),
     121             : 
     122         240 :     _sigma_s(getParam<Real>("surface_energy")),
     123         240 :     _sigma_gb(getParam<Real>("grainboundary_energy")),
     124         240 :     _int_width(getParam<Real>("int_width")),
     125         240 :     _switch(getParam<Real>("surface_switch_value")),
     126         240 :     _Va(getParam<Real>("atomic_volume")),
     127         240 :     _solid_energy(getParam<MooseEnum>("solid_energy_model")),
     128         120 :     _mu_s(6.0 * _sigma_s / _int_width),
     129         120 :     _mu_gb(6.0 * _sigma_gb / _int_width),
     130         120 :     _kappa_s(0.75 * _sigma_s * _int_width),
     131         120 :     _kappa_gb(0.75 * _sigma_gb * _int_width),
     132         120 :     _kB(8.617343e-5), // eV/K
     133         360 :     _mass_conservation(getParam<bool>("mass_conservation"))
     134             : {
     135         120 :   if ((_switch > 1.0) || (_switch < 0.0))
     136           0 :     mooseError("GrandPotentialSinteringMaterial: surface_switch_value should be between 0 and 1");
     137             : 
     138         120 :   if (_mass_conservation && _solid_energy > 0)
     139           0 :     mooseError("GrandPotentialSinteringMaterial: strict mass conservation is currently only "
     140             :                "applicable to parabolic free energy");
     141             : 
     142         408 :   for (unsigned int i = 0; i < _neta; ++i)
     143             :   {
     144         288 :     _eta[i] = &coupledValue("etas", i);
     145         288 :     _eta_name[i] = coupledName("etas", i);
     146         288 :     _dcs_eq[i] = &getMaterialPropertyDerivativeByName<Real>(_cs_eq_name, _eta_name[i]);
     147         288 :     _d2cs_eq[i].resize(_neta);
     148         288 :     _drhos[i] = &declarePropertyDerivative<Real>("rhos", _eta_name[i]);
     149         288 :     _d2rhos[i].resize(_neta);
     150         288 :     _d2rhosdwdeta[i] = &declarePropertyDerivative<Real>("rhos", _w_name, _eta_name[i]);
     151         288 :     _domegasdeta[i] = &declarePropertyDerivative<Real>("omegas", _eta_name[i]);
     152         288 :     _d2omegasdwdeta[i] = &declarePropertyDerivative<Real>("omegas", _w_name, _eta_name[i]);
     153         288 :     _d2omegasdetadeta[i].resize(_neta);
     154         288 :     _dhs_c_min[i] = &declarePropertyDerivative<Real>("hs_c_min", _eta_name[i]);
     155         288 :     _d2hs_c_min[i].resize(_neta);
     156             : 
     157         816 :     for (unsigned int j = 0; j <= i; ++j)
     158             :     {
     159         528 :       _d2cs_eq[j][i] =
     160         528 :           &getMaterialPropertyDerivativeByName<Real>(_cs_eq_name, _eta_name[j], _eta_name[i]);
     161         528 :       _d2rhos[j][i] = &declarePropertyDerivative<Real>("rhos", _eta_name[j], _eta_name[i]);
     162         528 :       _d2omegasdetadeta[j][i] =
     163        1056 :           &declarePropertyDerivative<Real>("omegas", _eta_name[j], _eta_name[i]);
     164         528 :       _d2hs_c_min[j][i] = &declarePropertyDerivative<Real>("hs_c_min", _eta_name[j], _eta_name[i]);
     165             :     }
     166             :   }
     167         120 : }
     168             : 
     169             : void
     170     5509564 : GrandPotentialSinteringMaterial::computeQpProperties()
     171             : {
     172             :   // Calculate phase switching functions
     173     5509564 :   _hv[_qp] = 0.0;
     174     5509564 :   _dhv[_qp] = 0.0;
     175     5509564 :   _d2hv[_qp] = 0.0;
     176             : 
     177     5509564 :   if (_phi[_qp] >= 1.0)
     178     1141772 :     _hv[_qp] = 1.0;
     179     4367792 :   else if (_phi[_qp] > 0.0)
     180             :   {
     181     3348678 :     _hv[_qp] = _phi[_qp] * _phi[_qp] * _phi[_qp] * (10.0 + _phi[_qp] * (-15.0 + _phi[_qp] * 6.0));
     182     3348678 :     _dhv[_qp] = 30.0 * _phi[_qp] * _phi[_qp] * (_phi[_qp] - 1.0) * (_phi[_qp] - 1.0);
     183     3348678 :     _d2hv[_qp] = 60.0 * _phi[_qp] * (2.0 * _phi[_qp] - 1.0) * (_phi[_qp] - 1.0);
     184             :   }
     185             : 
     186     5509564 :   _hs[_qp] = 1.0 - _hv[_qp];
     187     5509564 :   _dhs[_qp] = -_dhv[_qp];
     188     5509564 :   _d2hs[_qp] = -_d2hv[_qp];
     189             : 
     190             :   // Calculate interface switching function
     191     5509564 :   Real phi = _phi[_qp] / _switch;
     192             :   Real f = 0.0;
     193             :   Real df = 0.0;
     194             :   Real d2f = 0.0;
     195     5509564 :   if (phi >= 1.0)
     196             :     f = 1.0;
     197     2559540 :   else if (phi > 0.0)
     198             :   {
     199     1540426 :     f = phi * phi * phi * (10.0 + phi * (-15.0 + phi * 6.0));
     200     1540426 :     df = 30.0 / _switch * phi * phi * (phi - 1.0) * (phi - 1.0);
     201     1540426 :     d2f = 60.0 * phi / (_switch * _switch) * (2.0 * phi - 1.0) * (phi - 1.0);
     202             :   }
     203             : 
     204             :   // Equilibrium vacancy concentration
     205             :   Real cv_eq = 1.0;
     206             : 
     207             :   // Calculate the void phase density and potentials
     208     5509564 :   _rhov[_qp] = _w[_qp] / (_Va * _Va * _kv[_qp]) + cv_eq / _Va;
     209     5509564 :   _drhovdw[_qp] = 1.0 / (_Va * _Va * _kv[_qp]);
     210             : 
     211     5509564 :   _omegav[_qp] = -0.5 * _w[_qp] * _w[_qp] / (_Va * _Va * _kv[_qp]) - _w[_qp] * cv_eq / _Va;
     212     5509564 :   _domegavdw[_qp] = -_rhov[_qp];
     213     5509564 :   _d2omegavdw2[_qp] = -_drhovdw[_qp];
     214             : 
     215             :   // Calculate solid phase density and potential
     216             :   Real d3rhosdw3 = 0;
     217     5509564 :   switch (_solid_energy)
     218             :   {
     219     5457884 :     case 0: // PARABOLIC
     220             :     {
     221     5457884 :       _rhos[_qp] = _w[_qp] / (_Va * _Va * _ks[_qp]) + _cs_eq[_qp] / _Va;
     222     5457884 :       _drhosdw[_qp] = 1.0 / (_Va * _Va * _ks[_qp]);
     223     5457884 :       _d2rhosdw2[_qp] = 0.0;
     224             :       d3rhosdw3 = 0.0;
     225             : 
     226     5457884 :       _omegas[_qp] =
     227     5457884 :           -0.5 * _w[_qp] * _w[_qp] / (_Va * _Va * _ks[_qp]) - _w[_qp] * _cs_eq[_qp] / _Va;
     228     5457884 :       _domegasdw[_qp] = -_rhos[_qp];
     229     5457884 :       _d2omegasdw2[_qp] = -_drhosdw[_qp];
     230             : 
     231             :       // bodyforce and matreact coefficients for strict mass conservation case
     232     5457884 :       _hv_c_min[_qp] = _hv[_qp] * 1.0;
     233     5457884 :       _dhv_c_mindphi[_qp] = _dhv[_qp] * 1.0;
     234     5457884 :       _d2hv_c_mindphi2[_qp] = _d2hv[_qp] * 1.0;
     235     5457884 :       _hs_c_min[_qp] = _hs[_qp] * _cs_eq[_qp];
     236     5457884 :       _dhs_c_mindphi[_qp] = _dhs[_qp] * _cs_eq[_qp];
     237     5457884 :       _d2hs_c_mindphi2[_qp] = _d2hs[_qp] * _cs_eq[_qp];
     238     5457884 :       _hv_over_kVa[_qp] = _hv[_qp] / (_Va * _kv[_qp]);
     239     5457884 :       _dhv_over_kVadphi[_qp] = _dhv[_qp] / (_Va * _kv[_qp]);
     240     5457884 :       _d2hv_over_kVadphi2[_qp] = _d2hv[_qp] / (_Va * _kv[_qp]);
     241     5457884 :       _hs_over_kVa[_qp] = _hs[_qp] / (_Va * _ks[_qp]);
     242     5457884 :       _dhs_over_kVadphi[_qp] = _dhs[_qp] / (_Va * _ks[_qp]);
     243     5457884 :       _d2hs_over_kVadphi2[_qp] = _d2hs[_qp] / (_Va * _ks[_qp]);
     244             : 
     245    16426828 :       for (unsigned int i = 0; i < _neta; ++i)
     246             :       {
     247    10968944 :         (*_drhos[i])[_qp] = (*_dcs_eq[i])[_qp] / _Va;
     248    10968944 :         (*_d2rhosdwdeta[i])[_qp] = 0.0;
     249    10968944 :         (*_domegasdeta[i])[_qp] = -_w[_qp] * (*_dcs_eq[i])[_qp] / _Va;
     250    10968944 :         (*_d2omegasdwdeta[i])[_qp] = -(*_dcs_eq[i])[_qp] / _Va;
     251    10968944 :         (*_dhs_c_min[i])[_qp] = _hs[_qp] * (*_dcs_eq[i])[_qp];
     252    27528712 :         for (unsigned int j = i; j < _neta; ++j)
     253             :         {
     254    16559768 :           (*_d2rhos[i][j])[_qp] = (*_d2cs_eq[i][j])[_qp] / _Va;
     255    16559768 :           (*_d2omegasdetadeta[i][j])[_qp] = -_w[_qp] * (*_d2cs_eq[i][j])[_qp] / _Va;
     256    16559768 :           (*_d2hs_c_min[i][j])[_qp] = _hs[_qp] * (*_d2cs_eq[i][j])[_qp];
     257             :         }
     258             :       }
     259             :       break;
     260             :     }       // case 0; // PARABOLIC
     261       25840 :     case 1: // DILUTE
     262             :     {
     263       25840 :       Real rho_exp = std::exp(_w[_qp] / _kB / _T[_qp]);
     264       25840 :       _rhos[_qp] = _cs_eq[_qp] / _Va * rho_exp;
     265       25840 :       _drhosdw[_qp] = _rhos[_qp] / _kB / _T[_qp];
     266       25840 :       _d2rhosdw2[_qp] = _drhosdw[_qp] / _kB / _T[_qp];
     267       25840 :       d3rhosdw3 = _d2rhosdw2[_qp] / _kB / _T[_qp];
     268             : 
     269       25840 :       _omegas[_qp] = _kB * _T[_qp] * (_cs_eq[_qp] / _Va - _rhos[_qp]);
     270       25840 :       _domegasdw[_qp] = -_rhos[_qp];
     271       25840 :       _d2omegasdw2[_qp] = -_drhosdw[_qp];
     272       77520 :       for (unsigned int i = 0; i < _neta; ++i)
     273             :       {
     274       51680 :         (*_drhos[i])[_qp] = (*_dcs_eq[i])[_qp] * rho_exp / _Va;
     275       51680 :         (*_d2rhosdwdeta[i])[_qp] = 0.0;
     276       51680 :         (*_domegasdeta[i])[_qp] = _kB * _T[_qp] * (*_dcs_eq[i])[_qp] / _Va * (1.0 - rho_exp);
     277       51680 :         (*_d2omegasdwdeta[i])[_qp] = -1.0 / _Va * (*_dcs_eq[i])[_qp] * rho_exp;
     278      129200 :         for (unsigned int j = i; j < _neta; ++j)
     279             :         {
     280       77520 :           (*_d2rhos[i][j])[_qp] = (*_d2cs_eq[i][j])[_qp] * rho_exp / _Va;
     281       77520 :           (*_d2omegasdetadeta[i][j])[_qp] =
     282       77520 :               _kB * _T[_qp] * (*_d2cs_eq[i][j])[_qp] / _Va * (1.0 - rho_exp);
     283             :         }
     284             :       }
     285             :       break;
     286             :     }       // case 1: // DILUTE
     287       25840 :     case 2: // IDEAL
     288             :     {
     289       25840 :       Real Ef = -_kB * _T[_qp] * std::log(_cs_eq[_qp] / (1.0 - _cs_eq[_qp]));
     290             :       std::vector<Real> dEf;
     291             :       std::vector<std::vector<Real>> d2Ef;
     292       25840 :       dEf.resize(_neta);
     293       25840 :       d2Ef.resize(_neta);
     294             : 
     295       25840 :       Real x = std::exp((_w[_qp] - Ef) / (_kB * _T[_qp]));
     296       25840 :       Real x0 = std::exp(-Ef / (_kB * _T[_qp]));
     297       25840 :       _rhos[_qp] = x / ((1.0 + x) * _Va);
     298       25840 :       Real rhos0 = x0 / ((1.0 + x0) * _Va);
     299       25840 :       _drhosdw[_qp] = x / (Utility::pow<2>(1.0 + x) * _Va * _kB * _T[_qp]);
     300       25840 :       _d2rhosdw2[_qp] =
     301       25840 :           x * (1.0 - x) / (_Va * Utility::pow<2>(_kB * _T[_qp]) * Utility::pow<3>(1.0 + x));
     302       25840 :       d3rhosdw3 = x * (1 - 4.0 * x + x * x) /
     303       25840 :                   (_Va * Utility::pow<3>(_kB * _T[_qp]) * Utility::pow<4>(1.0 + x));
     304             : 
     305       25840 :       _omegas[_qp] = _kB * _T[_qp] / _Va * (std::log(1.0 + x0) - std::log(1.0 + x));
     306       25840 :       _domegasdw[_qp] = -_rhos[_qp];
     307       25840 :       _d2omegasdw2[_qp] = -_drhosdw[_qp];
     308       77520 :       for (unsigned int i = 0; i < _neta; ++i)
     309             :       {
     310       51680 :         dEf[i] =
     311       51680 :             -_kB * _T[_qp] * (*_dcs_eq[i])[_qp] * (1.0 / _cs_eq[_qp] + 1.0 / (1.0 - _cs_eq[_qp]));
     312       51680 :         d2Ef[i].resize(_neta);
     313             : 
     314       51680 :         (*_drhos[i])[_qp] = -dEf[i] * _drhosdw[_qp];
     315       51680 :         (*_d2rhosdwdeta[i])[_qp] = -dEf[i] * _d2rhosdw2[_qp];
     316             : 
     317       51680 :         (*_domegasdeta[i])[_qp] = dEf[i] * (_rhos[_qp] - rhos0);
     318       51680 :         (*_d2omegasdwdeta[i])[_qp] = dEf[i] * _drhosdw[_qp];
     319             : 
     320      129200 :         for (unsigned int j = i; j < _neta; ++j)
     321             :         {
     322       77520 :           d2Ef[i][j] = -_kB * _T[_qp] *
     323       77520 :                        ((*_d2cs_eq[i][j])[_qp] * (1.0 / _cs_eq[_qp] + 1.0 / (1.0 - _cs_eq[_qp])) +
     324       77520 :                         (*_dcs_eq[i])[_qp] * (*_dcs_eq[j])[_qp] *
     325       77520 :                             (1.0 / ((1.0 - _cs_eq[_qp]) * (1.0 - _cs_eq[_qp])) -
     326       77520 :                              1.0 / (_cs_eq[_qp] * _cs_eq[_qp])));
     327             : 
     328       77520 :           (*_d2rhos[i][j])[_qp] = -d2Ef[i][j] * _drhosdw[_qp] + dEf[i] * dEf[j] * _d2rhosdw2[_qp];
     329       77520 :           (*_d2omegasdetadeta[i][j])[_qp] =
     330       77520 :               d2Ef[i][j] * (_rhos[_qp] - rhos0) +
     331       77520 :               dEf[i] * dEf[j] / (_Va * _kB * _T[_qp]) *
     332       77520 :                   (x / Utility::pow<2>(1.0 + x) - x0 / Utility::pow<2>(1.0 + x0));
     333             :         }
     334             :       }
     335             :       break;
     336       25840 :     } // case 2: // IDEAL
     337             :   }   // switch (_solid_energy)
     338             : 
     339             :   // Calculate the susceptibility
     340     5509564 :   _chi[_qp] = _hs[_qp] * _drhosdw[_qp] + _hv[_qp] * _drhovdw[_qp];
     341     5509564 :   _dchidphi[_qp] = _dhs[_qp] * _drhosdw[_qp] + _dhv[_qp] * _drhovdw[_qp];
     342     5509564 :   _dchidw[_qp] = _hs[_qp] * _d2rhosdw2[_qp];
     343     5509564 :   _d2chidphi2[_qp] = _d2hs[_qp] * _drhosdw[_qp] + _d2hv[_qp] * _drhovdw[_qp];
     344     5509564 :   _d2chidw2[_qp] = _hs[_qp] * d3rhosdw3;
     345     5509564 :   _d2chidphidw[_qp] = _dhs[_qp] * _d2rhosdw2[_qp];
     346             : 
     347             :   // thermodynamic parameters
     348     5509564 :   _mu[_qp] = _mu_gb + (_mu_s - _mu_gb) * f;
     349     5509564 :   _kappa[_qp] = _kappa_gb + (_kappa_s - _kappa_gb) * f;
     350     5509564 :   _dmu[_qp] = (_mu_s - _mu_gb) * df;
     351     5509564 :   _dkappa[_qp] = (_kappa_s - _kappa_gb) * df;
     352     5509564 :   _d2mu[_qp] = (_mu_s - _mu_gb) * d2f;
     353     5509564 :   _d2kappa[_qp] = (_kappa_s - _kappa_gb) * d2f;
     354     5509564 :   _gamma[_qp] = 1.5;
     355     5509564 : } // void GrandPotentialSinteringMaterial::computeQpProperties()

Generated by: LCOV version 1.14