www.mooseframework.org
AsymptoticExpansionHomogenizationElasticConstants.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 
11 #include "MooseMesh.h"
12 
14 
16 
17 InputParameters
19 {
20  InputParameters params = ElementIntegralPostprocessor::validParams();
21  params.addClassDescription(
22  "Postprocessor for asymptotic expansion homogenization for elasticity");
23  params.addRequiredCoupledVar("dx_xx", "solution in xx");
24  params.addRequiredCoupledVar("dy_xx", "solution in xx");
25  params.addCoupledVar("dz_xx", "solution in xx");
26  params.addRequiredCoupledVar("dx_yy", "solution in yy");
27  params.addRequiredCoupledVar("dy_yy", "solution in yy");
28  params.addCoupledVar("dz_yy", "solution in yy");
29  params.addCoupledVar("dx_zz", "solution in zz");
30  params.addCoupledVar("dy_zz", "solution in zz");
31  params.addCoupledVar("dz_zz", "solution in zz");
32  params.addRequiredCoupledVar("dx_xy", "solution in xy");
33  params.addRequiredCoupledVar("dy_xy", "solution in xy");
34  params.addCoupledVar("dz_xy", "solution in xy");
35  params.addCoupledVar("dx_yz", "solution in yz");
36  params.addCoupledVar("dy_yz", "solution in yz");
37  params.addCoupledVar("dz_yz", "solution in yz");
38  params.addCoupledVar("dx_zx", "solution in zx");
39  params.addCoupledVar("dy_zx", "solution in zx");
40  params.addCoupledVar("dz_zx", "solution in zx");
41  params.addParam<std::string>("base_name",
42  "Optional parameter that allows the user to define "
43  "multiple mechanics material systems on the same "
44  "block, i.e. for multiple phases");
45  MooseEnum column("xx yy zz yz xz xy");
46  params.addRequiredParam<MooseEnum>("column",
47  column,
48  "The column of the material matrix this kernel acts in. "
49  "(xx, yy, zz, yz, xz, or xy)");
50  params.addRequiredParam<MooseEnum>("row",
51  column,
52  "The row of the material matrix this kernel acts in. "
53  "(xx, yy, zz, yz, xz, or xy)");
54  return params;
55 }
56 
58  AsymptoticExpansionHomogenizationElasticConstants(const InputParameters & parameters)
59  : ElementIntegralPostprocessor(parameters),
60  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
61  _grad({{{{&coupledGradient("dx_xx"),
62  &coupledGradient("dy_xx"),
63  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dz_xx") : &_grad_zero)}},
64  {{&coupledGradient("dx_yy"),
65  &coupledGradient("dy_yy"),
66  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dz_yy") : &_grad_zero)}},
67  {{(_subproblem.mesh().dimension() == 3 ? &coupledGradient("dx_zz") : &_grad_zero),
68  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dy_zz") : &_grad_zero),
69  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dz_zz") : &_grad_zero)}},
70  {{(_subproblem.mesh().dimension() == 3 ? &coupledGradient("dx_yz") : &_grad_zero),
71  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dy_yz") : &_grad_zero),
72  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dz_yz") : &_grad_zero)}},
73  {{(_subproblem.mesh().dimension() == 3 ? &coupledGradient("dx_zx") : &_grad_zero),
74  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dy_zx") : &_grad_zero),
75  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dz_zx") : &_grad_zero)}},
76  {{(&coupledGradient("dx_xy")),
77  (&coupledGradient("dy_xy")),
78  (_subproblem.mesh().dimension() == 3 ? &coupledGradient("dz_xy") : &_grad_zero)}}}}),
79  _elasticity_tensor(getMaterialPropertyByName<RankFourTensor>(_base_name + "elasticity_tensor")),
80  _column(getParam<MooseEnum>("column")),
81  _row(getParam<MooseEnum>("row")),
82  _ik_index({{0, 1, 2, 1, 0, 0}}),
83  _jl_index({{0, 1, 2, 2, 2, 1}}),
84  _i(_ik_index[_row]),
85  _j(_jl_index[_row]),
86  _k(_ik_index[_column]),
87  _l(_jl_index[_column]),
88  _volume(0),
89  _integral_value(0)
90 {
91 }
92 
93 void
95 {
96  _integral_value = 0;
97  _volume = 0;
98 }
99 
100 void
102 {
103  _integral_value += computeIntegral();
104  _volume += _current_elem_volume;
105 }
106 
107 Real
109 {
110 
111  gatherSum(_integral_value);
112  gatherSum(_volume);
113 
114  return (_integral_value / _volume);
115 }
116 
117 void
119 {
121  dynamic_cast<const AsymptoticExpansionHomogenizationElasticConstants &>(y);
122 
124  _volume += pps._volume;
125 }
126 
127 Real
129 {
130  Real value = 0;
131  for (unsigned p = 0; p < 3; ++p)
132  for (unsigned q = 0; q < 3; ++q)
133  value += _elasticity_tensor[_qp](_i, _j, p, q) * (*_grad[_column][p])[_qp](q);
134 
135  return _elasticity_tensor[_qp](_i, _j, _k, _l) + value;
136 }
AsymptoticExpansionHomogenizationElasticConstants::_j
const unsigned _j
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:47
AsymptoticExpansionHomogenizationElasticConstants::initialize
virtual void initialize()
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:94
registerMooseObject
registerMooseObject("TensorMechanicsApp", AsymptoticExpansionHomogenizationElasticConstants)
AsymptoticExpansionHomogenizationElasticConstants::_elasticity_tensor
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:43
AsymptoticExpansionHomogenizationElasticConstants::threadJoin
virtual void threadJoin(const UserObject &y)
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:118
defineLegacyParams
defineLegacyParams(AsymptoticExpansionHomogenizationElasticConstants)
AsymptoticExpansionHomogenizationElasticConstants.h
AsymptoticExpansionHomogenizationElasticConstants::_column
const unsigned int _column
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:44
AsymptoticExpansionHomogenizationElasticConstants::validParams
static InputParameters validParams()
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:18
AsymptoticExpansionHomogenizationElasticConstants::_grad
const std::array< std::array< const VariableGradient *, 3 >, 6 > _grad
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:41
AsymptoticExpansionHomogenizationElasticConstants::getValue
virtual Real getValue()
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:108
AsymptoticExpansionHomogenizationElasticConstants::_integral_value
Real _integral_value
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:49
validParams
InputParameters validParams()
AsymptoticExpansionHomogenizationElasticConstants
This postprocessor computes homogenized elastic constants.
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:23
AsymptoticExpansionHomogenizationElasticConstants::_l
const unsigned _l
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:47
AsymptoticExpansionHomogenizationElasticConstants::AsymptoticExpansionHomogenizationElasticConstants
AsymptoticExpansionHomogenizationElasticConstants(const InputParameters &parameters)
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:58
AsymptoticExpansionHomogenizationElasticConstants::execute
virtual void execute()
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:101
AsymptoticExpansionHomogenizationElasticConstants::_volume
Real _volume
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:48
AsymptoticExpansionHomogenizationElasticConstants::_k
const unsigned _k
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:47
AsymptoticExpansionHomogenizationElasticConstants::computeQpIntegral
virtual Real computeQpIntegral()
Definition: AsymptoticExpansionHomogenizationElasticConstants.C:128
AsymptoticExpansionHomogenizationElasticConstants::_i
const unsigned _i
Definition: AsymptoticExpansionHomogenizationElasticConstants.h:47