www.mooseframework.org
LinearAnisotropicMaterial.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 
12 
14 
15 template <>
16 InputParameters
18 {
19 
20  InputParameters params = validParams<LinearIsotropicMaterial>();
21  params.addRequiredParam<Real>("material_constant_c11", "Material modulus C11");
22  params.addRequiredParam<Real>("material_constant_c12", "Material modulus C12");
23  params.addRequiredParam<Real>("material_constant_c44", "Material modulus C44");
24  params.addParam<Real>("euler_angle_1", 0.0, "Euler angle in direction 1");
25  params.addParam<Real>("euler_angle_2", 0.0, "Euler angle in direction 2");
26  params.addParam<Real>("euler_angle_3", 0.0, "Euler angle in direction 3");
27  return params;
28 }
29 
30 LinearAnisotropicMaterial::LinearAnisotropicMaterial(const InputParameters & parameters)
31  : LinearIsotropicMaterial(parameters),
32  _material_constant_c11(getParam<Real>("material_constant_c11")),
33  _material_constant_c12(getParam<Real>("material_constant_c12")),
34  _material_constant_c44(getParam<Real>("material_constant_c44")),
35  _euler_angle_1(getParam<Real>("euler_angle_1")),
36  _euler_angle_2(getParam<Real>("euler_angle_2")),
37  _euler_angle_3(getParam<Real>("euler_angle_3"))
38 {
40  aniso_elasticity_tensor->setMaterialConstantc11(_material_constant_c11);
41  aniso_elasticity_tensor->setMaterialConstantc12(_material_constant_c12);
42  aniso_elasticity_tensor->setMaterialConstantc44(_material_constant_c44);
43 
44  /* AMJ: I believe I have identified a logic bug with using inherited classes (e.g.,
45  LinearAnisotropicMaterial and non-zero Euler angles in conjunction with/inheriting from
46  LinearIsotropicMaterial. When using Euler angles = 0.0, no problem occurs. However,
47  using Euler angles != zero causes the _elasticity_tensor[_qp]=*_local_elasticity_tensor
48  to rotate with every single quadrature point, every time the Material class is
49  computed. This is due to the _local_elasticity_tensor->calculate(_qp) call. Because
50  we are dereferencing the _local_elasticity_tensor, we are actually changing the
51  original elasticity tensor that is supplied (from the input or material class
52  construction, etc). I've attempted to fix this by moving the relevant information
53  into a local copy_local_tensor variable, but (perhaps because I don't know enough
54  C++) I cannot get this to work in LinearIsotropicMaterial for an arbitrary derived class that
55  may use different derived kinds of Symm***ElasticityTensors. So... good luck, Chuck.
56  I might not be able to fix the problem, but I think I've identified it correctly. */
57 
58  aniso_elasticity_tensor->setFirstEulerAngle(_euler_angle_1);
59  aniso_elasticity_tensor->setSecondEulerAngle(_euler_angle_2);
60  aniso_elasticity_tensor->setThirdEulerAngle(_euler_angle_3);
61 
63  _local_elasticity_tensor = aniso_elasticity_tensor;
64 }
LinearIsotropicMaterial::_local_elasticity_tensor
SymmElasticityTensor * _local_elasticity_tensor
Definition: LinearIsotropicMaterial.h:50
validParams< LinearIsotropicMaterial >
InputParameters validParams< LinearIsotropicMaterial >()
Definition: LinearIsotropicMaterial.C:22
LinearAnisotropicMaterial::_euler_angle_3
Real _euler_angle_3
Definition: LinearAnisotropicMaterial.h:35
LinearAnisotropicMaterial::_euler_angle_1
Real _euler_angle_1
Definition: LinearAnisotropicMaterial.h:33
SymmAnisotropicElasticityTensor::setMaterialConstantc12
void setMaterialConstantc12(const Real c12)
Set the material constant c22; assumes cubic material.
Definition: SymmAnisotropicElasticityTensor.C:130
LinearAnisotropicMaterial
LinearIsotropic material for use in simple applications that don't need material properties.
Definition: LinearAnisotropicMaterial.h:24
registerMooseObject
registerMooseObject("SolidMechanicsApp", LinearAnisotropicMaterial)
SymmAnisotropicElasticityTensor::setThirdEulerAngle
void setThirdEulerAngle(const Real a3)
Set the third euler angle.
Definition: SymmAnisotropicElasticityTensor.C:99
LinearAnisotropicMaterial.h
LinearAnisotropicMaterial::LinearAnisotropicMaterial
LinearAnisotropicMaterial(const InputParameters &parameters)
Definition: LinearAnisotropicMaterial.C:30
LinearAnisotropicMaterial::_material_constant_c44
Real _material_constant_c44
Definition: LinearAnisotropicMaterial.h:32
SymmAnisotropicElasticityTensor
Definition: SymmAnisotropicElasticityTensor.h:14
SymmAnisotropicElasticityTensor::setFirstEulerAngle
void setFirstEulerAngle(const Real a1)
Set the first euler angle.
Definition: SymmAnisotropicElasticityTensor.C:87
SymmAnisotropicElasticityTensor::setMaterialConstantc44
void setMaterialConstantc44(const Real c44)
Set the material constant c44; assumes cubic material.
Definition: SymmAnisotropicElasticityTensor.C:137
LinearIsotropicMaterial
LinearIsotropic material for use in simple applications that don't need material properties.
Definition: LinearIsotropicMaterial.h:24
LinearAnisotropicMaterial::_material_constant_c11
Real _material_constant_c11
Definition: LinearAnisotropicMaterial.h:30
SymmAnisotropicElasticityTensor::setSecondEulerAngle
void setSecondEulerAngle(const Real a2)
Set the second euler angle.
Definition: SymmAnisotropicElasticityTensor.C:93
LinearAnisotropicMaterial::_material_constant_c12
Real _material_constant_c12
Definition: LinearAnisotropicMaterial.h:31
LinearAnisotropicMaterial::_euler_angle_2
Real _euler_angle_2
Definition: LinearAnisotropicMaterial.h:34
SymmAnisotropicElasticityTensor::setMaterialConstantc11
void setMaterialConstantc11(const Real c11)
Set the material constant c11; assumes cubic material.
Definition: SymmAnisotropicElasticityTensor.C:123
validParams< LinearAnisotropicMaterial >
InputParameters validParams< LinearAnisotropicMaterial >()
Definition: LinearAnisotropicMaterial.C:17
SymmAnisotropicElasticityTensor.h