www.mooseframework.org
LinearIsotropicMaterial.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 "ColumnMajorMatrix.h"
12 #include "SolidMechanicsMaterial.h"
14 #include "VolumetricModel.h"
15 
16 #include "libmesh/quadrature.h"
17 
18 registerMooseObject("SolidMechanicsApp", LinearIsotropicMaterial);
19 
20 template <>
21 InputParameters
23 {
24  InputParameters params = validParams<SolidMechanicsMaterial>();
25  params.addRequiredParam<Real>("youngs_modulus", "Young's Modulus");
26  params.addRequiredParam<Real>("poissons_ratio", "Poisson's Ratio");
27  params.addParam<Real>(
28  "t_ref", 0.0, "The reference temperature at which this material has zero strain.");
29  params.addParam<Real>("thermal_expansion", 0.0, "The thermal expansion coefficient.");
30  return params;
31 }
32 
33 LinearIsotropicMaterial::LinearIsotropicMaterial(const InputParameters & parameters)
34  : SolidMechanicsMaterial(parameters),
35  _youngs_modulus(getParam<Real>("youngs_modulus")),
36  _poissons_ratio(getParam<Real>("poissons_ratio")),
37  _t_ref(getParam<Real>("t_ref")),
38  _alpha(getParam<Real>("thermal_expansion")),
39  _local_elasticity_tensor(NULL)
40 {
42  iso_elasticity_tensor->setYoungsModulus(_youngs_modulus);
43  iso_elasticity_tensor->setPoissonsRatio(_poissons_ratio);
44 
45  _local_elasticity_tensor = iso_elasticity_tensor;
46 
47  _pi = 3.14159;
48  _tol = 1.0e-5;
49 }
50 
52 
53 void
55 {
56  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
57  {
58  Real alpha = computeAlpha();
59 
61 
63 
64  SymmTensor strn(_grad_disp_x[_qp](0),
65  _grad_disp_y[_qp](1),
66  _grad_disp_z[_qp](2),
67  0.5 * (_grad_disp_x[_qp](1) + _grad_disp_y[_qp](0)),
68  0.5 * (_grad_disp_y[_qp](2) + _grad_disp_z[_qp](1)),
69  0.5 * (_grad_disp_z[_qp](0) + _grad_disp_x[_qp](2)));
70 
71  // Add in Isotropic Thermal Strain
72  if (_has_temp)
73  {
74  Real isotropic_strain = alpha * (_temp[_qp] - _t_ref);
75 
76  strn.addDiag(-isotropic_strain);
77 
79  _d_strain_dT.addDiag(-alpha);
80  }
81 
82  SymmTensor strain(strn);
83 
84  computeStress(strain, _stress[_qp]);
85  }
86 }
87 
88 void
90 {
91  // Add in any extra strain components
92  SymmTensor elastic_strain;
93 
94  computeStrain(strain, elastic_strain);
95 
96  // Multiplier that zeros out stiffness
97  // Real h = (1.0 - _c[_qp]*_c[_qp]);
98  /*Real vl = -0.05 + _c[_qp]*1.1;
99  if (vl < 0.0)
100  vl = 0.0;
101  if (vl > 1.0)
102  vl = 1.0;*/
103 
104  Real h = (1.0 + std::cos(_pi * _c[_qp])) / 2.0;
105  if (h < _tol)
106  h = _tol;
107 
108  // Save that off as the elastic strain
109  _elastic_strain[_qp] = elastic_strain;
110 
111  // Create column vector
112  // C * e
113  stress = (*_local_elasticity_tensor) * h * elastic_strain;
114 }
115 
116 void
117 LinearIsotropicMaterial::computeStrain(const SymmTensor & total_strain, SymmTensor & elastic_strain)
118 {
119 
120  // Multiplier that zeros out stiffness
121  // Real h = (1.0 - _c[_qp]*_c[_qp]);
122  /*Real vl = -0.05 + _c[_qp]*1.1;
123  if (vl < 0.0)
124  vl = 0.0;
125  if (vl > 1.0)
126  vl = 1.0;*/
127 
128  Real h = (1.0 + std::cos(_pi * _c[_qp])) / 2.0;
129  if (h < _tol)
130  h = _tol;
131 
132  elastic_strain = total_strain;
133  // Jacobian multiplier of the stress
135 
137  // d_stress_dT *= _dt;
138  d_stress_dT *= h;
139  _d_stress_dT[_qp] = d_stress_dT;
140 }
141 
142 Real
144 {
145  return _alpha;
146 }
SolidMechanicsMaterial::_has_temp
bool _has_temp
Definition: SolidMechanicsMaterial.h:37
SymmElasticityTensor::calculate
void calculate(unsigned int qp)
Public function that will be called whenever the values for this matrix need to be filled in.
Definition: SymmElasticityTensor.C:41
registerMooseObject
registerMooseObject("SolidMechanicsApp", LinearIsotropicMaterial)
SolidMechanicsMaterial::_Jacobian_mult
MaterialProperty< SymmElasticityTensor > & _Jacobian_mult
Definition: SolidMechanicsMaterial.h:47
VolumetricModel.h
SymmIsotropicElasticityTensor
Defines an Isotropic Elasticity Tensor.
Definition: SymmIsotropicElasticityTensor.h:33
LinearIsotropicMaterial::_local_elasticity_tensor
SymmElasticityTensor * _local_elasticity_tensor
Definition: LinearIsotropicMaterial.h:50
SolidMechanicsMaterial::_d_stress_dT
MaterialProperty< SymmTensor > & _d_stress_dT
Definition: SolidMechanicsMaterial.h:53
SymmTensor::zero
void zero()
Definition: SymmTensor.h:275
LinearIsotropicMaterial::computeStrain
virtual void computeStrain(const SymmTensor &total_strain, SymmTensor &elastic_strain)
Will always be passed to full symmetric strain tensor.
Definition: LinearIsotropicMaterial.C:117
LinearIsotropicMaterial::_youngs_modulus
Real _youngs_modulus
Definition: LinearIsotropicMaterial.h:44
SymmIsotropicElasticityTensor.h
SolidMechanicsMaterial::_elasticity_tensor
MaterialProperty< SymmElasticityTensor > & _elasticity_tensor
Definition: SolidMechanicsMaterial.h:46
LinearIsotropicMaterial::_poissons_ratio
Real _poissons_ratio
Definition: LinearIsotropicMaterial.h:45
LinearIsotropicMaterial::computeAlpha
virtual Real computeAlpha()
Definition: LinearIsotropicMaterial.C:143
LinearIsotropicMaterial::_tol
Real _tol
Definition: LinearIsotropicMaterial.h:53
validParams< SolidMechanicsMaterial >
InputParameters validParams< SolidMechanicsMaterial >()
Definition: SolidMechanicsMaterial.C:17
SolidMechanicsMaterial::_elastic_strain
MaterialProperty< SymmTensor > & _elastic_strain
Definition: SolidMechanicsMaterial.h:55
LinearIsotropicMaterial.h
SolidMechanicsMaterial::_stress
MaterialProperty< SymmTensor > & _stress
Definition: SolidMechanicsMaterial.h:45
LinearIsotropicMaterial::_pi
Real _pi
Definition: LinearIsotropicMaterial.h:52
LinearIsotropicMaterial::_alpha
Real _alpha
Definition: LinearIsotropicMaterial.h:48
SolidMechanicsMaterial.h
SolidMechanicsMaterial::_grad_disp_y
const VariableGradient & _grad_disp_y
Definition: SolidMechanicsMaterial.h:34
SymmTensor::addDiag
void addDiag(Real value)
Definition: SymmTensor.h:281
SolidMechanicsMaterial
SolidMechanics material for use in simple applications that don't need material properties.
Definition: SolidMechanicsMaterial.h:25
SymmIsotropicElasticityTensor::setYoungsModulus
void setYoungsModulus(const Real E)
Set the Young's Modulus.
Definition: SymmIsotropicElasticityTensor.C:42
LinearIsotropicMaterial::LinearIsotropicMaterial
LinearIsotropicMaterial(const InputParameters &parameters)
Definition: LinearIsotropicMaterial.C:33
SolidMechanicsMaterial::_grad_disp_z
const VariableGradient & _grad_disp_z
Definition: SolidMechanicsMaterial.h:35
LinearIsotropicMaterial
LinearIsotropic material for use in simple applications that don't need material properties.
Definition: LinearIsotropicMaterial.h:24
LinearIsotropicMaterial::computeStress
virtual void computeStress(const SymmTensor &strain, SymmTensor &stress)
Definition: LinearIsotropicMaterial.C:89
SymmTensor
Definition: SymmTensor.h:21
SymmIsotropicElasticityTensor::setPoissonsRatio
void setPoissonsRatio(const Real nu)
Set Poissons Ratio.
Definition: SymmIsotropicElasticityTensor.C:49
LinearIsotropicMaterial::computeProperties
virtual void computeProperties()
Definition: LinearIsotropicMaterial.C:54
SolidMechanicsMaterial::_temp
const VariableValue & _temp
Definition: SolidMechanicsMaterial.h:38
SolidMechanicsMaterial::_grad_disp_x
const VariableGradient & _grad_disp_x
Definition: SolidMechanicsMaterial.h:33
SolidMechanicsMaterial::_c
const VariableValue & _c
Definition: SolidMechanicsMaterial.h:41
LinearIsotropicMaterial::~LinearIsotropicMaterial
virtual ~LinearIsotropicMaterial()
Definition: LinearIsotropicMaterial.C:51
SolidMechanicsMaterial::_d_strain_dT
SymmTensor _d_strain_dT
Definition: SolidMechanicsMaterial.h:50
LinearIsotropicMaterial::_t_ref
Real _t_ref
Definition: LinearIsotropicMaterial.h:47
validParams< LinearIsotropicMaterial >
InputParameters validParams< LinearIsotropicMaterial >()
Definition: LinearIsotropicMaterial.C:22