Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/thelfer/tfel
Browse files Browse the repository at this point in the history
  • Loading branch information
thelfer committed Nov 27, 2024
2 parents bf20ac4 + 2178e31 commit a08703c
Show file tree
Hide file tree
Showing 11 changed files with 2,083 additions and 2 deletions.
19 changes: 19 additions & 0 deletions docs/web/bibliography.bib
Original file line number Diff line number Diff line change
Expand Up @@ -5374,6 +5374,17 @@ @article{irons_version_1969-1
file = {Irons et Tuck - 1969 - A version of the Aitken accelerator for computer i.pdf:/home/th202608/.zotero/zotero/vzpzva46.default/zotero/storage/HV23I9X2/Irons et Tuck - 1969 - A version of the Aitken accelerator for computer i.pdf:application/pdf;Snapshot:/home/th202608/.zotero/zotero/vzpzva46.default/zotero/storage/W4AJMPNG/abstract.html:text/html}
}

@article{eshelby_1957,
title = {The determination of the elastic field of an ellipsoidal inclusion, and related problems},
volume = {241},
doi = {10.1098/rspa.1957.0133},
abstract = {It is supposed that a region within an isotropic elastic solid undergoes a spontaneous change of form which, if the surrounding material were absent, would be some prescribed homogeneous deformation. Because of the presence of the surrounding material stresses will be present both inside and outside the region. The resulting elastic field may be found very simply with the help of a sequence of imaginary cutting, straining and welding operations. In particular, if the region is an ellipsoid the strain inside it is uniform and may be expressed in terms of tabu­lated elliptic integrals. In this case a further problem may be solved. An ellipsoidal region in an infinite medium has elastic constants different from those of the rest of the material; how does the presence of this inhomogeneity disturb an applied stress-field uniform at large distances? It is shown that to answer several questions of physical or engineering interest it is necessary to know only the relatively simple elastic field inside the ellipsoid.},
number = {1226},
journal = {Proceedings of the Royal Society A},
author = {Eshelby, John Douglas},
year = {1957}
}

@article{petkovic_multipoint_2014,
title = {Multipoint methods for solving nonlinear equations: {A} survey},
volume = {226},
Expand Down Expand Up @@ -5866,6 +5877,14 @@ @misc{von_rossum_python_2007
year = {2007}
}

@book{torquato_2002,
title = {Random Heterogeneous Materials. Microstructure and Macroscopic Properties},
author = {Torquato, Salvatore},
year = {2002},
publisher = {Springer},
doi = {10.1007/978-1-4757-6355-3}
}

@article{sidoroff_issues_2001,
title = {Some issues about anisotropic elastic–plastic models at finite strain},
volume = {38},
Expand Down
38 changes: 36 additions & 2 deletions docs/web/release-notes-5.0.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Release notes of the 5.0 version of `TFEL`, `MFront` and `MTest`
author: Thomas Helfer, Maxence Wangermez
author: Thomas Helfer, Maxence Wangermez, Antoine Martin
date: 2024
lang: en-EN
numbersections: true
Expand Down Expand Up @@ -153,6 +153,39 @@ The results of those tests are reported on Tables
better compromise between accuracy and numerical efficiency than the
default `TFEL` solver.

# New `TFEL/Material` features

## Homogenization

The homogenization functions are part of the namespace `tfel::material::homogenization`.
A specialization for elasticity is defined: `tfel::material::homogenization::elasticity`,
in prevision of further homogenization developments in other physics.

### Ellipsoidal inclusion embedded in isotropic matrix

The function `computeEshelbyTensor` computes the Eshelby tensor of an ellipsoid
whose semi-axis lengths are `a`, `b`, `c`, embedded in an isotropic
matrix. There is also `computeSphereEshelbyTensor`, `computeAxisymmetricalEshelbyTensor`,
and also `computeCircularCylinderEshelbyTensor` and `computeEllipticCylinderEshelbyTensor`
for plane strain elasticity.

Three functions also compute the strain localisation tensor of an ellipsoid embedded
in an isotropic matrix and submitted to an external uniform strain field :
`computeEllipsoidLocalisationTensor`, `computeAxisymmetricalEllipsoidLocalisationTensor`
and `computeSphereLocalisationTensor`.

### Homogenization schemes

Different schemes are implemented and return the homogenized stiffness of the material.
The available functions are `computeMoriTanakaScheme`, `computeDiluteScheme`,
computeSphereDiluteScheme, computeSphereMoriTanakaScheme.
If a distribution of ellipsoids is considered, three types of distributions
are considered. The corresponding functions are `computeIsotropicDiluteScheme`,
`computeTransverseIsotropicDiluteScheme`, `computeOrientedDiluteScheme`,
`computeIsotropicMoriTanakaScheme`, `computeTransverseIsotropicMoriTanakaScheme`
and `computeOrientedMoriTanakaScheme`.


# MFront

## Improvements to the `MaterialProperty` DSL
Expand Down Expand Up @@ -328,4 +361,5 @@ For more details, see <https://github.com/thelfer/tfel/issues/476>
## Issue 370: [tfel-utilities] Support for `C++` digit separator
For more details, see <https://github.com/thelfer/tfel/issues/370>
For more details, see <https://github.com/thelfer/tfel/issues/370>
80 changes: 80 additions & 0 deletions docs/web/tfel-material.md
Original file line number Diff line number Diff line change
Expand Up @@ -377,4 +377,84 @@ By definition, this convention, named `Plate` in `MFront` is only valid
for \(3D\), \(2D\) plane stress, \(2D\) plane strain and \(2D\)
generalized plane strain modelling hypotheses.

# Homogeneisation

The homogenization functions are part of the namespace `tfel::material::homogenization`.
A specialization for elasticity is defined: `tfel::material::homogenization::elasticity`.

## Eshelby tensors

The header `Eshelby.hxx` introduces
the function `computeEshelbyTensor` which computes the Eshelby tensor
of an ellipsoid.
If we consider a constant stress-free strain \(\tenseur \varepsilon^\mathrm{T}\)
filling an ellipsoidal volume embedded in an infinite homogeneous medium whose
elasticity is \(\tenseur C_0\), the strain tensor inside the ellipsoid is given by

\(\tenseur \varepsilon=\tenseur S_0:\tenseur \varepsilon^\mathrm{T}\).

where \(\tenseur S_0\) is the Eshelby tensor.
Note that it is related to the Hill tensor (\tenseur P_0\) by

\(\tenseur P_0=\tenseur S_0:\tenseur C_0^{-1}\)

which gives the strain tensor inside the ellipsoid as a function of the
polarization tensor \(\tenseur \tau = -\tenseur C_0:\tenseur \varepsilon^\mathrm{T}\) :

\(\tenseur \varepsilon=-\tenseur P_0:\tenseur \tau\).

The function `computeEshelbyTensor` computes the Eshelby tensor of an ellipsoid
whose semi-axis lengths are `a`, `b`, `c`, embedded in an isotropic
matrix. It returns an object of `type st2tost2<3u,real>`, which is the
fourth-order Eshelby tensor, in a basis which is adapted to the ellipsoid.

There is also `computeSphereEshelbyTensor`, `computeAxisymmetricalEshelbyTensor`,
and also `computeCircularCylinderEshelbyTensor` and `computeEllipticCylinderEshelbyTensor`
for plane strain elasticity.

The expressions can be found in [@torquato_2002]
for the axisymmetrical ellipsoid and in [@eshelby_1957] for other cases.

When two axes are very close, the formulas for three different axes are numerically instable,
hence a parameter is introduced to switch to the formulas suited for the perfect
axisymmetrical case. This parameter can be modified by the user, it is called `precf`
when using `float`, `precd` for `double`, and `precld`.
for `long double`.
In the same way, the formulas for the axisymmetrical case are instable when the aspect
ratio is near one, so a parameter allows to switch to the formula for a sphere.

## Strain localisation tensors

The header `Eshelby.hxx` also introduces
three functions that compute the strain localisation tensor of an ellipsoid.
If we consider an ellipsoid whose elasticity is \(\tenseur C_i\), embedded
in an infinite homogeneous medium whose elasticity is \(\tenseur C_0\),
submitted to a external uniform strain field at infinity \(\tenseur E\),
the strain field within the ellipsoid is uniform and given by

\(\tenseur \varepsilon = \tenseur A:\tenseur E\)

where \(\tenseur A \) is the localisation tensor.

Three functions are implemented for the different possible shapes :
`computeEllipsoidLocalisationTensor`, `computeAxisymmetricalEllipsoidLocalisationTensor`
and `computeSphereLocalisationTensor`.
The ellipsoid is parametrized by its semi-axis lengths \(a,b,c\) but also
by its axis orientations.
The functions then return the localisation tensors taking into account the orientations.

## Homogenization schemes

Different schemes are implemented and return the homogenized stiffness of the material.
The scheme available are Mori-Tanaka scheme and dilute scheme.
The available functions are `computeMoriTanakaScheme`, `computeDiluteScheme`,
computeSphereDiluteScheme, computeSphereMoriTanakaScheme.

If a distribution of ellipsoids is considered, three types of distributions
are considered : isotropic, transverse isotropic and with unique orientation.
The corresponding functions are `computeIsotropicDiluteScheme`,
`computeTransverseIsotropicDiluteScheme`, `computeOrientedDiluteScheme`,
`computeIsotropicMoriTanakaScheme`, `computeTransverseIsotropicMoriTanakaScheme`
and `computeOrientedMoriTanakaScheme`.

<!-- Local IspellDict: english -->
4 changes: 4 additions & 0 deletions include/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,10 @@ install_header(TFEL/Material OrthotropicPlasticity.ixx)
install_header(TFEL/Material Lame.hxx)
install_header(TFEL/Material Hill.hxx)
install_header(TFEL/Material Hill.ixx)
install_header(TFEL/Material Eshelby.hxx)
install_header(TFEL/Material Eshelby.ixx)
install_header(TFEL/Material EshelbyBasedHomogenization.ixx)
install_header(TFEL/Material EshelbyBasedHomogenization.hxx)
install_header(TFEL/Material OrthotropicStressLinearTransformation.hxx)
install_header(TFEL/Material OrthotropicStressLinearTransformation.ixx)
install_header(TFEL/Material Hosford1972YieldCriterion.hxx)
Expand Down
174 changes: 174 additions & 0 deletions include/TFEL/Material/Eshelby.hxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
/*!
* \file include/TFEL/Material/Eshelby.hxx
* \author Antoine Martin
* \date 15 October 2024
* \brief This file declares the Eshelby tensor for an ellipsoidal inclusion embedded in an isotropic matrix.
* \copyright Copyright (C) 2006-2018 CEA/DEN, EDF R&D. All rights
* reserved.
* This project is publicly released under either the GNU GPL Licence
* or the CECILL-A licence. A copy of thoses licences are delivered
* with the sources of TFEL. CEA or EDF may also distribute this
* project under specific licensing conditions.
*/

#ifndef LIB_TFEL_MATERIAL_ESHELBY_HXX
#define LIB_TFEL_MATERIAL_ESHELBY_HXX

#include "TFEL/Math/st2tost2.hxx"
#include "TFEL/Material/StiffnessTensor.hxx"
#include <stdexcept>

namespace tfel::material
{

namespace homogenization{
namespace elasticity{

/*!
* This function builds the Eshelby tensor of a circular cylinder embedded in an isotropic matrix, considering a PLANE STRAIN modelling hypothesis
* \return an object of type st2tost2<2u,real>
* \tparam real: underlying type
* \param[in] nu: Poisson's ratio of the matrix
*/
template <typename real>
TFEL_HOST_DEVICE tfel::math::st2tost2<2u,real> computeCircularCylinderEshelbyTensor(const real&);

/*!
* This function builds the Eshelby tensor of an elliptic cylinder embedded in an isotropic matrix, considering a PLANE STRAIN modelling hypothesis
* The function returns the Eshelby tensor in the basis (e1,e2) where e1 corresponds to the biggest axis
* \return an object of type st2tost2<2u,real>
* \tparam real: underlying type
* \param[in] nu: Poisson's ratio of the matrix
* \param[in] e: aspect ratio of the elliptic basis
*/
template <typename real>
TFEL_HOST_DEVICE tfel::math::st2tost2<2u,real> computeEllipticCylinderEshelbyTensor(const real&, const real&);

/*!
* This function builds the Eshelby tensor of a sphere embedded in an isotropic matrix.
* \return an object of type st2tost2<3u,real>
* \tparam real: underlying type
* \param[in] nu: Poisson's ratio of the matrix
*/
template <typename real>
TFEL_HOST_DEVICE tfel::math::st2tost2<3u,real> computeSphereEshelbyTensor(const real&);


/*!
* This function builds the Eshelby tensor of an axisymmetrical ellipsoid embedded in an isotropic matrix.
* The function returns the Eshelby tensor in the basis (e1,e2,e3) where e1 corresponds to (one of) the biggest ax(es)
* \return an object of type st2tost2<3u,real>
* \tparam real: underlying type
* \param[in] nu: Poisson's ratio of the matrix
* \param[in] e: aspect ratio of the ellipsoid (e>1 : prolate, e<1 : oblate)
* \param[in] precf, precd, precld: default arguments which aim at preventing the numerical instability of the formula when the ellipsoid is almost a sphere. When the absolute value of (e-1) is below precf (resp. precd, precld) for real=float (resp. real= double, long double), the returned tensor is computeSphereEshelbyTensor(nu).
*
* The expressions can be found in Torquato, Random Heterogeneous Materials (2002).
*/
template <typename real>
TFEL_HOST_DEVICE tfel::math::st2tost2<3u,real> computeAxisymmetricalEshelbyTensor(
const real&,
const real&,
const real = real{8e-3},
const real = real{1.5e-4},
const real = real{1e-5});

/*!
* This function builds the Eshelby tensor of a general ellipsoid embedded in an isotropic matrix.
* The function returns the Eshelby tensor in the basis (e1,e2,e3) where e1 (resp. e2, e3) is aligned with the axis with the first (resp. the second and third) biggest length
* \return an object of type st2tost2<3u,real>
* \tparam real: underlying type
* \tparam LengthType: type of the dimensions of the ellipsoid
* \param[in] nu: Poisson's ratio of the matrix
* \param[in] a: length of the first semi-axis
* \param[in] b: length of the second semi-axis
* \param[in] c: length of the third semi-axis
* \param[in] precf, precd, precld: default arguments which aim at preventing the numerical instability of the formula when the ellipsoid is almost axisymmetrical. When the absolute value of (a-b)/c (or (a-c)/b or (b-c)/a) is below precf (resp. precd, precld) for real=float (resp. real= double, long double), the returned tensor is computeAxisymmetricalEshelbyTensor.
*
* The expressions for the case of three distinct semi-axes can be found in Eshelby (1957).
*/
template <typename real, typename LengthType>
TFEL_HOST_DEVICE tfel::math::st2tost2<3u,real> computeEshelbyTensor(
const real&,
const LengthType&,
const LengthType&,
const LengthType&,
const real = real{8e-3},
const real = real{1.5e-4},
const real = real{1e-5});

/*!
* This function builds the strain localisation tensor of a general ellipsoid
* with a general elasticity, embedded in an isotropic matrix.
* The localisation tensor \f$A\f$ is defined as follows : \f[\epsilon = A:E_0\f] where \f$E_0\f$ is the uniform strain tensor imposed at infinity,
* and \f$\epsilon\f$ is the strain tensor solution of Eshelby problem for the ellipsoid.
* The ellipsoid also has a specific orientation given by the vectors \f$n_a\f$, \f$n_b\f$.
* \return an object of type st2tost2, which is the fourth-order localisation tensor \f$A\f$
* \tparam real: underlying type
* \tparam StressType: type of the elastic constants related to the matrix and the ellipsoid
* \tparam LengthType: type of the dimensions of the ellipsoid
* \param [in] young,nu: Young modulus and Poisson's ratio of the matrix
* \param [in] young_i,nu_i: Young modulus and Poisson's ratio of the inclusions
* \param [in] n_a: direction of the principal axis whose length is \f$a\f$
* \param [in] a: length of semi-axis relative to the direction \f$n_a\f$
* \param [in] n_b: direction of the principal axis whose length is \f$b\f$
* \param [in] b: length of semi-axis relative to the direction \f$n_b\f$
* \param [in] c: length of the remaining semi-axis
*/
template <typename real, typename StressType, typename LengthType>
TFEL_HOST_DEVICE tfel::math::st2tost2<3u,real> computeEllipsoidLocalisationTensor(
const StressType&,
const real&,
const StressType&,
const real&,
const tfel::math::tvector<3u,real>&,
const LengthType&,
const tfel::math::tvector<3u,real>&,
const LengthType&,
const LengthType&);

/*!
* This function builds the strain localisation tensor of an axisymmetrical ellipsoid
* with a general elasticity, embedded in an isotropic matrix.
* The ellipsoid also has a specific orientation given by the vector \f$n_a\f$, axis of the ellipsoid, whose semi-length is \f$a\f$.
* \return an object of type st2tost2
* \tparam real: underlying type
* \tparam StressType: type of the elastic constants related to the matrix and the ellipsoid
* \param [in] young,nu: Young modulus and Poisson's ratio of the matrix
* \param [in] young_i,nu_i: Young modulus and Poisson's ratio of the inclusions
* \param [in] n_a: direction of the axis of the ellipsoid (whose semi-length is \f$a\f$)
* \param [in] a: length of semi-axis relative to the direction \f$n_a\f$
*/
template <typename real, typename StressType>
TFEL_HOST_DEVICE tfel::math::st2tost2<3u,real> computeAxisymmetricalEllipsoidLocalisationTensor(
const StressType&,
const real&,
const StressType&,
const real&,
const tfel::math::tvector<3u,real>&,
const real&);

/*!
* This function builds the strain localisation tensor of a sphere
* with a general elasticity, embedded in an isotropic matrix.
* \return an object of type st2tost2
* \tparam real: underlying type
* \tparam StressType: type of the elastic constants related to the matrix and the ellipsoid
* \param [in] young,nu: Young modulus and Poisson's ratio of the matrix
* \param [in] young_i,nu_i: Young modulus and Poisson's ratio of the inclusions
*/
template <typename real, typename StressType>
TFEL_HOST_DEVICE tfel::math::st2tost2<3u,real> computeSphereLocalisationTensor(
const StressType&,
const real&,
const StressType&,
const real&);

}//end of namespace elasticity
}//end of namespace homogenization

} // end of namespace tfel::material

#include "TFEL/Material/Eshelby.ixx"

#endif /* LIB_TFEL_MATERIAL_ESHELBY_HXX */
Loading

0 comments on commit a08703c

Please sign in to comment.