1 : * PASAPAS PROCEDUR AM 14/02/06 21:15:02 7944 2 : 3 : 'DEBPROC' PASAPAS PRECED*'TABLE'; 4 : 'SAUTER' 1 'LIGNE'; 5 : 'MESS' 6 : '------------------ DEBUT DE LA PROCEDURE PASAPAS --------------------'; 7 : ************************************************************************ 8 : * * 9 : * * 10 : *** PRECED objet de type TABLE * 11 : * C'est une table donnant , les arguments d'entrées, les * 12 : * options, puis les resultats des pas precedents * 13 : * * 14 : **************** I PARTIE ****************************************** 15 : ******************************************************** 16 : 17 : *---------- attribution des valeurs par defaut et verifs elementaires 18 : PASFINAL=0; 19 : MOCA = 'MOTS' 'VECT' 'VX' 'VY' 'VZ' 'VXF' 'VYF' 'VZF'; 20 : PAS_DEFA PRECED; WTAB=PRECED.'WTABLE'; 21 : *-------- initialisation du pas precedent si besoin 22 : *-------- et création des tables de sorties. 23 : PAS_INIT PRECED ; 24 : conti=PRECED.'CONTINUATION'; estim = PRECED.'ESTIMATION'; 25 : GE0_DEB=WTAB.'FOR0'; 26 : 'SI' ( 'EXIS' conti 'DEPLACEMENTS'); 27 : 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION'); 28 : Ge0_deb= 'FORME' conti . 'DEPLACEMENTS'; 29 : 'FINSI'; 30 : 'FINSI'; 31 : 'FORM' WTAB.'FOR0'; 32 : *--------- quel est le delta-temps du dernier pas calcule ? --------- 33 : 34 : 'SI' ('EGA' WTAB.'DT' 'INCONNU' ); 35 : DELTAN = 0.D0 ; 36 : WTAB.'DT' = DELTAN ; 37 : 'SINON'; 38 : DELTAN= WTAB.'DT'; 39 : 'FINSI'; 40 : *--------- initialisation materiau a la temperature_reference 41 : *--------- qui est celle du temps temps0 donc uniquement 42 : *--------- en tout debut de calcul 43 : 'SI' ('NON'('EXIS' WTAB 'ETAT0')); 44 : *mess ' wtab etat0 nexiste pas'; 45 : * mess ' wtab char_the ' ; list wtab.'CHAR_THE'; 46 : * mess ' wtab forther' ; list wtab . 'FOR_THER'; 47 : * mess ' wtab.MODAL'; list wtab . 'MODAL'; 48 : * mess ' wtab.matvar'; list wtab.'MATVAR'; 49 : 'SI'(WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER' 'OU' WTAB.'MODAL'); 50 : 'SI' (WTAB.'FOR_MECA' 'OU' WTAB.'MODAL'); 51 : WTAB.'ETAT0' = 'ADET' 'NOUV' wtab.'MO_TOT' wtab.'CHARGEMENT' 52 : WTAB.'TEMPS0' conti 'TEMP' WTAB.'TEMPS0'; 53 : PAS_VERM PRECED WTAB.'ETAT0'; 54 : 'SI' (WTAB.'MATVAR' 'OU' WTAB.'MODAL') ; 55 : WTAB.'MAT0' = PAS_MATE PRECED WTAB.'ETAT0'; 56 : 'SINON' ; 57 : * mess ' initialisation de mat0'; 58 : WTAB.'MAT0' =WTAB.'CARACTERISTIQUES'; 59 : 'FINSI'; 60 : WTAB.'ETAT0'= 0; 61 : 'FINSI'; 62 : 'SI' ( WTAB.'FOR_THER' 'ET' ( 'NON' WTAB.'FOR_MECA')); 63 : WTAB.'MAT0'= WTAB.'CARACTERISTIQUES'; 64 : 'FINSI'; 65 : WTAB.'MAT1'=WTAB.'MAT0'; 66 : 'SI' WTAB.'FOR_MECA'; 67 : 'SI'(WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER'); 68 : * mess ' pasapas wtab.matà'; list wtab.'MAT0'; 69 : PAS_EPTH PRECED; 70 : WTAB.'ETHER1'=WTAB.'ETHER2'; 71 : 'SI' WTAB.'POR1'; WTAB.'MSRTHER1'=WTAB.'MSRTHER2';'FINSI'; 72 : 'FINSI'; 73 : 'FINSI'; 74 : 'FINSI'; 75 : 'FINSI'; 76 : *--------- création du mchaml contenant l'état initial de tout 77 : WTAB.'ETAT1' = 'ADET' 'NOUV' wtab.'MO_TOTAL' wtab.'CHARGEMENT' 78 : WTAB.'TEMPS0' conti 'TEMP' WTAB.'TEMPS0'; 79 : *---------- verification sur la présence des variables dont les 80 : *----------matériaux dépendent et des parametres externes 81 : 82 : PAS_VERM PRECED WTAB.'ETAT1'; 83 : 84 : *------------Appel a une procedure utilisateur PERSO1 85 : 'SI' WTAB.'PROCEDURE_PERSO1'; 86 : PRECED.'PERSO1_APPEL' = 1 ; 87 : PERSO1 PRECED ; 88 : 'SI' ('EXIS' PRECED 'ARRET') ; 89 : WTAB . 'ARRET' = PRECED . 'ARRET' ; 90 : 'FINSI' ; 91 : 'FINSI'; 92 : * ------------Appel a une procedure utilisateur REACTU MECA 93 : 94 : 'SI' WTAB.'PROCEDURE_REAC_MECA' ; 95 : REEV_MEC PRECED 0 ; 96 : 'FINSI' ; 97 : ************************** II PARTIE ************************* 98 : ****************************************************************** 99 : ******************* boucle sur les pas de temps ***************** 100 : ****************************************************************** 101 : 102 : * ------------quelques initialisations de l'algorithme 103 : IPAS = 0; 104 : ICHG=0;ICHGMA=0; 105 : IAUTO=1;IREREDU=VRAI; TEMP0= WTAB.'TEMPS0'; 106 : ISAUV=VRAI;DTV= ( 'EXTR' wtab.'TEMPS_CALCULES' 1) - TEMP0; 107 : 'SI' (DTV '<' 1.e-15 ); 108 : 'SI' WTAB . 'FREQUENTIEL' ; 109 : DTV = 1.e-14 ; 110 : 'SINON' ; 111 : DTV=('EXTR' WTAB.'TEMPS_CALCULES' 2)-TEMP0; 112 : 'FINSI'; 113 : 'FINSI'; 114 : WTAB.'ARRET'=FAUX; WTAB.'AUTODEUX'=FAUX; 115 : WTAB.'CONV'=VRAI;DT_AVANT=DTV; 116 : WTAB.'NOMBRE_ITERATIONS'=12; 117 : RFROT=0; 118 : 119 : *---------- debut boucle sur pas de temps 120 : 'REPETER' BEXTERN ; 121 : 122 : *---recherche du temps a calculer TI 123 : NPAS='DIME' WTAB.'TEMPS_CALCULES'; 124 : ICHG=ICHG + 1; WTAB.'ICHG'= ICHG; 125 : 'SI' ( ICHG '>' NPAS) ; 'QUITTER' BEXTERN; 'FINSI'; 126 : TI = 'EXTRAIRE' WTAB.'TEMPS_CALCULES' ICHG ; 127 : TIV=TI; 128 : 'SI' (WTAB.'FREQUENTIEL') ; 129 : 'SI' (TI '<' TEMP0 ) ; 'ITERER' BEXTERN ; 'FINSI' ; 130 : 'SINON' ; 131 : 'SI' ((TI '<' TEMP0 ) 'OU' (TI 'EGA' PRECED.'TEMPS'. 0)); 132 : 'ITERER' BEXTERN ; 133 : 'FINSI'; 'FINSI'; 134 : 135 : *---ajustement du pas en fonction du nombre d iteration du pas précédent 136 : PASFINAL=PASFINAL+1; 137 : 'SI' WTAB.'PAS_AJUSTE'; 138 : DTV=DT_AVANT; 139 : 'SI' WTAB.'CONV'; 140 : 'SI' (WTAB.'NOMBRE_ITERATIONS' > 20); 141 : DTV=DTV/1.4142136; 142 : 'FINSI'; 143 : 'SI' (WTAB.'NOMBRE_ITERATIONS' < 7); 144 : 'SI' IREREDU; 145 : DTV=DTV* 1.4142136; 146 : 'FINSI'; 147 : 'FINSI'; 148 : DT_AVANT= DTV; 149 : IREREDU=VRAI; 150 : 'SINON'; 151 : DTV=0.0000000001D0* DT_AVANT; 152 : DT_AVANT= DT_AVANT /2.; 153 : IREREDU=FAUX; 154 : 'FINSI'; 155 : TTI = DTV* 1.0000000001 + TEMP0; 156 : 'SI' ( TTI '<EG' TIV ); TI=TTI;PASFINAL=0; 'FINSI'; 157 : 'FINSI'; 158 : PRECED.'ESTIMATION'.'TEMPS'=TI; 159 : 'SI' (PASFINAL '>EG' 1.5) ; DT_AVANT= TI-TEMP0; 'FINSI'; 160 : WTAB.'T_FINAL'= TI; 161 : WTAB.'DT_INIT' = TI-TEMP0; 162 : 'SI'((WTAB.'CONSOLIDATION' 'OU' WTAB.'DYNAMIQUE') 163 : 'ET' (WTAB.'DT_INIT' 'EGA' 0.)); 164 : 'ITERER' BEXTERN; 165 : 'FINSI'; 166 : WTAB.'DT'= WTAB.'DT_INIT'; 167 : 168 : *---compteur IPAS des pas de temps calcules 169 : IPAS = IPAS + 1; 170 : WTAB.'PAS'=IPAS; 171 : 172 : *---on se place dans la configuration déformée 173 : 'SI'( WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'FEFP_FORMULATION'); 174 : 'SI' (WTAB.'RECALCUL'); 175 : 'SI' ('EGA' ( 'TYPE' GE0_DEB) 'CONFIGUR'); 176 : 'FORM' GE0_DEB; 177 : 'FINSI'; 178 : 'FINSI'; 179 : 'FINSI'; 180 : 181 : *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 182 : *++++++++++++++++++ BOUCLE interne de bouclage mec_ther ++++++++++++++ 183 : *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 184 : I_BOTH = 0 ; 185 : 'REPETER' BO_BOTH WTAB.'BOU_METH' ; 186 : I_BOTH = I_BOTH + 1 ; 187 : * 188 : * re-initialisation de WTAB.'CHARGEMENT' en tete de boucle mec-ther 189 : * 190 : 'SI' WTAB.'CONVERGENCE_MEC_THE' ; 191 : WTAB.'CHARGEMENT' = WTAB . 'CHARGEMENT_I' ; 192 : 'FINSI'; 193 : 194 : *######CALCUL D'UN PAS SI IL Y A DE LA THERMIQUE #################### 195 : 196 : 'SI' (WTAB.'FOR_THER' 'OU' WTAB.'FOR_DIFF') ; 197 : 'SI' WTAB.'FOR_MECA' ; 198 : *---------- en cas de convergence mecanique thermique 199 : 'SI' (I_BOTH > 1) ; 200 : *---------- reprise de la configuration meca de la derniere estimation 201 : * du pas present si coherence mecanique/thermique 202 : 'SI' ( 'EXISTE' estim 'FOR' ) ; 203 : WTAB . 'RECARI' = VRAI ; 204 : WTAB . 'RECADET' = VRAI; 205 : WTAB.'REA_GEOM' = VRAI ; 206 : 'FORM' estim.'FOR' ; 207 : 'FINSI'; 208 : 'FINSI' ; 209 : 'FINSI' ; 210 : 211 : 'SI' (TI 'NEG' TEMP0); 212 : 'SI' ('NON' ('EXISTE' PRECED 'PAS_MAX')); 213 : WTAB.'TEM_CALC' = 'PROG' TI; 214 : 'SINON'; 215 : 'SI' ((TEMP0 + PRECED.'PAS_MAX') '>EG' TI); 216 : WTAB.'TEM_CALC' = 'PROG' TI; 217 : 'SINON'; 218 : WTAB.'TEM_CALC' = 'PROG' TEMP0 219 : 'PAS' PRECED.'PAS_MAX' TI; 220 : WTAB.'TEM_CALC' = 'ENLE' WTAB.'TEM_CALC' 1; 221 : 'FINSI'; 222 : 'FINSI'; 223 : *----- Appel a la procedure thermique (lineaire ou nonlineaire) ---- 224 : 'SI' ('NON' WTAB.'COUPLAGE'); 'MENAGE'; 'FINSI'; 225 : 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE'); 226 : CHTER = TRANSNON PRECED; 227 : 'FINSI'; 228 : 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'LINEAIRE'); 229 : CHTER = TRANSLIN PRECED; 230 : 'FINSI'; 231 : 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT'); 232 : WTAB.'NOUV_PAS' = ('EXTR' WTAB.'TEM_CALC' 1) - TEMP0; 233 : CHTER = DUPONT2 PRECED; 234 : 'FINSI'; 235 : 'SI' CHTER.'ERREUR'; 236 : 'ERREUR' ' '; 237 : 'FINSI'; 238 : 'SI' WTAB.'FOR_THER' ; 239 : WTAB.'TET2'=CHTER.'INITIAL(2)' 'ENLE' 'LX'; 240 : * mess ' temperatures ' ; list resu WTAB.'TET2'; 241 : 'FINSI' ; 242 : 'SI' WTAB.'FOR_DIFF' ; 243 : WTAB.'CO2'=CHTER.'CO2'; 244 : 'FINSI' ; 245 : 'FINSI'; 246 : 'SI' WTAB.'FOR_THER' ; 247 : estim.'TEMPERATURES'=WTAB.'TET2'; 248 : 'FINSI' ; 249 : 'SI' WTAB.'PHASE'; 250 : estim.'PROPORTIONS_PHASES'= WTAB.'PROPPHAS'; 251 : 'FINSI'; 252 : 'SI' WTAB.'FOR_DIFF' ; 253 : estim.'CONCENTRATIONS'=WTAB.'CO2'; 254 : 'FINSI' ; 255 : 256 : *** Reevaluation des données du calcul dépendant de la température 257 : 'SI' WTAB.'PROCEDURE_REAC_THER' ; 258 : REEV_THE PRECED 1 ; 259 : 'FINSI' ; 260 : 261 : *-----convergence mecanique thermiqUe : reprise configuration ------ 262 : *---------- du pas precedent pour refaire la mécanique ------------- 263 : FORM GE0_DEB; 264 : 'FINSI' ; 265 : 266 : *################## fin du calcul d'un pas thermique ################# 267 : 268 : *#################### calcul d'un pas si mecanique ################### 269 : 'SI' WTAB.'FOR_MECA' ; 270 : 'MESSAGE' ' Numero du pas : ' IPAS 271 : ' Indice d evolution : ' ICHG ' -> temps :' TI; 272 : 273 : *--------------------- calcul de la temperature --------------------- 274 : 'SI' WTAB.'FOR_THER'; 275 : THTA1='TABLE';THTA2='TABLE'; 276 : THTA1.1=TEMP0;THTA1.2=TI; 277 : THTA2.1= conti.'TEMPERATURES' 'ENLE' 'LX'; 278 : THTA2.2= estim.'TEMPERATURES' 'ENLE' 'LX' ; 279 : CHTH='CHAR' 'T' THTA1 THTA2; 280 : CHASANST= WTAB.'CHARGEMENT' 'ENLE' 'T'; 281 : WTAB.'CHARGEMENT'= CHASANST 'ET' CHTH; 282 : 'FINSI'; 283 : 'SI' (WTAB.'CHAR_THE' ); 284 : WTAB.'TET2' = 'TIRE' (WTAB.'CHARGEMENT') 'T ' TI; 285 : 'FINSI'; 286 : *----------------------- nouveau chargement ---------------------- 287 : 288 : 'SI' ('EXISTE' (WTAB.'CHARGEMENT') 'MECA'); 289 : F2 = 'TIRE' (WTAB.'CHARGEMENT') 'MECA' TI; 290 : TYP_2 = 'TYPE' F2; 291 : 'SI' ('NEG' TYP_2 'CHPOINT '); 292 : 'MESS' '*** Erreur dans la definition du chargement ( MECA ) ***'; 293 : 'ERRE' '*** Le type du champ n est pas CHPOINT ***'; 294 : 'FINSI'; 295 : 'SINON'; 296 : F2= ('ZERO' WTAB.'MO_TOT' 'FORCES' ) 297 : 'CHAN' WTAB.'MO_TOT' 'CHPO'; 298 : 'FINSI'; 299 : 300 : 'SI' ('EXISTE' (WTAB.'CHARGEMENT') 'FORC'); 301 : F2_FOR = 'TIRE' (WTAB.'CHARGEMENT') 'FORC' TI; 302 : TYP_2 = 'TYPE' F2_FOR; 303 : 'SI' ('NEG' TYP_2 'CHPOINT '); 304 : 'MESS' '*** Erreur dans la definition du chargement ( FORC ) ***'; 305 : 'ERRE' '*** Le type du champ n est pas CHPOINT ***'; 306 : 'FINSI'; 307 : F2 = F2 + F2_FOR ; 308 : 'FINSI'; 309 : 310 : *----------- Calcul du champ de materiau a la fin du pas ------- 311 : 'SI' WTAB.'MATVAR' ; 312 : * mess 'tctc on passe dans matvar'; 313 : MCHC= PAS_ETAT PRECED TI; 314 : MMMM= PAS_MATE PRECED MCHC; 315 : 'SINON'; 316 : * mess 'tctc on passe pas dans matvar'; 317 : MMMM= WTAB.'CARACTERISTIQUES'; 318 : 'FINSI'; 319 : 'SI' WTAB.'MODAL'; 320 : 'SI' ('EXISTE' WTAB.'MAT0' 'MAIB') ; 321 : LMOMOST = 'MOTS' 'RICR' 'MAIA' 'MAIB' 'MACR' 'AMCR' ; 322 : MMMM = MMMM 'ET' ('EXCO' WTAB.'MAT0' LMOMOST 'NOID'); 323 : 'FINSI' ; 324 : 'FINSI' ; 325 : WTAB.'MAT1'=MMMM; 326 : 'SI' ('EGA' WTAB.'MAT0' 'INCONNU'); WTAB.'MAT0'=MMMM; 'FINSI'; 327 : *----- Caracteristiques initiales en cas de grands deplacements ----- 328 : 'SI' WTAB.'ITCAR'; 329 : 'SI' ('EGA' WTAB.'CARA' 'INCONNU'); 330 : WTAB.'CARA' = WTAB.'MAT0'; 331 : 'FINSI'; 332 : MECAR1 = 'EXCO' MOCA MMMM 'NOID'; 333 : MECAR1 = 'CHAN' 'TYPE' MECAR1 'CARACTERISTIQUES'; 334 : MECAR2 = 'EXCO' MOCA WTAB.'CARA' 'NOID'; 335 : MECAR2 = 'CHAN' 'TYPE' MECAR2 'CARACTERISTIQUES'; 336 : MMMM = MMMM - MECAR1 + MECAR2; 337 : 'FINSI'; 338 : *--------------- Si il existe des deplacements imposes -------------- 339 : 'SI' ('EXISTE' (WTAB.'CHARGEMENT') 'DIMP'); 340 : F2_DEP = 'TIRE' (WTAB.'CHARGEMENT') 'DIMP' TI; 341 : F2 = F2 + F2_DEP; 342 : 'FINSI'; 343 : *---------------- si chargement deformation actualisation DEFO1 ------ 344 : 'SI' WTAB.'CHAR_DEFI' ; 345 : WTAB.'DEFOR2' = 'TIRE' WTAB.'CHARGEMENT' 'DEFI' TI; 346 : 'FINSI'; 347 : 348 : *--------- consolidation : preparation du second membre ------------- 349 : 'SI' ( WTAB.'CONSOLIDATION' ); 350 : FF = BSIGMA WTAB.'MOD_POR' 351 : ('REDU' WTAB.'MOD_POR' conti.'CONTRAINTES'); 352 : FF4 = 'EXCO' WTAB.'MOT_POR' FF 353 : WTAB.'MOT_POR' 'NOID' 'NATURE' 'DISCRET' ; 354 : WTAB.'FREA1' = FF4 ; 'DETR' FF ; 355 : F2 = F2 + FF4 ; 356 : * ---- traitement des flux si besoin ---- 357 : 'SI' ( 'EXIS' WTAB.'CHARGEMENT' 'FLUX' ) ; 358 : FLUXT0= 'TIRE' WTAB.'CHARGEMENT' 'FLUX' TEMP0; 359 : FLUXTI= 'TIRE' WTAB.'CHARGEMENT' 'FLUX' TI ; 360 : FLUXT = ((1 - WTAB.'TETA')*FLUXT0 ) + 361 : (WTAB.'TETA' *FLUXTI ) ; 362 : FACFLU = -1. * WTAB.'DT'; 363 : F2 = F2 + ( FACFLU * FLUXT) ; 364 : 'DETR' FLUXT ; 'DETR' FLUXT0; 'DETR' FLUXTI; 365 : 'FINSI' ; 366 : 'FINSI'; 367 : PRECED.'ZFEXT2'=F2; 368 : 369 : 370 : ************************************************************************ 371 : **************** APPEL A UNPAS ******************************** 372 : ************************************************************************ 373 : 'MENA' ; 374 : TT = UNPAS PRECED; 375 : 376 : *---------- retour à la configuration initiale ------------------- 377 : 'SI' WTAB.'GRANDS_DEPLACEMENTS' ; 378 : 'FORM' WTAB.'FOR0'; 379 : 'FINSI'; 380 : 'SI' WTAB.'FEFP_FORMULATION' ; 381 : 'FORM' WTAB.'FOR0'; 382 : 'FINSI'; 383 : 384 : *-------- test si on a convergé 385 : WTAB.'CONV' = TT.'CONV'; 386 : 'SI' ('NON' TT.'CONV' 'ET' ('NON' WTAB.'CONVERGENCE_FORCEE')); 387 : * en dynamique et en poreux on garde le PRECED.FREA1 du dernier pas 388 : * converge (dans le cas ou on voudrait continuer le calcul) 389 : * 'SI' WTAB.'DYNAMIQUE' ; WTAB.'FREA1' = F1 ; 'FINSI'; 390 : * 'SI' WTAB.'CONSOLIDATION' ;WTAB.'FREA1' = FF1 ; 'FINSI'; 391 : 'ERREUR' 997 ; 392 : 'FINSI'; 393 : 394 : * Remplissage de la table ESTIMATION : champs en fin de pas 395 : DEP0= conti.'DEPLACEMENTS'; 396 : * DEP = ENLEVER DEP0 'LX'; 397 : estim.'DEPLACEMENTS' = TT.'ZU1' ; 398 : * 'DETRUIRE' DEP; 399 : estim.'CONTRAINTES' = TT.'SIGF'; 400 : estim.'DFGRAD'=TT.'DFGRAD'; 401 : 'SI' WTAB.'IPLAVI' ; 402 : estim.'VARIABLES_INTERNES' = TT.'VARF'; 403 : estim.'DEFORMATIONS_INELASTIQUES' = TT.'DFPF'; 404 : estim.'DEFORMATIONS' = TT.'DEFF'; 405 : 'FINSI' ; 406 : 'SI' WTAB.'GRANDS_DEPLACEMENTS' ; 407 : estim.'FOR' = TT.'FOR' ; 408 : 'FINSI' ; 409 : 'SI' WTAB . 'DYNAMIQUE' ; 410 : estim.'VITESSES' = TT.'VITI' ; 411 : estim.'ACCELERATIONS' = TT.'ACCEI' ; 412 : 'FINSI'; 413 : 'SI' WTAB .'ITCAR'; 414 : estim.'CARA_ACTU' = TT.'CARA' ; 415 : 'FINSI'; 416 : *** Reevaluation des données du calcul dépendant de la mecanique 417 : 'SI' WTAB.'PROCEDURE_REAC_MECA' ; 418 : REEV_MEC PRECED 1 ; 419 : 'FINSI' ; 420 : 421 : 'FINSI'; 422 : 423 : *################### fin du calcul d'un pas mecanique ################ 424 : * 425 : *** 426 : *** Test de la convergence mecanique thermique 427 : *** 428 : 'SI' WTAB.'CONVERGENCE_MEC_THE' ; 429 : * je cherche la convergence thermo-mecanique : je dois au moins 430 : * calculer deux fois mon probleme 431 : 'SI' (I_BOTH > 1) ; 432 : * Test sur toutes les composantes (notamment, si DIFFUSION) 433 : CHT1 = WTAB . 'THER_COURANT' ; 434 : DUABS2 = 'ABS' (WTAB . 'THER_COURANTP' - CHT1) ; 435 : CRICOH1 = 0. ; 436 : NBINCO1 = 'DIME' WTAB . 'INCO_TOT' ; 437 : 'REPE' BINCO1 NBINCO1 ; 438 : LINCOI1 = 'MOTS' ('EXTR' WTAB . 'INCO_TOT' &BINCO1) ; 439 : MDUABSI1 = 'MAXI' DUABS2 'AVEC' LINCOI1 ; 440 : NORMI1 = 'MAXI' 'ABS' CHT1 'AVEC' LINCOI1 ; 441 : 'SI' (NORMI1 '<EG' (1.E-14 * MDUABSI1)) ; 442 : NORMI1 = 1. ; 443 : 'FINS' ; 444 : CRICOHI1 = MDUABSI1 / NORMI1 ; 445 : 'SI' (CRICOHI1 '>' CRICOH1) ; 446 : CRICOH1 = CRICOHI1 ; 447 : 'FINS' ; 448 : 'FIN' BINCO1 ; 449 : WTAB.'CONV_THMEC' = CRICOH1 '<' (WTAB . 'CRITERE_COHERENCE') ; 450 : * Fin de boucle Si ne converge Pas 451 : 'SI'('NON' WTAB.'CONV_THMEC') ; 452 : 'SI' (I_BOTH >EG WTAB.'BOU_METH'); 453 : 'MESS' 'PAS DE COHERENCE TROUVEE MECANIQUE THERMIQUE' ; 454 : 'ERREUR' 999; 455 : 'FINSI' ; 456 : 'FINSI' ; 457 : 'SINON' ; 458 : * je suis sur la premiere boucle de convergence thermomecanique 459 : WTAB.'CONV_THMEC' = FAUX ; 460 : 'FINSI' ; 461 : * THER_COURANTPrecedent dans WTAB pour test CONVERGENCE_MEC_THE 462 : WTAB . 'THER_COURANTP' = WTAB . 'THER_COURANT' ; 463 : 'SINON' ; 464 : * ici je ne cherche pas la convergence thermomecanique 465 : WTAB.'CONV_THMEC' = VRAI ; 466 : 'FINSI' ; 467 : 468 : 'SI' (WTAB.'CONV_THMEC') ; 469 : 'QUITTER' BO_BOTH ; 470 : 'FINSI' ; 471 : 472 : 'SI' ('NEG' ('TYPE' GE0_DEB) 'MOT') ; 473 : FORME GE0_DEB; 474 : 'FINSI' ; 475 : 476 : 'FIN' BO_BOTH ; 477 : 478 : *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 479 : *++++++++++++++++ fin de boucle interne de convergence mec_ther ++++++++ 480 : *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 481 : 482 : *--------------- Préparation du pas suivant ------------------------ 483 : *---------------- pour la thermique ------------------------------- 484 : 'SI' WTAB.'FOR_THER'; 485 : *Avant WTAB.'TET2' = CHTER.'INITIAL(2)' ; 486 : WTAB.'TET2' = estim.'TEMPERATURES' ; 487 : WTAB.'TET1'=WTAB.'TET2'; 488 : 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'NONLINEAIRE'); 489 : 'SI' WTAB.'RAYO' ; 490 : WTAB.'RAYONNEMENT' = CHTER.'RAYONNEMENT' ; 491 : 'FINSI' ; 492 : 'SI' ('NEG' WTAB.'RIBLO_T' 'INCONNU'); 493 : WTAB.'RIBLO_T' = CHTER.'RIBLO_T' ; 494 : WTAB.'LISEA_T' = CHTER.'LISEA_T' ; 495 : 'FINSI' ; 496 : 'SI' WTAB.'PHASE' ; 497 : WTAB.'PROPPHAS' = CHTER.'PROPPHAS' ; 498 : 'FINSI' ; 499 : 'FINSI' ; 500 : 'SI' ('EGA' WTAB.'PROCEDURE_THERMIQUE' 'DUPONT'); 501 : WTAB.'TET0' = WTAB.'TET1'; 502 : WTAB.'VIEUXPAS' = WTAB.'NOUV_PAS'; 503 : WTAB.'RELAXATION_DUPONT' = CHTER.'RELAXATION_DUPONT'; 504 : 'SI' WTAB.'RAYO' ; 505 : WTAB.'RAYONNEMENT' = CHTER.'RAYONNEMENT' ; 506 : 'FINSI' ; 507 : 'SI' ('EXISTE' CHTER 'INITIAL(1)') ; 508 : WTAB.'TET1' = CHTER.'INITIAL(1)'; 509 : 'FINSI' ; 510 : 'FINSI'; 511 : 'FINSI' ; 512 : 513 : * SP DIFF : 514 : *------------- preparation pas suivant pour la diffusion -------------* 515 : 'SI' WTAB.'FOR_DIFF'; 516 : WTAB.'CO2' = estim.'CONCENTRATIONS' ; 517 : 'FINSI' ; 518 : 519 : *------------ préparation pas suivant pour la mecanique -------------* 520 : 'SI' WTAB.'FOR_MECA' ; 521 : 'SI' ('EXISTE' TT 'SECOND_MEMBRE'); 522 : WTAB . 'SECOND_MEMBRE' = TT . 'SECOND_MEMBRE' ; 523 : 'FINSI' ; 524 : 'SI' ('EXISTE' TT 'SUCCES'); 525 : WTAB . 'SUCCES' = TT . 'SUCCES' ; 526 : 'FINSI' ; 527 : 'SI' ('EXISTE' TT 'AUTOCOEF'); 528 : WTAB . 'AUTOCOEF' = TT . 'AUTOCOEF' ; 529 : 'FINSI' ; 530 : 'SI' ('EXISTE' TT 'AUTOREDU'); 531 : WTAB . 'AUTOREDU' = TT . 'AUTOREDU' ; 532 : 'FINSI' ; 533 : 'SI' ('EXISTE' TT 'AUTORED1'); 534 : WTAB . 'AUTORED1' = TT . 'AUTORED1' ; 535 : 'FINSI' ; 536 : 'SI' ('EXISTE' TT 'RIBLO_M'); 537 : WTAB . 'RIBLO_M' = TT . 'RIBLO_M' ; 538 : WTAB . 'LISEA_M' = TT . 'LISEA_M' ; 539 : 'FINSI' ; 540 : 'SI' ('EXISTE' TT 'INCREMENT'); 541 : WTAB . 'INCREMENT' = TT . 'INCREMENT' ; 542 : 'FINSI' ; 543 : 'SI' ('EXISTE' TT 'INITEMPS'); 544 : WTAB . 'INITEMPS' = TT . 'INITEMPS' ; 545 : 'FINSI' ; 546 : 'SI' ('EXISTE' TT 'DT'); 547 : WTAB . 'DT' = TT . 'DT' ; 548 : 'FINSI' ; 549 : 'SI' ('EXISTE' TT 'NBPLAS'); 550 : WTAB . 'NBPLAS' = TT . 'NBPLAS' ; 551 : 'FINSI' ; 552 : 'SI' ('EXISTE' TT 'NOMBRE_ITERATIONS'); 553 : WTAB . 'NOMBRE_ITERATIONS' = TT . 'NOMBRE_ITERATIONS' ; 554 : 'FINSI' ; 555 : 'SI' ('EXISTE' TT 'FFROT'); 556 : WTAB . 'FFROT' = TT . 'FFROT' ; 557 : 'FINSI' ; 558 : 'SI' ('EXISTE' TT 'RESIDU'); 559 : WTAB . 'RESIDU' = TT . 'RESIDU' ; 560 : 'FINSI' ; 561 : 'SI' ('EXISTE' TT 'FNONL'); 562 : WTAB . 'FNONL' = TT . 'FNONL' ; 563 : 'FINSI' ; 564 : 'SI' ('EXISTE' TT 'DTPREC'); 565 : WTAB . 'DTPREC' = TT . 'DTPREC' ; 566 : 'FINSI' ; 567 : * Modification de WTAB.'TET2' suite a appel a UNPAS (?) 568 : 'SI' ('EXISTE' TT 'TET2'); 569 : WTAB . 'TET2' = TT . 'TET2' ; 570 : 'FINSI' ; 571 : 'SI' ('EXISTE' TT 'XDENO'); 572 : WTAB . 'XDENO' = TT . 'XDENO' ; 573 : 'FINSI' ; 574 : 'SI' ('EXISTE' TT 'XDENOM'); 575 : WTAB . 'XDENOM' = TT . 'XDENOM' ; 576 : 'FINSI' ; 577 : 'SI' ('EXISTE' TT 'LASTKTAN'); 578 : WTAB . 'LASTKTAN' = TT . 'LASTKTAN' ; 579 : 'FINSI' ; 580 : 'SI' ('EXISTE' TT 'DFGRAD'); 581 : WTAB . 'DFGRAD'= TT .'DFGRAD'; 582 : 'FINSI' ; 583 : 'SI' ('EXIS' TT 'ETHER2'); 584 : WTAB.'ETHER1'= TT.'ETHER2'; 585 : WTAB.'ETHER2'= TT.'ETHER2'; 586 : 'FINSI'; 587 : 'SI' ('EXIS' TT 'MSRTHER2'); 588 : WTAB.'MSRTHER1'= TT.'MSRTHER2'; 589 : WTAB.'MSRTHER2'= TT.'MSRTHER2'; 590 : 'FINSI'; 591 : 'SI' ('EXIS' TT 'DEFOR2'); 592 : WTAB.'DEFOR1'= TT.'DEFOR2'; 593 : WTAB.'DEFOR2'= TT.'DEFOR2'; 594 : 'FINSI'; 595 : 'SI'('EXIS' TT 'ETAT2'); 596 : WTAB.'ETAT1'= TT.'ETAT2'; 597 : 'FINSI'; 598 : 'SI'('EXIS' TT 'MAT2'); 599 : WTAB.'MAT1'=TT.'MAT2'; 600 : WTAB.'MAT2'=TT.'MAT2'; 601 : 'FINSI'; 602 : 603 : * fin des reactualisations. 604 : *--------------------------- deplacement ------------------------------ 605 : TT.'DEPTOT' = estim.'DEPLACEMENTS' ; 606 : *-------------------- forces de reaction ------------------------------ 607 : TT.'REAC'= 'REAC' TT.'DEPTOT' WTAB.'CLIM'; 608 : estim.'REACTIONS' = TT.'REAC' ; 609 : *------------------ deformation d'origine thermique ------------------ 610 : 'SI' WTAB.'CHAR_THE'; 611 : WTAB.'ETHER2' = TT.'ETHER2'; 612 : 'SI' WTAB.'POR1' ; 613 : WTAB.'MSRTHER2' = TT.'MSRTHER2'; 614 : 'FINSI'; 615 : 'FINSI'; 616 : *------- en dynamique : vitesse, forces de reactions, operateur ------- 617 : 618 : 'SI' WTAB . 'DYNAMIQUE' ; 619 : 'SI' WTAB . 'LIAISON_PERSISTANTE' ; 620 : * corection des vitesses pour avoir des vitesses relatives nulles 621 : * aux points qui sont en contact 622 : TT.'VITI' = TT.'VITI' + TT.'VAUX' ; 623 : 'SINON' ; 624 : * forces d'acceleration et d'amortissement à la fin du pas * 625 : WTAB.'FREA1' = TT.'FOPL' - TT.'REAC'; 626 : * en cas d'appuis unilateraux avec choc elastique essai de corriger 627 : * les vitesses fournies par le schéma 628 : 629 : TT.'VITI'= VITEUNIL TT.'ZRAIDV' WTAB.'MASSE' TT.'VITI' 630 : tt.'DEPT' DEP0 WTAB.'DT' WTAB.'SECOND_MEMBRE' WTAB; 631 : 'SI' ( 'EXIS' WTAB 'RATE_VITEUNIL'); 632 : 'ERREUR' 'Probleme dans VITEUNIL' ; 'FINSI'; 633 : 'FINSI' ; 634 : 'SI' ( 'NEG' WTAB.'REAPREC' 'INCONNU'); 635 : 'SI' ('EGA' ('TYPE' (EXTR TT.'REAC' 'MAIL')) 'MAILLAGE'); 636 : reacdif='REDU' WTAB.'REAPREC' (EXTR TT.'REAC' 'MAIL'); 637 : TT.'REAC'= TT.'REAC' - REACDIF; 638 : 'FINSI' ; 639 : WTAB.'REAPREC'=TT.'REAC'; 640 : 'SINON'; 641 : WTAB . 'REAPREC'= TT.'REAC'; 642 : 'FINSI'; 643 : estim.'VITESSES' = TT.'VITI' ; 644 : estim.'REACTIONS' = TT.'REAC' ; 645 : 'FINSI'; 646 : 647 : *---------- en consolidation : operateur ------------------------------ 648 : 649 : 'SI' WTAB . 'CONSOLIDATION' ; 650 : WTAB.'OPERATEUR' = ROP; 651 : 'FINSI'; 652 : 653 : *-------------------------- configuration ----------------------------- 654 : 655 : 'SI' WTAB.'GRANDS_DEPLACEMENTS' ; 656 : WTAB.'RECALCUL'=VRAI;GE0_DEB = TT.'FOR' ; 657 : 'SI' WTAB.'ITCAR' ; 658 : WTAB.'CARA' = TT.'CARA' ; 659 : 'FINSI' ; 660 : 'FINSI'; 661 : 'FORM' WTAB.'FOR0'; 662 : 663 : *********************************************************************** 664 : 'SI' ('ET' (WTAB.'FEFP_FORMULATION') 665 : (WTAB.'UPDATE_LAGRANGIAN')) ; 666 : * tc 'SI' ( 'NEG' WTAB.'FOR' 'INCONNU'); DETR GEOM1; 'FINSI'; 667 : GE0_DEB = TT.'FOR' ; WTAB.'RECALCUL'=VRAI; 668 : 'FINSI'; 669 : ************************************************************************ 670 : 671 : *--------------------- destruction de l operateur ---------------------- 672 : 673 : 'SI' (WTAB . 'RECADET') ; 674 : * 'DETR' RH 'ELEM'; 675 : 'OUBLIER' ROP; 676 : 'FINSI'; 677 : 678 : *----------------------------- temps initial -------------------------- 679 : DT2 =( TI - TEMP0)/10000.; 680 : 'SI' (WTAB . 'AUTOMATIQUE' 'OU' ('NON' WTAB.CONV)); 681 : TEMP0 = ( TI - TEMP0) * WTAB.'AUTOCOEF' + TEMP0; 682 : 'MESS' ' Temps effectivement calcule et non convergé : ' TEMP0; 683 : WTAB.'TEMPS0' = TEMP0; 684 : 'SINON'; 685 : TEMP0=TI; 686 : WTAB.'TEMPS0' = TEMP0; 687 : 'FINSI'; 688 : 689 : *----------------- Appel a une procedure personnelle ------------------- 690 : 691 : 'SI' (WTAB.'PROCEDURE_PERSO1'); 692 : PRECED.'PERSO1_APPEL' = 2 ; 693 : PERSO1 PRECED; 694 : 'SI' ('EXIS' PRECED 'ARRET') ; 695 : WTAB . 'ARRET' = PRECED . 'ARRET' ; 696 : 'FINSI' ; 697 : TEMP0 = WTAB.'TEMPS0' ; 698 : 'FINSI'; 699 : *----------------- On redéfinit WTAB.'CHARGEMENT_I' ------------------ 700 : 'SI' WTAB.'CONVERGENCE_MEC_THE' ; 701 : WTAB.'CHARGEMENT_I' = WTAB.'CHARGEMENT' ; 702 : 'FINSI'; 703 : 'FINSI'; 704 : 705 : *++++++++++++++++++ fin preparation pas suivant mecanique +++++ 706 : *################## Sauvegarde ############################### 707 : 'SI' ('NON' WTAB.'FOR_MECA') ; 708 : DT2 =( TI - TEMP0)/10000.; 709 : TEMP0=TI; 710 : WTAB.'TEMPS0' = TEMP0; 711 : TT = 'TABLE' ; 712 : 'FINSI'; 713 : * pour ne pas sauvegarder la matrice de raideur si on doit la recalculer 714 : 'SI' ('EXIS' WTAB 'RRRR') ; 715 : 'SI' WTAB.'RECARI'; 716 : WTAB2= 'ENLEVER' WTAB 'RRRR'; 717 : PRECED .'WTABLE'= WTAB2; 718 : WTAB=WTAB2; 719 : 'SI' ( 'EXIS' estim 'FOR') ; 720 : estim2= 'ENLEVER' estim 'FOR'; 721 : estim= estim2; PRECED.'ESTIMATION'=estim; 722 : 'FINSI'; 723 : 'FINSI'; 'FINSI'; 724 : *-- remplissage de la table de continuation et des tables de resultats 725 : *-- s'il faut garder les résultats, sauvegarde incrementale et 726 : *-- fantomisation si économique 727 : ISAUV = PAS_RESU TEMP0 iauto PRECED TT ; 728 : ******************************************* 729 : ***** cas du pilotage automatique ******* 730 : ******************************************* 731 : 732 : 'SI' WTAB . 'AUTOMATIQUE'; IAUTO=IAUTO+1; 733 : 'SI' ((WTAB . 'AUTOCOEF' EGA 0.9999999D0) 'OU' 734 : (TEMP0 '>EG' TI)) ; 735 : TEMP0=TI; 736 : 'MESS' ' Objectif atteint '; 737 : 'MESS' ' '; 738 : WTAB.'AUTODEUX' = FAUX ; 739 : WTAB.AUTORED1 = 0 ; 740 : WTAB.AUTOREDU = 1. ; 741 : IAUTO=1; 742 : 'SINON'; 743 : 'MESS' ' Objectif non atteint: On recommence'; 744 : 'MESS' ' '; 745 : 'SI' ( IAUTO >EG WTAB.'AUTOPAS'); 746 : 'ERREUR' 1000; 747 : * 'MESS' 'Pilotage non convergé après ' IAUTO ' pas.'; 748 : 'FINSI'; 749 : WTAB.'AUTODEUX'=VRAI;ICHG=ICHG - 1; 750 : 'FINSI'; 751 : 'FINSI'; 752 : * 753 : 'SI'(WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER'); 754 : WTAB.'TET1'=WTAB.'TET2'; 755 : 'SI' WTAB.'FOR_MECA';WTAB.'ETHER1'=WTAB.'ETHER2';'FINSI'; 756 : 'SI' WTAB.'POR1'; WTAB.'MSRTHER1'=WTAB.'MSRTHER2';'FINSI'; 757 : 'FINSI'; 758 : 'SI' WTAB.'CHAR_DEFI' ; WTAB.'DEFOR1'=WTAB.'DEFOR2';'FINSI'; 759 : 'SI' WTAB.'FOR_DIFF' ; WTAB.'CO1'=WTAB.'CO2'; 'FINSI' ; 760 : ************************************************************************ 761 : ****** cas de la convergence forcee 762 : ************************************************************************ 763 : 'SI' WTAB.'PAS_AJUSTE'; 764 : 'SI' ((TI < TIV) 'OU' ('NON' WTAB.'CONV')); ICHG=ICHG-1;'FINSI'; 765 : 'FINSI'; 766 : 'SI' WTAB.'ARRET'; 767 : 'QUITTER' BEXTERN; 768 : 'FINSI'; 769 : ************************************************************************ 770 : *************** FIN DE LA BOUCLE SUR LES PAS DE TEMPS ****************** 771 : ************************************************************************ 772 : 'FIN' BEXTERN; 773 : ************************************************************************ 774 : 775 : 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU'); 776 : WTAB.'AMORTISSEMENT' = TOTO ; 777 : 'FINSI'; 778 : 779 : 'SI' ('NEG' ('TYPE' GE0_DEB) 'MOT') ; 780 : 'DETR' GE0_DEB; 781 : 'FINSI' ; 782 : 783 : * on tue WTAB.MAT1 s'il existe car il peut etre tres gourmand en place 784 : WTAB.'MAT1' = 'MOT' 'INCONNU'; 785 : 'MESS' ' '; 786 : 'MESS' 787 : '------------------- FIN DE LA PROCEDURE PASAPAS ---------------------'; 788 : 'SAUTER' 1 'LIGNE'; 789 : * 790 : ************************************************************************ 791 : * 792 : 'SI' ('EXIS' WTAB 'RRRR') ; 793 : * pou forcer le calcul de la rigidite si on rappele pasapas 794 : WTAB1= 'ENLEVER' WTAB 'RRRR'; 795 : PRECED .'WTABLE'= WTAB1; 796 : 'FINSI'; 797 : 'FINPROC' PRECED ; 798 : 799 : 800 : 801 : 802 : 803 : 804 : 805 : 806 :
© Cast3M 2003 - All rights reserved.
Disclaimer