- In this page you will find the documentation about the libraries related to Homogenization

## The Eshelby Library: eshelby.hpp The Eshelby Library provides various estimations of the Eshelby tensor and the Hill interaction tensor (also called polarisation tensor in some references). In particular, this library offers an analytical expression for special cases, in the framework on linear elasticity. Also, it provides an numerical estimation of the Eshelby tensor in the framework of an anisotropic linear behavior, for a general ellipsoidal inclusion shape.

Eshelby_sphere Eshelby_cylinder Eshelby_prolate Eshelby_oblate Eshelby T_II points

## The Micromechanics libraries

The Mori Tanaka Library (Mori_Tanaka.hpp) The Self Consistent Library (Self_Consistent.hpp) The Periodic Layers Library (Pariodic_Layer.hpp)

## The State Variable Library: state_variables.hpp

**Definition :** Definition Constructors **Related methods and functions :** rotate_l2g rotate_g2l HowToDisplayInformations

## The Phase Characteristics Library: phase_characteristics.hpp

**Definition :** Definition Constructors **Related methods and functions :** resize dimprops dimstatev local2global global2local HowToDisplayInformations **How to use it :** Vector of phase characteristics

## The General Characteristics library: general_characteristics.hpp

**Definition :** Definition Constructors **Related functions :** HowToDisplayInformations

## The Layer Characteristics library: layer_characteristics.hpp

**Definition :** Definition Constructors **Related methods and functions :** HowToDisplayInformations

## The Ellispoid Characteristics library: ellipsoid_characteristics.hpp

**Definition :** Definition Constructors **Related methods and functions :** fillS fillT HowToDisplayInformations

# The Eshelby Library: eshelby.hpp

###
Eshelby_sphere(double)

Provides the Eshelby tensor of a spherical inclusion for isotropic linear elasticity in the SMART+ formalism

mat S = Eshelby_sphere(nu);

return the Eshelby tensor as a mat, according to the conventions of a localisation tensor, as a function of the Poisson ratio \(\nu\) \[\boldsymbol{S}=\left(\begin{matrix} \frac{7-5\nu}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & 0 & 0 & 0 \\ \frac{5\nu-1}{15(1-\nu)} & \frac{7-5\nu}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & 0 & 0 & 0 \\ \frac{5\nu-1}{15(1-\nu)} & \frac{5\nu-1}{15(1-\nu)} & \frac{7-5\nu}{15(1-\nu)} & 0 & 0 & 0 \\ 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} & 0 & 0 \\ 0 & 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} & 0 \\ 0 & 0 & 0 & 0 & 0 & 2\frac{4-5\nu}{15(1-\nu)} \end{matrix}\right)\]

###
Eshelby_cylinder(double)

Provides the Eshelby tensor of a cylindrical inclusion for isotropic linear elasticity in the SMART+ formalism, as a function of the Poisson ratio \(\nu\)The cylinder is oriented such as the longitudinal axis is the axis \(1\).

mat S = Eshelby_cylinder(nu);

return the Eshelby tensor as a mat, according to the conventions of a localisation tensor \[\boldsymbol{S}=\left(\begin{matrix} 0 & 0 & 0 & 0 & 0 & 0 \\ \frac{\nu}{2(1-\nu)} & \frac{5-4\nu}{8(1-\nu)} & \frac{4\nu-1}{8(1-\nu)} & 0 & 0 & 0 \\ \frac{\nu}{2(1-\nu)} & \frac{4\nu-1}{8(1-\nu)} & \frac{5-4\nu}{8(1-\nu)} & 0 & 0 & 0 \\ 0 & 0 & 0 & 2\frac{1}{4} & 0 & 0 \\ 0 & 0 & 0 & 0 & 2\frac{1}{4} & 0 \\ 0 & 0 & 0 & 0 & 0 & 2\frac{2(3-4\nu)}{8(1-\nu)} \end{matrix}\right)\]

###
Eshelby_prolate(double, double)

Provides the Eshelby tensor of a prolate inclusion for isotropic linear elasticity in the SMART+ formalism, as a function of the Poisson ratio \(\nu\) and the aspect ratio (\a_r = frac{a1}{a2} = frac{a1}{a3}\). The prolate inclusion is oriented such as the axis of rotation is the axis \(1\).

mat S = Eshelby_prolate(nu, ar);

return the Eshelby tensor as a mat, according to the conventions of a localisation tensor \[\boldsymbol{S}=\left(\begin{matrix} S_{11} & S_{12} & S_{12} & 0 & 0 & 0 \\ S_{21} & S_{22} & S_{23} & 0 & 0 & 0 \\ S_{21} & S_{23} & S_{22} & 0 & 0 & 0 \\ 0 & 0 & 0 & S_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & S_{44} & 0 \\ 0 & 0 & 0 & 0 & 0 & S_{66} \end{matrix}\right)\] \(S_{11} = \frac{1}{2(1-\nu)}\left(1-2\nu+\frac{3a_r^2-1}{a_r^2-1}-g\left(1-2\nu+\frac{3a_r^2}{a_r^2-1}\right)\right) \) \(S_{12} = \frac{-1}{2(1-\nu)}\left(1-2\nu+\frac{1}{a_r^2-1}+g\left(1-2\nu+\frac{3}{a_r^2-1}\right)\right)\) \(S_{21} = \frac{-a_r^2}{2(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(\frac{3a_r^2}{a_r^2-1}-\left(1-2\nu\right)\right)\) \(S_{22} = \frac{3a_r^2}{8(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(1-2\nu-\frac{9}{4\left(a_r^2-1\right)}\right)\) \(S_{23} = \frac{1}{4(1-\nu)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}-g\left(1-2\nu+\frac{3}{4\left(a_r^2-1\right)}\right)\right)\) \(S_{44} = \frac{2}{4\left(1-\nu\right)}\left(1-2\nu-\frac{a_r^2+1}{a_r^2-1}-\frac{g}{2}\left(1-2\nu-\frac{3a_r^2+1}{a_r^2-1}\right)\right) \) \(S_{66} = \frac{2}{4\left(1-\nu\right)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}+g\left(1-2\nu-\frac{3}{4\left(a_r^2-1\right(}\right)\right) \) with \(g = a_r\frac{a_r\sqrt{a_r^2-1}}{\left(a_r^2-1\right)^{\frac{3}{2}}} – acos(a_r)\)

###
Eshelby_oblate(double, double)

Provides the Eshelby tensor of an oblate inclusion for isotropic linear elasticity in the SMART+ formalism, as a function of the Poisson ratio \(\nu\) and the aspect ratio (\a_r = frac{a1}{a2} = frac{a1}{a3}\). The prolate inclusion is oriented such as the axis of rotation is the axis \(1\).

mat S = Eshelby_oblate(nu, ar);

return the Eshelby tensor as a mat, according to the conventions of a localisation tensor \[\boldsymbol{S}=\left(\begin{matrix} S_{11} & S_{12} & S_{12} & 0 & 0 & 0 \\ S_{21} & S_{22} & S_{23} & 0 & 0 & 0 \\ S_{21} & S_{23} & S_{22} & 0 & 0 & 0 \\ 0 & 0 & 0 & S_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & S_{44} & 0 \\ 0 & 0 & 0 & 0 & 0 & S_{66} \end{matrix}\right)\] \(S_{11} = \frac{1}{2(1-\nu)}\left(1-2\nu+\frac{3a_r^2-1}{a_r^2-1}-g\left(1-2\nu+\frac{3a_r^2}{a_r^2-1}\right)\right) \) \(S_{12} = \frac{-1}{2(1-\nu)}\left(1-2\nu+\frac{1}{a_r^2-1}+g\left(1-2\nu+\frac{3}{a_r^2-1}\right)\right)\) \(S_{21} = \frac{-a_r^2}{2(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(\frac{3a_r^2}{a_r^2-1}-\left(1-2\nu\right)\right)\) \(S_{22} = \frac{3a_r^2}{8(1-\nu)}\left(a_r^2-1\right)+\frac{g}{4\left(1-\nu\right)}\left(1-2\nu-\frac{9}{4\left(a_r^2-1\right)}\right)\) \(S_{23} = \frac{1}{4(1-\nu)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}-g\left(1-2\nu+\frac{3}{4\left(a_r^2-1\right)}\right)\right)\) \(S_{44} = \frac{2}{4\left(1-\nu\right)}\left(1-2\nu-\frac{a_r^2+1}{a_r^2-1}-\frac{g}{2}\left(1-2\nu-\frac{3a_r^2+1}{a_r^2-1}\right)\right) \) \(S_{66} = \frac{2}{4\left(1-\nu\right)}\left(\frac{a_r^2}{2\left(a_r^2-1\right)}+g\left(1-2\nu-\frac{3}{4\left(a_r^2-1\right(}\right)\right) \) with \(g = a_r\frac{-a_r\sqrt{1-a_r^2}}{\left(1-a_r^2\right)^{\frac{3}{2}}} – acos(a_r)\)

###
Eshelby(mat, double, double, double, vec, vec, vec, vec, int, int)

Provides the numerical estimation of the Eshelby tensor of an ellispoid in the general case of anisotropic media, as a function of the stiffness tensor, and the three semi-axis length of the ellipsoid in the direction \(1\),\(2\) and \(3\), respectively. It also requires the list of integration and their respective weight for the numerical integration, as well as the number of integration points in the 1 and 2 directions. The points and weights are calculated using the

points function

mat S = Eshelby(L, a1, a2, a3, x, wx, y, wy, mp, np);

L is the stiffness tensor of the media a1 is the semi-axis of the ellispoid length in the direction \(1\) a2 is the semi-axis of the ellispoid length in the direction \(2\) a3 is the semi-axis of the ellispoid length in the direction \(3\) x is the vector of points in the direction 1 wx is the vector of the weights of points in the direction 1 y is the vector of points in the direction 2 wx is the vector of the weights of points in the direction 2 mp is the number of points in the direction 1 np is the number of points in the direction 2 return the Eshelby tensor as a mat, according to the conventions of a localisation tensor

###
T_II(mat, double, double, double, vec, vec, vec, vec, int, int)

Provides the numerical estimation of the Hill interaction tensor of an ellispoid in the general case of anisotropic media, as a function of the stiffness tensor, and the three semi-axis length of the ellipsoid in the direction \(1\),\(2\) and \(3\), respectively. It also requires the list of integration and their respective weight for the numerical integration, as well as the number of integration points in the 1 and 2 directions. The points and weights are calculated using the

points function

mat T = T_II(L, a1, a2, a3, x, wx, y, wy, mp, np);

L is the stiffness tensor of the media a1 is the semi-axis of the ellispoid length in the direction \(1\) a2 is the semi-axis of the ellispoid length in the direction \(2\) a3 is the semi-axis of the ellispoid length in the direction \(3\) x is the vector of points in the direction 1 wx is the vector of the weights of points in the direction 1 y is the vector of points in the direction 2 wx is the vector of the weights of points in the direction 2 mp is the number of points in the direction 1 np is the number of points in the direction 2 return the Hill interaction tensor tensor as a mat, according to the conventions of a localisation tensor

###
points( vec, vec, vec, vec, int, int)

This methods computes the list of integration and their respective weight for the numerical integration, as a function of the number of integration points in the 1 and 2 directions.

vec x(mp); vec wx(mp); vec y(np); vec wy(np); points(x, wx, y, wy, mp, np);

x is the vector of points in the direction 1 wx is the vector of the weights of points in the direction 1 y is the vector of points in the direction 2 wx is the vector of the weights of points in the direction 2 mp is the number of points in the direction 1 np is the number of points in the direction 2 Update x, wx, y and wy according to mp and np.Note that x, wx, y, wy have to be initialised first with the size of mp and np, respectively.

# The Micromechanics libraries

##
The Mori Tanaka Library (Mori_Tanaka.hpp)

This Library provides the macroscopic response of a composite with N phases, using the Mori Tanaka method. The algorithm umat_MT_N requires the following information:

- Etot (vec) : The total macroscopic strain at the beginning of the increment.
- DEtot (vec) : The increment of the total macroscopic strain.
- sigma (vec) : The macroscopic stress (initially at the beginning of the increment, updated at the end).
- Lt (mat) : The macroscopic tangent stiffness tensor.
- DR (mat) : The rotation increment matrix.
- nprops (int) : The number of constants associated with the composite and each phase.
- *props (double) : A table of material properties: props[0] defines the number of phases, props[1] is the value (X) giving the file number containing phases properties to homogenize (this file is called “NphasesX.dat”), while props[2] and props[3] are the number of integration points in the two directions for the computation of the Eshelby tensors. The rest of the material properties are associated with each phase.
- nstatev (int) : The number of state variables stored for all the phases.
- *statev (double) : A table of state variables. At each material phase: the first 6 variables store the total strain, the next 6 the increment of the total strain, the next 6 the stress, the next 36 the elastic stiffness tensor and the next 36 the tangent stiffness tensor of the phase (all these in the global coordinate system). The rest of the statev are related with the constitutive law of the phase (plastic strains, viscous strains etc).
- T (double) : The macroscopic temperature at the beginning of the increment.
- DT (double) : The increment of the macroscopic temperature.
- Time (double): The time at the beginning of the increment.
- DTime (double): The increment of time.
- sse (double): The specific elastic strain energy of the composite. Given at the beginning of the increment, updated at the end (unused in this version of SMART+).
- spd (double): The specific plastic dissipation of the composite. Given at the beginning of the increment, updated at the end (unused in this version of SMART+).
- ndi (int): Number of direct stress components used in the analysis.
- nshr (int): Number of engineering shear stress components used in the analysis.
- start (bool): It is related with the initialization of the algorithm.

The algorithm reads the material properties of all the phases from the file “Nphases.dat”, which is included in the folder “data”. At the end of the computations, the umat_MT_N returns the updated values of the macroscopic stress, the macroscopic tangent stiffness tensor and the statev of each phase.

##
The Self Consistent Library (Self_Consistent.hpp)

This Library provides the macroscopic response of a composite with N phases, using the self consistent method. The algorithm umat_SC_N requires the following information:

- Etot (vec) : The total macroscopic strain at the beginning of the increment.
- DEtot (vec) : The increment of the total macroscopic strain.
- sigma (vec) : The macroscopic stress (initially at the beginning of the increment, updated at the end).
- Lt (mat) : The macroscopic tangent stiffness tensor.
- DR (mat) : The rotation increment matrix.
- nprops (int) : The number of constants associated with the composite and each phase.
- *props (double) : A table of material properties: props[0] defines the number of phases, props[1] is the value (X) giving the file number containing phases properties to homogenize (this file is called “NphasesX.dat”), while props[2] and props[3] are the number of integration points in the two directions for the computation of the Eshelby tensors. The rest of the material properties are associated with each phase.
- nstatev (int) : The number of state variables stored for all the phases.
- *statev (double) : A table of state variables. At each material phase: the first 6 variables store the total strain, the next 6 the increment of the total strain, the next 6 the stress, the next 36 the elastic stiffness tensor and the next 36 the tangent stiffness tensor of the phase (all these in the global coordinate system). The rest of the statev are related with the constitutive law of the phase (plastic strains, viscous strains etc).
- T (double) : The macroscopic temperature at the beginning of the increment.
- DT (double) : The increment of the macroscopic temperature.
- Time (double): The time at the beginning of the increment.
- DTime (double): The increment of time.
- sse (double): The specific elastic strain energy of the composite. Given at the beginning of the increment, updated at the end (unused in this version of SMART+).
- spd (double): The specific plastic dissipation of the composite. Given at the beginning of the increment, updated at the end (unused in this version of SMART+).
- ndi (int): Number of direct stress components used in the analysis.
- nshr (int): Number of engineering shear stress components used in the analysis.
- start (bool): It is related with the initialization of the algorithm.

The algorithm reads the material properties of all the phases from the file “Nphases.dat”, which is included in the folder “data”. At the end of the computations, the umat_SC_N returns the updated values of the macroscopic stress, the macroscopic tangent stiffness tensor and the statev of each phase.

##
The Periodic Layers Library (Periodic_Layer.hpp)

This Library provides the macroscopic response of a multilayered composite with N layers, using the periodic homogenization method. The algorithm umat_PL_N requires the following information:

- Etot (vec) : The total macroscopic strain at the beginning of the increment.
- DEtot (vec) : The increment of the total macroscopic strain.
- sigma (vec) : The macroscopic stress (initially at the beginning of the increment, updated at the end).
- Lt (mat) : The macroscopic tangent stiffness tensor.
- DR (mat) : The rotation increment matrix.
- nprops (int) : The number of constants associated with the composite and each phase.
- *props (double) : A table of material properties: props[0] defines the number of phases, while the rest of the material properties are associated with each phase.
- nstatev (int) : The number of state variables stored for all the phases.
- *statev (double) : A table of state variables. At each material phase: the first 6 variables store the total strain, the next 6 the increment of the total strain, the next 6 the stress, the next 36 the elastic stiffness tensor and the next 36 the tangent stiffness tensor of the phase (all these in the global coordinate system). The rest of the statev are related with the constitutive law of the phase (plastic strains, viscous strains etc).
- T (double) : The macroscopic temperature at the beginning of the increment.
- DT (double) : The increment of the macroscopic temperature.
- Time (double): The time at the beginning of the increment.
- DTime (double): The increment of time.
- sse (double): The specific elastic strain energy of the composite. Given at the beginning of the increment, updated at the end (unused in this version of SMART+).
- spd (double): The specific plastic dissipation of the composite. Given at the beginning of the increment, updated at the end (unused in this version of SMART+).
- ndi (int): Number of direct stress components used in the analysis.
- nshr (int): Number of engineering shear stress components used in the analysis.
- start (bool): It is related with the initialization of the algorithm.

The algorithm reads the material properties of all the phases from the file “Nlayers.dat”, which is included in the folder “data”. At the end of the computations, the umat_PL_N returns the updated values of the macroscopic stress, the macroscopic tangent stiffness tensor and the statev of each phase.

# The State Variables Library: state_variables.hpp In SMART+, the state_variables class has been created to save state variables in different systems of coordinates. Topically, this permits to pass easily and quickly switch between a local material system of coordinates and a global material system of coordinates in a specific phase of a material. Remark : In SMART+, C++ classes are used to discribe phases of a material. Those classes are presented

here.

## Definition of state variables object

###
Members of an object of the state variables class

This library contains a class called “state_variables”, which contains the following informations :

- Etot (arma::vec) : The total strain
- DEtot (arma::vec) : The increment of the total strain
- sigma (arma::vec) : The total stress
- L (arma::mat) : The stiffness tensor
- Lt (arma::mat) : The tangent stiffness tensor

Those informations are fully accessible out of the class.

###
Constructors of the state variables class

This class has several constructors. For each contructor, an example is provided :

state_variables sv1(); //Default constructor

state_variables sv2(Etot, DEtot, sigma, L, Lt) //Constructor with full parameters

state_variables sv3(sv2); //Copy constructor

state_variables sv4 = sv3; //Constructor with over-defined operator " = "

## Methods for state_variables objects

###
rotate_l2g(const state_variables, const double, const double , const double)

Computes properties of a state_variables object decated to the global material system of coordinates by a rotation of properties of a state_variables object decated to the local material system of coordinates. The rotation applied is given using the Euler angles psi, theta, phi describing the axis rotation of axes from the global system of coordinates to the local system of coordinates.

state_variables global(Etot, DEtot, sigma, L, Lt); state_variables local(); local.rotate_l2g(global, psi, theta, phi);

###
rotate_g2l(const state_variables, const double, const double , const double)

Computes all members of a state_variables object decated to the local coordinate system by a rotation of properties of a state_variables object decated to the global coordinate system. The rotation applied is given using the Euler angles psi, theta, phi describing the axis rotation of axes from the global system of coordinates to the local system of coordinates.

state_variables local(Etot, DEtot, sigma, L, Lt); state_variables global(); global.rotate_g2l(local, psi, theta, phi);

### Display with <<

To display a informations contained in a state_variable object, the << operator have been over-defined. This permits to display data or to print data in a file. Return an ostream

state_variables local(Etot, DEtot, sigma, L, Lt); cout << local;

# The Phase Characteristics Library: phase_characteristics.hpp

This C++ class permits to desccribe a non-specific phase of a material. It is used as a base to describe more describe more specific phases such as

ellipsoid phases, layer phases or general phases.

## Definition of phase_characteristics object

###
Members of an object of the phase characteristics class

This library contains a class called “phase_characteristics”, which contains the following informations :

- number (double) : The number of the phase
- umat_name (string) : The name of the constitutive model related to the phase
- concentration (double) : The volume fraction

- psi_mat (double) : The first Euler angle relative to the local material system of coordinates
- theta_mat (double) : The second Euler angle relative to the local material system of coordinates
- phi_mat (double) : The third Euler angle relative to the local material system of coordinates

- nprops (int) : The number of material properties of the constitutive model
- *props (double) : A table of material properties
- nstatev (int) : The number of state variables of the constitutive model
- *statev (double) : A table of state variables

- local (state_variables) : The state variables in the local material system of coordinates
- global (state_variables) : The state variables in the global system of coordinates

- A (mat): The strain concentration tensor of the phase
- B (mat): The stress concentration tensor of the phase

All informations are fully accessible out of the class.

###
Constructors of the phase characteristics class

This class has several constructors. For each contructor, an example is provided :

phase_characteristics ph1 (); //Default constructor

phase_characteristics ph2 (nprops, nstatev, init, value); // Constructor wich allocates memory for props and statev

phase_characteristics ph3 (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); //Constructor with full parameters

phase_characteristics ph4 (ph3); //Copy constructor

phase_characteristics ph5; ph5 = ph4; //Over-defined operator " = "

In the definition with allocation of memory, init is a boolean permiting to choose if you want to initialize (or not) props et statev values. If ‘init=false’, values will not be initialised. If ‘init=true’, all components of props and statev will be intialize to be equal to ‘value’. ‘init’ default value is set on ‘true’ and ‘value’ default value is set on ‘0’.

## Methods for phase_characteristics objects

###
resize(int, int, bool,double)

Permits to resize props and statec of a phase_characteristics object. Return a void.

ph = phase_characteristics(rand(), rand()); // creates a phase cahracteristics with random nprops and nstatev. ph.resize(new_nprops, new_nstatev, reinit, new_value);

In the definition with allocates memory, init is a boolean permiting to choose if you want to initialize (or not) props et statev values. If ‘reinit=false’, values will not be initialised. If ‘reinit=true’, all components of props and statev will be intialize to be equal to ‘new_value’. ‘reinit’ default value is set on ‘true’ and ‘new_value’ default value is set on ‘0’.

###
dimprops()

Provides the number of props (called nprops) in a phase_characteristics object. Return an int.

phase_characteristics ph (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); ph.dimprops();

###
dimstatev()

Provides the number of statev (called nstatev) in a phase_characteristics object. Return an int.

phase_characteristics ph (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); ph.dimstatev();

###
local2global()

Computes the state variables of the phase from the local material system of coordinates to the global material system of coordinates using Euler angles relative to the local material system of coordinates (psi_mat,theta_mat,phi_mat). Return a void.

phase_characteristics ph (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); ph.local2global();

###
global2local()

Computes the state variables of the phase from the global material system of coordinates to the local material system of coordinates using Euler angles relative to the local material system of coordinates (psi_mat,theta_mat,phi_mat).

phase_characteristics ph (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); ph.global2local();

### Display with <<

To display a informations contained in a phase_caracteristics object, the << operator have been over-defined. This permits to display data or to print data in a file. Return an ostream

phase_characteristics ph (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); cout << ph;

###
Vector of phase characteristics objects

It is possible to collect many phase_characteristics objects in a vector. Here is an example on how to build one with the default constructor. To define the vector of nphases of the phase characteristics objects, it is possible to use :

int nphases = 10; std::vector rvesvs(nphases); // vector of phase characteristics

Now, we can set the size of the tables *props and *statev using the resize method for example.

int nprops = 3; int nstatev = 1; for(int i=0; i < nphases; i++) { rvesvs[i].resize(nprops,nstatev); }

# The General Characteristics Library: general_characteristics.hpp

This class permits to describe a general phase in a material. This consists in a

phase_characteristics object which have a coating or is a coating of another phase.

## Definition of general_characteristics object

###
Members of an object of the general characteristics class

This class is based the phase_characteristics class, and so, it contains all its informations (see

here) and a few more :

- coatingof : The Id number of the phase which is coated by this one.
- coatedby : The Id number of the phase which is the coating of this one.

Those values can be set to zero if not necessary. All informations are fully accessible out of the class.

###
Constructors of the general characteristics class

This class has several constructors. For each contructor, an example is provided :

general_characteristics ph1 (); //Default constructor

general_characteristics ph2 (nprops, nstatev, init, value); // Constructor wich allocates memory for props and statev

general_characteristics ph3 (number, coatingof, coatedby, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); //Constructor with full parameters

general_characteristics ph4 (ph3); //Copy constructor

general_characteristics ph5; ph5 = ph4; //Over-defined operator " = "

In the definition with allocates memory, init is a boolean permiting to choose if you want to initialize (or not) props et statev values. If ‘init=false’, values will not be initialised. If ‘init=true’, all components of props and statev will be intialize to be equal to ‘value’. ‘init’ default value is set on ‘true’ and ‘value’ default value is set on ‘0’.

## Methods for general_characteristics objects

### Display with <<

To display a informations contained in a general_characteristics object, the << operator have been over-defined. This permits to display data or to print data in a file. Return an ostream

general_characteristics ph (number, coatingof, coatedby, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); cout << ph;

# The Layer Characteristics Library: layer_characteristics.hpp

This class permits to describe a layer phase in a material. It is based on the

## Definition of layer_characteristics object

###
Members of an object of the layer characteristics class

This class is based the phase_characteristics class, and so, it contains all its informations (see

here) and no more.

###
Constructors of the layer characteristics class

This class has several constructors which are the same as those of the phase_characteristics class (see

here). For each contructor, an example is provided :

layer_characteristics ph1 (); //Default constructor

layer_characteristics ph2 (nprops, nstatev, init, value); // Constructor wich allocates memory for props and statev

layer_characteristics ph3 (number, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); //Constructor with full parameters

layer_characteristics ph4 (ph3); //Copy constructor

layer_characteristics ph5; ph5 = ph4; //Over-defined operator " = "

In the definition with allocates memory, init is a boolean permiting to choose if you want to initialize (or not) props et statev values. If ‘init=false’, values will not be initialised. If ‘init=true’, all components of props and statev will be intialize to be equal to ‘value’. ‘init’ default value is set on ‘true’ and ‘value’ default value is set on ‘0’.

##
Methods for layer_characteristics objects

### Display with <<

To display a informations contained in a layer_characteristics object, the << operator have been over-defined. This permits to display data or to print data in a file. Return an ostream

layer_characteristics ph (number, coatingof, coatedby, umat_name, psi_mat, theta_mat, phi_mat, nprops, props, nstatev, statev, local, global, A, B); cout << ph;

#
The Ellipsoid characteristics Library: ellipsoid_characteristics.hpp

This class permits to describe a ellipsoid phase in a material. This consists in a

phase_characteristics object with an ellipsoidal shape.

##
Definition of ellipsoid_characteristics object

###
Members of an object of the ellipsoid characteristics class

This class is based the phase_characteristics class, and so, it contains all its informations (see

here) and a few more :

- coatingof : The Id number of the phase which is coated by this one.
- coatedby : The Id number of the phase which is the coating of this one.

- a1 : The length of the first semi-principal axes.
- a2 : The length of the second semi-principal axes.
- a3 : The length of the third semi-principal axes.

- psi_geom : The first Euler angle relative to the local geometry system of coordinates.
- theta_geom : The second Euler angle relative to the local geometry system of coordinates.
- phi_geom : The third Euler angle relative to the local geometry system of coordinates.

- S : The Eshelby tensor related to the phase.
- T : The interaction tensor related to the phase.

All informations are fully accessible out of the class.

###
Constructors of the ellipsoid characteristics class

This class has several constructors. For each contructor, an example is provided :

ellipsoid_characteristics ph1 (); //Default constructor

ellipsoid_characteristics ph2 (nprops, nstatev, init, value); // Constructor wich allocates memory for props and statev // If wanted (throught minit), initializes vectors props and statev at the choosen value (given by mvalue) // init defaut value : true // mvalue defaut value : 0

ellipsoid_characteristics ph3 (number, coatingof, coatedby, umat_name, concentration, psi_mat, theta_mat, phi_mat, psi_geom, theta_geom, phi_geom, a1, a2, a3, nprops, props, nstatev, statev, local, global, S, T, A, B); //Constructor with full parameters

ellipsoid_characteristics ph4 (ph3); //Copy constructor

ellipsoid_characteristics ph5; ph5 = ph4; //Over-defined operator " = "

##
Methods for ellipsoid_characteristics objects

###
fillS(mat, vec, vec, vec, vec, int, int)

Computes the numerical estimation of the Eshelby tensor of the ellispoid in the general case of anisotropic media, as a function of the stiffness tensor, and the three semi-axis length of the ellipsoid in the direction 1,2 and 3, respectively. It also requires the list of integration and their respective weight for the numerical integration, as well as the number of integration points in the 1 and 2 directions. The points and weights are calculated using the points function.

ellipsoid_characteristics ph (number, coatingof, coatedby, umat_name, concentration, psi_mat, theta_mat, phi_mat, psi_geom, theta_geom, phi_geom, a1, a2, a3, nprops, props, nstatev, statev, local, global, S, T, A, B); ph.fillS(Lm, x, wx, y, wy, mp, np);

Lm is the stiffness tensor of the media x is the vector of points in the direction 1 wx is the vector of the weights of points in the direction 1 y is the vector of points in the direction 2 wx is the vector of the weights of points in the direction 2 mp is the number of points in the direction 1 np is the number of points in the direction 2

###
fillT(mat, vec, vec, vec, vec, int, int)

Computes the numerical estimation of interaction tensor of the ellispoid in the general case of anisotropic media, as a function of the stiffness tensor, and the three semi-axis length of the ellipsoid in the direction 1,2 and 3, respectively. It also requires the list of integration and their respective weight for the numerical integration, as well as the number of integration points in the 1 and 2 directions. The points and weights are calculated using the points function.

ellipsoid_characteristics ph (number, coatingof, coatedby, umat_name, concentration, psi_mat, theta_mat, phi_mat, psi_geom, theta_geom, phi_geom, a1, a2, a3, nprops, props, nstatev, statev, local, global, S, T, A, B); ph.fillT(Lm, x, wx, y, wy, mp, np);

Lm is the stiffness tensor of the media x is the vector of points in the direction 1 wx is the vector of the weights of points in the direction 1 y is the vector of points in the direction 2 wx is the vector of the weights of points in the direction 2 mp is the number of points in the direction 1 np is the number of points in the direction 2

### Display with <<

To display a informations contained in a ellipsoid_characteristics object, the << operator have been over-defined. This permits to display data or to print data in a file. Return an ostream

ellipsoid_characteristics ph (number, coatingof, coatedby, umat_name, concentration, psi_mat, theta_mat, phi_mat, psi_geom, theta_geom, phi_geom, a1, a2, a3, nprops, props, nstatev, statev, local, global, S, T, A, B); cout << ph;