1 : * DREXUS PROCEDUR JC220346 12/09/12 21:15:06 7501 2 : 'DEBPROC' DREXUS ETAB*'TABLE' ; 3 : * 4 : *---------------------------------------------------------------------------- 5 : * 6 : * PROCEDURE DREXUS : 7 : * 8 : * CALCUL DYNAMIQUE PAS A PAS AVEC UN ALGORITHME EXPLICITE 9 : * 10 : * EN ENTREE : 11 : * --------- 12 : * 13 : * ETAB TABLE CONTENANT : 14 : * 15 : * ETAB.'VITESSE_INITIALE' : vitesse initiale (champoint) 16 : * ETAB.'CHARGEMENT' : chargement 17 : * ETAB.'LIAISONS' : liaisons (rigidite) 18 : * ETAB.'IMPACT' : données pour l'impact (table) 19 : * ETAB.'MODELE' : objet modele de la structure 20 : * ETAB.'CARACTERISTIQUES' : caractéristiques associées au modele 21 : * ETAB.'PAS_TEMPS' : pas de temps (flottant) 22 : * ETAB.'COEFF_STABILITE' : coeff multi pdt (pas automatique) (flottant) 23 : * ETAB.'NPASMAX' : nbre de pas de temps maximal (entier) 24 : * ETAB.'TEMPS_SORTIE' : liste des temps à stocker (listenti) 25 : * ETAB.'FREQUENCE_SORTIE' : fréquence de sortie (entier) 26 : * ETAB.'TEMPS_INITIAL' : temps initial (flottant) (0. par defaut) 27 : * ETAB.'GRANDES_DEFORMATIONS' : prise en compte des gdes def. (logique) 28 : * ETAB.'FREQ_MENAGE' : fréquence de menage (entier) (=50 p. def) 29 : * ETAB.'AMORTISSEMENT' : matrice d'amortissement 30 : * 31 : * EN SORTIE : 32 : * --------- 33 : * 34 : * INDICE N : numero de l'enregistrement 35 : * 36 : * ETAB.'NPAS'.N : no du pas (entier) 37 : * ETAB.'TEMPS'.N : temps (reel) 38 : * ETAB.'DEPLACEMENTS'.N : deplacement (champoint) 39 : * ETAB.'VITESSES'.N : vitesse (champoint) 40 : * ETAB.'ACCELERATIONS'.N : accelerations (champoint) 41 : * ETAB.'FORCES_EXTERIEURES'.N : forces exterieures (champoint) 42 : * ETAB.'CONTRAINTES'.N : contraintes (chamelem) 43 : * ETAB.'VARIABLES_INTERNES'.N : variables d'ecrouissage (chamelem) 44 : * 45 : *---------------------------------------------------------------------------- 46 : * 47 : *-- presentation 48 : * 49 : 'SAUT' 1 lignes ; 50 : 'MESS' ' D. R. E. X. U. S.' ; 51 : 'MESS' ' ' ; 52 : 'MESS' ' Dynamique Rapide Explicite , algorithme pleXUS ' ; 53 : 'MESS' ' ' ; 54 : 'MESS' ' _____________________________________________ ' ; 55 : 'MESS' ' _________ Mens Agitat Molem __________ ' ; 56 : 'MESS' ' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ' ; 57 : 'SAUT' 1 lignes ; 58 : 'MESS' ' Options du calcul : ' ; 59 : 'MESS' ' ' ; 60 : * 61 : *---------------------------------------------------------------------------- 62 : * VERIFICATIONS DES ENTREES 63 : *---------------------------------------------------------------------------- 64 : * 65 : *-- verification du modèle de comportement 66 : * 67 : 'SI' ('NON' ('EXISTE' ETAB 'MODELE')) ; 68 : 'ERREUR' 'Il manque la donnée du modèle.' ; 69 : 'SINON' ; 70 : MO_TOT = ETAB.'MODELE' ; 71 : TYP1 = 'TYPE' MO_TOT ; 72 : 'SI' ('NEG' TYP1 'MMODEL ') ; 73 : 'ERREUR' 'Le type du modèle est incorrect' ; 74 : 'FINSI' ; 75 : 'FINSI' ; 76 : * 77 : *-- non-linearités matériaux : plasticité 78 : * 79 : 'SI' ('EXISTE' MO_TOT 'MATE' 'PLASTIQUE') ; 80 : PPLAS = VRAI ; 81 : 'MESS' ' - Matériau : loi de comportement plastique' ; 82 : 'SINON' ; 83 : PPLAS = FAUX ; 84 : 'MESS' ' - Matériau : loi de comportement élastique' ; 85 : 'FINSI' ; 86 : * 87 : *-- non-linearités géométriques : grandes déformations 88 : * 89 : 'SI' ( 'EXISTE' ETAB 'GRANDES_DEFORMATIONS' ) ; 90 : CANLGEO = ETAB . 'GRANDES_DEFORMATIONS' ; 91 : 'SINON' ; 92 : CANLGEO = FAUX ; 93 : 'MESS' ' - Hypothèse des petits déplacements' ; 94 : 'FINSI' ; 95 : 'SI' CANLGEO ; 96 : 'MESS' ' - Grandes déformations modélisées' ; 97 : 'FINSI' ; 98 : * 99 : *-- y a t'il de l'amortissement 100 : * 101 : CAMOR = FAUX ; 102 : 'SI' ('EXISTE' ETAB 'AMORTISSEMENT') ; 103 : 'MESS' ' - Prise en compte de l amortissement' ; 104 : KAMOR = ETAB . 'AMORTISSEMENT'; 105 : CAMOR = VRAI ; 106 : 'FINSI' ; 107 : * 108 : *-- verification des caractéristiques matériaux 109 : * 110 : 'SI' ('NON' ('EXISTE' ETAB 'CARACTERISTIQUES')) ; 111 : 'ERREUR' 'Il manque la donnée du materiau.' ; 112 : 'SINON' ; 113 : MA = ETAB.'CARACTERISTIQUES' ; 114 : TYP1 = 'TYPE' MA ; 115 : 'SI' ('NEG' TYP1 'MCHAML ') ; 116 : 'ERREUR' 'Le type du champ de materiau est incorrect' ; 117 : 'FINSI' ; 118 : MA_TOT = 'REDU' MA MO_TOT ; 119 : 'FINSI' ; 120 : * 121 : *-- définition du temps initial 122 : * 123 : 'SI' ( 'EXISTE' ETAB 'TEMPS_INITIAL' ) ; 124 : T_INIT = ETAB. 'TEMPS_INITIAL' ; 125 : 'SINON' ; 126 : T_INIT = 0. ; 127 : 'FINSI' ; 128 : 'MESS' ' - Temps initial : ' T_INIT ; 129 : * 130 : *-- définition des impacts 131 : 'SI' ('EXISTE' ETAB 'IMPACT') ; 132 : T_IMPA = ETAB.'IMPACT' ; 133 : 'SI' ('EXISTE' T_IMPA 'NEZ') ; 134 : 'MESS' ' - Impact : point-ligne ' ; 135 : 'SI' ('NON' ('EXISTE' T_IMPA 'MASSE')) ; 136 : 'ERREUR' 'Entrez la masse du projectile' ; 137 : 'FINSI' ; 138 : 'SINON' ; 139 : 'MESS' ' - Impact : ligne-ligne ' ; 140 : 'FINSI' ; 141 : 'FINSI' ; 142 : 143 : * 144 : * 145 : *---------------------------------------------------------------------------- 146 : * INITIALISATIONS 147 : *---------------------------------------------------------------------------- 148 : * 149 : *-- configuration initiale 150 : * 151 : CATOUCH = FAUX ; 152 : G_ZERO = 'FORM'; 153 : * 154 : *-- calcul de la matrice masse 155 : * 156 : T_MAS = 'LUMP' MO_TOT MA_TOT ; 157 : MAIL1 = 'EXTR' MO_TOT 'MAIL' ; 158 : 'SI' ('EXISTE' ETAB 'IMPACT') ; 159 : 'SI' ('EXISTE' T_IMPA 'NEZ') ; 160 : PROJ = ETAB.'IMPACT' . 'ESCLAVE' ; 161 : MAIL1 = MAIL1 'ET' PROJ ; 162 : MASS_P = MASS DEPL ETAB.'IMPACT' . 'MASSE' PROJ; 163 : T_MAS = T_MAS 'ET' MASS_P ; 164 : 'FINSI' ; 165 : 'FINSI' ; 166 : CHP1 = 'MANU' 'CHPO' MAIL1 9 167 : 'UX' 1. 'UY' 1. 'UZ' 1. 'UR' 1. 'UT' 1. 168 : 'RX' 1. 'RY' 1. 'RZ' 1. 'RT' 1. ; 169 : CHPMAS = CHP1 '*' T_MAS ; 170 : CHPM1 = 'NOMC' CHPMAS 171 : ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT') 172 : ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT') 173 : 'NATU' 'DISCRET' ; 174 : CHPM_T = 'INVE' CHPM1 ; 175 : * 176 : *-- creation des chamelems de contrainte 177 : * 178 : 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ; 179 : IDIM = 'DIME' ETAB.'TEMPS' ; 180 : SIGMA_T = 'COPIER' (ETAB.'CONTRAINTES' . (IDIM-1)) ; 181 : SINON ; 182 : SIGMA_T = 'ZERO' MO_TOT 'CONTRAIN' ; 183 : 'FINSI' ; 184 : 'SI' (PPLAS) ; 185 : 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ; 186 : IDIM = 'DIME' ETAB.'TEMPS' ; 187 : D_INELAS = 'COPIER' ( ETAB . 'DEFORMATIONS_INELASTIQUES' 188 : .( IDIM - 1 ) ); 189 : VARI_T = 'COPIER' (ETAB.'VARIABLES_INTERNES' . (IDIM-1)) ; 190 : SINON ; 191 : D_INELAS = 'ZERO' MO_TOT 'DEFORMAT' ; 192 : VARI_T = 'ZERO' MO_TOT 'VARINTER' ; 193 : 'FINSI' ; 194 : 'FINSI' ; 195 : * 196 : *-- champoints de deplacement et vitesse au pas initial 197 : * 198 : 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ; 199 : IDIM = 'DIME' ETAB.'TEMPS' ; 200 : DEPLA_T = 'COPIER' (ETAB.'DEPLACEMENTS' . (IDIM-1)) ; 201 : VITES_T = 'COPIER' (ETAB.'VITESSES' . (IDIM-1)) ; 202 : SINON ; 203 : CHPZERO1 = 'ZERO' MO_TOT 'DEPLACEM' ; 204 : DEPLA_T = 'CHANGER' 'CHPO' MO_TOT CHPZERO1 ; 205 : 'SI' ( 'EXISTE' ETAB 'VITESSE_INITIALE' ) ; 206 : VITES_T = 'COPIER' (ETAB.'VITESSE_INITIALE') ; 207 : 'SINON'; 208 : VITES_T = 'CHANGER' 'CHPO' MO_TOT CHPZERO1 ; 209 : 'FINSI' ; 210 : 'MESS' ' - Vitesse initiale : ' ('MAXI' VITES_T) ; 211 : 'FINSI' ; 212 : * 213 : *-- conditions d'impact 214 : * 215 : 'SI' ('EXISTE' ETAB 'IMPACT') ; 216 : P_MAIT = ETAB . 'IMPACT' . 'MAITRE' ; 217 : P_ESCL = ETAB . 'IMPACT' . 'ESCLAVE' ; 218 : CONT_T = 'IMPO' 'IMPA' 'MAIT' P_MAIT 'ESCL' P_ESCL ; 219 : 'FINSI' ; 220 : * 221 : *-- calcul de la matrice de liaisons 222 : * 223 : 'SI' ( 'EXISTE' ETAB 'LIAISONS' ) ; 224 : C_LIAI = ETAB.'LIAISONS' ; 225 : MAIL2 = 'EXTR' C_LIAI 'MAIL' 'MULT' ; 226 : C_TOT = C_LIAI ; 227 : H0 = 'CMCT' C_TOT CHPM_T ; 228 : CABLOC = VRAI ; 229 : H = H0 ; 230 : 'SINON' ; 231 : CABLOC = FAUX ; 232 : 'MESS' ' - Pas de conditions aux limites' ; 233 : 'FINSI' ; 234 : * 235 : *-- champoint forces exterieures au pas initial 236 : * 237 : AUX1 = 'ZERO' MO_TOT 'FORCES ' ; 238 : CHFORC1 = 'CHANGER' 'CHPO' MO_TOT AUX1 ; 239 : FINT_T = 'COPIER' CHFORC1 ; 240 : 'SI' ('EXISTE' ETAB 'CHARGEMENT') ; 241 : FEXT1 = 'TIRER' ETAB.'CHARGEMENT' T_INIT ; 242 : 'SI' CABLOC ; 243 : GAMASL = '*' 244 : CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT') 245 : FEXT1 ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT') 246 : ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT'); 247 : CGAMASL = (-1) '*' (C_LIAI '*' GAMASL) ; 248 : SECM_L = CGAMASL ; 249 : 'MESS' ' ' ; 250 : 'MESS' ' - Matrice de liaison initiale :' ; 251 : LAMBDA = 'RESOU' H0 SECM_L ; 252 : FEXT2 = 'REAC' C_TOT LAMBDA ; 253 : FEXT_T = FEXT1 + FEXT2 ; 254 : 'MESS' ' ' ; 255 : 'SINON' ; 256 : FEXT_T = FEXT1 ; 257 : 'FINSI' ; 258 : 'SINON' ; 259 : FEXT_T = 'COPIER' CHFORC1 ; 260 : 'FINSI' ; 261 : * 262 : *-- calcul de l'acceleration au pas initial 263 : * 264 : 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ; 265 : IDIM = 'DIME' ETAB.'TEMPS' ; 266 : ACCE_T = 'COPIER' (ETAB.'ACCELERATIONS'. (IDIM-1)) ; 267 : SINON ; 268 : ACCE_T = '*' 269 : CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT') 270 : FEXT_T ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT') 271 : ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT'); 272 : 'FINSI' ; 273 : * 274 : *-- determination du pas de temps initial dt1 275 : * 276 : 'SI' ( 'EXISTE' ETAB 'PAS_TEMPS' ) ; 277 : DTAUTO = FAUX ; 278 : DT1_T = ETAB.'PAS_TEMPS' ; 279 : 'MESS' ' - Pas de temps fixé : ' DT1_T ; 280 : 'SINON' ; 281 : DTAUTO = VRAI ; 282 : 'SI' ( 'EXISTE' ETAB 'COEFF_STABILITE' ) ; 283 : CSTA = ETAB . 'COEFF_STABILITE' ; 284 : 'SINON' ; 285 : CSTA = 0.5 ; 286 : 'FINSI' ; 287 : DT1_T = CSTA '*' ('MINI' ('CFL' MO_TOT MA_TOT)) ; 288 : 'MESS' ' - Pas de temps automatique : ' DT1_T ; 289 : 'FINSI' ; 290 : * 291 : *-- determination du nombre de pas de temps maximum 292 : * 293 : 'SI' ( 'EXISTE' ETAB 'NPASMAX' ) ; 294 : NMAX1 = 'ENTIER' ( ETAB.'NPASMAX') ; 295 : 'SINON' ; 296 : NMAX1 = 10000000 ; 297 : 'FINSI' ; 298 : 'MESS' ' - Nombre maximum de pas : ' nmax1 ; 299 : * 300 : *-- determination du nombre de sauvegardes 301 : * 302 : 'SI' ( 'EXISTE' ETAB 'FREQUENCE_SORTIE' ) ; 303 : FSORT = ETAB . 'FREQUENCE_SORTIE' ; 304 : MESS ' - Fréquence d enregistrement des résultats : ' FSORT ; 305 : STEMP1 = ('PROG' 0 'PAS' FSORT NMAX1) '*' DT1_T ; 306 : 'SINON'; 307 : 'SI' ( 'EXISTE' ETAB 'TEMPS_SORTIE' ) ; 308 : STEMP1 = ETAB . 'TEMPS_SORTIE'; 309 : 'SINON'; 310 : 'ERREUR' 'Definissez le temps ou la frequence de sortie' ; 311 : 'FINSI' ; 312 : 'FINSI' ; 313 : STEMP1 = 'ORDONNER' STEMP1 ; 314 : T_MAX = 'MAXI' STEMP1 ; 315 : MESS ' - Temps final : ' T_MAX ; 316 : ITEM = 0 ; 317 : 'REPETER' ETEM0 ; 318 : ITEM = ITEM + 1 ; 319 : T_SORT = 'EXTRAI' STEMP1 ITEM ; 320 : 'SI' ( T_SORT '>EG' T_INIT ) ; 321 : 'QUITTER' ETEM0 ; 322 : 'FINSI' ; 323 : 'FIN' ETEM0 ; 324 : * 325 : *- frequence pour le menage 326 : * 327 : JPAS = 0 ; 328 : FREQ_M = 50 ; 329 : 'SI' ( 'EXISTE' ETAB 'FREQ_MENAGE' ) ; 330 : FREQ_M = 'ENTIER' ( ETAB . 'FREQ_MENAGE' ) ; 331 : 'SI' ( FREQ_M 'EGA' 0 ) ; 332 : FREQ_M = 50 ; 333 : 'FINSI' ; 334 : 'FINSI' ; 335 : 'MESS' ' - Fréquence de ménage : ' FREQ_M 'pas' ; 336 : * 337 : *-- initialisation de la table de sortie 338 : * 339 : IPAS = 0 ; 340 : 'SAUT' 1 lignes ; 341 : 'MESS' '==== Début des calculs de la procédure DREXUS ====' ; 342 : 'SAUT' 1 lignes ; 343 : 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ; 344 : ISTOC = ('DIME' ETAB.'DEPLACEMENTS') - 1 ; 345 : 'SINON' ; 346 : ETAB.'NPAS' = 'TABLE' ; 347 : ETAB.'TEMPS' = 'TABLE' ; 348 : ETAB.'DEPLACEMENTS' = 'TABLE' ; 349 : ETAB.'VITESSES' = 'TABLE' ; 350 : ETAB.'ACCELERATIONS' = 'TABLE' ; 351 : ETAB.'FORCES_EXTERIEURES' = 'TABLE' ; 352 : ETAB.'CONTRAINTES' = 'TABLE' ; 353 : ETAB.'VARIABLES_INTERNES' = 'TABLE' ; 354 : ETAB.'DEFORMATIONS_INELASTIQUES' = 'TABLE' ; 355 : ISTOC = 0 ; 356 : 'SI' ( T_SORT 'EGA' T_INIT ) ; 357 : 'MESS' 'Enregistrement des résultats pour le temps' 358 : T_INIT 'pas n°' IPAS ; 359 : ETAB.'NPAS' . ISTOC = 0 ; 360 : ETAB.'TEMPS' . ISTOC = T_SORT; 361 : ETAB.'DEPLACEMENTS'. ISTOC = 'COPIER' DEPLA_T ; 362 : ETAB.'VITESSES' . ISTOC = 'COPIER' VITES_T ; 363 : ETAB.'ACCELERATIONS' . ISTOC = 'COPIER' ACCE_T ; 364 : ETAB.'FORCES_EXTERIEURES' . ISTOC = 'COPIER' FEXT_T ; 365 : ETAB.'CONTRAINTES' . ISTOC = 'COPIER' SIGMA_T ; 366 : 'SI' (PPLAS) ; 367 : ETAB.'VARIABLES_INTERNES' . ISTOC = 'COPIER' VARI_T ; 368 : ETAB.'DEFORMATIONS_INELASTIQUES'. ISTOC = 'COPIER' D_INELAS ; 369 : 'FINSI' ; 370 : ITEM=ITEM + 1 ; 371 : T_SORT = 'EXTRAI' STEMP1 ITEM ; 372 : 'FINSI' ; 373 : 'FINSI' ; 374 : * 375 : *-- définition du temps zero 376 : * 377 : T_0 = T_INIT ; 378 : * 379 : *---------------------------------------------------------------------------- 380 : * BOUCLE SUR LES PAS DE TEMPS 381 : *---------------------------------------------------------------------------- 382 : * 383 : 'REPETER' ETIPAS NMAX1 ; 384 : IPAS = IPAS + 1 ; 385 : T_1 = T_0 + DT1_T ; 386 : * 387 : *-- vitesse au pas n+1/2 388 : * 389 : DT1_DEMI = 0.5 * DT1_T ; 390 : V_DEMI = 'COLI' VITES_T 1.D0 ACCE_T DT1_DEMI ; 391 : * 392 : *-- deplacement au pas n+1 393 : * 394 : DU1 = DT1_T * V_DEMI ; 395 : DEPLA_T1 = DEPLA_T + DU1 ; 396 : 'DETR' DEPLA_T ; 397 : DEPLA_T = DEPLA_T1 ; 398 : * 399 : *-- calcul des forces internes au pas n+1 400 : * 401 : ZPREK = 1E-3; 402 : * 403 : * traitement des grandes déformations 404 : 'SI' CANLGEO ; 405 : ZDEP_1 = 0.5D0 * DU1 ; 406 : ZSIG0 = PICA MO_TOT SIGMA_T ZDEP_1 ; 407 : 'SI' PPLAS ; 408 : ZEPS0 = D_INELAS ; 409 : ZVAR0 = VARI_T ; 410 : * ici il faudra faire le transport des variables internes 411 : * et eventuellement des déformations plastiques 412 : 'FINSI' 413 : * 414 : * on calcule la deformation au demi pas de temps 415 : * il faut pour les poutres ,les tuyaux, les tuyaux fissures 416 : * et les linespring mettre à jour le matériau 417 : 'FORM' ZDEP_1 ; 418 : DEPST = 'EPSI' MO_TOT DU1 MA_TOT ; 419 : * 420 : 'SINON' ; 421 : * 422 : * en petits déplacements 423 : ZSIG0 = SIGMA_T; 424 : DEPST = 'EPSI' MO_TOT DU1 MA_TOT ; 425 : 'SI' PPLAS ; 426 : ZVAR0 = VARI_T ; 427 : ZEPS0 = D_INELAS ; 428 : 'FINSI' ; 429 : 'FINSI' ; 430 : * 431 : * calcul des contraintes 432 : 'SI' PPLAS ; 433 : SIGMA_T1 ZVARF ZDEPSPL = 'ECOULE' MO_TOT ZSIG0 ZVAR0 434 : DEPST MA_TOT ETAB ZPREK 'NOID' ; 435 : 436 : SIGMA_T0 = SIGMA_T ; 437 : SIGMA_T = SIGMA_T1 ; 438 : * 439 : * l'ecoulement se passe mal 440 : 'SI' ('NON' ETAB.'SUCCES') ; 441 : 'ERREUR' 'Pas de convergence dans l écoulement' ; 442 : 'FINSI' ; 443 : * 444 : 'SINON' ; 445 : DSIGT = 'ELAS' DEPST MO_TOT MA_TOT ; 446 : SIGMA_T1 = ZSIG0 + DSIGT ; 447 : SIGMA_T0 = SIGMA_T ; 448 : SIGMA_T = SIGMA_T1 ; 449 : 'DETR' DSIGT ; 450 : 'FINSI' ; 451 : 452 : * 453 : * transport des contraintes vers la configuration n+1 454 : 'SI' CANLGEO ; 455 : ZSIGF05 = SIGMA_T ; 456 : SIGMA_T = PICA MO_TOT ZSIGF05 ZDEP_1 ; 457 : * ici il faudra faire le transport des variables internes 458 : * et eventuellement des déformations plastiques 459 : * 460 : * passage à la configuration n+1 461 : 'FORM' ZDEP_1 ; 462 : 'DETR' ZDEP_1; 463 : 'FINSI' ; 464 : * 465 : * on determine les forces internes 466 : 'SI' CAMOR ; 467 : FINT_T1 = 'BSIGMA' MO_TOT SIGMA_T MA_TOT ; 468 : FINT_T2 = KAMOR '*' V_DEMI ; 469 : FINT_T = FINT_T1 + FINT_T2 ; 470 : 'DETR' FINT_T1 ; 'DETR' FINT_T2 ; 471 : 'SINON' ; 472 : 'DETR' FINT_T ; 473 : FINT_T = 'BSIGMA' MO_TOT SIGMA_T MA_TOT ; 474 : 'FINSI' ; 475 : 476 : * 477 : 'SI' PPLAS ; 478 : * 'DETR' VARI_T ; 479 : VARI_T = ZVARF; 480 : D_INELAS = ZEPS0 + ZDEPSPL ; 481 : * 'DETR' ZEPS0 ; 482 : * 'DETR' ZDEPSPL; 483 : 'FINSI'; 484 : * 485 : *-- calcul du pas de temps suivant dt2 486 : 'SI' DTAUTO ; 487 : 'SI' ('NON' CANLGEO) ; 488 : 'FORM' DU1 ; 489 : 'FINSI' ; 490 : DT2_T = CSTA '*' ('MINI' ('CFL' MO_TOT MA_TOT)) ; 491 : 'SINON' ; 492 : DT2_T = DT1_T ; 493 : 'FINSI' ; 494 : * 495 : *-- calcul des forces exterieures au pas n+1 496 : * 497 : * forces exterieures imposées 498 : 'SI' ('EXISTE' ETAB 'CHARGEMENT' ) ; 499 : FEXT1 = 'TIRER' ETAB.'CHARGEMENT' T_1 ; 500 : 'SINON'; 501 : FEXT1 = CHFORC1; 502 : 'FINSI'; 503 : * 504 : * conditions d'impact au pas n+1 505 : 'SI' ('EXISTE' ETAB 'IMPACT') ; 506 : 'SI' ('ET' ('NON' CANLGEO) ('NON' DTAUTO)); 507 : 'FORM' DU1 ; 508 : 'FINSI' ; 509 : 'SI' ('EXISTE' T_IMPA 'NEZ') ; 510 : FNEZ = ETAB.'IMPACT' . 'NEZ' ; 511 : LAR = ETAB.'IMPACT' . 'LARGEUR' ; 512 : VEC = ETAB.'IMPACT' . 'VECTEUR' ; 513 : 'SI' ('EGA' FNEZ 'CONE') ; 514 : ALP = ETAB.'IMPACT' . 'ANGLE' ; 515 : C_IMP = 'IMPO' 'IMPA' CONT_T FNEZ LAR 'ANGL' ALP 'VECT' VEC; 516 : 'SINON' ; 517 : C_IMP = 'IMPO' 'IMPA' CONT_T FNEZ LAR 'VECT' VEC ; 518 : 'FINSI' ; 519 : 'SINON' ; 520 : C_IMP = 'IMPO' 'IMPA' CONT_T ; 521 : 'FINSI' ; 522 : CATOUCH = 'EXISTE' C_IMP ; 523 : 'SI' CATOUCH ; 524 : DT_I = 2. '/' ( DT1_T '+' DT2_T ) ; 525 : SECM_I = DT_I '*' (C_IMP '*' V_DEMI) ; 526 : SECM_I = 'CHANGER' 'ATTRIBUT' SECM_I 'NATURE' 'DIFFUS' ; 527 : 'FINSI' ; 528 : 'FINSI' ; 529 : * 530 : * matrice de liaison au pas n+1 531 : 'SI' ('ET' CABLOC CATOUCH ) ; 532 : C_TOT = C_LIAI 'ET' C_IMP ; 533 : H = 'CMCT' C_TOT CHPM_T ; 534 : 'SINON' ; 535 : 'SI' CABLOC ; 536 : C_TOT = C_LIAI ; 537 : H = H0 ; 538 : 'FINSI' ; 539 : 'SI' CATOUCH ; 540 : C_TOT = C_IMP ; 541 : H = 'CMCT' C_TOT CHPM_T ; 542 : 'FINSI' ; 543 : 'FINSI' ; 544 : * 545 : * multiplicateurs de Lagrange au pas n+1 546 : 'SI' ('OU' CABLOC CATOUCH ) ; 547 : AUX1 = FEXT1 - FINT_T ; 548 : GAMASL = '*' 549 : CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT') 550 : AUX1 ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT') 551 : ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT'); 552 : CGAMASL = C_TOT '*' GAMASL ; 553 : 'SI' CATOUCH ; 554 : SECM_T = CGAMASL '+' SECM_I ; 555 : 'SINON' ; 556 : SECM_T = CGAMASL ; 557 : 'FINSI' ; 558 : LAMBDA = 'RESOU' H SECM_T ; 559 : * 560 : * rupture de contact 561 : 'SI' CATOUCH ; 562 : 'SI' CABLOC ; 563 : LAMB_L = 'REDU' LAMBDA MAIL2 ; 564 : LAMB_I = LAMBDA '-' LAMB_L ; 565 : 'SINON'; 566 : LAMB_I = LAMBDA ; 567 : 'FINSI' ; 568 : AUX2 = LAMB_I 'MASQUE' 'SUPERIEUR' 0. ; 569 : LAMB_I = '*' LAMB_I ('MOTS' 'LX') AUX2 ('MOTS' 'LX') 570 : ('MOTS' 'LX') ; 571 : 'SI' CABLOC ; 572 : LAMBDA = LAMB_I '+' LAMB_L ; 573 : 'SINON'; 574 : LAMBDA = LAMB_I ; 575 : 'FINSI' ; 576 : 'FINSI' ; 577 : * 578 : FEXT2 = 'REAC' C_TOT LAMBDA ; 579 : 'SINON'; 580 : FEXT2 = CHFORC1; 581 : 'FINSI' ; 582 : * 583 : * assemblage des forces exterieures au pas n+1 584 : FEXT_T = FEXT1 '+' FEXT2 ; 585 : * 586 : *-- acceleration au pas n+1 587 : * 588 : AUX1 = FEXT_T - FINT_T ; 589 : 'DETR' ACCE_T ; 590 : ACCE_T = '*' 591 : CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT') 592 : AUX1 ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT') 593 : ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT'); 594 : * 595 : *-- vitesse au pas n+1 596 : * 597 : VITES_T1 = 'COLI' V_DEMI 1.D0 ACCE_T DT1_DEMI; 598 : 'DETR' VITES_T ; 599 : VITES_T = VITES_T1 ; 600 : 'DETR' V_DEMI ; 601 : * 602 : *-- enregistrement de l'instant courant 603 : * 604 : 'SI' ( T_SORT '<EG' T_1 ) ; 605 : 'MESS' 'Enregistrement des résultats pour le temps' 606 : T_1 'pas n°' IPAS ; 607 : ISTOC = ISTOC + 1 ; 608 : ETAB.'NPAS' . ISTOC = IPAS; 609 : ETAB.'TEMPS' . ISTOC = T_1; 610 : ETAB.'DEPLACEMENTS' . ISTOC = 'COPIER' DEPLA_T ; 611 : ETAB.'VITESSES' . ISTOC = 'COPIER' VITES_T ; 612 : ETAB.'ACCELERATIONS' . ISTOC = 'COPIER' ACCE_T ; 613 : ETAB.'FORCES_EXTERIEURES' . ISTOC = 'COPIER' FEXT_T ; 614 : ETAB.'CONTRAINTES' . ISTOC = 'COPIER' SIGMA_T ; 615 : 'SI' (PPLAS); 616 : ETAB.'DEFORMATIONS_INELASTIQUES' . ISTOC = 'COPIER' D_INELAS; 617 : ETAB.'VARIABLES_INTERNES' . ISTOC = 'COPIER' VARI_T ; 618 : 'FINSI'; 619 : * 620 : 'REPETER' ETEMP; 621 : 'SI' ( T_SORT '>EG' T_MAX) ; 622 : QUITTER ETEMP; 623 : 'FINSI'; 624 : ITEM=ITEM + 1 ; 625 : T_SORT = 'EXTRAI' STEMP1 ITEM ; 626 : 'SI' ( T_SORT '>' T_1) ; 627 : QUITTER ETEMP; 628 : 'FINSI'; 629 : 'FIN' ETEMP; 630 : 'FINSI' ; 631 : * 632 : *-- test sur le nombre de pas 633 : * 634 : 'SI' (IPAS '>EG' NMAX1) ; 635 : 'QUITTER' ETIPAS ; 636 : 'FINSI' ; 637 : * 638 : *-- test sur le temps 639 : * 640 : 'SI' ( T_1 '>EG' T_MAX ) ; 641 : 'QUITTER' ETIPAS ; 642 : 'FINSI' ; 643 : * 644 : *-- actualisation du temps 645 : T_0 = T_1 ; 646 : DT1_T = DT2_T ; 647 : * 648 : *-- menage 649 : * 650 : JPAS = JPAS + 1 ; 651 : 'SI' ( JPAS 'EGA' FREQ_M ) ; 652 : JPAS = 0 ; 653 : ** MESS IPAS ( 'TEMPS' 'NOEC' ) ; 654 : 'MENAGE' 'GOON' ; 655 : 'FINSI' ; 656 : 'SI' CANLGEO ; 657 : 'DETR' ZSIGF05 ; 658 : 'FINSI' ; 659 : 'DETR' DU1 ; 660 : * 'DETR' SIGMA_T0 ; 661 : * 'DETR' DEPST ; 662 : * 663 : 'FIN' ETIPAS ; 664 : * 665 : *---------------------------------------------------------------------------- 666 : * FIN DE LA BOUCLE SUR LES PAS DE TEMPS 667 : *---------------------------------------------------------------------------- 668 : * 669 : *-- on se remet dans la configuration initiale 670 : * 671 : 'FORM' G_ZERO ; 672 : * 673 : 'FINPROC' ETAB ; 674 : 675 : 676 : 677 : 678 :
© Cast3M 2003 - All rights reserved.
Disclaimer