https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ComputeLagrangianStrainBase.h
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
10#pragma once
11
12#include "Material.h"
15#include "StabilizationUtils.h"
16#include "GradientOperator.h"
17#include "GuaranteeProvider.h"
18
42template <class G>
44{
45public:
49 virtual void initialSetup() override;
50
61
69 enum class FBarMode
70 {
71 Total,
73 };
74
75protected:
76 virtual void initQpStatefulProperties() override;
77 virtual void computeProperties() override;
78 virtual void computeQpProperties() override;
81 virtual void computeQpIncrementalStrains(const RankTwoTensor & dL);
85 void setQpIncrementalStrains(const RankTwoTensor & dd, const RankTwoTensor & dw);
93 RankTwoTensor & dd,
94 RankTwoTensor & dw,
95 RankFourTensor & d_dL_d_f_inv,
96 RankFourTensor & d_dw_d_f_inv,
97 bool need_jacobian);
101 void computeQpPolarDecomposition(bool need_jacobian);
103 virtual void subtractQpEigenstrainIncrement(RankTwoTensor & strain);
109 virtual void computeDeformationGradient();
110
111 // Displacements and displacement gradients
112 const unsigned int _ndisp;
113 std::vector<const VariableValue *> _disp;
114 std::vector<const VariableGradient *> _grad_disp;
116 std::vector<const VariableValue *> _disp_old;
118 std::vector<const VariableGradient *> _grad_disp_old;
119
121 const std::string _base_name;
122
125
128
131
142
144 const Real _alpha;
145
148
149 // The eigenstrains
150 std::vector<MaterialPropertyName> _eigenstrain_names;
151 std::vector<const MaterialProperty<RankTwoTensor> *> _eigenstrains;
152 std::vector<const MaterialProperty<RankTwoTensor> *> _eigenstrains_old;
153
154 // The total strains
159
168
171
174
177
180
185
190
191 // The average deformation gradient over the element for F-bar stabilization. Note that the
192 // average deformation gradient is undefined if stabilization is not active.
194
195 // The deformation gradient. If stabilization is active, this will be the stabilized deformation
196 // gradient. Otherwise this will be equal to the unstabilized deformation gradient.
198
201
206
214
218
223
227
237
241
246
248 std::vector<MaterialPropertyName> _homogenization_gradient_names;
249
251 std::vector<const MaterialProperty<RankTwoTensor> *> _homogenization_contributions;
252
255
256private:
259 void computeLinearIncrement(const RankTwoTensor & f_inv,
260 RankTwoTensor & dd,
261 RankTwoTensor & dw,
262 RankFourTensor & d_dL_d_f_inv,
263 RankFourTensor & d_dw_d_f_inv,
264 bool need_jacobian) const;
267 void computeQuadraticIncrement(const RankTwoTensor & f_inv,
268 RankTwoTensor & dd,
269 RankTwoTensor & dw,
270 RankFourTensor & d_dL_d_f_inv,
271 RankFourTensor & d_dw_d_f_inv,
272 bool need_jacobian) const;
276 RankTwoTensor & dd,
277 RankTwoTensor & dw,
278 RankFourTensor & d_dL_d_f_inv,
279 RankFourTensor & d_dw_d_f_inv,
280 bool need_jacobian) const;
284 RankTwoTensor & dd,
285 RankTwoTensor & dw,
286 RankFourTensor & d_dL_d_f_inv,
287 RankFourTensor & d_dw_d_f_inv,
288 bool need_jacobian) const;
289
298 const RankTwoTensor & dw) const;
299};
Calculate strains to use the MOOSE materials with the Lagrangian kernels.
MaterialProperty< RankTwoTensor > & _mechanical_strain
void computeQpLargeKinematicIncrement(const RankTwoTensor &f_inv, RankTwoTensor &dd, RankTwoTensor &dw, RankFourTensor &d_dL_d_f_inv, RankFourTensor &d_dw_d_f_inv, bool need_jacobian)
Dispatcher: compute (Deltad, Deltaw, d(Deltal)/d(f^{-1}), d(Deltaw)/d(f^{-1})) for the active kinemat...
const MaterialProperty< RankTwoTensor > & _F_ust_old
Old unstabilized deformation gradient.
MaterialProperty< RankFourTensor > & _d_vorticity_increment_d_F
Derivative of the vorticity increment Deltaw with respect to F_{n+1}.
MaterialProperty< RankTwoTensor > & _stretch
Stretch U from the same polar decomposition.
std::vector< const VariableGradient * > _grad_disp
std::vector< const VariableValue * > _disp
std::vector< const VariableValue * > _disp_old
Old displacement values for the generalized midpoint rule.
const MaterialProperty< RankTwoTensor > & _total_strain_old
MaterialProperty< RankTwoTensor > & _total_strain
void computeLinearIncrement(const RankTwoTensor &f_inv, RankTwoTensor &dd, RankTwoTensor &dw, RankFourTensor &d_dL_d_f_inv, RankFourTensor &d_dw_d_f_inv, bool need_jacobian) const
Linear approximation: dL = I - f^{-1}.
static InputParameters validParams()
KinematicApproximation
Approximation used to convert the inverse incremental deformation gradient f^{-1} into the increment ...
@ RashidApproximate
Rashid's symmetric+skew formulas.
@ Quadratic
dL = (I - f^{-1}) + 0.5 (I - f^{-1})^2
@ RashidEigen
"Exact": polar decomposition + matrix logs
MaterialProperty< RankTwoTensor > & _rotation_increment
Rotation increment for "old" materials inheriting from ComputeStressBase.
const FBarMode _F_bar_mode
Selected F-bar averaging mode (Total vs. Incremental). See FBarMode.
MaterialProperty< RankTwoTensor > & _F_actual
The literal deformation gradient at n+1 (I + grad u_{n+1}).
MaterialProperty< RankTwoTensor > & _rotation
Polar decomposition R of the (alpha-weighted, F-bar-stabilized) deformation gradient F at this qp.
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains_old
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
virtual void computeQpUnstabilizedDeformationGradient()
Calculate the unstabilized (alpha-weighted) deformation gradient at the quadrature point.
MaterialProperty< RankFourTensor > & _d_rotation_d_F
Derivative of R with respect to F.
virtual void computeQpActualDeformationGradient()
Calculate the actual deformation gradient at n+1 (no alpha weighting, no F-bar)
MaterialProperty< RankTwoTensor > & _F_ust_inv
Inverse and determinant of the unstabilized deformation gradient F_ust.
const MaterialProperty< RankTwoTensor > & _rotated_mechanical_strain_old
MaterialProperty< RankTwoTensor > & _deformation_gradient_increment
Deformation gradient increment.
const KinematicApproximation _kinematic_approximation
Selected approximation for the spatial velocity gradient increment.
MaterialProperty< RankTwoTensor > & _F_avg
FBarMode
What F gets F-bar volumetric correction applied to.
virtual void initialSetup() override
MaterialProperty< RankTwoTensor > & _F_inv
Inverse deformation gradient.
void computeRashidEigenIncrement(const RankTwoTensor &f_inv, RankTwoTensor &dd, RankTwoTensor &dw, RankFourTensor &d_dL_d_f_inv, RankFourTensor &d_dw_d_f_inv, bool need_jacobian) const
"Exact" via polar decomposition of f^{-1} + matrix logs.
MaterialProperty< RankTwoTensor > & _F_ust
The unstabilized (alpha-weighted) deformation gradient.
MaterialProperty< RankFourTensor > & _d_F_stab_d_F_avg
Partial derivative of the F-bar-stabilized deformation gradient with respect to the element-averaged ...
void setQpIncrementalStrains(const RankTwoTensor &dd, const RankTwoTensor &dw)
Update strain / vorticity / mechanical-strain bookkeeping from already-split (dd, dw) tensors.
std::vector< const VariableGradient * > _grad_disp_old
Old displacement gradients for the generalized midpoint rule.
RankTwoTensor computeQpRotationIncrement(const RankTwoTensor &f_inv, const RankTwoTensor &dw) const
Rotation increment matched to the active _kinematic_approximation, suitable for publishing as _rotati...
MaterialProperty< RankTwoTensor > & _rotated_mechanical_strain
Mechanical strain accumulated with the incremental rotation r_hat = exp(Deltaw), matching the convent...
std::vector< MaterialPropertyName > _homogenization_gradient_names
Names of any extra homogenization gradients.
MaterialProperty< RankFourTensor > & _d_F_stab_d_F_ust
Partial derivative of the F-bar-stabilized deformation gradient with respect to the unstabilized (per...
virtual void computeDeformationGradient()
Calculate the unstabilized and optionally the stabilized deformation gradients.
std::vector< const MaterialProperty< RankTwoTensor > * > _homogenization_contributions
Actual homogenization contributions.
MaterialProperty< Real > & _F_ust_det
const bool _stabilize_strain
If true stabilize the strains with F_bar.
const std::string _base_name
Material system base name.
virtual void subtractQpEigenstrainIncrement(RankTwoTensor &strain)
Subtract the eigenstrain increment to subtract from the total strain.
const Real _alpha
Generalized-midpoint weight for the deformation gradient (1.0 = backward Euler, 0....
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
const bool _publish_rotation_increment
If true, publish _rotation_increment = exp(_vorticity_increment) (Rodrigues) instead of the default i...
void computeRashidApproximateIncrement(const RankTwoTensor &f_inv, RankTwoTensor &dd, RankTwoTensor &dw, RankFourTensor &d_dL_d_f_inv, RankFourTensor &d_dw_d_f_inv, bool need_jacobian) const
Rashid's approximate symmetric+skew formulas.
virtual void initQpStatefulProperties() override
void computeQuadraticIncrement(const RankTwoTensor &f_inv, RankTwoTensor &dd, RankTwoTensor &dw, RankFourTensor &d_dL_d_f_inv, RankFourTensor &d_dw_d_f_inv, bool need_jacobian) const
Quadratic approximation: dL = (I - f^{-1}) + 0.5 (I - f^{-1})^2.
MaterialProperty< RankTwoTensor > & _f_inv
Inverse incremental deformation gradient.
const MaterialProperty< RankTwoTensor > & _F_old
Old deformation gradient.
MaterialProperty< RankTwoTensor > & _vorticity_increment
Vorticity increment.
MaterialProperty< RankFourTensor > & _d_deformation_gradient_increment_d_F
Derivative of the spatial velocity gradient increment with respect to F_{n+1}.
virtual void computeQpIncrementalStrains(const RankTwoTensor &dL)
Calculate the strains based on the spatial velocity gradient.
MaterialProperty< RankTwoTensor > & _F
MaterialProperty< RankTwoTensor > & _strain_increment
Strain increment.
void computeQpPolarDecomposition(bool need_jacobian)
Compute and publish the polar decomposition of _F_actual at the current qp.
MaterialProperty< RankFourTensor > & _d_F_d_grad_u
Derivative of F_{n+1} with respect to the displacement gradient.
std::vector< MaterialPropertyName > _eigenstrain_names
virtual void computeQpProperties() override
const bool _large_kinematics
If true the equilibrium conditions is calculated with large deformations.
Add-on class that provides the functionality to issue guarantees for declared material properties.
const InputParameters & parameters() const