LCOV - code coverage report
Current view: top level - src/materials - ADComputeIncrementalStrain.C (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: f45d79 Lines: 31 36 86.1 %
Date: 2025-07-25 05:00:39 Functions: 4 8 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : #include "ADComputeIncrementalStrain.h"
      11             : #include "RankTwoTensor.h"
      12             : #include "RankFourTensor.h"
      13             : #include "SymmetricRankTwoTensor.h"
      14             : #include "SymmetricRankFourTensor.h"
      15             : 
      16             : #include "libmesh/quadrature.h"
      17             : 
      18             : registerMooseObject("SolidMechanicsApp", ADComputeIncrementalStrain);
      19             : registerMooseObjectRenamed("SolidMechanicsApp",
      20             :                            ADComputeIncrementalSmallStrain,
      21             :                            "06/30/2025 24:00",
      22             :                            ADComputeIncrementalStrain);
      23             : 
      24             : template <typename R2>
      25             : InputParameters
      26         936 : ADComputeIncrementalStrainTempl<R2>::validParams()
      27             : {
      28             :   InputParameters params = ADComputeIncrementalStrainBase::validParams();
      29         936 :   params.addClassDescription(
      30             :       "Compute a strain increment and rotation increment for small strains.");
      31         936 :   return params;
      32           0 : }
      33             : 
      34             : template <typename R2>
      35         702 : ADComputeIncrementalStrainTempl<R2>::ADComputeIncrementalStrainTempl(
      36             :     const InputParameters & parameters)
      37         702 :   : ADComputeIncrementalStrainBaseTempl<R2>(parameters)
      38             : {
      39         702 : }
      40             : 
      41             : template <typename R2>
      42             : void
      43      479186 : ADComputeIncrementalStrainTempl<R2>::computeProperties()
      44             : {
      45      479186 :   ADReal volumetric_strain = 0.0;
      46     4535510 :   for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
      47             :   {
      48     4056324 :     ADR2 total_strain_increment;
      49     4056324 :     computeTotalStrainIncrement(total_strain_increment);
      50             : 
      51     4056324 :     _strain_increment[_qp] = total_strain_increment;
      52             : 
      53     4056324 :     if (_volumetric_locking_correction)
      54           0 :       volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
      55             :   }
      56             : 
      57      479186 :   if (_volumetric_locking_correction)
      58           0 :     volumetric_strain /= _current_elem_volume;
      59             : 
      60     4535510 :   for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
      61             :   {
      62     4056324 :     if (_volumetric_locking_correction)
      63             :     {
      64           0 :       const auto correction = (volumetric_strain - _strain_increment[_qp].trace()) / 3.0;
      65           0 :       _strain_increment[_qp].addIa(correction);
      66             :     }
      67             : 
      68     4056324 :     _total_strain[_qp] = _strain_increment[_qp] + _total_strain_old[_qp];
      69             : 
      70             :     // Remove the Eigen strain increment
      71     4056324 :     this->subtractEigenstrainIncrementFromStrain(_strain_increment[_qp]);
      72             : 
      73             :     // strain rate
      74     4056324 :     if (_dt > 0)
      75     4051300 :       _strain_rate[_qp] = _strain_increment[_qp] / _dt;
      76             :     else
      77        5024 :       _strain_rate[_qp].zero();
      78             : 
      79             :     // Update strain in intermediate configuration: rotations are not needed
      80     4056324 :     _mechanical_strain[_qp] = _strain_increment[_qp] + _mechanical_strain_old[_qp];
      81             : 
      82             :     // incremental small strain does not include rotation
      83     4056324 :     _rotation_increment[_qp].setToIdentity();
      84             :   }
      85      479186 : }
      86             : 
      87             : template <typename R2>
      88             : void
      89     3942504 : ADComputeIncrementalStrainTempl<R2>::computeTotalStrainIncrement(ADR2 & total_strain_increment)
      90             : {
      91             :   // Deformation gradient (symmetrized)
      92     3942504 :   const auto A = ADR2::initializeSymmetric(
      93     3942504 :       (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
      94             :   // Old Deformation gradient (symmetrized)
      95     3942504 :   const auto Fbar = ADR2::initializeSymmetric(
      96     3942504 :       (*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]);
      97             : 
      98     3942504 :   total_strain_increment = A - Fbar;
      99     3942504 : }
     100             : 
     101             : template class ADComputeIncrementalStrainTempl<RankTwoTensor>;
     102             : template class ADComputeIncrementalStrainTempl<SymmetricRankTwoTensor>;

Generated by: LCOV version 1.14