1 /*! 2 * \file include/TFEL/Material/ChuNeedleman1980StressBasedNucleationModel.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_CHUNEEDLEMAN1980STRESSBASEDNUCLEATIONMODEL_HXX 15 #define LIB_TFEL_MATERIAL_CHUNEEDLEMAN1980STRESSBASEDNUCLEATIONMODEL_HXX 16 17 #include <tuple> 18 #include <ostream> 19 #include "TFEL/Config/TFELTypes.hxx" 20 #include "TFEL/Math/General/ResultType.hxx" 21 #include "TFEL/Math/stensor.hxx" 22 23 namespace tfel { 24 25 namespace material { 26 27 //! \brief a simple alias 28 template <typename StressStensorType> 29 using ChuNeedleman1980StressBasedNucleationModelStressType = 30 tfel::math::StensorNumType<StressStensorType>; 31 //! \brief a simple alias 32 template <typename StressStensorType> 33 using ChuNeedleman1980StressBasedNucleationModelRealType = 34 tfel::typetraits::base_type<tfel::math::StensorNumType<StressStensorType>>; 35 //! \brief a simple alias 36 template <typename StressStensorType> 37 using ChuNeedleman1980StressBasedNucleationModelInverseStressType = 38 tfel::math::result_type< 39 ChuNeedleman1980StressBasedNucleationModelRealType<StressStensorType>, 40 ChuNeedleman1980StressBasedNucleationModelStressType<StressStensorType>, 41 tfel::math::OpDiv>; 42 //! \brief a simple alias 43 template <typename StressStensorType> 44 using ChuNeedleman1980StressBasedNucleationModeDerivativeType = 45 tfel::math::stensor< 46 tfel::math::StensorTraits<StressStensorType>::dime, 47 ChuNeedleman1980StressBasedNucleationModelInverseStressType< 48 StressStensorType>>; 49 50 /*! 51 * \brief parameters of the strain version of the nucleation model 52 * proposed by Chu and Needleman. 53 * 54 * Chu, C. C., and A. Needleman. 1980. 55 * “Void Nucleation Effects in Biaxially Stretched Sheets.” 56 * Journal of Engineering Materials and Technology 102 (3): 249–56 57 */ 58 template <typename StressStensorType> 59 struct ChuNeedleman1980StressBasedNucleationModelParameters { 60 //! \brief factor in front of the gaussian distribution 61 ChuNeedleman1980StressBasedNucleationModelStressType<StressStensorType> fn; 62 //! \brief mean value of the gaussian distribution 63 ChuNeedleman1980StressBasedNucleationModelStressType<StressStensorType> sigm; 64 //! \brief standard deviation of the gaussian distribution 65 ChuNeedleman1980StressBasedNucleationModelStressType<StressStensorType> sn; 66 }; // end of struct ChuNeedleman1980StressBasedNucleationModelParameters 67 68 /*! 69 * \brief stream operator 70 * \return the output stream 71 * \tparam real: numeric type 72 * \tparam use_qt: flag stating if quantities are used 73 * \param[in] os: output stream 74 * \param[in] p: parameters 75 */ 76 template <typename StressStensorType> 77 std::ostream& operator<<( 78 std::ostream&, 79 const ChuNeedleman1980StressBasedNucleationModelParameters< 80 StressStensorType>&); 81 /*! 82 * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by 83 * the nucleation model of Chu and Needleman. 84 * 85 * \f[ 86 * A_{n} = \frac{f_N}{s_N \sqrt{2\pi}} 87 * \exp\left(-\frac{1}{2} 88 * \left(\frac{\sigma_{I} - \epsilon_N}{s_N}\right)^2\right) 89 * \f] 90 * 91 * Chu, C. C., and A. Needleman. 1980. 92 * “Void Nucleation Effects in Biaxially Stretched Sheets.” 93 * Journal of Engineering Materials and Technology 102 (3): 249–56 94 * 95 * \param[in] params: parameters 96 * \param[in] sig: stress tensor 97 * \param[in] p: equivalent plastic strain (unused) 98 */ 99 template <typename StressStensorType> 100 ChuNeedleman1980StressBasedNucleationModelRealType<StressStensorType> 101 computeChuNeedleman1980StressBasedNucleationModelPorosityRateFactor( 102 const ChuNeedleman1980StressBasedNucleationModelParameters< 103 StressStensorType>&, 104 const StressStensorType&, 105 const ChuNeedleman1980StressBasedNucleationModelRealType< 106 StressStensorType>&); 107 108 /*! 109 * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by 110 * the nucleation model of Chu and Needleman and its derivative 111 * \f$\frac{\partial A_{n}}{\partial \underline{\sigma}}\f$ with respect to the 112 * stress. 113 * 114 * \f[ 115 * A_{n} = \frac{f_N}{s_N \sqrt{2\pi}} 116 * \exp\left(-\frac{1}{2} 117 * \left(\frac{\sigma_{I} - \epsilon_N}{s_N}\right)^2\right) 118 * \f] 119 * 120 * Chu, C. C., and A. Needleman. 1980. 121 * “Void Nucleation Effects in Biaxially Stretched Sheets.” 122 * Journal of Engineering Materials and Technology 102 (3): 249–56 123 * 124 * \param[in] params: parameters 125 * \param[in] sig: stress tensor 126 * \param[in] p: equivalent plastic strain (unused) 127 */ 128 template <typename StressStensorType> 129 std::tuple< 130 ChuNeedleman1980StressBasedNucleationModelRealType<StressStensorType>, 131 ChuNeedleman1980StressBasedNucleationModeDerivativeType< 132 StressStensorType>> 133 computeChuNeedleman1980StressBasedNucleationModelPorosityRateFactorAndDerivative( 134 const ChuNeedleman1980StressBasedNucleationModelParameters< 135 StressStensorType>&, 136 const StressStensorType&, 137 const ChuNeedleman1980StressBasedNucleationModelRealType< 138 StressStensorType>&); 139 140 } // end of namespace material 141 142 } // end of namespace tfel 143 144 #include "TFEL/Material/ChuNeedleman1980StressBasedNucleationModel.ixx" 145 146 #endif /* LIB_TFEL_MATERIAL_CHUNEEDLEMAN1980STRESSBASEDNUCLEATIONMODEL_HXX */ 147