1 /*!
2  * \file   mfront/includes/MFront/StandardElastoViscoPlasticityBrick.hxx
3  * \brief
4  * \author Thomas Helfer
5  * \date   15/03/2018
6  */
7 
8 #ifndef LIB_MFRONT_STANDARDELASTOVISCOPLASTICITYBRICK_HXX
9 #define LIB_MFRONT_STANDARDELASTOVISCOPLASTICITYBRICK_HXX
10 
11 #include <memory>
12 #include "MFront/BehaviourBrickBase.hxx"
13 
14 namespace mfront {
15 
16   namespace bbrick {
17     // forward declaration
18     struct StressPotential;
19     // forward declaration
20     struct InelasticFlow;
21   }  // end of namespace bbrick
22 
23   /*!
24    * \brief The `StandardElastoViscoPlasticityBrick` is meant to describe a
25    * behaviour based on:
26    * - a stress potential describing how the stress is computed. The most
27    *   used one will probably be the `Hooke` stress potential.
28    * - a list of inelastic flows which describe how inelastic strains evolve.
29    */
30   struct StandardElastoViscoPlasticityBrick : public BehaviourBrickBase {
31     /*!
32      * \brief constructor
33      * \param[in] dsl_ : calling domain specific language
34      * \param[in] bd_  : mechanical behaviour description
35      * \param[in] p    : parameters
36      * \param[in] d    : data
37      */
38     StandardElastoViscoPlasticityBrick(AbstractBehaviourDSL&,
39                                        BehaviourDescription&,
40                                        const Parameters&,
41                                        const DataMap&);
42     //! \return the name of the brick
43     std::string getName() const override;
44     //! \return the list of supported modelling hypotheses.
45     std::vector<Hypothesis> getSupportedModellingHypotheses() const override;
46     //! complete the variable description
47     void completeVariableDeclaration() const override;
48     //! method called at the end of the input file processing
49     void endTreatment() const override;
50     //! destructor
51     ~StandardElastoViscoPlasticityBrick() override;
52 
53    private:
54     //! stress potential
55     std::shared_ptr<bbrick::StressPotential> stress_potential;
56     //! inelastic flows
57     std::vector<std::shared_ptr<bbrick::InelasticFlow>> flows;
58 
59   };  // end of StandardElastoViscoPlasticityBrick
60 
61 }  // end of namespace mfront
62 
63 #endif /* LIB_MFRONT_STANDARDELASTOVISCOPLASTICITYBRICK_HXX */
64