https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ComputeIncrementalStrain.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 "Assembly.h"
12#include "libmesh/quadrature.h"
13
15registerMooseObjectRenamed("SolidMechanicsApp",
16 ComputeIncrementalSmallStrain,
17 "04/01/2025 00:00",
19
22{
25 "Compute a strain increment and rotation increment for small strains.");
26 return params;
27}
28
33
34void
36{
37 Real volumetric_strain = 0.0;
38 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
39 {
40 RankTwoTensor total_strain_increment;
41 computeTotalStrainIncrement(total_strain_increment);
42
43 _strain_increment[_qp] = total_strain_increment;
44
46 volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
47 }
49 volumetric_strain /= _current_elem_volume;
50
51 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
52 {
53 Real trace = _strain_increment[_qp].trace();
55 {
56 _strain_increment[_qp](0, 0) += (volumetric_strain - trace) / 3.0;
57 _strain_increment[_qp](1, 1) += (volumetric_strain - trace) / 3.0;
58 _strain_increment[_qp](2, 2) += (volumetric_strain - trace) / 3.0;
59 }
60
62
63 // Remove the Eigen strain increment
65
66 // strain rate
67 if (_dt > 0)
68 _strain_rate[_qp] = _strain_increment[_qp] / _dt;
69 else
70 _strain_rate[_qp].zero();
71
72 // Update strain in intermediate configuration: rotations are not needed
74
75 // incremental small strain does not include rotation
76 _rotation_increment[_qp].setToIdentity();
77 }
78}
79
80void
82{
83 // Deformation gradient
85 (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
86
87 // Old Deformation gradient
88 auto Fbar = RankTwoTensor ::initializeFromRows(
89 (*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]);
90
92 _deformation_gradient[_qp].addIa(1.0);
93
94 A -= Fbar; // A = grad_disp - grad_disp_old
95
96 total_strain_increment = 0.5 * (A + A.transpose());
97}
registerMooseObject("SolidMechanicsApp", ComputeIncrementalStrain)
registerMooseObjectRenamed("SolidMechanicsApp", ComputeIncrementalSmallStrain, "04/01/2025 00:00", ComputeIncrementalStrain)
ComputeIncrementalStrainBase is the base class for strain tensors using incremental formulations.
MaterialProperty< RankTwoTensor > & _strain_rate
std::vector< const VariableGradient * > _grad_disp_old
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
void subtractEigenstrainIncrementFromStrain(RankTwoTensor &strain)
MaterialProperty< RankTwoTensor > & _rotation_increment
MaterialProperty< RankTwoTensor > & _strain_increment
MaterialProperty< RankTwoTensor > & _deformation_gradient
const MaterialProperty< RankTwoTensor > & _total_strain_old
ComputeIncrementalStrain defines a strain increment and rotation increment (=1), for small strains.
ComputeIncrementalStrain(const InputParameters &parameters)
virtual void computeProperties() override
virtual void computeTotalStrainIncrement(RankTwoTensor &total_strain_increment)
Computes the current and old deformation gradients and passes back the total strain increment tensor.
static InputParameters validParams()
std::vector< const VariableGradient * > _grad_disp
Gradient of displacements.
MaterialProperty< RankTwoTensor > & _mechanical_strain
const Real & _current_elem_volume
MaterialProperty< RankTwoTensor > & _total_strain
const bool _volumetric_locking_correction
void addClassDescription(const std::string &doc_string)
static RankTwoTensorTempl initializeFromRows(const libMesh::TypeVector< T > &row0, const libMesh::TypeVector< T > &row1, const libMesh::TypeVector< T > &row2)