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