https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ADComputeIsotropicElasticityTensorShell.C
Go to the documentation of this file.
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
11#include "RankFourTensor.h"
12
13#include "libmesh/quadrature.h"
14#include "libmesh/utility.h"
15#include "libmesh/enum_quadrature_type.h"
16#include "libmesh/fe_type.h"
17#include "libmesh/string_to_enum.h"
18#include "libmesh/quadrature_gauss.h"
19
21
24{
26 params.addClassDescription("Compute a plane stress isotropic elasticity tensor.");
27 params.addRequiredRangeCheckedParam<Real>("poissons_ratio",
28 "poissons_ratio >= -1.0 & poissons_ratio < 0.5",
29 "Poisson's ratio for the material.");
31 "youngs_modulus", "youngs_modulus > 0.0", "Young's modulus of the material.");
32 params.addRequiredParam<std::string>("through_thickness_order",
33 "Quadrature order in out of plane direction");
34 return params;
35}
36
38 const InputParameters & parameters)
39 : Material(parameters),
40 _poissons_ratio(getParam<Real>("poissons_ratio")),
41 _youngs_modulus(getParam<Real>("youngs_modulus"))
42{
44
45 // correction for plane stress
46 _Cijkl(0, 0, 0, 0) = _youngs_modulus / (1.0 - _poissons_ratio * _poissons_ratio);
47 _Cijkl(1, 1, 1, 1) = _Cijkl(0, 0, 0, 0);
48 _Cijkl(0, 0, 1, 1) = _Cijkl(0, 0, 0, 0) * _poissons_ratio;
49 _Cijkl(1, 1, 0, 0) = _Cijkl(0, 0, 1, 1);
50 _Cijkl(0, 0, 2, 2) = 0.0;
51 _Cijkl(1, 1, 2, 2) = 0.0;
52 _Cijkl(2, 2, 2, 2) = 0.0;
53 _Cijkl(2, 2, 0, 0) = 0.0;
54 _Cijkl(2, 2, 1, 1) = 0.0;
55
56 // get number of quadrature points along thickness based on order
57 std::unique_ptr<libMesh::QGauss> t_qrule = std::make_unique<libMesh::QGauss>(
58 1, Utility::string_to_enum<Order>(getParam<std::string>("through_thickness_order")));
59 _t_points = t_qrule->get_points();
60 _elasticity_tensor.resize(_t_points.size());
61 _ge.resize(_t_points.size());
62 for (unsigned int t = 0; t < _t_points.size(); ++t)
63 {
65 &declareADProperty<RankFourTensor>("elasticity_tensor_t_points_" + std::to_string(t));
66 _ge[t] = &getADMaterialProperty<RankTwoTensor>("ge_t_points_" + std::to_string(t));
67 }
68}
69
70void
72{
73 for (unsigned int t = 0; t < _t_points.size(); ++t)
74 {
75 (*_elasticity_tensor[t])[_qp].zero();
76 // compute contravariant elasticity tensor
77 for (unsigned int i = 0; i < 3; ++i)
78 for (unsigned int j = 0; j < 3; ++j)
79 for (unsigned int k = 0; k < 3; ++k)
80 for (unsigned int l = 0; l < 3; ++l)
81 for (unsigned int m = 0; m < 3; ++m)
82 for (unsigned int n = 0; n < 3; ++n)
83 for (unsigned int o = 0; o < 3; ++o)
84 for (unsigned int p = 0; p < 3; ++p)
85 (*_elasticity_tensor[t])[_qp](i, j, k, l) +=
86 (*_ge[t])[_qp](i, m) * (*_ge[t])[_qp](j, n) * (*_ge[t])[_qp](k, o) *
87 (*_ge[t])[_qp](l, p) * _Cijkl(m, n, o, p);
88 }
89}
registerMooseObject("SolidMechanicsApp", ADComputeIsotropicElasticityTensorShell)
const Real p
std::vector< const ADMaterialProperty< RankTwoTensor > * > _ge
Material property for ge matrix.
ADComputeIsotropicElasticityTensorShell(const InputParameters &parameters)
std::vector< Point > _t_points
Quadrature points along thickness.
RankFourTensor _Cijkl
Individual elasticity tensor.
std::vector< ADMaterialProperty< RankFourTensor > * > _elasticity_tensor
Material property elasticity tensor.
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
unsigned int _qp
static InputParameters validParams()
void fillSymmetricIsotropicEandNu(const T &E, const T &nu)