Added new classes xEnergyModel and xDissipationModel

Benoît LÉ requested to merge correctIssues9And10 into master

These two classes aim to improve the introduction of new "material models". The notion of "material model" can be splitted into two parts:

  • The form of the free energy, from which are derived the elastic energy release rate Y, the stress tensor sigma, and eventually some other derivated quantities, like the tangent matrix or the elastic matrix (stiffness matrix for D = 0). This part is taken into account by the class xEnergyModel

  • The evolution equations, which determine the dissipation of the model. It is represented by the critical energy release rate Yc, the softening function H and, eventually, its derivative H'.

Both xEnergyModel and xDissipationModel can be viewed as "evaluators managers": they are used to create evaluators at the begining of the computation, then these evaluators can be used anywhere in the computation. Both of them work more or less the same way. xDissipationModel deals only with xEval, and is a bit more simple, therefore we will explain only the functioning of xEnergyModel.

In DamageBand, xEnergyModel is a member of DamageGrowthBase, used the following way:

  1. The constructor of xEnergyModel takes no argument, when the constructor of DamageGrowthBase calls it, all the evaluators in xEnergyModel, stored as pointers, are set to zero

  2. In the constructor of DamageGrowthBase, the parameter "energy_type" is read from the DamageInfoParser. Depending on the value of "energy_type", a function set[NameOfTheEnergyModel] is called, which initializes all the evaluators of xEnergyModel. For instance, at the moment only one energy type is available, "energy_type = assym_tension_compression". The associated "set" function is setEnergyAssymTensionCompression

  3. Then, the different "get" functions of xEnergyModel can be called inside DamageGrowth*, whenever the corresponding evaluators are necessary. Note that in the particular case of xEnergyModel, this class is also used to get some bilinear forms associated to xTensor4Base (stiffness matrix, elastic matrix). This is due to the particular implementation, which uses different tensor objects, depending on the dimension (2 or 3) and the plane state

To add a new energy model:

a) Add the corresponding "set" function in xEnergyModel to set the different evaluators

b) Modify the constructor of DamageGrowthBase to call it depending on the value of "energy_type" (see 2)

c) Eventually, if some new evaluators are necessary, they can be added as new members of xEnergyModel, and will be used only for the new model

The different evaluators have been moved from DamageEvals.h/cc to xEnergyModel.h/cc and xDissipationModel.h/cc. Note that provided that the #define in xEnergyModel.cc are removed, these classes could be moved in Xfem (for instance ?) to be used in other appli that DamageBand.

The final design of these two classes has been elaborated after discussion with A. Salzman, N. Chevaugeon and G. Legrain.

Fixes #9 (closed) and Fixes #10 (closed)

Merge request reports