1 /*! 2 * \file include/TFEL/Material/PowerLawStrainBasedNucleationModel.hxx 3 * \brief 4 * \author Thomas Helfer 5 * \date 04/04/2020 6 * \copyright Copyright (C) 2006-2018 CEA/DEN, EDF R&D. All rights 7 * reserved. 8 * This project is publicly released under either the GNU GPL Licence 9 * or the CECILL-A licence. A copy of thoses licences are delivered 10 * with the sources of TFEL. CEA or EDF may also distribute this 11 * project under specific licensing conditions. 12 */ 13 14 #ifndef LIB_TFEL_MATERIAL_POWERLAWSTRAINBASEDNUCLEATIONMODEL_HXX 15 #define LIB_TFEL_MATERIAL_POWERLAWSTRAINBASEDNUCLEATIONMODEL_HXX 16 17 #include <tuple> 18 #include <ostream> 19 20 namespace tfel { 21 22 namespace material { 23 24 /*! 25 * \brief parameters of the strain version of the nucleation model 26 * proposed by Chu and Needleman. 27 * 28 * Chu, C. C., and A. Needleman. . 29 * “Void Nucleation Effects in Biaxially Stretched Sheets.” 30 * Journal of Engineering Materials and Technology 102 (3): 249–56 31 * 32 * \tparam real: numeric type 33 */ 34 template <typename real> 35 struct PowerLawStrainBasedNucleationModelParameters { 36 //! \brief factor in front of power law 37 real fn; 38 //! \brief minimal plastic strain 39 real en; 40 //! \brief exponent of the power law 41 real m; 42 }; // end of struct PowerLawStrainBasedNucleationModelParameters 43 44 /*! 45 * \brief stream operator 46 * \return the output stream 47 * \param[in] os: output stream 48 * \param[in] p: parameters 49 */ 50 template <typename real> 51 std::ostream& operator<<( 52 std::ostream&, 53 const PowerLawStrainBasedNucleationModelParameters<real>&); 54 /*! 55 * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by 56 * the power law nucleation model 57 * 58 * \f[ 59 * A_{n} = f_{n}\langle\dfrac{p}{\epsilon_{n}}-1\rangle^{m} 60 * \f] 61 * 62 * \tparam real: numeric type 63 * 64 * \param[in] params: parameters 65 * \param[in] p: equivalent plastic strain 66 */ 67 template <typename real> 68 real computePowerLawStrainBasedNucleationModelPorosityRateFactor( 69 const PowerLawStrainBasedNucleationModelParameters<real>&, const real); 70 71 /*! 72 * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by 73 * the power law nucleation model and its derivative 74 * \f$\frac{\partial A_{n}}{\partial p}\f$ with respect to the 75 * equivalent plastic strain \f$p\f$. 76 * 77 * \f[ 78 * A_{n} = f_{n}\langle\dfrac{p}{\epsilon_{n}}-1\rangle^{m} 79 * \f] 80 * 81 * \tparam real: numeric type 82 * 83 * \param[in] params: parameters 84 * \param[in] p: equivalent plastic strain 85 */ 86 template <typename real> 87 std::tuple<real, real> 88 computePowerLawStrainBasedNucleationModelPorosityRateFactorAndDerivative( 89 const PowerLawStrainBasedNucleationModelParameters<real>&, const real); 90 91 /*! 92 * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by 93 * the power law nucleation model 94 * 95 * \f[ 96 * A_{n} = f_{n}\langle\dfrac{p}{\epsilon_{n}}-1\rangle^{m} 97 * \f] 98 * 99 * \tparam real: numeric type 100 * 101 * \param[in] params: parameters 102 * \param[in] p: equivalent plastic strain at the beginning of the time step. 103 * \param[in] dp: increment of the equivalent plastic strain. 104 * \param[in] theta: parameter of the theta method. 105 */ 106 template <typename real> 107 real computePowerLawStrainBasedNucleationModelPorosityIncrement( 108 const PowerLawStrainBasedNucleationModelParameters<real>&, 109 const real, 110 const real, 111 const real); 112 113 /*! 114 * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by 115 * the power law nucleation model and its derivative 116 * \f$\frac{\partial A_{n}}{\partial p}\f$ with respect to the 117 * equivalent plastic strain \f$p\f$. 118 * 119 * \f[ 120 * A_{n} = f_{n}\langle\dfrac{p}{\epsilon_{n}}-1\rangle^{m} 121 * \f] 122 * 123 * \tparam real: numeric type 124 * 125 * \param[in] params: parameters 126 * \param[in] p: equivalent plastic strain 127 * \param[in] p: equivalent plastic strain at the beginning of the time step. 128 * \param[in] dp: increment of the equivalent plastic strain. 129 * \param[in] theta: parameter of the theta method. 130 */ 131 template <typename real> 132 std::tuple<real, real> 133 computePowerLawStrainBasedNucleationModelPorosityIncrementAndDerivative( 134 const PowerLawStrainBasedNucleationModelParameters<real>&, 135 const real, 136 const real, 137 const real); 138 139 140 } // end of namespace material 141 142 } // end of namespace tfel 143 144 #include "TFEL/Material/PowerLawStrainBasedNucleationModel.ixx" 145 146 #endif /* LIB_TFEL_MATERIAL_POWERLAWSTRAINBASEDNUCLEATIONMODEL_HXX */ 147