1 /*!
2  * \file  mfront/src/CyranoStressFreeExpansionHandler.cxx
3  * \brief
4  * \author Thomas Helfer
5  * \brief 04 mars 2014
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 #include<cmath>
15 #include<limits>
16 #include<stdexcept>
17 #include"TFEL/Raise.hxx"
18 #include"TFEL/Math/General/MathConstants.hxx"
19 #include"MFront/Cyrano/CyranoStressFreeExpansionHandler.hxx"
20 
21 namespace cyrano {
22 
CyranoStandardSmallStrainStressFreeExpansionHandler(CyranoReal * const em,CyranoReal * const dem,const CyranoReal * const e,const CyranoReal * const de,const CyranoReal * const s0,const CyranoReal * const s1)23   void CyranoStandardSmallStrainStressFreeExpansionHandler(CyranoReal *const em,
24                                                            CyranoReal *const dem,
25                                                            const CyranoReal *const e,
26                                                            const CyranoReal *const de,
27                                                            const CyranoReal *const s0,
28                                                            const CyranoReal *const s1) {
29     em[0] = e[0] - s0[0];
30     em[1] = e[2] - s0[1];
31     em[2] = e[1] - s0[2];
32     dem[0] = de[0] - (s1[0] - s0[0]);
33     dem[1] = de[2] - (s1[1] - s0[1]);
34     dem[2] = de[1] - (s1[2] - s0[2]);
35   } // end of CyranoStandardSmallStrainStressFreeExpansionHandler
36 
CyranoLogarithmicStrainStressFreeExpansionHandler(CyranoReal * const em,CyranoReal * const dem,const CyranoReal * const e,const CyranoReal * const de,const CyranoReal * const s0,const CyranoReal * const s1)37   void CyranoLogarithmicStrainStressFreeExpansionHandler(CyranoReal *const em,
38                                                          CyranoReal *const dem,
39                                                          const CyranoReal *const e,
40                                                          const CyranoReal *const de,
41                                                          const CyranoReal *const s0,
42                                                          const CyranoReal *const s1) {
43     CyranoReal log_s0[3];
44     CyranoReal log_s1[3];
45     log_s0[0] = std::log1p(s0[0]);
46     log_s0[1] = std::log1p(s0[1]);
47     log_s0[2] = std::log1p(s0[2]);
48     log_s1[0] = std::log1p(s1[0]);
49     log_s1[1] = std::log1p(s1[1]);
50     log_s1[2] = std::log1p(s1[2]);
51     em[0]  = e[0]-log_s0[0];
52     em[1]  = e[2]-log_s0[1];
53     em[2]  = e[1]-log_s0[2];
54     dem[0] = de[0]-(log_s1[0]-log_s0[0]);
55     dem[1] = de[2]-(log_s1[1]-log_s0[1]);
56     dem[2] = de[1]-(log_s1[2]-log_s0[2]);
57   } // end of CyranoLogarithmicStrainStressFreeExpansionHandler
58 
59 } // end of namespace cyrano
60