Download drexus.procedur

Back to the list

   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