1 /*!
2  * \file   include/MFront/BehaviourBrick/SwiftIsotropicHardeningRule.hxx
3  * \brief
4  * \author Thomas Helfer
5  * \date   15/03/2018
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_MFRONT_BEHAVIOURBRICK_SWIFTISOTROPICHARDENINGRULE_HXX
15 #define LIB_MFRONT_BEHAVIOURBRICK_SWIFTISOTROPICHARDENINGRULE_HXX
16 
17 #include "MFront/BehaviourBrick/IsotropicHardeningRule.hxx"
18 
19 namespace mfront {
20 
21   namespace bbrick {
22 
23     /*!
24      * \brief class describing a Swift isotropic hardening rule
25      * \f[
26      * R\left(p\right)=R_{0}\left(\frac{p+p_{0}}{p_{0}}\right)^{n}
27      * \f]
28      * where:
29      * - \f$R_{0}\f$ is the yield strength
30      * - \f$n\f$ is the exponent
31      * - \f$p_{0}\f$ is a parameter which avoids an infinite derivative of the
32      *   previous relation for \(p=0\).
33      */
34     struct SwiftIsotropicHardeningRule final : IsotropicHardeningRule {
35       void initialize(BehaviourDescription&,
36                       AbstractBehaviourDSL&,
37                       const std::string&,
38                       const std::string&,
39                       const DataMap&) override;
40       std::vector<OptionDescription> getOptions() const override;
41       std::string computeElasticPrediction(const std::string&,
42                                            const std::string&) const override;
43       std::string computeElasticLimit(const std::string&,
44                                       const std::string&) const override;
45       std::string computeElasticLimitAndDerivative(
46           const std::string&, const std::string&) const override;
47       void endTreatment(BehaviourDescription&,
48                         const AbstractBehaviourDSL&,
49                         const std::string&,
50                         const std::string&) const override;
51       //! destructor
52       ~SwiftIsotropicHardeningRule() override;
53 
54      protected:
55       BehaviourDescription::MaterialProperty R0;
56       BehaviourDescription::MaterialProperty p0;
57       BehaviourDescription::MaterialProperty n;
58     };  // end of struct SwiftIsotropicHardeningRule
59 
60   }  // end of namespace bbrick
61 
62 }  // end of namespace mfront
63 
64 #endif /* LIB_MFRONT_BEHAVIOURBRICK_SWIFTISOTROPICHARDENINGRULE_HXX */
65