L’utilisation de lois générées par MFront dans Cast3M se fait via
l’interface générique UMAT.
MFront propose deux interfaces pour ce solveur:
castem pour les versions strictement antérieures à la
version 2021. Pour des raisons historiques, cette interface est un
synonyme de l’interface umat.castem21 pour les versions supérieures ou égales à la
version 2021.Dans la suite de ce document, nous supposons travailler dans un
environnement POSIX. Le shell utilisé est
bash. Une page dédiée à l’utilisation de
MFront sous Windows sera ajoutée à terme.
Nous utiliserons la loi de Norton décrite dans le tutoriel. L’ensemble des fichiers utilisés dans ce document peut être téléchargé ici.
Ce document se découpe en trois partie :
Cast3M ;MFront gère la compilation de la loi, il suffit de taper dans un terminal :
$ mfront --obuild --interface=castem norton.mfrontCeci génère trois répertoires : src,
include et castem.
Le répertoire src contient en particulier une
bibliothèque dynamique nommée libUmatBehaviour.so.
Le répertoire castem contient un exemple de mise en
donnée pour la loi générée pour chacune des hypothèses de modélisation
supportée.
Cast3MIl est possible d’utiliser un appel direct à la librairie
MFront générée. Pour la version \(2014\), il est nécessaire d’appliquer les
certains patchs. Ce
patch n’est plus nécessaire depuis la version 2015.
Pour utiliser la librairie générée via les appels dynamiques, l’appel
à l’opérateur MODELISER se fait ainsi :
mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
'NON_LINEAIRE' 'UTILISATEUR'
'LIB_LOI' 'src/libUmatBehaviour.so'
'FCT_LOI' 'umatnorton'
'C_MATERIAU' coel2D
'C_VARINTER' stav2D
'PARA_LOI' para2D
'CONS' M;Nous avons explicitement indiqué le chemin vers la librairie. En
pratique, il est préférable de ne pas le faire et de modifier la
variable LD_LIBRARY_PATH.
Pour tester notre loi, nous pouvons utiliser le jeu de donnés suivant :
'OPTION' 'ERREUR' 'FATALE' ;
'OPTION' 'DIME' 2 'ELEM' qua4;
'OPTION' 'MODELISER' 'AXISYMETRIE';
TMAX = 1.;
NPAS = 50;
UMAX = 3.5e-2;
O = 0. 0.;
A = 1. 0.;
l1 = 'DROIT' 1 O A;
l2 = l1 'PLUS' (0. 1.);
s1 = l1 'REGLER' 1 l2;
coel2D = 'MOTS' 'YOUN' 'NU' 'RHO' 'ALPH' 'A' 'E';
stav2D = 'MOTS' 'EERR' 'EEZZ' 'EETT' 'EERZ' 'P';
para2D = 'MOTS' 'T';
mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
'NON_LINEAIRE' 'UTILISATEUR'
'NUME_LOI' 1
'C_MATERIAU' coel2D
'C_VARINTER' stav2D
'PARA_LOI' para2D
'CONS' M;
MAT1 = 'MATERIAU' MOD1 'YOUN' 80e9 'NU' 0.35 'ALPH' 0. 'RHO' 0.
'A' (0.003944e-6 '**' 4.39) 'E' 4.39;
***
LIT1 = PROG 0. PAS (TMAX/ NPAS) TMAX;
*** CONDITIONS AUX LIMITES
************************************************
* Conditions aux limites éprouvette
CL1 = 'BLOQUE' 'UZ' L1 ;
CL2 = 'BLOQUE' 'UZ' L2 ;
CLE1 = CL1 ET CL2;
* Chargement mécanique et thermique
LI1 = PROG 0. TMAX ;
LI2 = PROG 0. 1. ;
EV = EVOL MANU T LI1 F(T) LI2 ;
DEP1 = DEPI CL2 UMAX;
CHA1 = CHAR 'DIMP' DEP1 EV ;
* Champ de température
TEK = 293.15;
THE1 = MANU 'CHPO' S1 1 'T' TEK ;
EV2 = EVOL MANU (prog 0. TMAX) (prog 1. 1.) ;
CHARTHER = CHAR 'T' THE1 EV2 ;
** CALCUL
* Définition des pas de calcul et de sauvegarde
************************************************************
* Définition de la table de la phase de charge
TAB1 = TABLE ;
*TAB1.'K_SIGMA' = FAUX;
TAB1.'MOVA' = 'MOT' 'RIEN' ;
TAB1.'TEMPERATURES' = TABLE ;
TAB1.'VARIABLES_INTERNES' = TABLE ;
TAB1.'BLOCAGES_MECANIQUES' = CLE1 ;
TAB1.'MODELE' = MOD1 ;
TAB1.'CHARGEMENT' = CHA1 'ET' CHARTHER ;
TAB1.'TEMPERATURES' . 0 = THE1 ;
TAB1.'CARACTERISTIQUES' = MAT1 ;
TAB1.'TEMPS_CALCULES' = LIT1 ;
TAB1.'TEMPS_SAUVES' = LIT1 ;
TAB1.VARIABLES_INTERNES.0 = (ZERO MOD1 'VARINTER');
TAB1.'PRECISION' = 1.e-8;
* Lancement du calcul de la phase de charge
PASAPAS TAB1 ;
'REPETER' i ('DIME' tab1.'CONTRAINTES');
idx = &i '-' 1;
s = tab1.'CONTRAINTES' . idx;
d = tab1.'DEPLACEMENTS'. idx;
v = tab1.'VARIABLES_INTERNES'. idx;
'MESSAGE' ('MAXIMUM' ('EXCO' d 'UZ')) ' '
('MINIMUM' ('EXCO' d 'UR')) ' '
('MAXIMUM' ('EXCO' s 'SMZZ')) ' '
('MAXIMUM' ('EXCO' v 'P'));
'FIN' i;
nb = ('DIME' tab1.'CONTRAINTES') '-' 1;
psig = 'PROG';
peto = 'PROG';
'REPETER' i nb;
s = tab1.'CONTRAINTES' . &i;
d = tab1.'DEPLACEMENTS'. &i;
psig = psig 'ET' ('PROG' ('MAXIMUM' ('EXCO' s 'SMZZ')));
peto = peto 'ET' ('PROG' ('MAXIMUM' ('EXCO' d 'UZ')));
'FIN' i;
EVSIG = 'EVOL' 'ROUG' 'MANU' 'EZZ' peto 'SMZZ' psig;
'LISTE' evsig;
'DESSIN' evsig;
'FIN';Le résultat obtenu par Cast3M peut-être comparé à la
simulation MTest équivalente sur la figure ci-dessous :
La conductivité thermique d’un combustible carbure \(UPuC\) \(k\left(T,p,\tau\right)\) est supposée dépendre de la temperature \(T\) (Kelvin), de la porosité \(p\) et du taux de combustion \(\tau\) \(at.\%\)
Une implantation possible de cette propriété matériau en
MFront est la suivante:
@Parser MaterialLaw;
@Law ThermalConductivity;
@Material UPuC;
@Author Thomas Helfer;
@Output k; //< changing the name of output
@Input T,p,Bu; //< inputs of the law
T.setGlossaryName("Temperature"); //< pleiades name
p.setGlossaryName("Porosity"); //< pleiades name
Bu.setGlossaryName("BurnUp"); //< pleiades name
@PhysicalBounds T in [0 :*[; //< temperature physical bounds
@Bounds T in [0 :2573.15]; //< temperature bounds
@PhysicalBounds p in [0 :1]; //< porosity physical bounds
@PhysicalBounds Bu in [0 :*[; //< burn-up physicalbounds
@Function{
if (T<=773.15){
k = (8.14e-6*T-0.010096882)*T+19.65063040915;
} else {
k = (-1.88e-6*T+0.009737044)*T+10.2405949657;
}
k *= (1.-p)/(1.+2.*p);
k *= 1.-(0.02*Bu);
}Cette implantation peut être compilée en une librairie dynamique
appelable depuis Cast3M:
$ mfront --obuild --interface=castem UPuCThermalConductivity.mfrontCast3ML’appel à des librairies dynamiques depuis l’opérateur
MATERIAU nécessite l’application d’un patch~:
La directive MATERIAU accepte alors une table comme
paramètre:
* Création d un modèle thermique isotrope
ModT1 = 'MODELISER' s1 'THERMIQUE' 'ISOTROPE';
* Création d une table contenant les données relatives
* à la propriété externe :
* - 'MODELE' contient le nom de la fonction appelée
* - 'LIBRAIRIE' contient le nom de la librairie externe
* dans laquelle cette fonction est définie
* - 'VARIABLES' contient la liste des paramètres dont dépend
* la fonction appelée
Tmat = 'TABLE';
Tmat. 'MODELE' = 'UPuC_ThermalConductivity';
Tmat. 'LIBRAIRIE' = 'libUPuCMaterialProperties.so';
Tmat. 'VARIABLES' = 'MOTS' 'T' 'PORO' 'FIMA';
* Création du matériau.
MatT1 = 'MATERIAU' ModT1 'K' Tmat;Pour une utilisation dans PASAPAS, deux chargements
PORO et FIMA doivent être définis.