1 /*!
2  * \file  mfront/src/ImplicitFiniteStrainDSL.cxx
3  * \brief
4  * \author Thomas Helfer
5  * \brief 18 févr. 2013
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"MFront/ImplicitFiniteStrainDSL.hxx"
15 
16 namespace mfront{
17 
ImplicitFiniteStrainDSL()18   ImplicitFiniteStrainDSL::ImplicitFiniteStrainDSL() {
19     this->mb.setDSLName("ImplicitFiniteStrain");
20     this->mb.declareAsAFiniteStrainStandardBehaviour(false);
21     this->registerNewCallBack(
22         "@ComputeStress",
23         &ImplicitFiniteStrainDSL::treatComputeThermodynamicForces);
24     this->registerNewCallBack(
25         "@ComputeFinalStress",
26         &ImplicitFiniteStrainDSL::treatComputeFinalThermodynamicForces);
27   } // end of ImplicitFiniteStrainDSL::ImplicitFiniteStrainDSL
28 
getName()29   std::string ImplicitFiniteStrainDSL::getName() {
30     return "ImplicitFiniteStrain";
31   } // end of ImplicitFiniteStrainDSL::getName
32 
getDescription()33   std::string ImplicitFiniteStrainDSL::getDescription() {
34     return "this parser provides a generic integrator based on a theta method.";
35   } // end of ImplicitFiniteStrainDSL::getDescription
36 
getCodeBlockTemplate(const std::string & c,const MFrontTemplateGenerationOptions & o) const37   std::string ImplicitFiniteStrainDSL::getCodeBlockTemplate(
38       const std::string& c, const MFrontTemplateGenerationOptions& o) const {
39     if (c == BehaviourData::ComputeThermodynamicForces) {
40       return "@ComputeStress{}\n";
41     }
42     return ImplicitDSLBase::getCodeBlockTemplate(c, o);
43   }  // end of ImplicitFiniteStrainDSL::getCodeBlockTemplate
44 
getBehaviourDSLDescription() const45   BehaviourDSLDescription ImplicitFiniteStrainDSL::getBehaviourDSLDescription() const {
46     auto d = mfront::getDefaultFiniteStrainBehaviourDSLDescription();
47     d.integrationScheme = IntegrationScheme::IMPLICITSCHEME;
48     d.typicalCodeBlocks = {BehaviourData::ComputePredictionOperator,
49                            BehaviourData::ComputePredictor,
50                            BehaviourData::ComputeThermodynamicForces,
51                            BehaviourData::Integrator,
52                            BehaviourData::ComputeTangentOperator};
53     d.minimalMFrontFileBody = "@Integrator{}\n\n";
54     return d;
55   }  // end of ImplicitFiniteStrainDSL::getBehaviourDSLDescription
56 
57   ImplicitFiniteStrainDSL::~ImplicitFiniteStrainDSL() noexcept = default;
58 
59 } // end of namespace mfront
60