1 : * TRANSNON PROCEDUR PASCAL 14/01/23 21:15:03 7913 2 : 'DEBPROC' TRANSNON PRECED*'TABLE'; 3 : *----------------------------------------------------------------------* 4 : * * 5 : * T R A N S N O N * 6 : * --------------- * 7 : * * 8 : * RESOLUTION D'UN PROBLEME DE THERMIQUE TRANSITOIRE NON-LINEAIRE * 9 : * METHODE A UN PAS DE TEMPS ( THETA SCHEMA ) * 10 : * * 11 : * ETAB, TABLE CONTENANT EN ENTREE : * 12 : * * 13 : * INDICE 'TET1' CHAMP DE TEMPERATURE INITIAL AU PAS 0 * 14 : * INDICE 'RAYO' LOGIQUE VALANT VRAI POUR UNE CONDITION * 15 : * DE RAYONNEMENT * 16 : * INDICE 'EMISSIVITE' MCHAML DECRIVANT LES FACTEURS D'EMISSIVITE* 17 : * NOM DE LA COMPOSANTE : EMIS * 18 : * INDICE 'CELSIUS' LOGIQUE VALANT VRAI SI L'UNITE EST LE * 19 : * DEGRE CELSIUS (CAPITAL SI RAYONNEMENT) * 20 : * INDICE 'MOD_THE' OBJET MODELE THERMIQUE * 21 : * INDICE 'MOD_CON' OBJET MODELE CONVECTION * 22 : * INDICE 'BLOCAGES_THERMIQUES' MATRICE DE BLOCAGE * 23 : * INDICE 'MAT_THE' OBJET MATERIAU THERMIQUE. * 24 : * CE CHAMP PEUT AVOIR DES COMPOSANTES DE * 25 : * TYPE FLOTTANT OU EVOLUTION (ABS-ORD). * 26 : * ABS : VARIABLE QUELCONQUE * 27 : * ORD : VALEUR DE LA COMPOSANTE CONCERNE POUR* 28 : * LA VALEUR ABS. * 29 : * INDICE 'MAT_CON' OBJET MATERIAU CONVECTION * 30 : * INDICE 'CHARGEMENT' CHARGEMENT DECRIVANT LES * 31 : * VALEURS DES VARIABLES EXTERNES (EX: TE, * 32 : * FLUX,TEMPERATURES IMPOSEES ,...) * 33 : * INDICE 'PHASE' LOGIQUE VALANT VRAI SI CHGT DE PHASE * 34 : * INDICE 'TEMPS0' TEMPS INITIAL (CORRESPOND A TET1) * 35 : * INDICE 'TEM_CALC' LISTREEL : TEMPS DES RESULTATS A CALCULER * 36 : * INDICE 'RELAXATION_THETA' VALEUR DU COEFFICIENT DE RELAXATION * 37 : * (VALEUR PAR DEFAUT 0.5) * 38 : * INDICE 'SOUS_RELAXATION' VALEUR DU COEFF. DE SOUS-RELAXATION * 39 : * (VALEUR PAR DEFAUT 0.5) * 40 : * INDICE 'PRECISION' VALEUR DU CRITERE DE CONVERGENCE * 41 : * (VALEUR PAR DEFAUT 1.E-4) * 42 : * INDICE 'MAXITERATION' NOMBRE MAXIMUM D'ITERATIONS AUTORISEES * 43 : * INDICE PROJECTION LOGIQUE VALANT VRAI SI COUPLAGE ET SI LE * 44 : * MAILLAGE DE LA MECANIQUE ET DE LA THERMIQUE* 45 : * EST DIFFERENT * 46 : * * 47 : * ETAB CONTIENT EN SORTIE * 48 : * * 49 : * INDICE INITIAL(2) DERNIER CHAMP DE TEMPERATURE CALCULE * 50 : * * 51 : * REMARQUE : CERTAINES VARIABLES ONT DES NOMS IMPOSES. * 52 : * LE TEMPS : TEMPS * 53 : * LA TEMPERATURE : T * 54 : * LA TEMPERATURE EXTERIEURE : TE * 55 : * LES TEMPERATURES IMPOSEES : TIMP * 56 : * LES FLUX : Q * 57 : * * 58 : * LE NOM DES AUTRES VARIABLES EST LAISSE AU CHOIX DE * 59 : * L'UTILISATEUR * 60 : * * 61 : ******************************************************************** 62 : * Recuperation de l'information contenue dans ETAB * 63 : ******************************************************************** 64 : ERR_VAL = FAUX;STAB = TABLE ; 65 : ETAB=PRECED.'WTABLE'; 66 : * * 67 : LINCO1 = WTAB . 'INCO_TOT' ; 68 : LDUAL1 = WTAB . 'DUAL_TOT' ; 69 : LINCO2 = ('MOTS' 'TEMP') 'ET' LINCO1 ; 70 : NBDUA1 = 'DIME' LDUAL1 ; 71 : * 72 : * 73 : MAIL_TOT = 'EXTR' ETAB.'MOD_TOT' 'MAIL'; 74 : 75 : IRIB = FAUX ; 76 : 'SI' ('NEG' ETAB.'RIBLO_T' 'INCONNU'); 77 : IRIB = VRAI ; 78 : RIBL_VAL = ETAB.'RIBLO_T' ; 79 : LISE_VAL = ETAB.'LISEA_T' ; 80 : 'FINSI' ; 81 : 82 : * Parallelisation automatique des calculs ? 83 : IPARAL = 'EGA' ETAB.'PROCESSEURS' 'AUTOMATIQUE' ; 84 : 85 : * ------------- pour le changement de phase ----------- 86 : IPHASE=ETAB.'PHASE'; 87 : 'SI' IPHASE; 88 : BLOPHA=ETAB.'BLO_PHASE'; 89 : PRO_VAL=ETAB.'PROPPHAS' ; 90 : MATPHA= ETAB.'MAT_PHA' ;MODPHA= ETAB.MOD_PHA; 91 : 'FINSI'; 92 : * -------------- presence de l'advection conduction convection 93 : IADVEC=ETAB.'ADVECTION'; 94 : 'SI' IADVEC; MATADV= ETAB.'MAT_ADV';MODADV=ETAB.'MOD_ADV'; 'FINSI'; 95 : ICONDU= ETAB.'CONDUCTION'; 96 : 'SI' ICONDU; MATCOND=ETAB.'MAT_COND';MODCOND=ETAB.'MOD_COND';'FINSI'; 97 : ICONVE= ETAB.'CONVECTION' ; 98 : 'SI' ICONVE; MATCON=ETAB.'MAT_CON'; MODCON=ETAB.'MOD_CON'; 'FINSI'; 99 : IRADI = ETAB.'RAYO'; 100 : 'SI' IRADI ; MATRAY=ETAB.'MAT_RAY'; MODRTHM=ETAB.'MOD_RAY'; 'FINSI'; 101 : ITHM1=WTAB.'THM1'; 102 : 'SI' ITHM1;MATTHM1=ETAB.'MAT_THM'; MODTHM= ETAB.'MOD_THM';'FINSI'; 103 : *--------------- Traitement special pour le rayonnement ----------- 104 : 105 : 'SI'('EXISTE' ETAB 'CTE_STEFAN_BOLTZMANN') ; 106 : CTE_SB = ETAB.'CTE_STEFAN_BOLTZMANN' ; 107 : 'SINON' ; 108 : CTE_SB = 5.673E-8 ; ETAB.'CTE_STEFAN_BOLTZMANN' =CTE_SB; 109 : 'MESS' 'ATTENTION ! Constante de Stefan-Boltzmann en unités SI' ; 110 : 'MESS' ' soit ' CTE_SB ; 111 : 'FINSI' ; 112 : 113 : *------- Initialisation de la liste des temps à calculer --------- 114 : 115 : TE_CALC = ETAB.'TEM_CALC' ; 116 : DCALC = 'DIME' TE_CALC; 117 : 118 : *-------------- Calcul du premier pas de calcul ------------------- 119 : 120 : TEM0 = ETAB.'TEMPS0' ; 121 : TEM1 = 'EXTR' TE_CALC 1; 122 : T_PAS = TEM1 - TEM0; 123 : *-------------- modif pour récuperer le temps du dernier pas de calcul 124 : TEM_VAL = TEM1 ; 125 : *-------------- fin de modif ----------------------------------------- 126 : *---- Initialisation de la valeur du critère de fin d'itération --- 127 : 128 : ZPREC1 = ETAB . 'PRECISION' ; 129 : 130 : *--------- Initialisation du nombre d'iterations autorisees ------- 131 : 132 : 'SI' ('EXISTE' ETAB 'MAXITERATION'); 133 : MAX1 = ETAB.'MAXITERATION'; 134 : 'SINON'; 135 : MAX1 = 150; 136 : 'FINSI'; 137 : 138 : *-------- Recherche des variables selon lesquelles varie ---------- 139 : *---------------------- le champ de matériau ---------------------- 140 : 141 : LVAREX = 'EXTR' ETAB.'MAT_TOT' 'DEVA'; 142 : ILVA = 'DIME' LVAREX; 143 : 'SI' ('NEG' ILVA 0); 144 : NONLIN1 = VRAI; 145 : 'SI' (ETAB.'COUPLAGE'); 146 : CONTI=PRECED.'CONTINUATION'; 147 : *--- Creation du MCHAML contenant tous les parametres mecaniques -- 148 : *-------- Ces parametres sont determines au temps TEM0 ------------ 149 : *----- Ces parametres sont projetes sur le maillage thermique ----- 150 : DEP1 = 'CHAN' 'CHAM' CONTI.'DEPLACEMENTS' 151 : ETAB.'MO_TOT' 'NOEUD'; 152 : CON1 = 'CHAN' 'NOEUD' CONTI.'CONTRAINTES' 153 : ETAB.'MO_TOT' ; 154 : CHAR1_ME = DEP1 'ET' CON1; 155 : * 'SI' ('EXISTE' CONTI 'VITESSES'); 156 : * VIT1 = 'CHAN' 'CHAM' CONTI.'VITESSES' 157 : * ETAB.'MO_TOT' 'NOEUD'; 158 : * CHAR1_ME = CHAR1_ME 'ET' VIT1; 159 : * 'FINSI'; 160 : 'SI' ('EXISTE' CONTI 'VARIABLES_INTERNES'); 161 : VAR1 = 'CHAN' 'NOEUD' CONTI.'VARIABLES_INTERNES' 162 : ETAB.'MO_TOT' ; 163 : * DEF1 ='CHAN' 'NOEUD' (ETAB.'DEI_EST') 164 : * ETAB.'MO_TOT' ; 165 : CHAR1_ME = CHAR1_ME 'ET' VAR1 ; 166 : * CHAR1_ME = CHAR1_ME 'ET' VAR1 'ET' DEF1; 167 : 'FINSI'; 168 : 'SI' ETAB.'PROJECTION'; 169 : CHAR_ME = 'CHAN' 'CHAM' ('PROI' MAIL_TOT CHAR1_ME) 170 : (ETAB.'MOD_TOT') 'RIGIDITE'; 171 : 'SINON'; 172 : CHAR_ME = 'CHAN' 'CHAM' ('CHAN' 'CHPO' CHAR1_ME 173 : ETAB.'MO_TOT') ETAB.'MO_TOT' 'RIGIDITE'; 174 : 'FINSI'; 175 : 'FINSI'; 176 : 'SINON'; 177 : NONLIN1 = FAUX; 178 : 'FINSI'; 179 : 180 : *-----------recherche des composantes de materiau qui varient et initia 181 : * --------- des logiques de recalcul des matrices.------------------- 182 : 183 : IKDEP=FAUX;ICDEP=FAUX; IECDEP=FAUX;IKVITE=FAUX; 184 : IKDDEP=FAUX;ICDDEP=FAUX; 185 : LCOREX= 'EXTR' ETAB.'MAT_TOT' 'COVA'; 186 : ILCOVA= 'DIME' LCOREX; 187 : 'SI' ('NEG' ILCOVA 0); 188 : 'REPETER' BOUVAR ILCOVA; 189 : ILO='EXTR' LCOREX &BOUVAR; 190 : 'SI'('EGA' ILO 'VITE') ; IKVITE=VRAI; 'FINSI'; 191 : 'SI'('EGA' ILO 'K ') ; IKDEP=VRAI ; 'FINSI' ; 192 : 'SI'('EGA' ILO 'C ') ; ICDEP=VRAI ; 'FINSI' ; 193 : 'SI'('EGA' ILO 'H ') ; IECDEP=VRAI ; 'FINSI' ; 194 : 'SI'('EGA' ILO 'RHO ') ; ICDEP=VRAI ; 'FINSI'; 195 : 'SI'('EGA' ILO 'KD ') ; IKDDEP=VRAI ; 'FINSI' ; 196 : 'SI'('EGA' ILO 'CDIF') ; ICDDEP=VRAI ; 'FINSI' ; 197 : 'FIN' BOUVAR; 198 : 'FINS'; 199 : 'SI' ETAB.'THM1' ; 200 : IKDEP=VRAI; 201 : ICDEP=VRAI; 202 : 'FINS' ; 203 : 204 : *------- Cas particulier ou il n'y a pas de CAPACITE ------------------* 205 : *- Ceci correspond au cas ou, au moins, une des 2 composantes 'C ' -* 206 : *- et/ou 'RHO ' n'est pas definie dans le materiau (facultatives). -* 207 : 208 : LCOMPM = 'EXTRAIRE' ETAB.'MAT_TOT' 'COMP' ; 209 : ICAPATH = ('EXISTE' LCOMPM 'C ') 'ET' ('EXISTE' LCOMPM 'RHO ') 'ET' 210 : ETAB.'FOR_THER' ; 211 : ICAPADI = ('EXISTE' LCOMPM 'CDIF') 'ET' ETAB . 'FOR_DIFF' ; 212 : ICAPA = ICAPATH 'OU' ICAPADI ; 213 : 'SI' ('NON' ICAPATH) ; ICDEP = FAUX ; 'FINSI' ; 214 : 'SI' ('NON' ICAPADI) ; ICDDEP = FAUX ; 'FINSI' ; 215 : 216 : *---------- Initialisation de l'unité de température -------------- 217 : 218 : 'SI' ('EXISTE' ETAB 'CELSIUS'); 219 : ICELS = ETAB.'CELSIUS' 'ET' ETAB.'FOR_THER' ; 220 : 'SINON'; 221 : ICELS = FAUX; 222 : 'FINSI'; 223 : 224 : *---------- Initialisation de la temperature de reference---------- 225 : 226 : 'SI' ICELS; 227 : TREF = 273.15 ; 228 : 'SINON'; 229 : TREF = 0. ; 230 : 'FINSI'; 231 : ETAB.'TREF'=TREF; 232 : 233 : *----------- Initialisation du champ de temperatures ------------ 234 : 235 : 'SI' ETAB.'FOR_THER' ; 236 : U0 = 'REDU' ('COPIER' ETAB.'TET1' 'GEOM') MAIL_TOT ; 237 : 'SI' ICELS ; 238 : CHTREF = (0. * U0) + TREF ; 239 : U0 = U0 + CHTREF ; 240 : 'FINSI' ; 241 : ETAB.'THER_COURANT' = ETAB.'TET1' ; 242 : 'SI' ETAB . 'FOR_DIFF' ; 243 : U0 = U0 'ET' ETAB.'CO1' ; 244 : ETAB.'THER_COURANT' = ETAB.'THER_COURANT' 'ET' ETAB.'CO1' ; 245 : 'FINS' ; 246 : 'SINO' ; 247 : U0 = 'REDU' ('COPI' ETAB.'CO1' 'GEOM') MAIL_TOT ; 248 : ETAB.'THER_COURANT' = ETAB.'CO1' ; 249 : 'FINS' ; 250 : 251 : *---------- y-a-t-il definition des coefficients lambda ---------- 252 : 253 : 'SI' ( 'EXISTE' ETAB 'RELAXATION_THETA' ) ; 254 : LAMBDA1 = ETAB.'RELAXATION_THETA' ; 255 : 'SINON' ; 256 : LAMBDA1=1.; 257 : ETAB.'RELAXATION_THETA' =LAMBDA1; 258 : 'FINSI' ; 259 : * En regime stationnaire (sans CAPACITE), on force LAMBDA1 a 1. 260 : * Sinon on ne resout pas le bon probleme ! 261 : 'SI' ('NON' ICAPA) ; LAMBDA1 = 1. ; 'FINSI' ; 262 : 'SI' IADVEC; LAMBDA1 = 1. ; 'FINSI' ; 263 : I_LAMBD1 = 0 ; 264 : 'SI' ('<EG' ('ABS' (LAMBDA1 - 0.0)) 1.E-6) ; I_LAMBD1 = 1 ; 'FINSI' ; 265 : 'SI' ('<EG' ('ABS' (LAMBDA1 - 0.5)) 1.E-6) ; I_LAMBD1 = 2 ; 'FINSI' ; 266 : 'SI' ('<EG' ('ABS' (LAMBDA1 - 1.0)) 1.E-6) ; I_LAMBD1 = 3 ; 'FINSI' ; 267 : 268 : *---- Si géométrie modifiée ou s'il n'existent pas, -------------- 269 : *------- on recalcule les facteurs de forme ----------------------- 270 : 'SI'(ETAB.'PROCEDURE_CHAR_THER') ; 271 : ETAB.'CHMAT'=ETAB.'MAT_TOT'; 272 : IAPPEL=2; 273 : TAAT= CHARTHER PRECED tem1 IAPPEL; 274 : 'FINSI' ; 275 : 276 : ******************************************************************** 277 : * Rappel des donnees du probleme * 278 : ******************************************************************** 279 : 280 : 'SI' ETAB.'MESSTHER' ; 281 : ETAB.'MESSTHER' = FAUX ; 282 : 'SI' ETAB.'THM1' ; 283 : 'SI' ETAB.'FOR_DIFF' ; 284 : 'MESS' 285 : ' Calcul TRANSITOIRE NON-LINEAIRE de THERMOHYDRIQUE & DIFFUSION' ; 286 : 'SINO' ; 287 : 'MESS' ' Calcul TRANSITOIRE NON-LINEAIRE de THERMOHYDRIQUE' ; 288 : 'FINS' ; 289 : 'SINO' ; 290 : 'SI' ETAB.'THE1' ; 291 : 'SI' ETAB.'FOR_DIFF' ; 292 : 'MESS' 293 : ' Calcul TRANSITOIRE NON-LINEAIRE de THERMIQUE & DIFFUSION' ; 294 : 'SINO' ; 295 : 'MESS' ' Calcul TRANSITOIRE NON-LINEAIRE de THERMIQUE' ; 296 : 'FINS' ; 297 : 'SINO' ; 298 : 'SI' ETAB.'FOR_DIFF' ; 299 : 'MESS' ' Calcul TRANSITOIRE NON-LINEAIRE de DIFFUSION' ; 300 : 'FINS' ; 301 : 'FINS' ; 302 : 'FINS' ; 303 : 'MESS' ' ' ; 304 : 'SI' ('NON' ICAPA) ; 305 : 'MESS' 306 : ' *** Probleme STATIONNAIRE' ; 307 : 'FINSI' ; 308 : 'SI' ('EGA' (ETAB.'PROCEDURE_THERMIQUE') 'NONLINEAIRE'); 309 : 'MESS' ' *** Methodeaà un pas de temps (theta eéthode) ' ; 310 : 'SINON'; 311 : 'MESS' ' *** Methode à deux pas de temps (DUPONT2) ' ; 312 : 'MESS' ' > Calcul du premier pas par la theta-methode ' ; 313 : 'FINSI'; 314 : 'MESS' ' *** Données utilisees du probleme :'; 315 : 'MESS' ' > Champ de temperatures a l instant : ' TEM0; 316 : 'SI' NONLIN1; 317 : 'MESS' ' > K,C ou H variables.'; 318 : 'SINON'; 319 : 'MESS' ' > K,C et H constants.'; 320 : 'FINSI'; 321 : 'SI' ICELS; 322 : 'MESS' ' > Unité de temperature utilisee : Celsius.'; 323 : 'SINON'; 324 : 'MESS' ' > Unité de temperature utilisee : Kelvin.'; 325 : 'FINSI'; 326 : 'SI' ('EGA' (ETAB.'PROCEDURE_THERMIQUE') 'NONLINEAIRE'); 327 : 'MESS' ' > Coefficient de relaxation : ' LAMBDA1; 328 : 'SINON'; 329 : 'MESS' 330 : ' > Coefficient de relaxation pour la theta-méthode : ' LAMBDA1 ; 331 : 'MESS' ' > Coefficient de relaxation pour la méthode DUPONT2 : ' 332 : ETAB.'RELAXATION_DUPONT' ; 333 : 'MESS' ' > Coefficient de sous-relaxation : ' LAMBDA2; 334 : 'FINSI'; 335 : 'SI' IPHASE; 336 : 'MESS' ' > Changement de phase prevu.'; 337 : 'SINON'; 338 : 'MESS' ' > Pas de changement de phase prevu.'; 339 : 'FINSI'; 340 : 'SI' ('NEG' ETAB.'BLOCAGES_THERMIQUES' 'INCONNU'); 341 : 'MESS' ' > Presence de temperatures imposees.'; 342 : 'SINON'; 343 : 'MESS' ' > Pas de temperatures imposees.'; 344 : 'FINSI'; 345 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'Q '); 346 : 'MESS' ' > Présence de flux.'; 347 : 'SINON'; 348 : 'MESS' ' > Pas de presence de flux.'; 349 : 'FINSI'; 350 : 'SI' ICONDU; 351 : 'MESS' ' > Presence de conduction'; 352 : 'SINON'; 353 : 'MESS' ' > Pas de presence de conduction '; 354 : 'FINSI'; 355 : 'SI' ICONVE; 356 : 'MESS' ' > Presence de convection.'; 357 : 'SINON'; 358 : 'MESS' ' > Pas de terme de convection.'; 359 : 'FINSI'; 360 : 'SI' IRADI; 361 : 'MESS' ' > Presence de rayonnement.'; 362 : 'SINON'; 363 : 'MESS' ' > Pas de presence de rayonnement.'; 364 : 'FINSI'; 365 : 'SI' IADVEC; 366 : 'MESS' ' > Presence d advection.'; 367 : 'SINON'; 368 : 'MESS' ' > Pas de presence d advection'; 369 : 'FINSI'; 370 : 'MESS' ' '; 371 : 'FINSI'; 372 : 373 : ******************************************************************** 374 : * Boucle sur les pas de temps * 375 : ******************************************************************** 376 : 'REPETER' BOUC_SO ; 377 : ITE3 = &BOUC_SO; 378 : * 'SI' ('EGA' I_LAMBD1 0) ; 379 : TEMM = (LAMBDA1 * TEM1) + ((1 - LAMBDA1) * TEM0); 380 : * 'SINON' ; 381 : * 'SI' ('EGA' I_LAMBD1 1) ; TEMM = TEM0 ; 'FINSI' ; 382 : * 'SI' ('EGA' I_LAMBD1 2) ; TEMM = 0.5 * (TEM0+TEM1) ; 'FINSI' ; 383 : * 'SI' ('EGA' I_LAMBD1 3) ; TEMM = TEM1 ; 'FINSI' ; 384 : * 'FINSI' ; 385 : U_BOU = U0 ; 386 : TH_COUR = U_BOU ; 387 : 'SI' ICELS ; TH_COUR = U_BOU - CHTREF ; 'FINSI' ; 388 : ETAB.'THER_COURANT' = TH_COUR ; 389 : 390 : 'MESS' ' '; 391 : 'MESS' '---- Calcul du champ de température au temps :'TEM1; 392 : 'MESS' ' '; 393 : *---- initialisation du materiau 394 : 'SI' NONLIN1; 395 : 396 : *-------------- Cas de la temperature et du temps --------------- 397 : CHVAR = 'CHAN' 'CHAM' TH_COUR ETAB.'MOD_TOT' 'RIGIDITE' ; 398 : CHVAR2 = 'MANU' 'CHML' ETAB.'MOD_TOT' 'TEMP' TEMM 'RIGIDITE' ; 399 : CHVAR = CHVAR 'ET' CHVAR2 ; 400 : *-------------- Cas des variables mecaniques -------------------- 401 : *---- si il y a couplage on les "rentre" toutes dans CHVAR ------ 402 : 'SI' (ETAB.'COUPLAGE'); 403 : CHVAR = CHVAR 'ET' CHAR_ME; 404 : 'FINSI'; 405 : *-------------- Mise a jour des variables externes -------------- 406 : 'SI' (ETAB.'PROCEDURE_PARA_THER') ; 407 : PARATHER PRECED TEMM ; 408 : 'FINSI' ; 409 : *-------------- Cas des autres variables -------------------- 410 : 'REPETER' BOU_NU2 ILVA; 411 : ITE2 = &BOU_NU2; 412 : MOTI = 'EXTR' LVAREX ITE2; 413 : 'SI' ('EXISTE' LINCO2 MOTI) ; 414 : 'ITER' BOU_NU2 ; 415 : 'FINS' ; 416 : 'SI' (ETAB.'COUPLAGE'); 417 : 'SI' ('EXISTE' CHAR_ME MOTI ); 418 : 'SI' ('NEG' LAMBDA1 0.); 419 : 'MESS' 420 : '*** Le materiau thermique depend de parametres mecaniques'; 421 : 'ERRE' '*** Il faut initialiser SOUS-RELAXATION à 0.'; 422 : 'FINSI'; 423 : 'ITERER' BOU_NU2; 424 : 'FINSI'; 425 : 'FINSI'; 426 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') MOTI); 427 : CH_1 = 'TIRE' (ETAB.'CHARGEMENT') MOTI TEMM; 428 : TYP_1 = 'TYPE' CH_1; 429 : 430 : * on suppose que les chargements qui ne sont pas d'origine mecanique 431 : * sont appuyes sur le maillage thermique . 432 : 433 : 'SI' ('EGA' TYP_1 'CHPOINT '); 434 : CHVAR2 = 'CHAN' 'CHAM' CH_1 ETAB.'MOD_TOT' 'RIGIDITE'; 435 : 'SINON'; 436 : CHVAR2 = 'CHAN' 'RIGIDITE' CH_1 ETAB.'MOD_TOT'; 437 : 'FINSI'; 438 : CHVAR = CHVAR + CHVAR2; 439 : 'SINON'; 440 : 'MESS' '*** Il manque une donnee du chargement ***'; 441 : 'MESS' '*** Variable concernee : 'MOTI; 442 : 'ERREUR' ' '; 443 : 'FINSI'; 444 : 'FIN' BOU_NU2; 445 : 'FINSI'; 446 : *----------------- Calcul du champ de matériau a T= U_BOU--------------- 447 : 'SI' NONLIN1; 448 : CHVAR1 = 'REDU' CHVAR (ETAB.'MOD_TOT'); 449 : CHMAT = 'VARI' 'NUAG' (ETAB.'MOD_TOT') (ETAB.'MAT_TOT') CHVAR1 450 : 'RIGIDITE'; 451 : ETAB.'CHMAT' = CHMAT; 452 : 'SI' (ETAB . 'FOR_DIFF' 'OU' ETAB.'THE1') ; 453 : CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ; 454 : 'SI' ETAB.'THM1' ; 455 : ma ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 456 : CHMAT1 = CHMAT1 'ET' ma ; 457 : 'FINS' ; 458 : 'SINO' ; 459 : 'SI' ETAB.'THM1' ; 460 : CHMAT1 ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 461 : 'FINS' ; 462 : 'FINS' ; 463 : 'SINON'; 464 : CHMAT = ETAB.'MAT_TOT'; 465 : ETAB.'CHMAT' = CHMAT; 466 : 'SI' (ETAB . 'FOR_DIFF' 'OU' ETAB.'THE1') ; 467 : CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ; 468 : 'SI' ETAB.'THM1' ; 469 : ma ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 470 : CHMAT1 = CHMAT1 'ET' ma ; 471 : 'FINS' ; 472 : 'SINO' ; 473 : 'SI' ETAB.'THM1' ; 474 : CHMAT1 ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 475 : 'FINS' ; 476 : 'FINS' ; 477 : 'FINSI'; 478 : 'SI' ICONDU; MATCOND='REDU' CHMAT1 ETAB.'MOD_COND';'FINSI'; 479 : 'SI' ICONVE; MATCON='REDU' CHMAT1 ETAB.'MOD_CON' ;'FINSI'; 480 : 'SI' IRADI ; MATRAD='REDU' CHMAT1 ETAB.'MOD_RAY' ;'FINSI'; 481 : 'SI' IADVEC; MATADV='REDU' CHMAT1 ETAB.'MOD_ADV' ;'FINSI'; 482 : 'SI' ITHM1 ; MATTHM='REDU' CHMAT1 ETAB.'MOD_THM' ;'FINSI'; 483 : 'SI' IPHASE; MATPHA='REDU' CHMAT1 ETAB.'MOD_PHA' ;'FINSI'; 484 : *--- Partitionnement des modeles pour la parallelisation automatique --- 485 : 'OPTION' 'PARA' IPARAL ; 486 : 'SI' IPARAL ; 487 : 'SI' ICONDU; MODRCOND= 'PART' MODCOND ETAB.'NBPART' ; 488 : MATRCOND= 'REDU' CHMAT1 MODRCOND; 489 : 'FINSI'; 490 : 'SI' ICONVE; MODRCON = 'PART' MODCON ETAB.'NBPART' ; 491 : MATRCON = 'REDU' CHMAT1 MODRCON; 492 : 'FINSI'; 493 : 'SI' IADVEC; MODRADV = 'PART' MODADV ETAB.'NBPART' ; 494 : MATRADV = 'REDU'CHMAT1 MODRADV; 495 : 'FINSI' ; 496 : * 'SI' IPHASE; MODRPHA = 'PART' MODPHA ETAB.'NBPART' ; 497 : * MATRPHA = 'REDU'CHMAT1 MODRPHA; 498 : * 'FINSI'; 499 : 'SI' ETAB . 'FOR_DIFF' ; 500 : MODDRED = 'PART' ETAB.'MOD_DIF' ETAB.'NBPART' ; 501 : CHMDRED = 'REDU' CHMAT1 MODDRED ; 502 : 'FINSI' ; 503 : 'SI' ITHM1; MODRTHM= 'PART' MODTHM ETAB.'NBPART' ; 504 : MATRTHM='REDU' CHMAT1 MODRTHM ; 505 : 'FINSI' ; 506 : 'SINON' ; 507 : 'SI' ICONDU; MODRCOND=MODCOND; MATRCOND=MATCOND;'FINSI'; 508 : 'SI' ICONVE; MODRCON=MODCON; MATRCON=MATCON; 'FINSI'; 509 : 'SI' IADVEC; MODRADV=MODADV; MATRADV=MATADV; 'FINSI'; 510 : 'SI' ITHM1; MODRTHM=MODTHM; MATRTHM=MATTHM; 'FINSI'; 511 : * 'SI' IPHASE; MODRPHA=MODPHA; MATRPHA=MATPHA; 'FINSI'; 512 : 'SI' ETAB . 'FOR_DIFF' ; 513 : MODDRED = ETAB.'MOD_DIF' ; 514 : CHMDRED = CHMAT1 ; 515 : 'FINSI' ; 516 : 'FINSI' ; 517 : 518 : *--- Calcul des matrices d'iteration On les recalcule a cause de perso 519 : IKDETO=FAUX;IBCONS=FAUX; 520 : 'SI' ICONDU ; 521 : KDETO= 'COND' MODRCOND MATRCOND; 522 : IKDETO=VRAI; 523 : 'FINSI'; 524 : 'SI' ITHM1; 525 : KDCC= 'COND' MODRTHM MATRTHM; 526 : 'SI' IKDETO; 527 : KDETO=KDETO 'ET' KDCC; 528 : 'SINON'; 529 : KDETO=KDCC;IKDETO=VRAI; 530 : 'FINSI'; 531 : 'FINSI'; 532 : 'SI' (('NON' IKDEP) 'ET' IKDETO); 533 : BCONS= KDETO;IBCONS=VRAI; 534 : 'FINSI'; 535 : 'SI' ICONVE; 536 : KDCCG= 'COND' MODRCON MATRCON; 537 : 'SI' IKDETO; 538 : KDETO=KDETO 'ET' KDCCG; 539 : 'SINON'; 540 : KDETO=KDCCG;IKDETO=VRAI; 541 : 'FINSI'; 542 : 'SI' ('NON' IECDEP); 543 : 'SI' IBCONS ; 544 : BCONS=BCONS 'ET' KDCCG; 545 : 'SINON'; 546 : BCONS=KDCCG;IBCONS=VRAI; 547 : 'FINSI'; 548 : 'FINSI'; 549 : 'FINSI'; 550 : 'SI' IADVEC; 551 : * la conduction de du model d'advection est deja calculer grace a icondu 552 : 'SI' ('NON' IKVITE); 553 : KDCC2= 'ADVE' MODRADV MATRADV; 554 : 'SI' IKDETO; 555 : KDETO=KDETO 'ET' KDCC2; 556 : 'SINON'; 557 : KDETO= KDCC2 ;IKDETO=VRAI; 558 : 'FINSI'; 559 : 'SI' IBCONS; 560 : BCONS = BCONS 'ET' KDCC2; 561 : 'SINON'; 562 : BCONS= KDCC2;IBCONS=VRAI; 563 : 'FINSI'; 564 : 'FINSI'; 565 : 'FINSI'; 566 : 'SI' ETAB . 'FOR_DIFF' ; 567 : KDEDI = 'RIGI' MODDRED CHMDRED ; 568 : 'SI' IKDETO; 569 : KDETO=KDETO 'ET' KDEDI; 570 : 'SINON'; 571 : KDETO=KDEDI;IKDETO=VRAI; 572 : 'FINSI'; 573 : 'SI' ('NON' IKDDEP); 574 : 'SI' IBCONS; 575 : BCONS=BCONS 'ET' KDEDI; 576 : 'SINON'; 577 : BCONS= KDEDI;IBCONS=VRAI; 578 : 'FINSI'; 579 : 'FINSI'; 580 : 'FINSI' ; 581 : 582 : * 583 : AA = KDETO * LAMBDA1 ; 584 : CCONS = AA ; 585 : BB = KDETO ; 586 : 'SI' ('NON' IBCONS) ; 587 : BCONS = EXTR KDETO 'RIGI' 'MULT'; IBCONS=VRAI; 588 : 'FINSI'; 589 : * 590 : 591 : 'SI' ICAPA ; 592 : 'SI' ICAPATH ; 593 : 'SI' ICONDU; 594 : CDET= ( 'CAPA' MODRCOND MATRCOND)/T_PAS; 595 : AA= CDET 'ET' AA ; 596 : 'SI' ICDEP ; CCONS = CDET 'ET' CCONS ; 'FINSI' ; 597 : 'FINSI'; 598 : 'SI' ITHM1; 599 : CDET= ( 'CAPA' MODRTHM MATRTHM)/T_PAS; 600 : AA= CDET 'ET' AA ; 601 : 'SI' ICDEP;CCONS = CDET 'ET' CCONS ; 'FINSI' ; 602 : 'FINSI'; 603 : 'FINSI'; 604 : 'SI' ICAPADI ; 605 : CDET = ('CAPA' MODDRED CHMDRED) / T_PAS ; 606 : AA = CDET 'ET' AA ; 607 : 'SI' ICDDEP ; CCONS = CDET 'ET' CCONS ; 'FINSI' ; 608 : 'FINSI' ; 609 : 'FINSI' ; 610 : * * 611 : 'SI' IPHASE; 612 : T0SSLX = TH_COUR 'ENLEVER' 'LX ' ; 613 : DEPPHA ='PHAJ' ETAB.'MOD_PHA' ETAB.'MAT_PHA' 614 : T0SSLX BLOPHA; 615 : MODPHA=ETAB.'MOD_PHA'; 616 : MATPHA= 'REDU' CHMAT MODPHA; 617 : AAQP ='EXCO' MATPHA 'QLAT' 'SCAL'; 618 : AARH='EXCO' MATPHA 'RHO' 'SCAL'; 619 : AASO=AAQP * AARH; 620 : QLAPHA=SOURCE ETAB.'MOD_PHA' AASO 'ELEM'; 621 : QLAPHA= QLAPHA / T_PAS ; 622 : 'FINSI'; 623 : * 624 : 'OPTION' 'PARA' FAUX ; 625 : *----------------- y-a-t-il des blocages --------------------------- 626 : * on le laisse ici car perso peut l'avoir modifie de memepour les autres 627 : * matrices 628 : IKBLOC=FAUX; 629 : 'SI' ETAB.'FOR_THER' ; 630 : IKBLOC=VRAI; 631 : MAT_BLOC = ETAB.'BLOCAGES_THERMIQUES' ; 632 : 'SI' ('EGA' MAT_BLOC 'INCONNU') ; 633 : MAT_BLOC = 'EXTR' KDETO 'RIGI' 'MULT' ; 634 : 'FINSI' ; 635 : 'FINSI' ; 636 : 'SI' ETAB . 'FOR_DIFF' ; 637 : MAT_BLDI = ETAB.'BLOCAGES_DIFFUSIONS' ; 638 : 'SI' ('EGA' MAT_BLDI 'INCONNU') ; 639 : MAT_BLDI = 'EXTR' KDEDI 'RIGI' 'MULT' ; 640 : 'FINSI' ; 641 : 'SI' IKBLOC; 642 : MAT_BLOC=MAT_BLOC 'ET' MAT_BLDI; 643 : 'SINON'; 644 : MAT_BLOC = MAT_BLDI; 645 : 'FINSI'; 646 : 'FINSI' ; 647 : ch_z = U0 'ENLEVER' 'LX' ; 648 : SECON = MAT_BLOC * ch_z ; 649 : AA = AA 'ET' MAT_BLOC; 650 : MAT_CHPO= MAT_BLOC * ch_z ; 651 : *------------------- y-a-t-il des temperatures imposees-------- 652 : 653 : ICHUIMP=FAUX; 654 : 'SI' ETAB.'FOR_THER' ; 655 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'TIMP') ; 656 : CH_UIMP = 'TIRE' (ETAB.'CHARGEMENT') 'TIMP' TEM1 ; 657 : 'SI' ICELS ; CH_UIMP = CH_UIMP + TREF ; 'FINSI' ; 658 : ICHUIMP=VRAI; 659 : 'FINSI'; 660 : 'FINSI'; 661 : 'SI' ETAB . 'FOR_DIFF' ; 662 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'CIMP') ; 663 : CH_CI = 'TIRE' (ETAB.'CHARGEMENT') 'CIMP' TEM1 ; 664 : 'SI' ICHUIMP; 665 : CH_UIMP= CH_UIMP 'ET' CH_CI; 666 : 'SINON'; 667 : CH_UIMP=CH_CI; 668 : 'FINSI'; 669 : ICHUIMP=VRAI; 670 : 'FINSI'; 671 : 'FINSI'; 672 : 'SI' ('NON' ICHUIMP); 673 : CH_UIMP='DEPI' MAT_BLOC 0.; 674 : 'FINSI'; 675 : MAT_CHPO = CH_UIMP - MAT_CHPO ; 676 : SECON = CH_UIMP - SECON ; 677 : *---------- Si convection on cherche TE ------------ 678 : 679 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'TECO' ) ; 680 : CH_TEC = 'TIRE' (ETAB.'CHARGEMENT') 'TECO' TEMM ; 681 : 'SI' ICELS ; CH_TEC = CH_TEC + TREF ; 'FINSI' ; 682 : 'FINSI'; 683 : 684 : *----------calcul convection second membre -------------- 685 : 686 : 'SI' ICONVE; 687 : CHMAT2 = 'REDU' CHMAT ETAB.'MOD_CON'; 688 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'TECO' ) ; 689 : CHAL_TEI = 'CONV' ETAB.'MOD_CON' CHMAT2 CH_TEC ; 690 : MAT_CHPO = MAT_CHPO + CHAL_TEI; 691 : 'FINSI'; 692 : 'SI' ('NON' IECDEP) ; 693 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') 'TECO' ) ; 694 : SECON = SECON + CHAL_TEI; 695 : 'FINSI' ; 696 : 'FINSI'; 697 : 'FINSI'; 698 : 699 : *--------- SI terme de flux ------------------------------- 700 : 701 : 'SI' ETAB.'THM1' ; 702 : ma FTGC = @MATETHM ETAB.'MOD_THM' TH_COUR ; 703 : MAT_CHPO = MAT_CHPO-FTGC; 704 : SECON = SECON -FTGC; 705 : 'FINSI'; 706 : 'REPE' Boucle NBDUA1 ; 707 : MOTCOMP = 'EXTR' LDUAL1 &Boucle ; 708 : 'SI' ('EXIS' (ETAB.'CHARGEMENT') MOTCOMP) ; 709 : CH_DUA = 'TIRE' (ETAB.'CHARGEMENT') MOTCOMP TEMM ; 710 : MAT_CHPO = MAT_CHPO + CH_DUA ; 711 : SECON = SECON + CH_DUA ; 712 : 'FINS' ; 713 : 'FIN' Boucle ; 714 : *------------- calcul des termes rayonnement- et des autres----------- 715 : 716 : 'SI' (etab.'PROCEDURE_CHAR_THER'); 717 : IAPPEL=3; 718 : TAAT=CHARTHER preced temm IAPPEL; 719 : 'SI'('EXIS' TAAT 'ADDI_MATRICE'); 720 : mat_z = lambda1 * taat.'ADDI_MATRICE' ; 721 : ccons = mat_z 'ET' ccons ; 722 : aa = mat_z 'ET' aa ; 723 : bb=taat.'ADDI_MATRICE' 'ET' bb; 724 : 'FINSI'; 725 : 'SI' ('EXIS' TAAT 'ADDI_SECOND' ); 726 : MAT_CHPO= MAT_CHPO et taat.'ADDI_SECOND'; 727 : 'FINSI'; 728 : 'SI' ('EXIS' TAAT 'RAYO_VALEUR'); 729 : 730 : STAB.'RAYONNEMENT'=TAAT.'RAYO_VALEUR'; 731 : 'FINSI'; 732 : 'FINSI'; 733 : *------------- si phase insertion des blocages et des jeux --------- 734 : 735 : 'SI' IPHASE; 736 : AA = AA 'ET' BLOPHA; 737 : SECON = SECON 'ET' DEPPHA; 738 : MAT_CHPO = MAT_CHPO 'ET' DEPPHA; 739 : 'FINSI'; 740 : *--------------- Calcul du premier résidu -------------------------- 741 : 742 : B3 = BB * U0 ; 743 : MAT_CHPO = MAT_CHPO - B3 ; 744 : ******************************************************************** 745 : * Boucle sur les iterations * 746 : ******************************************************************** 747 : * on peut mettre n'importe quoi c'est pour 748 : * ne pas faire de tests dans la boucle 749 : ZCLIM = MAT_BLOC; 750 : ZNACCE =2;ZITAC= 0 ;IT= 0 ;ITDEP=3;'SI' IPHASE; ITDEP=5;'FINSI'; 751 : ITACC = 0; 752 : ACFP1 = 'COPIER' MAT_CHPO * 0.; ACFP2 = ACFP1 ; MAT_CHPP=ACFP1 ; 753 : ACFP3 = ACFP1 ; ACFEP1 = ACFP1; 754 : ACFEP2 = ACFP1 ; CORREC=0.; 755 : DU0 = 0. * U0; 756 : U00 = 'ENLEVER' U0 'LX'; 757 : 'SI' IPHASE ; 758 : U00MTREF = U00 ; 'SI' ICELS ; U00MTREF = U00 - CHTREF ; 'FINSI' ; 759 : 'FINSI' ; 760 : U1=U00; 761 : 'REPETER' BOU_IT1; 762 : *IT est le compteur de ETIQ, ITACC doit etre =< 0 pour qu'on accelere 763 : IT= IT + 1 ; 764 : ITACC = ITACC - 1; 765 : ZITAC = ZITAC + 1 ; 766 : ITE_IT = &BOU_IT1; 767 : AUTORISA=VRAI; 768 : BB= BCONS;CC=CCONS; 769 : 770 : * 771 : * selection des fluxmax pour le changement de phase 772 : * 773 : 'SI' IPHASE; 774 : 'SI' (ITE_IT > 1) ; 775 : U1TRE = U1 'ENLEVER' 'LX' ; 776 : 'SI' ICELS ; U1TRE = U1TRE - CHTREF ; 'FINSI' ; 777 : U1TRE = U1TRE + (U1 'EXCO' 'LX' 'NOID' 'LX') ; 778 : 'SINON' ; 779 : U1TRE = U1 ; 'SI' ICELS ; U1TRE = U1 - CHTREF ; 'FINSI' ; 780 : AUTORISA = FAUX ; 781 : 'FINSI'; 782 : CHPPHA = 'EXCP' MODPHA MATPHA PRO_VAL 783 : QLAPHA U00MTREF U1TRE BLOPHA; 784 : 'FINSI'; 785 : * nombre max d'iteration autorisé est-il dépassé? 786 : 'SI' (ITE_IT '>' MAX1); 787 : 'MESS' '*** LE CALCUL N A PAS CONVERGE ***'; 788 : ETAB.'ERREUR' = VRAI; 789 : 'QUITTER' TRANSNON; 790 : 'FINSI'; 791 : * 792 : *--------------------------------------------------------------------- 793 : * La force motrice de l'iteration est fixee: RESIDU 794 : * on va calculer un nouveau champ de deplacement 795 : * 796 : * calcul de l'increment de l'increment de deplacement zdep1 797 : * par resolution lineaire 798 : * 799 : * 800 : * acceleration de convergence 801 : * 802 : 803 : CORRECP = CORREC; 804 : CORREC = 0; 805 : ACFP0 = (MAT_CHPO - MAT_CHPP) 'ENLE' FLX ; 806 : ACFEP0 = ACFP0; 807 : ACFEP0 = ACFEP0 - CORRECP ; 808 : 'SI' ('MULT' IT ZNACCE) ; 809 : 'SI' (IT > ITDEP); 810 : CORREC = 'ACT3' ACFEP2 ACFEP1 ACFEP0 811 : ACFP3 ACFP2 ACFP1 ACFP0 ; 812 : MAT_CHPO = MAT_CHPO - CORREC; 813 : 'FINSI'; 814 : 'FINSI'; 815 : 816 : SI (IT > 3); 817 : 'DETR' ACFP3; 818 : 'DETR' ACFEP2; 819 : 'FINSI'; 820 : ACFP3 = ACFP2 ; ACFP2 = ACFP1 ; ACFP1 = ACFP0 ; 821 : ACFEP2 = ACFEP1 ; ACFEP1 = ACFEP0 ; 822 : 823 : MENAGE; 824 : 825 : 'SI' (IRIB); 826 : 'SI' IPHASE; 827 : DU1 BID BID BID BID = 'RESOU' AA MAT_CHPO 'INIB' 828 : RIBL_VAL LISE_VAL CHPPHA; 829 : 'SINON'; 830 : DU1 BID BID BID = 'RESOU' AA MAT_CHPO 'INIB' 831 : RIBL_VAL LISE_VAL ; 832 : 'FINSI'; 833 : 'SINON'; 834 : 'SI' IPHASE; 835 : DU1 = 'RESOUDRE' AA MAT_CHPO CHPPHA; 836 : 'SINON'; 837 : DU1 = 'RESOUDRE' AA MAT_CHPO ; 838 : * mess ' ITeration ' it; 839 : * aaa= extr aa rigi mult ; mess ' aaa ' ; list aaa; 840 : * mess ' mat_chpo' ; list mat_chpo; 841 : * mess ' du1 ' ; list du1; 842 : 'FINSI'; 843 : 'FINSI'; 844 : ZRAID_T = 'EXTR' AA 'CONT'; 845 : 'SI' ('EXIS' ZRAID_T 'NITER'); 846 : RIBL_VAL = ZRAID_T.7; 847 : LISE_VAL = ZRAID_T.6; 848 : IRIB=VRAI; 849 : 'FINSI'; 850 : 851 : U1 = U00 + DU1; 852 : 853 : XXX1= ZCLIM * U1; 854 : MAT_CHPP= MAT_CHPO 'ENLEVER' 'FLX'; 855 : 856 : 'SI' ('EGA' I_LAMBD1 0) ; 857 : U_BOU1 = (LAMBDA1 * U1) + ((1 - LAMBDA1) * U0); 858 : 'SINON' ; 859 : 'SI' ('EGA' I_LAMBD1 1) ; U_BOU1 = U0 ; 'FINSI' ; 860 : 'SI' ('EGA' I_LAMBD1 2) ; U_BOU1 = 0.5 * (U0 + U1) ; 'FINSI' ; 861 : 'SI' ('EGA' I_LAMBD1 3) ; U_BOU1 = U1 ; 'FINSI' ; 862 : 'FINSI' ; 863 : 864 : TH_COUR = U_BOU1 ; 'SI' ICELS; TH_COUR = U_BOU1 - CHTREF; 'FINSI'; 865 : ETAB.'THER_COURANT' = TH_COUR ; 866 : 867 : *-------- Calcul du critère de fin d'itération ------------------- 868 : 869 : DUABS2 = 'ABS' (DU1 - DU0) ; 870 : ZPREC2 = 0. ; 871 : 'REPE' BINCO1 NBDUA1 ; 872 : LINCOI1 = 'MOTS' ('EXTR' LINCO1 &BINCO1) ; 873 : MDUABSI1 = 'MAXI' DUABS2 'AVEC' LINCOI1 ; 874 : NORMI1 = 'MAXI' 'ABS' U1 'AVEC' LINCOI1 ; 875 : 'SI' (NORMI1 '<EG' (1.E-14 * MDUABSI1)) ; 876 : NORMI1 = 1. ; 877 : 'FINS' ; 878 : ZPRECI2 = MDUABSI1 / NORMI1 ; 879 : 'SI' (ZPRECI2 '>' ZPREC2) ; 880 : ZPREC2 = ZPRECI2 ; 881 : 'FINS' ; 882 : 'FIN' BINCO1 ; 883 : DU0 = DU1; 884 : 'MESS' ' Itération numéro : 'ITE_IT 885 : ' Valeur du critère : 'ZPREC2 ; 886 : 'SI' ((ZPREC2 '<EG' ZPREC1) 'ET' AUTORISA); 887 : 'QUITTER' BOU_IT1; 888 : 'FINSI'; 889 : 890 : ***************************************************************** 891 : * CALCUL DU NOUVEAU RESIDU * 892 : ***************************************************************** 893 : MAT_CHPO = SECON ; 894 : * Gestion des variables externes * 895 : ***************************************************************** 896 : 897 : 'SI' NONLIN1; 898 : 899 : *-------------- Cas de la temperature et du temps --------------- 900 : 901 : 902 : CHVAR = 'CHAN' 'CHAM' TH_COUR ETAB.'MOD_TOT' 'RIGIDITE' ; 903 : CHVAR2 = 'MANU' 'CHML' ETAB.'MOD_TOT' 'TEMP' TEMM 'RIGIDITE' ; 904 : CHVAR = CHVAR 'ET' CHVAR2 ; 905 : 906 : *-------------- Cas des variables mecaniques -------------------- 907 : *---- si il y a couplage on les "rentre" toutes dans CHVAR ------ 908 : 909 : 'SI' (ETAB.'COUPLAGE'); 910 : CHVAR = CHVAR 'ET' CHAR_ME; 911 : 'FINSI'; 912 : 913 : *-------------- Mise a jour des variables externes -------------- 914 : 'SI' (ETAB.'PROCEDURE_PARA_THER') ; 915 : PARATHER PRECED TEMM ; 916 : 'FINSI' ; 917 : 918 : *-------------- Cas des autres variables -------------------- 919 : 920 : 'REPETER' BOU_NU2 ILVA; 921 : ITE2 = &BOU_NU2; 922 : MOTI = 'EXTR' LVAREX ITE2; 923 : 'SI' ('EXISTE' LINCO2 MOTI) ; 924 : 'ITER' BOU_NU2 ; 925 : 'FINS' ; 926 : 'SI' (ETAB.'COUPLAGE'); 927 : 'SI' ('EXISTE' CHAR_ME MOTI ); 928 : 'SI' ('NEG' LAMBDA1 0.); 929 : 'MESS' 930 : '*** Le materiau thermique depend de parametres mecaniques'; 931 : 'ERRE' '*** Il faut initialiser SOUS-RELAXATION à 0.'; 932 : 'FINSI'; 933 : 'ITERER' BOU_NU2; 934 : 'FINSI'; 935 : 'FINSI'; 936 : 'SI' ('EXISTE' (ETAB.'CHARGEMENT') MOTI); 937 : CH_1 = 'TIRE' (ETAB.'CHARGEMENT') MOTI TEMM; 938 : TYP_1 = 'TYPE' CH_1; 939 : 940 : * on suppose que les chargements qui ne sont pas d'origine mecanique 941 : * sont appuyes sur le maillage thermique . 942 : 943 : 'SI' ('EGA' TYP_1 'CHPOINT '); 944 : CHVAR2 = 'CHAN' 'CHAM' CH_1 ETAB.'MOD_TOT' 'RIGIDITE'; 945 : 'SINON'; 946 : CHVAR2 = 'CHAN' 'RIGIDITE' CH_1 ETAB.'MOD_TOT'; 947 : 'FINSI'; 948 : CHVAR = CHVAR + CHVAR2; 949 : 'SINON'; 950 : 'MESS' '*** Il manque une donnee du chargement ***'; 951 : 'MESS' '*** Variable concernee : 'MOTI; 952 : 'ERREUR' ' '; 953 : 'FINSI'; 954 : 'FIN' BOU_NU2; 955 : 'FINSI'; 956 : 957 : *----------------- Calcul du champ de matériau a T= U_BOU1-------------- 958 : 'SI' NONLIN1; 959 : CHVAR1 = 'REDU' CHVAR (ETAB.'MOD_TOT'); 960 : CHMAT = 'VARI' 'NUAG' (ETAB.'MOD_TOT') (ETAB.'MAT_TOT') CHVAR1 961 : 'RIGIDITE'; 962 : ETAB.'CHMAT'=CHMAT; 963 : 'SI' (ETAB . 'FOR_DIFF' 'OU' ETAB.'THE1') ; 964 : CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ; 965 : 'SI' ETAB.'THM1' ; 966 : ma ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 967 : CHMAT1 = CHMAT1 'ET' ma ; 968 : 'FINS' ; 969 : 'SINO' ; 970 : 'SI' ETAB.'THM1' ; 971 : CHMAT1 ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 972 : 'FINS' ; 973 : 'FINS' ; 974 : 'SINON'; 975 : ETAB.'CHMAT' = ETAB.'MAT_TOT'; 976 : 'SI' (ETAB . 'FOR_DIFF' 'OU' ETAB.'THE1') ; 977 : CHMAT = ETAB.'MAT_TOT'; 978 : CHMAT1 = 'REDU' CHMAT ETAB.'MOD_THE' ; 979 : 'SI' ETAB.'THM1' ; 980 : ma ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 981 : CHMAT1=CHMAT1 'ET' ma ; 982 : 'FINS' ; 983 : 'SINO' ; 984 : 'SI' ETAB.'THM1' ; 985 : CHMAT1 ff0 = @MATETHM ETAB.'MOD_THM' TH_COUR ; 986 : 'FINS' ; 987 : 'FINS' ; 988 : 'FINSI'; 989 : * 990 : 'OPTION' 'PARA' IPARAL ; 991 : CHMTRED = CHMAT1 ; 992 : CHMDRED = CHMAT1 ; 993 : 'SI' (IKDEP 'OU' ICDEP) ; 994 : 'SI' ICONDU; MATRCOND= 'REDU' CHMAT1 MODRCOND; 'FINSI'; 995 : 'SI' ICONVE; MATRCON= 'REDU' CHMAT1 MODRCON;'FINSI'; 996 : 'SI' IADVEC; MATRADV= 'REDU' CHMAT1 MODRADV;'FINSI' ; 997 : 'SI' ITHM1; MATRTHM= 'REDU' CHMAT1 MODRTHM;'FINSI' ; 998 : 'FINSI' ; 999 : 'SI' (IKDDEP 'OU' ICDDEP) ; 1000 : 'SI' IPARAL; CHMDRED = 'REDU' CHMAT1 MODDRED ;'FINSI'; 1001 : 'FINSI' ; 1002 : * 1003 : *---------------CALCUL matrice de conductivite si besoin -------------- 1004 : 1005 : 'SI' IKDEP ; 1006 : 'SI' ICONDU; BB = ('COND' MODRCOND MATRCOND) 'ET' BB;'FINSI'; 1007 : 'SI' ITHM1 ; BB = ('COND' MODRTHM MATRTHM) 'ET' BB;'FINSI'; 1008 : 1009 : 'FINSI' ; 1010 : 'SI' IECDEP; 1011 : 'SI' ICONVE; BB = ('COND' MODRCON MATRCON) 'ET' BB;'FINSI'; 1012 : 'FINSI'; 1013 : 'SI' IKVITE; 1014 : BB= ('ADVE' MODRADV MATRADV) 'ET' BB;'FINSI'; 1015 : 'SI' IKDDEP ; 1016 : BB = ('RIGI' MODDRED CHMDRED) 'ET' BB ; 1017 : 'FINSI' ; 1018 : *-------------- calcul matrice de capacite si besoin------------------ 1019 : 1020 : 'SI' ICDEP ; 1021 : XDIV=(-1.d0 * T_PAS) ; 1022 : 'SI' ICONDU;CC=(('CAPA' MODRCOND MATRCOND)/XDIV) 'ET' CC;'FINSI'; 1023 : 'SI' ITHM1 ; CC=(('CAPA' MODRTHM MATRTHM)/XDIV) 'ET' CC;'FINSI'; 1024 : 'FINSI'; 1025 : 'SI' ICDDEP ; 1026 : CDET = 'CAPA' MODDRED CHMDRED ; 1027 : CC = CDET / (-1.d0 * T_PAS) 'ET' CC; 1028 : 'FINSI'; 1029 : 1030 : *----------------calcul des temres de convections si besoin --------- 1031 : 'SI' IECDEP; 1032 : 'SI' ICONVE; 1033 : 'SI' ('EXIS' (ETAB.'CHARGEMENT' ) 'TECO'); 1034 : CHAL_TE = 'CONV' MODCON CHMAT2 CH_TEC ; 1035 : MAT_CHPO = MAT_CHPO + CHAL_TE ; 1036 : 'FINSI'; 1037 : 'FINSI'; 1038 : 'FINSI'; 1039 : 1040 : 'OPTION' 'PARA' FAUX ; 1041 : * 1042 : ****************************************************************** 1043 : * On génère les termes de rayonnement et autres * 1044 : ****************************************************************** 1045 : 'SI'(ETAB.'PROCEDURE_CHAR_THER') ; 1046 : IAPPEL=3; 1047 : TAAT=CHARTHER preced tem1 IAPPEL; 1048 : 'SI' ('EXIS' TAAT 'ADDI_MATRICE'); 1049 : bb = bb et taat.'ADDI_MATRICE'; 1050 : 'FINSI'; 1051 : 'SI' ( 'EXIS' TAAT 'ADDI_SECOND' ); 1052 : MAT_CHPO= MAT_CHPO et taat.'ADDI_SECOND' ; 1053 : 'FINSI'; 1054 : 'SI' ('EXIS' TAAT 'RAYO_VALEUR'); 1055 : STAB.'RAYONNEMENT'=TAAT.'RAYO_VALEUR'; 1056 : 'FINSI'; 1057 : 'FINSI' ; 1058 : 1059 : *--------------- calcul K* u1 et (lambda1*k + C/DT) * DDU1 1060 : 1061 : 'SI' ('EGA' I_LAMBD1 1) ; 1062 : DS = BB * U00 ; 1063 : 'SINON' ; 1064 : chp_z = DU1 ; 1065 : 'SI' ('NEG' I_LAMBD1 3) ; chp_z = LAMBDA1 * DU1 ; 'FINSI' ; 1066 : DS = BB * ( chp_z + U00 ) ; 1067 : 'FINSI' ; 1068 : DS2 = CC * DU1; 1069 : MAT_CHPO = MAT_CHPO + DS2 - DS ; 1070 : 'SI' ETAB.'THM1' ; 1071 : ma FTGC = @MATETHM ETAB.'MOD_THM' TH_COUR ; 1072 : MAT_CHPO = MAT_CHPO - FTGC ; 1073 : 'FINSI'; 1074 : U_BOU = U1 ; 1075 : 'FIN' BOU_IT1; 1076 : * 1077 : * si changement de phase mise a jour des nouvelles proportions 1078 : * 1079 : 'SI' IPHASE; 1080 : QPH = 'REAC' BLOPHA DU1; 1081 : PRO_VAL= 'PROPHA' PRO_VAL QLAPHA QPH; 1082 : 'FINSI'; 1083 : 1084 : TH_COUR = U1 ; 'SI' ICELS ; TH_COUR = U1 - CHTREF ; 'FINSI' ; 1085 : ETAB.'THER_COURANT' = TH_COUR ; 1086 : 1087 : *---------------- Appel a une procedure utilisateur ----------------- 1088 : 1089 : 'SI' (ETAB.'PROCEDURE_PERSO2'); 1090 : tab_z = 'INDEX' (PRECED.'TEMPERATURES') ; 1091 : IND0 = tab_z. ('DIMENSION' tab_z) ; 1092 : ETAB.'TEMI' = PRECED.'TEMPERATURES' . IND0 ; 1093 : PERSO2 PRECED ; 1094 : ETAB = 'ENLEVER' ETAB 'TEMI' ; 1095 : 'SI' ('EXIS' PRECED 'ARRET') ; 1096 : ETAB . 'ARRET' = PRECED . 'ARRET' ; 1097 : 'FINS' ; 1098 : 'FINSI'; 1099 : ******************************************************************* 1100 : * Reinitialisation des variables en vue du pas suivant * 1101 : ******************************************************************* 1102 : 'SI' ((ITE3+1) '<EG' DCALC); 1103 : TEM0 = TEM1; 1104 : TEM1 = 'EXTR' TE_CALC (ITE3 + 1); 1105 : T_PAS = TEM1 - TEM0; 1106 : U0 = U1 ; 1107 : 'SINON'; 1108 : 'QUITTER' BOUC_SO; 1109 : 'FINSI'; 1110 : 1111 : *------------------------ On fait le menage ----------------------- 1112 : 1113 : 'MENAGE' ; 1114 : 1115 : 'FIN' BOUC_SO ; 1116 : 1117 : 'SAUT' 1 'LIGN' ; 1118 : 1119 : STAB.'ERREUR' = ERR_VAL ; 1120 : 'SI' ETAB.'FOR_THER' ; 1121 : STAB.'INITIAL(2)' = TH_COUR; 1122 : 'FINS' ; 1123 : 'SI' ETAB . 'FOR_DIFF' ; 1124 : STAB.'CO2' = TH_COUR; 1125 : 'FINS' ; 1126 : 1127 : 1128 : 'SI' IRIB ; 1129 : STAB.'RIBLO_T' = RIBL_VAL ; 1130 : STAB.'LISEA_T' = LISE_VAL ; 1131 : 'FINSI' ; 1132 : * 1133 : 'SI' IPHASE ; 1134 : STAB.'PROPPHAS' = PRO_VAL ; 1135 : 'FINSI' ; 1136 : 'FINPROC' STAB ; 1137 : 1138 : 1139 : 1140 : 1141 :
© Cast3M 2003 - All rights reserved.
Disclaimer