From 89da1ea4ce9ab6e18dde6ab6666bab3c4acc4f9d Mon Sep 17 00:00:00 2001 From: Antoine Jacquey Date: Sun, 3 Mar 2019 19:33:55 +0100 Subject: [PATCH] Base input for damage --- include/materials/LynxDamageDeformation.h | 13 ++- src/materials/LynxDamageDeformation.C | 96 +++++++++++++++++++--- test/tests/finite_strain/rotation_test.e | Bin 0 -> 173584 bytes 3 files changed, 94 insertions(+), 15 deletions(-) create mode 100644 test/tests/finite_strain/rotation_test.e diff --git a/include/materials/LynxDamageDeformation.h b/include/materials/LynxDamageDeformation.h index 3efc17e..144d6fd 100644 --- a/include/materials/LynxDamageDeformation.h +++ b/include/materials/LynxDamageDeformation.h @@ -35,7 +35,10 @@ public: virtual ~LynxDamageDeformation() {} protected: - virtual void plasticCorrection(Real & pressure, RankTwoTensor & stress_dev); + virtual void initQpStatefulProperties() override; + virtual void computeQpDeformation() override; + virtual void elasticModuli() override; + virtual void plasticCorrection(Real & pressure, RankTwoTensor & stress_dev) override; virtual void convexPlasticCorrection(Real & pressure, RankTwoTensor & stress_dev); virtual Real convexReferencePressure(const Real & p_tr, const Real & q_tr); virtual Real convexPlasticYield2(const Real & rho); @@ -44,7 +47,7 @@ protected: virtual Real dConvexPlasticYield2_dp(const Real & pressure, const Real & eqv_stress); virtual Real dConvexPlasticYield2_dq(const Real & pressure, const Real & eqv_stress); virtual Real getConvexProjection(const Real & x1, const Real & x2); - + virtual Real strainRatio(const RankTwoTensor & elastic_strain); // Coupled variables bool _coupled_dam; const VariableValue & _damage; @@ -53,10 +56,10 @@ protected: const VariableValue & _porosity; // Strain parameters - + // Elastic moduli parameters const std::vector _damage_modulus; - + // Creep parameters // Plastic parameters @@ -77,6 +80,8 @@ protected: Real _p_k; // Strain properties + MaterialProperty & _elastic_strain; + const MaterialProperty & _elastic_strain_old; // Viscous properties diff --git a/src/materials/LynxDamageDeformation.C b/src/materials/LynxDamageDeformation.C index d1ffe52..f28f480 100644 --- a/src/materials/LynxDamageDeformation.C +++ b/src/materials/LynxDamageDeformation.C @@ -60,15 +60,81 @@ LynxDamageDeformation::LynxDamageDeformation(const InputParameters & parameters) // Plastic parameters _critical_pressure((_has_plasticity && isParamValid("critical_pressure")) ? getLynxParam("critical_pressure") - : std::vector(_n_composition, 0.0)) -// Rheology boolean -// Strain properties + : std::vector(_n_composition, 0.0)), + // Rheology boolean + // Strain properties + _elastic_strain(declareProperty("elastic_strain")), + _elastic_strain_old(getMaterialPropertyOld("elastic_strain")) // Viscous properties // Plastic properties // Stress properties { } +void +LynxDamageDeformation::initQpStatefulProperties() +{ + _elastic_strain[_qp].zero(); + LynxDeformation::initQpStatefulProperties(); +} + +void +LynxDamageDeformation::computeQpDeformation() +{ + // Update elastic moduli + elasticModuli(); + + // Update the volumetric part of the deformation + Real pressure = -_stress_old[_qp].trace() / 3.0; + volumetricDeformation(pressure); + + // Update the deviatoric part of the deformation + RankTwoTensor stress_dev = spinRotation(_stress_old[_qp].deviatoric()); + deviatoricDeformation(pressure, stress_dev); + + // Plastic correction + if (_has_plasticity && _G[_qp] != 0.0) + plasticCorrection(pressure, stress_dev); + + // Form the total stress tensor + _stress[_qp] = stress_dev; + _stress[_qp].addIa(-pressure); + + // Update tangent operator modulus + if (_fe_problem.currentlyComputingJacobian()) + tangentOperator(); +} + +void +LynxDamageDeformation::elasticModuli() +{ + // Elastic strain ratio + const Real xi_old = strainRatio(_elastic_strain_old[_qp]); + + // Critical strain strain ratio + _xi0 = + + // Bulk modulus + _K[_qp] = _has_bulk_modulus ? averageProperty(_bulk_modulus) : 0.0; + + // Shear modulus + _G[_qp] = _has_shear_modulus ? averageProperty(_shear_modulus) : 0.0; + + // Initialize inelastic increment + _viscous_strain_incr[_qp].zero(); + _plastic_strain_incr[_qp].zero(); + + // Initialize stuff + _stress_corr_v = 1.0; + _dq_dq_tr_v = 1.0; + _stress_corr_p = 1.0; + _dp_dp_tr_p = 1.0; + _dp_dq_tr_p = 0.0; + _dq_dp_tr_p = 0.0; + _dq_dq_tr_p = 1.0; + _plastic_yield_function[_qp] = -1.0; +} + void LynxDamageDeformation::plasticCorrection(Real & pressure, RankTwoTensor & stress_dev) { @@ -137,7 +203,7 @@ LynxDamageDeformation::convexPlasticCorrection(Real & pressure, RankTwoTensor & // Plastic strain Real vol_strain_p = (_p_tr - p_0) / _K[_qp]; Real eqv_strain_p = (_q_tr - q_0) / (3.0 * _G[_qp]); - + // Viscoplastic correction if (one_on_eta != 0.0) { @@ -145,14 +211,14 @@ LynxDamageDeformation::convexPlasticCorrection(Real & pressure, RankTwoTensor & Real delta_p = std::sqrt(Utility::pow<2>(vol_strain_p) + Utility::pow<2>(eqv_strain_p)); vp_correction = (F_tr * one_on_eta * _dt / delta_p) / (1.0 + F_tr * one_on_eta * _dt / delta_p); - + vol_strain_p *= vp_correction; eqv_strain_p *= vp_correction; } _plastic_strain_incr[_qp] = 1.5 * eqv_strain_p * flow_dir; _plastic_strain_incr[_qp].addIa(-vol_strain_p / 3.0); - pressure -= _K[_qp] * vol_strain_p; + pressure -= _K[_qp] * vol_strain_p; stress_dev -= 3.0 * _G[_qp] * eqv_strain_p * flow_dir; eqv_stress = std::sqrt(1.5) * stress_dev.L2norm(); _plastic_yield_function[_qp] = @@ -268,10 +334,6 @@ LynxDamageDeformation::dConvexPlasticYield2_dq(const Real & pressure, const Real Real xi_cr = (pressure > 0.0) ? _xi0 - (std::sqrt(3.0) + _xi0) * pressure / _p_cr * pq_term : _xi0; Real dxi_cr_dq = (eqv_stress != 0.0) ? 2.0 * (_xi0 - xi_cr) / eqv_stress * (1.0 - pq_term) : 0.0; - - Real mu2 = (xi_cr != 0.0) ? 2.0 * Utility::pow<2>(_G[_qp] / _K[_qp]) * - (3.0 - Utility::pow<2>(xi_cr)) / Utility::pow<2>(xi_cr) - : 0.0; Real dmu2_dxi_cr = (xi_cr != 0.0) ? -12.0 * Utility::pow<2>(_G[_qp] / _K[_qp]) / Utility::pow<3>(xi_cr) : 0.0; @@ -371,4 +433,16 @@ LynxDamageDeformation::getConvexProjection(const Real & x1, const Real & x2) } throw MooseException( "LynxDamageDeformation: maximum number of iterations exceeded in solveBrent!"); -} \ No newline at end of file +} + +Real +LynxDamageDeformation::strainRatio(const RankTwoTensor & elastic_strain) +{ + const Real strain_v = elastic_strain.trace(); + const Real strain_norm = elastic_strain.L2norm(); + + if (strain_norm != 0.0) + return strain_v / strain_norm; + else + return -std::sqrt(3.0); +} diff --git a/test/tests/finite_strain/rotation_test.e b/test/tests/finite_strain/rotation_test.e new file mode 100644 index 0000000000000000000000000000000000000000..a87ece114fc9e51dcad81f21af8c54402fb64da6 GIT binary patch literal 173584 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 O2RskI5zD`V`Tqddd6awr literal 0 HcmV?d00001 -- GitLab