www.mooseframework.org
DeformedGrainMaterial.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 "DeformedGrainMaterial.h"
11 #include "GrainTrackerInterface.h"
12 
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<Material>();
20  params.addRequiredCoupledVarWithAutoBuild(
21  "v", "var_name_base", "op_num", "Array of coupled variables");
22  params.addRequiredParam<unsigned int>("deformed_grain_num",
23  "Number of OP representing deformed grains");
24  params.addParam<Real>("length_scale", 1.0e-9, "Length scale in m, where default is nm");
25  params.addParam<Real>("int_width", 4.0, "Diffuse Interface width in length_scale unit");
26  params.addParam<Real>("time_scale", 1.0e-6, "Time scale in sec, where default is micro sec");
27  params.addParam<Real>("GBMobility", 2.0e-13, "GB mobility input in m^4/(J*s)");
28  params.addParam<Real>("GBE", 1.0, "Grain boundary energy in J/m^2");
29  params.addParam<Real>("Disloc_Den", 9.0e15, "Dislocation Density in m^-2");
30  params.addParam<Real>("Elas_Mod", 2.50e10, "Elastic Modulus in J/m^3");
31  params.addParam<Real>("Burg_vec", 3.0e-10, "Length of Burger Vector in m");
32  params.addRequiredParam<UserObjectName>("grain_tracker",
33  "The GrainTracker UserObject to get values from.");
34  return params;
35 }
36 
37 DeformedGrainMaterial::DeformedGrainMaterial(const InputParameters & parameters)
38  : Material(parameters),
39  _op_num(coupledComponents("v")),
40  _vals(_op_num),
41  _length_scale(getParam<Real>("length_scale")),
42  _int_width(getParam<Real>("int_width")),
43  _time_scale(getParam<Real>("time_scale")),
44  _GBMobility(getParam<Real>("GBMobility")),
45  _GBE(getParam<Real>("GBE")),
46  _Disloc_Den(getParam<Real>("Disloc_Den")),
47  _Elas_Mod(getParam<Real>("Elas_Mod")),
48  _Burg_vec(getParam<Real>("Burg_vec")),
49  _kappa(declareProperty<Real>("kappa_op")),
50  _gamma(declareProperty<Real>("gamma_asymm")),
51  _L(declareProperty<Real>("L")),
52  _mu(declareProperty<Real>("mu")),
53  _beta(declareProperty<Real>("beta")),
54  _Disloc_Den_i(declareProperty<Real>("Disloc_Den_i")),
55  _rho_eff(declareProperty<Real>("rho_eff")),
56  _Def_Eng(declareProperty<Real>("Def_Eng")),
57  _deformed_grain_num(getParam<unsigned int>("deformed_grain_num")),
58  _grain_tracker(getUserObject<GrainTrackerInterface>("grain_tracker")),
59  _kb(8.617343e-5), // Boltzmann constant in eV/K
60  _JtoeV(6.24150974e18) // Joule to eV conversion
61 {
62  if (_op_num == 0)
63  paramError("op_num", "Model requires op_num > 0");
64 
65  for (unsigned int i = 0; i < _op_num; ++i)
66  _vals[i] = &coupledValue("v", i);
67 }
68 
69 void
71 {
73 
74  Real rho_i;
75  Real rho0 = 0.0;
76  Real SumEtai2 = 0.0;
77  for (unsigned int i = 0; i < _op_num; ++i)
78  SumEtai2 += (*_vals[i])[_qp] * (*_vals[i])[_qp];
79 
80  // calculate effective dislocation density and assign zero dislocation densities to undeformed
81  // grains
82  const auto & op_to_grains = _grain_tracker.getVarToFeatureVector(_current_elem->id());
83 
84  // loop over active OPs
85  bool one_active = false;
86  for (MooseIndex(op_to_grains) op_index = 0; op_index < op_to_grains.size(); ++op_index)
87  {
88  if (op_to_grains[op_index] == FeatureFloodCount::invalid_id)
89  continue;
90 
91  one_active = true;
92  auto grain_id = op_to_grains[op_index];
93 
94  if (grain_id >= _deformed_grain_num)
95  rho_i = 0.0;
96  else
97  rho_i = _Disloc_Den_i[_qp];
98  rho0 += rho_i * (*_vals[op_index])[_qp] * (*_vals[op_index])[_qp];
99  }
100 
101  if (!one_active && _t_step > 0)
102  mooseError("No active order parameters");
103 
104  _rho_eff[_qp] = rho0 / SumEtai2;
105  if (_rho_eff[_qp] < 1e-9)
106  {
107  _rho_eff[_qp] = 0.0;
108  _Disloc_Den_i[_qp] = 0.0;
109  }
110 
111  _beta[_qp] = 0.5 * _Elas_Mod * _Burg_vec * _Burg_vec * _JtoeV * _length_scale;
112 
113  // Compute the deformation energy
114  _Def_Eng[_qp] = _beta[_qp] * _rho_eff[_qp];
115 
116  const Real sigma = _GBE * _JtoeV * (_length_scale * _length_scale);
117  const Real length_scale4 = _length_scale * _length_scale * _length_scale * _length_scale;
118  const Real M_GB = _GBMobility * _time_scale / (_JtoeV * length_scale4);
119 
120  _L[_qp] = 4.0 / 3.0 * M_GB / _int_width;
121  _kappa[_qp] = 3.0 / 4.0 * sigma * _int_width;
122  _gamma[_qp] = 1.5;
123  _mu[_qp] = 6.0 * sigma / _int_width;
124 }
DeformedGrainMaterial::_kappa
MaterialProperty< Real > & _kappa
the same parameters that appear in the original grain growth model
Definition: DeformedGrainMaterial.h:57
GrainTrackerInterface
This class defines the interface for the GrainTracking objects.
Definition: GrainTrackerInterface.h:24
DeformedGrainMaterial::_vals
std::vector< const VariableValue * > _vals
order parameter values
Definition: DeformedGrainMaterial.h:37
DeformedGrainMaterial::_deformed_grain_num
const unsigned int _deformed_grain_num
number of deformed grains
Definition: DeformedGrainMaterial.h:77
DeformedGrainMaterial::_grain_tracker
const GrainTrackerInterface & _grain_tracker
Grain tracker object.
Definition: DeformedGrainMaterial.h:80
DeformedGrainMaterial::_time_scale
const Real _time_scale
Definition: DeformedGrainMaterial.h:41
DeformedGrainMaterial::_beta
MaterialProperty< Real > & _beta
the prefactor needed to calculate the deformation energy from dislocation density
Definition: DeformedGrainMaterial.h:63
DeformedGrainMaterial::_Def_Eng
MaterialProperty< Real > & _Def_Eng
the deformation energy
Definition: DeformedGrainMaterial.h:72
DeformedGrainMaterial::_Disloc_Den_i
MaterialProperty< Real > & _Disloc_Den_i
dislocation density in grain i
Definition: DeformedGrainMaterial.h:66
DeformedGrainMaterial::_gamma
MaterialProperty< Real > & _gamma
Definition: DeformedGrainMaterial.h:58
DeformedGrainMaterial::_L
MaterialProperty< Real > & _L
Definition: DeformedGrainMaterial.h:59
validParams< DeformedGrainMaterial >
InputParameters validParams< DeformedGrainMaterial >()
Definition: DeformedGrainMaterial.C:17
DeformedGrainMaterial::_Burg_vec
const Real _Burg_vec
the Length of Burger's Vector
Definition: DeformedGrainMaterial.h:54
DeformedGrainMaterial::_rho_eff
MaterialProperty< Real > & _rho_eff
the average/effective dislocation density
Definition: DeformedGrainMaterial.h:69
GrainTrackerInterface::getVarToFeatureVector
virtual const std::vector< unsigned int > & getVarToFeatureVector(dof_id_type elem_id) const =0
Returns a list of active unique feature ids for a particular element.
DeformedGrainMaterial::_length_scale
const Real _length_scale
Definition: DeformedGrainMaterial.h:39
FeatureFloodCount::invalid_id
static const unsigned int invalid_id
Definition: FeatureFloodCount.h:94
DeformedGrainMaterial.h
GrainTrackerInterface.h
DeformedGrainMaterial::computeQpProperties
virtual void computeQpProperties()
Definition: DeformedGrainMaterial.C:70
DeformedGrainMaterial::_op_num
const unsigned int _op_num
total number of grains
Definition: DeformedGrainMaterial.h:34
DeformedGrainMaterial::_Elas_Mod
const Real _Elas_Mod
the elastic modulus
Definition: DeformedGrainMaterial.h:51
DeformedGrainMaterial::_JtoeV
const Real _JtoeV
Definition: DeformedGrainMaterial.h:82
DeformedGrainMaterial::DeformedGrainMaterial
DeformedGrainMaterial(const InputParameters &parameters)
Definition: DeformedGrainMaterial.C:37
DeformedGrainMaterial::_GBE
const Real _GBE
the GB Energy
Definition: DeformedGrainMaterial.h:45
DeformedGrainMaterial::_mu
MaterialProperty< Real > & _mu
Definition: DeformedGrainMaterial.h:60
DeformedGrainMaterial
Calculates The Deformation Energy associated with a specific dislocation density.
Definition: DeformedGrainMaterial.h:25
DeformedGrainMaterial::_Disloc_Den
const Real _Disloc_Den
the average dislocation density
Definition: DeformedGrainMaterial.h:48
DeformedGrainMaterial::_GBMobility
const Real _GBMobility
Definition: DeformedGrainMaterial.h:42
registerMooseObject
registerMooseObject("PhaseFieldApp", DeformedGrainMaterial)
DeformedGrainMaterial::_int_width
const Real _int_width
Definition: DeformedGrainMaterial.h:40