LCOV - code coverage report
Current view: top level - src/materials - DeformedGrainMaterial.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 66 69 95.7 %
Date: 2025-09-04 07:55:36 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 "DeformedGrainMaterial.h"
      11             : #include "GrainTrackerInterface.h"
      12             : 
      13             : registerMooseObject("PhaseFieldApp", DeformedGrainMaterial);
      14             : 
      15             : InputParameters
      16          47 : DeformedGrainMaterial::validParams()
      17             : {
      18          47 :   InputParameters params = Material::validParams();
      19          47 :   params.addClassDescription("Computes scaled grain material properties");
      20          94 :   params.addRequiredCoupledVarWithAutoBuild(
      21             :       "v", "var_name_base", "op_num", "Array of coupled variables");
      22          94 :   params.addRequiredParam<unsigned int>("deformed_grain_num",
      23             :                                         "Number of OP representing deformed grains");
      24          94 :   params.addParam<Real>("length_scale", 1.0e-9, "Length scale in m, where default is nm");
      25          94 :   params.addParam<Real>("int_width", 4.0, "Diffuse Interface width in length_scale unit");
      26          94 :   params.addParam<Real>("time_scale", 1.0e-6, "Time scale in sec, where default is micro sec");
      27          94 :   params.addParam<Real>("GBMobility", 2.0e-13, "GB mobility input in m^4/(J*s)");
      28          94 :   params.addParam<Real>("GBE", 1.0, "Grain boundary energy in J/m^2");
      29          94 :   params.addParam<Real>("Disloc_Den", 9.0e15, "Dislocation Density in m^-2");
      30          94 :   params.addParam<Real>("Elas_Mod", 2.50e10, "Elastic Modulus in J/m^3");
      31          94 :   params.addParam<Real>("Burg_vec", 3.0e-10, "Length of Burger Vector in m");
      32          94 :   params.addRequiredParam<UserObjectName>("grain_tracker",
      33             :                                           "The GrainTracker UserObject to get values from.");
      34          47 :   return params;
      35           0 : }
      36             : 
      37          36 : DeformedGrainMaterial::DeformedGrainMaterial(const InputParameters & parameters)
      38             :   : Material(parameters),
      39          36 :     _op_num(coupledComponents("v")),
      40          36 :     _vals(coupledValues("v")),
      41          72 :     _length_scale(getParam<Real>("length_scale")),
      42          72 :     _int_width(getParam<Real>("int_width")),
      43          72 :     _time_scale(getParam<Real>("time_scale")),
      44          72 :     _GBMobility(getParam<Real>("GBMobility")),
      45          72 :     _GBE(getParam<Real>("GBE")),
      46          72 :     _Disloc_Den(getParam<Real>("Disloc_Den")),
      47          72 :     _Elas_Mod(getParam<Real>("Elas_Mod")),
      48          72 :     _Burg_vec(getParam<Real>("Burg_vec")),
      49          36 :     _kappa(declareProperty<Real>("kappa_op")),
      50          36 :     _gamma(declareProperty<Real>("gamma_asymm")),
      51          36 :     _L(declareProperty<Real>("L")),
      52          36 :     _mu(declareProperty<Real>("mu")),
      53          36 :     _beta(declareProperty<Real>("beta")),
      54          36 :     _Disloc_Den_i(declareProperty<Real>("Disloc_Den_i")),
      55          36 :     _rho_eff(declareProperty<Real>("rho_eff")),
      56          36 :     _Def_Eng(declareProperty<Real>("Def_Eng")),
      57          72 :     _deformed_grain_num(getParam<unsigned int>("deformed_grain_num")),
      58          36 :     _grain_tracker(getUserObject<GrainTrackerInterface>("grain_tracker")),
      59          36 :     _kb(8.617343e-5),     // Boltzmann constant in eV/K
      60          36 :     _JtoeV(6.24150974e18) // Joule to eV conversion
      61             : {
      62          36 :   if (_op_num == 0)
      63           0 :     paramError("op_num", "Model requires op_num > 0");
      64          36 : }
      65             : 
      66             : void
      67     1085440 : DeformedGrainMaterial::computeQpProperties()
      68             : {
      69     1085440 :   _Disloc_Den_i[_qp] = _Disloc_Den * (_length_scale * _length_scale);
      70             : 
      71             :   Real rho_i;
      72             :   Real rho0 = 0.0;
      73             :   Real SumEtai2 = 0.0;
      74     9768960 :   for (unsigned int i = 0; i < _op_num; ++i)
      75     8683520 :     SumEtai2 += (*_vals[i])[_qp] * (*_vals[i])[_qp];
      76             : 
      77             :   // calculate effective dislocation density and assign zero dislocation densities to undeformed
      78             :   // grains
      79     1085440 :   const auto & op_to_grains = _grain_tracker.getVarToFeatureVector(_current_elem->id());
      80             : 
      81             :   // loop over active OPs
      82             :   bool one_active = false;
      83     9768960 :   for (MooseIndex(op_to_grains) op_index = 0; op_index < op_to_grains.size(); ++op_index)
      84             :   {
      85     8683520 :     if (op_to_grains[op_index] == FeatureFloodCount::invalid_id)
      86     7259020 :       continue;
      87             : 
      88             :     one_active = true;
      89             :     auto grain_id = op_to_grains[op_index];
      90             : 
      91     1424500 :     if (grain_id >= _deformed_grain_num)
      92             :       rho_i = 0.0;
      93             :     else
      94     1238020 :       rho_i = _Disloc_Den_i[_qp];
      95     1424500 :     rho0 += rho_i * (*_vals[op_index])[_qp] * (*_vals[op_index])[_qp];
      96             :   }
      97             : 
      98     1085440 :   if (!one_active && _t_step > 0)
      99           0 :     mooseError("No active order parameters");
     100             : 
     101     1085440 :   _rho_eff[_qp] = rho0 / SumEtai2;
     102     1085440 :   if (_rho_eff[_qp] < 1e-9)
     103             :   {
     104      126104 :     _rho_eff[_qp] = 0.0;
     105      126104 :     _Disloc_Den_i[_qp] = 0.0;
     106             :   }
     107             : 
     108     1085440 :   _beta[_qp] = 0.5 * _Elas_Mod * _Burg_vec * _Burg_vec * _JtoeV * _length_scale;
     109             : 
     110             :   // Compute the deformation energy
     111     1085440 :   _Def_Eng[_qp] = _beta[_qp] * _rho_eff[_qp];
     112             : 
     113     1085440 :   const Real sigma = _GBE * _JtoeV * (_length_scale * _length_scale);
     114     1085440 :   const Real length_scale4 = _length_scale * _length_scale * _length_scale * _length_scale;
     115     1085440 :   const Real M_GB = _GBMobility * _time_scale / (_JtoeV * length_scale4);
     116             : 
     117     1085440 :   _L[_qp] = 4.0 / 3.0 * M_GB / _int_width;
     118     1085440 :   _kappa[_qp] = 3.0 / 4.0 * sigma * _int_width;
     119     1085440 :   _gamma[_qp] = 1.5;
     120     1085440 :   _mu[_qp] = 6.0 * sigma / _int_width;
     121     1085440 : }

Generated by: LCOV version 1.14