1 /*!
2  * \file   include/TFEL/Material/ChuNeedleman1980StrainBasedNucleationModel.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_CHUNEEDLEMAN1980STRAINBASEDNUCLEATIONMODEL_HXX
15 #define LIB_TFEL_MATERIAL_CHUNEEDLEMAN1980STRAINBASEDNUCLEATIONMODEL_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. 1980.
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 ChuNeedleman1980StrainBasedNucleationModelParameters {
36       //! \brief factor in front of the gaussian distribution
37       real fn;
38       //! \brief mean value of the gaussian distribution
39       real en;
40       //! \brief standard deviation of the gaussian distribution
41       real sn;
42     };  // end of struct ChuNeedleman1980StrainBasedNucleationModelParameters
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 ChuNeedleman1980StrainBasedNucleationModelParameters<real>&);
54 
55     /*!
56      * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by
57      * the nucleation model of Chu and Needleman.
58      *
59      * \f[
60      * A_{n} = \frac{f_N}{s_N \sqrt{2\pi}}
61      *         \exp\left(-\frac{1}{2}
62      *                    \left(\frac{p - \epsilon_N}{s_N}\right)^2\right)
63      * \f]
64      *
65      * Chu, C. C., and A. Needleman. 1980.
66      * “Void Nucleation Effects in Biaxially Stretched Sheets.”
67      * Journal of Engineering Materials and Technology 102 (3): 249–56
68      *
69      * \tparam real: numeric type
70      *
71      * \param[in] params: parameters
72      * \param[in] p: equivalent plastic strain
73      */
74     template <typename real>
75     real computeChuNeedleman1980StrainBasedNucleationModelPorosityRateFactor(
76         const ChuNeedleman1980StrainBasedNucleationModelParameters<real>&,
77         const real);
78 
79     /*!
80      * \brief computes the porosity rate factor \f$A_{n}\f$ as defined by
81      * the nucleation model of Chu and Needleman and its derivative
82      * \f$\frac{\partial A_{n}}{\partial p}\f$ with respect to the
83      * equivalent plastic strain \f$p\f$.
84      *
85      * \f[
86      * A_{n} = \frac{f_N}{s_N \sqrt{2\pi}}
87      *         \exp\left(-\frac{1}{2}
88      *                    \left(\frac{p - \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      * \tparam real: numeric type
96      *
97      * \param[in] params: parameters
98      * \param[in] p: equivalent plastic strain
99      */
100     template <typename real>
101     std::tuple<real, real>
102     computeChuNeedleman1980StrainBasedNucleationModelPorosityRateFactorAndDerivative(
103         const ChuNeedleman1980StrainBasedNucleationModelParameters<real>&,
104         const real);
105 
106     /*!
107      * \brief computes the porosity increment \f$A_{n}\f$ as defined by
108      * the nucleation model of Chu and Needleman.
109      *
110      * Chu, C. C., and A. Needleman. 1980.
111      * “Void Nucleation Effects in Biaxially Stretched Sheets.”
112      * Journal of Engineering Materials and Technology 102 (3): 249–56
113      *
114      * \tparam real: numeric type
115      *
116      * \param[in] params: parameters
117      * \param[in] p: equivalent plastic strain
118      */
119     template <typename real>
120     real computeChuNeedleman1980StrainBasedNucleationModelPorosityIncrement(
121         const ChuNeedleman1980StrainBasedNucleationModelParameters<real>&,
122         const real);
123 
124     /*!
125      * \brief computes the porosity increment defined by
126      * the nucleation model of Chu and Needleman and its derivative
127      * with respect to the increment of the equivalent plastic strain \f$p\f$.
128      *
129      * Chu, C. C., and A. Needleman. 1980.
130      * “Void Nucleation Effects in Biaxially Stretched Sheets.”
131      * Journal of Engineering Materials and Technology 102 (3): 249–56
132      *
133      * \tparam real: numeric type
134      *
135      * \param[in] params: parameters
136      * \param[in] p: equivalent plastic strain
137      */
138     template <typename real>
139     std::tuple<real, real>
140     computeChuNeedleman1980StrainBasedNucleationModelPorosityIncrementAndDerivative(
141         const ChuNeedleman1980StrainBasedNucleationModelParameters<real>&,
142         const real);
143 
144   }  // end of namespace material
145 
146 }  // end of namespace tfel
147 
148 #include "TFEL/Material/ChuNeedleman1980StrainBasedNucleationModel.ixx"
149 
150 #endif /* LIB_TFEL_MATERIAL_CHUNEEDLEMAN1980STRAINBASEDNUCLEATIONMODEL_HXX */
151