Cette page est extraitre du tutoriel MFront : tutoriel.pdf.

Comment écrire une loi de comportement: la loi de comportement de Norton

En guise de préliminaire, prenons par exemple la loi de Norton. Elle est définie par: \[\left\{ \begin{aligned} \underline{\epsilon}^{\mathrm{to}}&= \underline{\epsilon}^{\mathrm{el}}+\underline{\epsilon}^{\mathrm{vis}}\\ \underline{\sigma}&= \underline{\mathbf{D}}\,:\,\underline{\epsilon}^{\mathrm{el}}\\ \underline{\dot{\epsilon}}^{\mathrm{vis}}&= \dot{p}\,\underline{n} \\ \dot{p} &= A\,\sigma_{\mathrm{eq}}^{m} \end{aligned} \right.\] où:

L’opérateur d’élasticité \(\underline{\mathbf{D}}\) est calculé à partir du module d’ \(E\) et du coefficient de \(\nu\).

Discrétisation implicite de loi de Norton

Pour intégrer cette loi dans un calcul de structure, il faut procéder à une discrétisation en temps, ce qui revient à définir une suite d’instants de calcul \(\left\{t_{i}\right\}_{1\le i\le I}\).

Pour utiliser un algorithme implicite, il suffit d’écrire toutes les quantités à l’instant \(t_{i}\) et de remplacer les dérivées en temps par leurs incréments sur l’intervalle \(\Delta t= t_{i} - t_{i-1}\) : \[\left\{ \begin{aligned} \Delta\,\underline{\epsilon}^{\mathrm{el}}- \Delta\,\underline{\epsilon}^{\mathrm{to}}+ \Delta\,p\,\underline{n} = 0 \\ \Delta\,p - \Delta\,t\, A\,\sigma_{\mathrm{eq}}^{m} = 0 \end{aligned} \right.\]

avec:

On obtient ainsi un système de 7 équations (6 équations — en 3D — relatives à la décomposition additive du tenseur des déformations, et une équation relative à l’écoulement visco-plastique). Les \(7\) inconnues sont les \(6\) composantes de \(\Delta\,\underline{\epsilon}^{\mathrm{el}}\) (en \(3D\)) et \(\Delta p\).

La résolution implicite de ce système est effectuée par une méthode de Newton.

Première implantation

Voici un exemple très simple d’intégration implicite de ce modèle avec MFront :

@Parser Implicit;
@Behaviour Norton;
@Algorithm NewtonRaphson_NumericalJacobian ;

@RequireStiffnessTensor;

@MaterialProperty real A;
@MaterialProperty real m;

@StateVariable real p ;

@ComputeStress{
  sig = D*eel ;
}

@Integrator{
  real seq = sigmaeq(sig) ;
  Stensor n = Stensor(0.) ;
  if(seq > 1.e-12){
    n = 1.5*deviator(sig)/seq ;
  }
  feel += dp*n-deto ;
  fp -= dt*A*pow(seq,m) ;
} // end of @Integrator

@TangentOperator{
  Stensor4 Je ;
  getPartialJacobianInvert(Je) ;
  Dt = D*Je ;
}

Description ligne par ligne

Un fichier commence généralement par une partie déclarative décrivant l’algorithme utilisé pour la résolution, le nom du comportement, puis la liste des propriétés matériau utilisées. On fournit ensuite le nom des variables internes, et la description des équations du système à résoudre.

On constate que l’écriture de la loi se limite quasiment à la description des équations. De plus on bénéficie d’un écriture compacte, utilisant des variables tensorielles.

Différentes méthodes d’intégration sont diponibles dans MFront ( [1]). L’algorithme d’intégration utilisé ici (NewtonRaphson\_NumericalJacobian) permet une écriture rapide, et est donc tout à fait adapté au test de modèles.

L’implantation fournit un code beaucoup plus rapide que celle d’un algorithme explicite, mais peut toutefois être optimisée en termes de performances. Pour cela, il suffit d’ajouter les termes de la matrice jacobienne (dérivées des équations par rapport aux inconnues).

De plus, la matrice tangente en sortie de l’intégration est calculée automatiquement à partir de la matrice jacobienne, ce qui permet d’économiser un temps de développement important et conduit à une matrice tangente cohérente de très bonne qualité ([1]). Tout ceci conduit, en très peu de temps, à une intégration robuste, et une convergence très bonne. On voit qu’il est possible de profiter de cette simplicité d’écriture pour effectuer des variantes, des tests de modèles, etc.

MFront gère la compilation de la loi, il suffit de taper dans un terminal :

$ mfront --obuild --interface=aster norton.mfront

ou

$ mfront --obuild --interface=castem norton.mfront

suivant le code que l’on souhaite utiliser. Ceci génère deux répertoires : src et include. Selon l’interface, le répertoire src contient en particulier une bibliothèque dynamique nommée libAsterBehaviour.so pour une exécution avec Code-Aster, ou bien libUmatBehaviour.so pour une exécution avec Cast3M.

Premier test

De plus, l’outil MTest permet d’effectuer très facilement des simulations sur point matériel, permettant de calculer la réponse à des sollicitations en contraintes ou en déformations.

MTest, couplé à un logiciel d’optimisation, permet de plus d’effectuer le recalage des propriétés matériau. Le fichier de données de MTest (nommé ici norton.mtest) se présente de la façon suivante :

@Behaviour<aster> './src/libAsterBehaviour.so' 'asternorton' ;
@MaterialProperty<constant> 'young' 178600.0E6 ;
@MaterialProperty<constant> 'nu' 0.3 ;
@MaterialProperty<constant> 'A' 8.e-67 ;
@MaterialProperty<constant> 'm' 8.2 ;
@ExternalStateVariable 'Temperature' 293.15 ;
@ImposedStress 'SXX' { 0. :  0., 30. : 40.e6};
@ImposedStress 'SXY' { 0. :  0., 30. : 40.e6};
@Times {0.,30. in 100};

Il suffit alors de lancer le calcul par :

mtest norton.mtest

Ceci produit un fichier résultat norton.res contenant les composantes des tenseurs de déformation, de contrainte, et les variables internes en fonction du temps. La réponse en déformation est représentée ci-dessous:

Réponse d’une loi de Norton à un essai de fluage en traction-cisaillement

Références

1.
Helfer, Thomas, Castelier, Étienne, Blanc, Victor and Julien, Jérôme. 13-020: Le générateur de code mfront : Écriture de lois de comportement mécanique. Note technique. CEA DEN/DEC/SESC/LSC, 2013.