www.mooseframework.org
Functions
ElasticityTensorTools Namespace Reference

Functions

Real elasticJacobian (const RankFourTensor &r4t, unsigned int i, unsigned int k, const RealGradient &grad_test, const RealGradient &grad_phi)
 This is used for the standard kernel stress_ij*d(test)/dx_j, when varied wrt u_k Jacobian entry: d(stress_ij*d(test)/dx_j)/du_k = d(C_ijmn*du_m/dx_n*dtest/dx_j)/du_k. More...
 
Real elasticJacobianWC (const RankFourTensor &r4t, unsigned int i, unsigned int k, const RealGradient &grad_test, Real phi)
 This is used for the standard kernel stress_ij*d(test)/dx_j, when varied wrt w_k (the cosserat rotation) Jacobian entry: d(stress_ij*d(test)/dx_j)/dw_k = d(C_ijmn*eps_mnp*w_p*dtest/dx_j)/dw_k. More...
 
Real momentJacobian (const RankFourTensor &r4t, unsigned int i, unsigned int k, Real test, const RealGradient &grad_phi)
 This is used for the moment-balancing kernel eps_ijk*stress_jk*test, when varied wrt u_k Jacobian entry: d(eps_ijm*stress_jm*test)/du_k = d(eps_ijm*C_jmln*du_l/dx_n*test)/du_k. More...
 
Real momentJacobianWC (const RankFourTensor &r4t, unsigned int i, unsigned int k, Real test, Real phi)
 This is used for the moment-balancing kernel eps_ijk*stress_jk*test, when varied wrt w_k (the cosserat rotation) Jacobian entry: d(eps_ijm*stress_jm*test)/dw_k = d(eps_ijm*C_jmln*eps_lnp*w_p*test)/dw_k. More...
 
template<typename T >
getIsotropicShearModulus (const RankFourTensorTempl< T > &elasticity_tensor)
 Get the shear modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency) More...
 
template<typename T >
getIsotropicBulkModulus (const RankFourTensorTempl< T > &elasticity_tensor)
 Get the bulk modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency) More...
 
template<typename T >
getIsotropicYoungsModulus (const RankFourTensorTempl< T > &elasticity_tensor)
 Get the Young's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency) More...
 
template<typename T >
getIsotropicPoissonsRatio (const RankFourTensorTempl< T > &elasticity_tensor)
 Get the Poisson's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency) More...
 

Function Documentation

◆ elasticJacobian()

Real ElasticityTensorTools::elasticJacobian ( const RankFourTensor r4t,
unsigned int  i,
unsigned int  k,
const RealGradient &  grad_test,
const RealGradient &  grad_phi 
)

This is used for the standard kernel stress_ij*d(test)/dx_j, when varied wrt u_k Jacobian entry: d(stress_ij*d(test)/dx_j)/du_k = d(C_ijmn*du_m/dx_n*dtest/dx_j)/du_k.

Definition at line 21 of file ElasticityTensorTools.C.

26 {
27  // d(stress_ij*d(test)/dx_j)/du_k = d(C_ijmn*du_m/dx_n dtest/dx_j)/du_k (which is nonzero for m ==
28  // k)
29 
30  const Real gt0 = grad_test(0);
31  const Real gt1 = grad_test(1);
32  const Real gt2 = grad_test(2);
33  const Real gp0 = grad_phi(0);
34  const Real gp1 = grad_phi(1);
35  const Real gp2 = grad_phi(2);
36 
37  // clang-format off
38  // This is the algorithm that is unrolled below:
39  //
40  // Real sum = 0.0;
41  // for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
42  // for (unsigned int l = 0; l < LIBMESH_DIM; ++l)
43  // sum += r4t(i, j, k, l) * grad_phi(l) * grad_test(j);
44  // return sum;
45 
46  return
47  (
48  r4t(i,0,k,0) * gp0
49  + r4t(i,0,k,1) * gp1
50  + r4t(i,0,k,2) * gp2
51  ) * gt0
52  +
53  (
54  r4t(i,1,k,0) * gp0
55  + r4t(i,1,k,1) * gp1
56  + r4t(i,1,k,2) * gp2
57  ) * gt1
58  +
59  (
60  r4t(i,2,k,0) * gp0
61  + r4t(i,2,k,1) * gp1
62  + r4t(i,2,k,2) * gp2
63  ) * gt2;
64  // clang-format on
65 }

Referenced by StressDivergenceRSphericalTensors::calculateJacobian(), StressDivergenceRZTensors::calculateJacobian(), CrackTipEnrichmentStressDivergenceTensors::computeQpJacobian(), StressDivergenceTensors::computeQpJacobian(), CrackTipEnrichmentStressDivergenceTensors::computeQpOffDiagJacobian(), and StressDivergenceTensors::computeQpOffDiagJacobian().

◆ elasticJacobianWC()

Real ElasticityTensorTools::elasticJacobianWC ( const RankFourTensor r4t,
unsigned int  i,
unsigned int  k,
const RealGradient &  grad_test,
Real  phi 
)

This is used for the standard kernel stress_ij*d(test)/dx_j, when varied wrt w_k (the cosserat rotation) Jacobian entry: d(stress_ij*d(test)/dx_j)/dw_k = d(C_ijmn*eps_mnp*w_p*dtest/dx_j)/dw_k.

Definition at line 68 of file ElasticityTensorTools.C.

73 {
74  // d(stress_ij*d(test)/dx_j)/dw_k = d(C_ijmn*eps_mnp*w_p*dtest/dx_j)/dw_k (only nonzero for p ==
75  // k)
76  Real sum = 0.0;
77  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
78  for (unsigned int m = 0; m < LIBMESH_DIM; ++m)
79  for (unsigned int n = 0; n < LIBMESH_DIM; ++n)
80  sum += r4t(i, j, m, n) * PermutationTensor::eps(m, n, k) * grad_test(j);
81  return sum * phi;
82 }

Referenced by CosseratStressDivergenceTensors::computeQpOffDiagJacobian().

◆ getIsotropicBulkModulus()

template<typename T >
T ElasticityTensorTools::getIsotropicBulkModulus ( const RankFourTensorTempl< T > &  elasticity_tensor)

Get the bulk modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency)

Definition at line 82 of file ElasticityTensorTools.h.

83 {
84  const T shear_modulus = getIsotropicShearModulus(elasticity_tensor);
85  // dilatational modulus is defined as lambda plus two mu
86  const T dilatational_modulus = elasticity_tensor(0, 0, 0, 0);
87  const T lambda = dilatational_modulus - 2.0 * shear_modulus;
88  const T bulk_modulus = lambda + 2.0 * shear_modulus / 3.0;
89  return bulk_modulus;
90 }

◆ getIsotropicPoissonsRatio()

template<typename T >
T ElasticityTensorTools::getIsotropicPoissonsRatio ( const RankFourTensorTempl< T > &  elasticity_tensor)

Get the Poisson's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency)

Definition at line 115 of file ElasticityTensorTools.h.

116 {
117  const T poissons_ratio = elasticity_tensor(1, 1, 0, 0) /
118  (elasticity_tensor(1, 1, 1, 1) + elasticity_tensor(1, 1, 0, 0));
119  return poissons_ratio;
120 }

Referenced by ComputeStrainBaseNOSPD::computeBondStretch(), ParametricMaterialBasePD::computeMaterialConstants(), ComputePlaneStressIsotropicElasticityTensor::ComputePlaneStressIsotropicElasticityTensor(), and CappedMohrCoulombStressUpdate::preReturnMapV().

◆ getIsotropicShearModulus()

template<typename T >
T ElasticityTensorTools::getIsotropicShearModulus ( const RankFourTensorTempl< T > &  elasticity_tensor)

Get the shear modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency)

Definition at line 71 of file ElasticityTensorTools.h.

72 {
73  return elasticity_tensor(0, 1, 0, 1);
74 }

Referenced by getIsotropicBulkModulus(), getIsotropicYoungsModulus(), RadialReturnStressUpdate::updateState(), and ADRadialReturnStressUpdate< compute_stage >::updateState().

◆ getIsotropicYoungsModulus()

template<typename T >
T ElasticityTensorTools::getIsotropicYoungsModulus ( const RankFourTensorTempl< T > &  elasticity_tensor)

Get the Young's modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be isotropic, but not checked for efficiency)

Definition at line 98 of file ElasticityTensorTools.h.

99 {
100  const T shear_modulus = getIsotropicShearModulus(elasticity_tensor);
101  // dilatational modulus is defined as lambda plus two mu
102  const T dilatational_modulus = elasticity_tensor(0, 0, 0, 0);
103  const T lambda = dilatational_modulus - 2.0 * shear_modulus;
104  const T youngs_modulus =
105  shear_modulus * (3.0 * lambda + 2.0 * shear_modulus) / (lambda + shear_modulus);
106  return youngs_modulus;
107 }

Referenced by ParametricMaterialBasePD::computeMaterialConstants(), ComputePlaneStressIsotropicElasticityTensor::ComputePlaneStressIsotropicElasticityTensor(), ComputeForceStabilizedSmallStrainNOSPD::computeQpDeformationGradient(), ComputeSmearedCrackingStress::updateCrackingStateAndStress(), and ComputeSmearedCrackingStress::updateLocalElasticityTensor().

◆ momentJacobian()

Real ElasticityTensorTools::momentJacobian ( const RankFourTensor r4t,
unsigned int  i,
unsigned int  k,
Real  test,
const RealGradient &  grad_phi 
)

This is used for the moment-balancing kernel eps_ijk*stress_jk*test, when varied wrt u_k Jacobian entry: d(eps_ijm*stress_jm*test)/du_k = d(eps_ijm*C_jmln*du_l/dx_n*test)/du_k.

Definition at line 85 of file ElasticityTensorTools.C.

90 {
91  // Jacobian entry: d(eps_ijm*stress_jm*test)/du_k = d(eps_ijm*C_jmln*du_l/dx_n*test)/du_k (only
92  // nonzero for l == k)
93  Real sum = 0.0;
94  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
95  for (unsigned int m = 0; m < LIBMESH_DIM; ++m)
96  for (unsigned int n = 0; n < LIBMESH_DIM; ++n)
97  sum += PermutationTensor::eps(i, j, m) * r4t(j, m, k, n) * grad_phi(n);
98  return test * sum;
99 }

Referenced by MomentBalancing::computeQpOffDiagJacobian().

◆ momentJacobianWC()

Real ElasticityTensorTools::momentJacobianWC ( const RankFourTensor r4t,
unsigned int  i,
unsigned int  k,
Real  test,
Real  phi 
)

This is used for the moment-balancing kernel eps_ijk*stress_jk*test, when varied wrt w_k (the cosserat rotation) Jacobian entry: d(eps_ijm*stress_jm*test)/dw_k = d(eps_ijm*C_jmln*eps_lnp*w_p*test)/dw_k.

Definition at line 102 of file ElasticityTensorTools.C.

103 {
104  // Jacobian entry: d(eps_ijm*stress_jm*test)/dw_k = d(eps_ijm*C_jmln*eps_lnp*w_p*test)/dw_k (only
105  // nonzero for p ==k)
106  Real sum = 0.0;
107  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
108  for (unsigned int l = 0; l < LIBMESH_DIM; ++l)
109  for (unsigned int m = 0; m < LIBMESH_DIM; ++m)
110  for (unsigned int n = 0; n < LIBMESH_DIM; ++n)
111  sum +=
112  PermutationTensor::eps(i, j, m) * r4t(j, m, l, n) * PermutationTensor::eps(l, n, k);
113 
114  return test * phi * sum;
115 }

Referenced by MomentBalancing::computeQpJacobian(), and MomentBalancing::computeQpOffDiagJacobian().

ElasticityTensorTools::getIsotropicShearModulus
T getIsotropicShearModulus(const RankFourTensorTempl< T > &elasticity_tensor)
Get the shear modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be ...
Definition: ElasticityTensorTools.h:71