LCOV - code coverage report
Current view: top level - src/materials - ADComputeIncrementalSmallStrain.C (source / functions) Hit Total Coverage
Test: idaholab/moose tensor_mechanics: d6b47a Lines: 31 36 86.1 %
Date: 2024-02-27 11:53:14 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://www.mooseframework.org
       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 "ADComputeIncrementalSmallStrain.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("TensorMechanicsApp", ADComputeIncrementalSmallStrain);
      19             : registerMooseObject("TensorMechanicsApp", ADSymmetricIncrementalSmallStrain);
      20             : 
      21             : template <typename R2>
      22             : InputParameters
      23         468 : ADComputeIncrementalSmallStrainTempl<R2>::validParams()
      24             : {
      25             :   InputParameters params = ADComputeIncrementalStrainBase::validParams();
      26         468 :   params.addClassDescription(
      27             :       "Compute a strain increment and rotation increment for small strains.");
      28         468 :   return params;
      29           0 : }
      30             : 
      31             : template <typename R2>
      32         351 : ADComputeIncrementalSmallStrainTempl<R2>::ADComputeIncrementalSmallStrainTempl(
      33             :     const InputParameters & parameters)
      34         351 :   : ADComputeIncrementalStrainBaseTempl<R2>(parameters)
      35             : {
      36         351 : }
      37             : 
      38             : template <typename R2>
      39             : void
      40      242844 : ADComputeIncrementalSmallStrainTempl<R2>::computeProperties()
      41             : {
      42      242844 :   ADReal volumetric_strain = 0.0;
      43     2297242 :   for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
      44             :   {
      45     2054398 :     ADR2 total_strain_increment;
      46     2054398 :     computeTotalStrainIncrement(total_strain_increment);
      47             : 
      48     2054398 :     _strain_increment[_qp] = total_strain_increment;
      49             : 
      50     2054398 :     if (_volumetric_locking_correction)
      51           0 :       volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
      52             :   }
      53             : 
      54      242844 :   if (_volumetric_locking_correction)
      55           0 :     volumetric_strain /= _current_elem_volume;
      56             : 
      57     2297242 :   for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
      58             :   {
      59     2054398 :     if (_volumetric_locking_correction)
      60             :     {
      61           0 :       const auto correction = (volumetric_strain - _strain_increment[_qp].trace()) / 3.0;
      62           0 :       _strain_increment[_qp].addIa(correction);
      63             :     }
      64             : 
      65     2054398 :     _total_strain[_qp] = _strain_increment[_qp] + _total_strain_old[_qp];
      66             : 
      67             :     // Remove the Eigen strain increment
      68     2054398 :     this->subtractEigenstrainIncrementFromStrain(_strain_increment[_qp]);
      69             : 
      70             :     // strain rate
      71     2054398 :     if (_dt > 0)
      72     2051886 :       _strain_rate[_qp] = _strain_increment[_qp] / _dt;
      73             :     else
      74        2512 :       _strain_rate[_qp].zero();
      75             : 
      76             :     // Update strain in intermediate configuration: rotations are not needed
      77     2054398 :     _mechanical_strain[_qp] = _strain_increment[_qp] + _mechanical_strain_old[_qp];
      78             : 
      79             :     // incremental small strain does not include rotation
      80     2054398 :     _rotation_increment[_qp].setToIdentity();
      81             :   }
      82      242844 : }
      83             : 
      84             : template <typename R2>
      85             : void
      86     1994860 : ADComputeIncrementalSmallStrainTempl<R2>::computeTotalStrainIncrement(ADR2 & total_strain_increment)
      87             : {
      88             :   // Deformation gradient (symmetrized)
      89     1994860 :   const auto A = ADR2::initializeSymmetric(
      90     1994860 :       (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
      91             :   // Old Deformation gradient (symmetrized)
      92     1994860 :   const auto Fbar = ADR2::initializeSymmetric(
      93     1994860 :       (*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]);
      94             : 
      95     1994860 :   total_strain_increment = A - Fbar;
      96     1994860 : }
      97             : 
      98             : template class ADComputeIncrementalSmallStrainTempl<RankTwoTensor>;
      99             : template class ADComputeIncrementalSmallStrainTempl<SymmetricRankTwoTensor>;

Generated by: LCOV version 1.14