1% Utilisation de MFront dans [Cast3M](http://www-cast3m.cea.fr/) 2% Helfer Thomas 3% August 19, 2014 4 5\newcommand{\tenseur}[1]{\underline{#1}} 6\newcommand{\tenseurq}[1]{\underline{\mathbf{#1}}} 7\newcommand{\tns}[1]{\underset{\tilde{}}{\mathbf{#1}}} 8\newcommand{\transpose}[1]{#1^{\mathop{T}}} 9 10\newcommand{\tsigma}{\underline{\sigma}} 11\newcommand{\sigmaeq}{\sigma_{\mathrm{eq}}} 12 13\newcommand{\epsilonth}{\epsilon^{\mathrm{th}}} 14 15\newcommand{\tepsilonto}{\underline{\epsilon}^{\mathrm{to}}} 16\newcommand{\tepsilonel}{\underline{\epsilon}^{\mathrm{el}}} 17\newcommand{\tepsilonth}{\underline{\epsilon}^{\mathrm{th}}} 18 19\newcommand{\tepsilonvis}{\underline{\epsilon}^{\mathrm{vis}}} 20\newcommand{\tdepsilonvis}{\underline{\dot{\epsilon}}^{\mathrm{vis}}} 21 22\newcommand{\tepsilonp}{\underline{\epsilon}^{\mathrm{p}}} 23\newcommand{\tdepsilonp}{\underline{\dot{\epsilon}}^{\mathrm{p}}} 24 25\newcommand{\talpha}{\underline{\alpha}} 26\newcommand{\tdalpha}{\underline{\dot{\alpha}}} 27\newcommand{\txi}{\underline{\xi}} 28\newcommand{\tdxi}{\underline{\dot{\xi}}} 29 30\newcommand{\tDq}{\underline{\mathbf{D}}} 31\newcommand{\trace}[1]{\mathrm{tr}\paren{#1}} 32\newcommand{\Frac}[2]{{\displaystyle \frac{\displaystyle #1}{\displaystyle #2}}} 33\newcommand{\deriv}[2]{{\displaystyle \frac{\displaystyle \partial #1}{\displaystyle \partial #2}}} 34\newcommand{\dtot}{{\mathrm{d}}} 35\newcommand{\paren}[1]{\left(#1\right)} 36\newcommand{\nom}[1]{\textsc{#1}} 37\newcommand{\bts}[1]{\left.#1\right|_{t}} 38\newcommand{\mts}[1]{\left.#1\right|_{t+\theta\,\Delta\,t}} 39\newcommand{\ets}[1]{\left.#1\right|_{t+\Delta\,t}} 40 41# Lois de comportement mécanique 42 43L'utilisation de lois générées par `MFront` dans 44[`Cast3M`](http://www-cast3m.cea.fr/) se fait via l'interface 45générique 46[`UMAT`](http://www-cast3m.cea.fr/index.php?page=sources&source=umat). 47 48Dans la suite de ce document, nous supposons travailler dans un 49environnement `POSIX`. Le shell utilisé est `bash`. Une page dédiée à 50l'utilisation de `MFront` sous `Windows` sera ajoutée à terme. 51 52Nous utiliserons la loi de Norton décrite dans le 53[tutoriel](tutorial.html). L'ensemble des fichiers utilisés dans ce 54document peut être téléchargé 55[ici](downloads/example-castem2014.tar.bz2). 56 57Ce document se découpe en trois partie : 58 59- compilation de la loi ; 60- intégration dans `Cast3M` ; 61- test sur un essai de traction uniaxial. 62 63## Compilation de la loi 64 65MFront gère la compilation de la loi, il suffit de taper dans un 66terminal : 67 68~~~~ {.bash} 69$ mfront --obuild --interface=castem norton.mfront 70~~~~~~~~~~~~~~~~~~~ 71 72Ceci génère trois répertoires : `src`, `include` et `castem`. 73 74Le répertoire `src` contient en particulier une bibliothèque dynamique nommée 75`libUmatBehaviour.so`. 76 77Le répertoire `castem` contient un exemple de mise en donnée pour la 78loi générée pour chacune des hypothèses de modélisation supportée. 79 80## Intégration dans `Cast3M` 81 82Il est possible d'utiliser un appel direct à la librairie `MFront` 83générée. Pour la version \(2014\), il est nécessaire d'appliquer les 84[certains patchs](downloads/patchs-Cast3M-2014.tar.bz2). Ce patch 85n'est plus nécessaire depuis la version 2015. 86 87Pour utiliser la librairie générée via les appels dynamiques, l'appel 88à l'opérateur `MODELISER` se fait ainsi : 89 90~~~~{.python} 91mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE' 92 'NON_LINEAIRE' 'UTILISATEUR' 93 'LIB_LOI' 'src/libUmatBehaviour.so' 94 'FCT_LOI' 'umatnorton' 95 'C_MATERIAU' coel2D 96 'C_VARINTER' stav2D 97 'PARA_LOI' para2D 98 'CONS' M; 99~~~~ 100 101Nous avons explicitement indiqué le chemin vers la librairie. En 102pratique, il est préférable de ne pas le faire et de modifier la 103variable `LD_LIBRARY_PATH`. 104 105## Test 106 107Pour tester notre loi, nous pouvons utiliser le jeu de donnés suivant : 108 109~~~~{.python .numberLines} 110'OPTION' 'ERREUR' 'FATALE' ; 111'OPTION' 'DIME' 2 'ELEM' qua4; 112'OPTION' 'MODELISER' 'AXISYMETRIE'; 113 114TMAX = 1.; 115NPAS = 50; 116UMAX = 3.5e-2; 117 118O = 0. 0.; 119A = 1. 0.; 120 121l1 = 'DROIT' 1 O A; 122l2 = l1 'PLUS' (0. 1.); 123 124s1 = l1 'REGLER' 1 l2; 125 126coel2D = 'MOTS' 'YOUN' 'NU' 'RHO' 'ALPH' 'A' 'E'; 127stav2D = 'MOTS' 'EERR' 'EEZZ' 'EETT' 'EERZ' 'P'; 128para2D = 'MOTS' 'T'; 129 130mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE' 131 'NON_LINEAIRE' 'UTILISATEUR' 132 'NUME_LOI' 1 133 'C_MATERIAU' coel2D 134 'C_VARINTER' stav2D 135 'PARA_LOI' para2D 136 'CONS' M; 137 138MAT1 = 'MATERIAU' MOD1 'YOUN' 80e9 'NU' 0.35 'ALPH' 0. 'RHO' 0. 139 'A' (0.003944e-6 '**' 4.39) 'E' 4.39; 140 141*** 142LIT1 = PROG 0. PAS (TMAX/ NPAS) TMAX; 143 144*** CONDITIONS AUX LIMITES 145************************************************ 146* Conditions aux limites éprouvette 147CL1 = 'BLOQUE' 'UZ' L1 ; 148CL2 = 'BLOQUE' 'UZ' L2 ; 149CLE1 = CL1 ET CL2; 150 151* Chargement mécanique et thermique 152LI1 = PROG 0. TMAX ; 153LI2 = PROG 0. 1. ; 154EV = EVOL MANU T LI1 F(T) LI2 ; 155DEP1 = DEPI CL2 UMAX; 156CHA1 = CHAR 'DIMP' DEP1 EV ; 157 158* Champ de température 159TEK = 293.15; 160THE1 = MANU 'CHPO' S1 1 'T' TEK ; 161EV2 = EVOL MANU (prog 0. TMAX) (prog 1. 1.) ; 162CHARTHER = CHAR 'T' THE1 EV2 ; 163 164** CALCUL 165* Définition des pas de calcul et de sauvegarde 166************************************************************ 167* Définition de la table de la phase de charge 168TAB1 = TABLE ; 169*TAB1.'K_SIGMA' = FAUX; 170TAB1.'MOVA' = 'MOT' 'RIEN' ; 171TAB1.'TEMPERATURES' = TABLE ; 172TAB1.'VARIABLES_INTERNES' = TABLE ; 173TAB1.'BLOCAGES_MECANIQUES' = CLE1 ; 174TAB1.'MODELE' = MOD1 ; 175TAB1.'CHARGEMENT' = CHA1 'ET' CHARTHER ; 176TAB1.'TEMPERATURES' . 0 = THE1 ; 177TAB1.'CARACTERISTIQUES' = MAT1 ; 178TAB1.'TEMPS_CALCULES' = LIT1 ; 179TAB1.'TEMPS_SAUVES' = LIT1 ; 180TAB1.VARIABLES_INTERNES.0 = (ZERO MOD1 'VARINTER'); 181TAB1.'PRECISION' = 1.e-8; 182 183* Lancement du calcul de la phase de charge 184PASAPAS TAB1 ; 185 186'REPETER' i ('DIME' tab1.'CONTRAINTES'); 187 idx = &i '-' 1; 188 s = tab1.'CONTRAINTES' . idx; 189 d = tab1.'DEPLACEMENTS'. idx; 190 v = tab1.'VARIABLES_INTERNES'. idx; 191 'MESSAGE' ('MAXIMUM' ('EXCO' d 'UZ')) ' ' 192 ('MINIMUM' ('EXCO' d 'UR')) ' ' 193 ('MAXIMUM' ('EXCO' s 'SMZZ')) ' ' 194 ('MAXIMUM' ('EXCO' v 'P')); 195'FIN' i; 196 197nb = ('DIME' tab1.'CONTRAINTES') '-' 1; 198psig = 'PROG'; 199peto = 'PROG'; 200'REPETER' i nb; 201 s = tab1.'CONTRAINTES' . &i; 202 d = tab1.'DEPLACEMENTS'. &i; 203 psig = psig 'ET' ('PROG' ('MAXIMUM' ('EXCO' s 'SMZZ'))); 204 peto = peto 'ET' ('PROG' ('MAXIMUM' ('EXCO' d 'UZ'))); 205'FIN' i; 206 207 208EVSIG = 'EVOL' 'ROUG' 'MANU' 'EZZ' peto 'SMZZ' psig; 209'LISTE' evsig; 210'DESSIN' evsig; 211 212'FIN'; 213~~~~ 214 215 Le résultat obtenu par `Cast3M` peut-être comparé à la simulation 216`MTest` équivalente sur la figure ci-dessous : 217 218![Comparaison des résultats `MTest`/`Cast3M`](img/NortonCreepUniaxialTesting 219 "Comparaison des résultats `MTest`/`Cast3M`") 220 221# Propriétés matériau 222 223## Conductivité thermique du combustible carbure \(UPuC\) 224 225La conductivité thermique d'un combustible carbure \(UPuC\) 226\(k\paren{T,p,\tau}\) est supposée dépendre de la temperature \(T\) 227(Kelvin), de la porosité \(p\) et du taux de combustion \(\tau\) 228\(at.\%\) 229 230Une implantation possible de cette propriété matériau en `MFront` est 231la suivante: 232 233~~~~{#UPuCThermalConductivity .cpp .numberLines} 234@Parser MaterialLaw; 235@Law ThermalConductivity; 236@Material UPuC; 237@Author Thomas Helfer; 238@Output k; //< changing the name of output 239@Input T,p,Bu; //< inputs of the law 240T.setGlossaryName("Temperature"); //< pleiades name 241p.setGlossaryName("Porosity"); //< pleiades name 242Bu.setGlossaryName("BurnUp"); //< pleiades name 243@PhysicalBounds T in [0 :*[; //< temperature physical bounds 244@Bounds T in [0 :2573.15]; //< temperature bounds 245@PhysicalBounds p in [0 :1]; //< porosity physical bounds 246@PhysicalBounds Bu in [0 :*[; //< burn-up physicalbounds 247@Function{ 248 if (T<=773.15){ 249 k = (8.14e-6*T-0.010096882)*T+19.65063040915; 250 } else { 251 k = (-1.88e-6*T+0.009737044)*T+10.2405949657; 252 } 253 k *= (1.-p)/(1.+2.*p); 254 k *= 1.-(0.02*Bu); 255} 256~~~~~~~~ 257 258Cette implantation peut être compilée en une librairie dynamique appelable depuis `Cast3M`: 259 260~~~~{#UPuCThermalConductivity-mfront .bash} 261$ mfront --obuild --interface=castem UPuCThermalConductivity.mfront 262~~~~~~~~~~~~~~~~~~~~~~~~~ 263 264# Utilisation dans `Cast3M` 265 266L'appel à des librairies dynamiques depuis l'opérateur `MATERIAU` nécessite 267l'application d'un patch~: 268 269- [Cast3M 2014](downloads/patchs-Cast3M-2014.tar.bz2) 270- [Cast3M 2015](downloads/patchs-Cast3M-2015.tar.bz2) 271 272La directive `MATERIAU` accepte alors une table comme paramètre: 273 274~~~~{#UPuCThermalConductivity-castem .python .numberLines} 275* Création d un modèle thermique isotrope 276ModT1 = 'MODELISER' s1 'THERMIQUE' 'ISOTROPE'; 277* Création d une table contenant les données relatives 278* à la propriété externe : 279* - 'MODELE' contient le nom de la fonction appelée 280* - 'LIBRAIRIE' contient le nom de la librairie externe 281* dans laquelle cette fonction est définie 282* - 'VARIABLES' contient la liste des paramètres dont dépend 283* la fonction appelée 284Tmat = 'TABLE'; 285Tmat. 'MODELE' = 'UPuC_ThermalConductivity'; 286Tmat. 'LIBRAIRIE' = 'libUPuCMaterialProperties.so'; 287Tmat. 'VARIABLES' = 'MOTS' 'T' 'PORO' 'FIMA'; 288* Création du matériau. 289MatT1 = 'MATERIAU' ModT1 'K' Tmat; 290~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 291 292Pour une utilisation dans `PASAPAS`, deux chargements `PORO` et `FIMA` 293doivent être définis. 294 295<!-- Local IspellDict: english --> 296