LCOV - code coverage report
Current view: top level - include/materials - CappedDruckerPragerCosseratStressUpdate.h (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: f45d79 Lines: 1 1 100.0 %
Date: 2025-07-25 05:00:39 Functions: 1 1 100.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             : #pragma once
      11             : 
      12             : #include "CappedDruckerPragerStressUpdate.h"
      13             : 
      14             : /**
      15             :  * CappedDruckerPragerCosseratStressUpdate performs the return-map
      16             :  * algorithm and associated stress updates for plastic
      17             :  * models that describe capped Drucker-Prager plasticity in the
      18             :  * layered Cosserat setting
      19             :  *
      20             :  * This plastic model is ideally suited to a material (eg rock)
      21             :  * that has different compressive, tensile and shear
      22             :  * strengths.  Any of these strengths may be set large to
      23             :  * accommodate special situations.  For instance, setting
      24             :  * the compressive strength large is appropriate if there
      25             :  * is no chance of compressive failure in a model.
      26             :  *
      27             :  * This plastic model has two internal parameters:
      28             :  *  - a "shear" internal parameter which parameterises the
      29             :  *    amount of shear plastic strain.  The cohesion, friction
      30             :  *    angle, and dilation angle are assumed to be functions
      31             :  *    of this internal parameter.
      32             :  *  - a "tensile" internal parameter which parameterises the
      33             :  *    amount of tensile plastic strain.  The tensile strength
      34             :  *    and compressive strength are assumed to be functions of
      35             :  *    this internal parameter.  This means, for instance, that
      36             :  *    failure in tension can cause the compressive strenght
      37             :  *    to soften, as would be expected in rock-mechanics
      38             :  *    scenarios.
      39             :  *
      40             :  * This plasticity model assumes that the flow rule involves an
      41             :  * isotropic built from the user-supplied Young and Poisson.
      42             :  * That is, the return-map process does NOT flow using the
      43             :  * elasticity tensor in the stress-strain law, which is unsymmetric
      44             :  * in general (in the Cosserat setting).  Physically this corresponds
      45             :  * to the notion that the "host" medium for the Cosserat grains/layers
      46             :  * is failing via Drucker-Prager, and not the Cosserat grains/layers
      47             :  * themselves.
      48             :  */
      49             : class CappedDruckerPragerCosseratStressUpdate : public CappedDruckerPragerStressUpdate
      50             : {
      51             : public:
      52             :   static InputParameters validParams();
      53             : 
      54             :   CappedDruckerPragerCosseratStressUpdate(const InputParameters & parameters);
      55             : 
      56             :   /**
      57             :    * Does the model require the elasticity tensor to be isotropic?
      58             :    */
      59          90 :   bool requiresIsotropicTensor() override { return false; }
      60             : 
      61             : protected:
      62             :   /// Shear modulus for the host medium
      63             :   const Real _shear;
      64             : 
      65             :   /// Isotropic elasticity tensor for the host medium
      66             :   RankFourTensor _Ehost;
      67             : 
      68             :   virtual void setEppEqq(const RankFourTensor & Eijkl, Real & Epp, Real & Eqq) const override;
      69             : 
      70             :   virtual void setStressAfterReturn(const RankTwoTensor & stress_trial,
      71             :                                     Real p_ok,
      72             :                                     Real q_ok,
      73             :                                     Real gaE,
      74             :                                     const std::vector<Real> & intnl,
      75             :                                     const yieldAndFlow & smoothed_q,
      76             :                                     const RankFourTensor & Eijkl,
      77             :                                     RankTwoTensor & stress) const override;
      78             : 
      79             :   virtual void consistentTangentOperator(const RankTwoTensor & stress_trial,
      80             :                                          Real p_trial,
      81             :                                          Real q_trial,
      82             :                                          const RankTwoTensor & stress,
      83             :                                          Real p,
      84             :                                          Real q,
      85             :                                          Real gaE,
      86             :                                          const yieldAndFlow & smoothed_q,
      87             :                                          const RankFourTensor & Eijkl,
      88             :                                          bool compute_full_tangent_operator,
      89             :                                          RankFourTensor & cto) const override;
      90             : };

Generated by: LCOV version 1.14