LCOV - code coverage report
Current view: top level - src/materials - ADComputeStrainBase.C (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: f45d79 Lines: 42 46 91.3 %
Date: 2025-07-25 05:00:39 Functions: 8 10 80.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 "ADComputeStrainBase.h"
      11             : #include "RankTwoTensor.h"
      12             : #include "SymmetricRankTwoTensor.h"
      13             : #include "MooseMesh.h"
      14             : #include "Assembly.h"
      15             : 
      16             : template <typename R2>
      17             : InputParameters
      18        5472 : ADComputeStrainBaseTempl<R2>::validParams()
      19             : {
      20        5472 :   InputParameters params = Material::validParams();
      21       10944 :   params.addRequiredCoupledVar(
      22             :       "displacements",
      23             :       "The displacements appropriate for the simulation geometry and coordinate system");
      24       10944 :   params.addParam<std::string>("base_name",
      25             :                                "Optional parameter that allows the user to define "
      26             :                                "multiple mechanics material systems on the same "
      27             :                                "block, i.e. for multiple phases");
      28       10944 :   params.addParam<bool>(
      29       10944 :       "volumetric_locking_correction", false, "Flag to correct volumetric locking");
      30       10944 :   params.addParam<std::vector<MaterialPropertyName>>(
      31             :       "eigenstrain_names", {}, "List of eigenstrains to be applied in this strain calculation");
      32       10944 :   params.addParam<MaterialPropertyName>("global_strain",
      33             :                                         "Optional material property holding a global strain "
      34             :                                         "tensor applied to the mesh as a whole");
      35        5472 :   params.suppressParameter<bool>("use_displaced_mesh");
      36        5472 :   return params;
      37           0 : }
      38             : 
      39             : template <typename R2>
      40        4104 : ADComputeStrainBaseTempl<R2>::ADComputeStrainBaseTempl(const InputParameters & parameters)
      41             :   : Material(parameters),
      42        4104 :     _ndisp(coupledComponents("displacements")),
      43        4104 :     _disp(adCoupledValues("displacements")),
      44        4104 :     _grad_disp(adCoupledGradients("displacements")),
      45        8352 :     _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
      46        4104 :     _mechanical_strain(declareADProperty<R2>(_base_name + "mechanical_strain")),
      47        4104 :     _total_strain(declareADProperty<R2>(_base_name + "total_strain")),
      48        8208 :     _eigenstrain_names(getParam<std::vector<MaterialPropertyName>>("eigenstrain_names")),
      49        4104 :     _eigenstrains(_eigenstrain_names.size()),
      50        4104 :     _global_strain(isParamValid("global_strain")
      51        4104 :                        ? &getADMaterialProperty<R2>(_base_name + "global_strain")
      52             :                        : nullptr),
      53       12166 :     _volumetric_locking_correction(getParam<bool>("volumetric_locking_correction") &&
      54             :                                    !this->isBoundaryMaterial()),
      55        8208 :     _current_elem_volume(_assembly.elemVolume())
      56             : {
      57             :   // set unused dimensions to zero
      58        6192 :   for (unsigned i = _ndisp; i < 3; ++i)
      59             :   {
      60        2088 :     _disp.push_back(&_ad_zero);
      61        2088 :     _grad_disp.push_back(&_ad_grad_zero);
      62             :   }
      63             : 
      64        4572 :   for (unsigned int i = 0; i < _eigenstrains.size(); ++i)
      65             :   {
      66         936 :     _eigenstrain_names[i] = _base_name + _eigenstrain_names[i];
      67         468 :     _eigenstrains[i] = &getADMaterialProperty<R2>(_eigenstrain_names[i]);
      68             :   }
      69             : 
      70        4104 :   if (_ndisp == 1 && _volumetric_locking_correction)
      71           0 :     paramError("volumetric_locking_correction", "has to be set to false for 1-D problems.");
      72             : 
      73        8208 :   if (getParam<bool>("use_displaced_mesh"))
      74           0 :     paramError("use_displaced_mesh", "The strain calculator needs to run on the undisplaced mesh.");
      75        4104 : }
      76             : 
      77             : template <typename R2>
      78             : void
      79        1008 : ADComputeStrainBaseTempl<R2>::initialSetup()
      80             : {
      81        3618 :   displacementIntegrityCheck();
      82        1008 : }
      83             : 
      84             : template <typename R2>
      85             : void
      86        3564 : ADComputeStrainBaseTempl<R2>::displacementIntegrityCheck()
      87             : {
      88             :   // Checking for consistency between mesh size and length of the provided displacements vector
      89        3564 :   if (_ndisp != _mesh.dimension())
      90           0 :     paramError(
      91             :         "displacements",
      92             :         "The number of variables supplied in 'displacements' must match the mesh dimension.");
      93        3564 : }
      94             : 
      95             : template <typename R2>
      96             : void
      97         768 : ADComputeStrainBaseTempl<R2>::initQpStatefulProperties()
      98             : {
      99         768 :   _mechanical_strain[_qp].zero();
     100         768 :   _total_strain[_qp].zero();
     101         768 : }
     102             : 
     103             : template class ADComputeStrainBaseTempl<RankTwoTensor>;
     104             : template class ADComputeStrainBaseTempl<SymmetricRankTwoTensor>;

Generated by: LCOV version 1.14