1 : * UNPAS PROCEDUR DURAND 13/12/03 21:15:02 7874 2 : 'DEBPROC' UNPAS PRECED*'TABLE'; 3 : * 4 : *----------------------------------------------------------------------* 5 : * PROCEDURE UNPAS * 6 : * * 7 : * calcul d'un increment de solution en grand deplacement plastique * 8 : * par la methode des residus * 9 : *----------------------------------------------------------------------* 10 : * En entree 11 : * PRECED la table passee à PASDAPA 12 : ************************************************************************ 13 : * sortie STAB12 indice : * 14 : * * 15 : * DEPT increment de deplacement sur le pas * 16 : * SIGF contraintes a la fin du pas * 17 : * VARF variables internes a la fin du pas * 18 : * DFPF deformation inelastique a la fin du pas * 19 : * CONV logique valant vrai si pas de probleme de convergence * 20 : * DEFF deformations a la fin du pas si grandes deformations * 21 : *----------------------------------------------------------------------* 22 : * 23 : WTAB=PRECED.'WTABLE'; conti=PRECED.'CONTINUATION'; 24 : estim= PRECED.'ESTIMATION'; 25 : stab12='TABLE'; 26 : * 27 : * initialisation et reprise des valeurs des tables **************** 28 : * 29 : MXMYMZ = 'MOTS' 'MX' 'MY' 'MZ' 'MT' 'FP' 'FPQ' 'FTP' 30 : 'IMX' 'IMY' 'IMZ' 'IMT' 'IFP' 'IFPQ' 'IFTP' ; 31 : MXMFLX = 'MOTS' 'MX' 'MY' 'MZ' 'MT' 'FLX' 'FP' 'FPQ' 'FTP' 32 : 'IMX' 'IMY' 'IMZ' 'IMT' 'FLX' 'IFP' 'IFPQ' 'IFTP' ; 33 : MLPRIM = 'MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT' 34 : 'LX' 'P' 'PQ' 'TP' 'ALFA' 'BETA' 35 : 'IUX' 'IUY' 'IUZ' 'IUR' 'IUT' 'IRX' 'IRY' 'IRZ' 'IRT' 36 : 'IP' 'IPQ' 'ITP' 'IALF' 'IBET' ; 37 : MLDUAL = 'MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT' 38 : 'FLX' 'FP' 'FPQ' 'FTP' 'FALF' 'FBET' 39 : 'IFX' 'IFY' 'IFZ' 'IFR' 'IFT' 'IMX' 'IMY' 'IMZ' 'IMT' 40 : 'IFP' 'IFPQ' 'IFTP' 'IFAL' 'IFBE' ; 41 : MLDEPL = 'MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'IUX' 'IUY' 'IUZ' 'IUR' 'IUT' 42 : 'ALFA' 'BETA' 'IALF' 'IBET' ; 43 : MLROTA = 'MOTS' 'RX' 'RY' 'RZ' 'RT' 'P' 'PQ' 'TP' 44 : 'IRX' 'IRY' 'IRZ' 'IRT' 'IP' 'IPQ' 'ITP'; 45 : MLDEFOR = 'MOTS' 'EPXX' 'EPYY' 'EPZZ' 'EPSS' 'EPTT' 'EPRR' 46 : 'GAXY' 'GAXZ' 'GAYZ' 'GAST' 'GASN' 'GATN' 47 : 'GARZ' 'GART' 'GAZT' 'RTSS' 'RTTT' 'RTST' 48 : 'RTZZ' 'RTXX' 'EPS ' 'GXY ' 'CX ' 'CY ' 'CZ ' 49 : 'EPSE' ; 50 : MLDEFOR = 'MOTS' 'EPXX' 'EPYY' 'EPZZ' 'EPSS' 'EPTT' 'EPRR' 51 : 'GAXY' 'GAXZ' 'GAYZ' 'GAST' 'GASN' 'GATN' 52 : 'GARZ' 'GART' 'GAZT' 'GXY ' 'CX ' 'CY ' 'CZ ' 53 : 'EPSE' ; 54 : MVPRIM = 'MOTS' 'VTX' 'VTY' 'VTZ' 'VTR' 'VTT' 'VWX' 'VWY' 'VWZ' 'VWT' 55 : 'VLX' 'VVP' 'VVPQ' 'VVTP' 'VALF' 'VBET' 56 : 'IVTX' 'IVTY' 'IVTZ' 'IVTR' 'IVTT' 'IVWX' 'IVWY' 'IVWZ' 'IVWT' 57 : 'IVVP' 'IVPQ' 'IVTP' 'IVAL' 'IVBE' ; 58 : * definition de variables locales 59 : *'SI' ( 'EXIS' PRECED 'ECRIT' ) ; list wtab; 'FINSI'; 60 : ICERAM = WTAB.'CERAMIQUE' ; 61 : IDYN = WTAB.'DYNAMIQUE'; 62 : IELANL = WTAB.'NON_LINEAIRE'; 63 : IENDOM = WTAB.'ENDOMMAGEMENT'; 64 : IFEFP = WTAB.'FEFP_FORMULATION' ; 65 : IFEFPUL= WTAB.'UPDATE_LAGRANGIAN'; 66 : IFTOL = 'NEG' WTAB.'FTOL' 'INCONNU' ; 67 : IGRD = WTAB.'GRANDS_DEPLACEMENTS'; 68 : IKSIA = WTAB.'K_SIGMA'; 69 : IKTAN = WTAB.'K_TANGENT' ; 70 : IMPLP = WTAB.'LIAISON_PERSISTANTE'; 71 : IMTOL = 'NEG' WTAB.'MTOL' 'INCONNU'; 72 : IPILOT = WTAB.'AUTOMATIQUE'; 73 : IPLAST = WTAB.'PLASTIQUE'; 74 : IPLAVI = WTAB.'IPLAVI'; 75 : IPREDIC = WTAB.'PREDICTEUR'; 76 : IRCON = WTAB.'RAIDCONST'; 77 : ISOL = WTAB.'CONSOLIDATION'; 78 : ISSTE = WTAB.'SUBSTEPPING'; 79 : ITHER = WTAB.'CHAR_THE' 'OU' WTAB.'FOR_THER'; 80 : IVIEXT = WTAB.'VISCO_EXTERNE'; 81 : IVIDOM = WTAB.'VISCODOMMAGE'; 82 : IVISCO = WTAB.'VISCOPLASTIQUE'; 83 : LNLOC = WTAB.'NLOC'; 84 : LOGDEF = WTAB.'CHAR_DEFI'; 85 : NITMA = WTAB.'NITERINTER_MAX'; 86 : NSSTE = WTAB.'NMAXSUBSTEPS'; 87 : POR1 = WTAB.'POR1' ; 88 : TI = WTAB.'T_FINAL'; 89 : EKREAC = WTAB.'REAC_GRANDS'; 90 : ZMAXIT = WTAB.'MAXITERATION' ; 91 : ZNACCE = 2 ; 92 : ZNCONS = WTAB.'NITER_KTANGENT'; 93 : ZPREC = WTAB.'PRECISION' ; 94 : ZPREK = WTAB.'PRECISINTER'; 95 : ZPRECD = WTAB.'PRECDECHARGE'; 96 : ZPRECM = WTAB.'PRECFLEX'; 97 : WTAB.'CLIM'=WTAB.'BLOCAGES_MECANIQUES'; 98 : ZCLIM = WTAB.'CLIM' ; 99 : BLO_INI=WTAB.'BLOCAGES_MECANIQUES'; 100 : DT= WTAB.'DT'; 101 : TEMPS0=WTAB.'TEMPS0'; 102 : *--- doit on reactualiser la geometrie temp0 ne 0 et grand depl ? --- 103 : 'SI' WTAB.'RECALCUL' ; 104 : WTAB . 'RECARI' = VRAI ; 105 : WTAB . 'RECADET' = VRAI; 106 : WTAB . 'REA_GEOM' = VRAI ; 107 : * on suppose que l'on est sur la bonne configuration 108 : GEOM1 = 'FORM'; 109 : * 'FORM' GEOM1; 110 : 'SINON'; 111 : GEOM1 = WTAB.'FOR0' ; 112 : WTAB . 'RECARI' = FAUX ; 113 : WTAB . 'RECADET' = FAUX; 114 : 'FINSI'; 115 : 116 : 'SI'( 'NON' ( 'EXIS' WTAB 'RRRR') );WTAB.'RECARI'= VRAI;'FINSI'; 117 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 118 : WTAB.'RECARI'= VRAI; 119 : 'FINSI'; 120 : *------------------ chamelem d'etat a la fin 121 : WTAB.'ETAT2'='ADET' 'NOUV' wtab.'MO_TOTAL' wtab.'CHARGEMENT' 122 : TI estim 'TEMP' TI; 123 : *-------- y-a-t-il un champ de temperature de reference ? --------- 124 : *-------- calcul de la deformation thermique de reference --------- 125 : *-------- calcul de la deformation thermique initiale ------------- 126 : * calcul à partir de MAT0 et MAT1 127 : 'SI' ITHER; 128 : PAS_EPTH PRECED; 129 : * 'SI' ( 'EGA' WTAB.'ETHER1' 'INCONNU') ; 130 : * WTAB.'ETHER1' =WTAB.'ETHER2'; 131 : * 'FINSI'; 132 : * 'SI' WTAB.'POR1' ; 133 : * WTAB.'MSRTHER1'=WTAB.'MSRTHER2'; 134 : * 'FINSI'; 135 : 'FINSI'; 136 : *----------- Calcul du champ de materiau a la fin du pas ------------ 137 : 'SI' WTAB.'MATVAR' ; 138 : MMMM= PAS_MATE PRECED WTAB.'ETAT2'; 139 : 'SINON'; 140 : MMMM= WTAB.'CARACTERISTIQUES'; 141 : 'SI' (WTAB.'MODAL' 'OU' WTAB.'FREQUENTIEL') ; 142 : 'SI' ('EXISTE' WTAB.'MAT1' 'MAIB') ; 143 : LMOMOST = 'MOTS' 'RICR' 'MAIA' 'MAIB' 'MACR' 'AMCR' ; 144 : MMMM = MMMM 'ET' ('EXCO' WTAB.'MAT1' LMOMOST 'NOID'); 145 : 'FINSI' ; 146 : 'FINSI' ; 147 : 'FINSI'; 148 : WTAB.'MAT2'=MMMM; 149 : ZMATIN=MMMM; 150 : *----------------------- nouveau chargement ---------------------- 151 : 'SI' ('EXISTE' (WTAB.'CHARGEMENT') 'MECA'); 152 : ZFEXT2 = 'TIRE' (WTAB.'CHARGEMENT') 'MECA' TI; 153 : TYP_2 = 'TYPE' ZFEXT2; 154 : 'SI' ('NEG' TYP_2 'CHPOINT '); 155 : 'MESS' '*** Erreur dans la definition du chargement ( MECA ) ***'; 156 : 'ERRE' '*** Le type du champ n est pas CHPOINT ***'; 157 : 'FINSI'; 158 : 'SINON'; 159 : ZFEXT2= ('ZERO' WTAB.'MO_TOT' 'FORCES' ) 160 : 'CHAN' WTAB.'MO_TOT' 'CHPO'; 161 : 'FINSI'; 162 : 'SI' ('EXISTE' (WTAB.'CHARGEMENT') 'FORC'); 163 : F2_FOR = 'TIRE' (WTAB.'CHARGEMENT') 'FORC' TI; 164 : TYP_2 = 'TYPE' F2_FOR; 165 : 'SI' ('NEG' TYP_2 'CHPOINT '); 166 : 'MESS' '*** Erreur dans la definition du chargement ( FORC ) ***'; 167 : 'ERRE' '*** Le type du champ n est pas CHPOINT ***'; 168 : 'FINSI'; 169 : ZFEXT2 = ZFEXT2 + F2_FOR ; 170 : 'FINSI'; 171 : *--------------- Si il existe des deplacements imposes -------------- 172 : 'SI' ('EXISTE' (WTAB.'CHARGEMENT') 'DIMP'); 173 : F2_DEP = 'TIRE' (WTAB.'CHARGEMENT') 'DIMP' TI; 174 : ZFEXT2 = ZFEXT2 + F2_DEP; 175 : 'FINSI'; 176 : *---------------- si chargement deformation actualisation DEFO1 ------ 177 : 'SI' WTAB.'CHAR_DEFI' ; 178 : WTAB.'DEFOR2' = 'TIRE' WTAB.'CHARGEMENT' 'DEFI' TI; 179 : 'FINSI'; 180 : *---------- dynamique : preparation du second membre -------------- 181 : 182 : 'SI' ( WTAB.'DYNAMIQUE' ) ; 183 : 'SI' ('EGA' WTAB.'FREA1' 'INCONNU'); 184 : 'SI' ('EXISTE' WTAB.'CHARGEMENT' 'MECA'); 185 : F1 = 'TIRE' WTAB.'CHARGEMENT' 'MECA' TEMP0; 186 : 'FINSI'; 187 : 'SI' ('EXISTE' WTAB.'CHARGEMENT' 'FORC'); 188 : F1F = 'TIRE' WTAB.'CHARGEMENT' 'FORC' TEMP0; 189 : 'SI' ('EGA' ('TYPE' F1) 'CHPOINT ') ; 190 : F1 = F1 + F1F ; 191 : 'SINON'; 192 : F1 = F1F ; 193 : 'FINSI' ; 194 : 'FINSI'; 195 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 196 : TFF1 = CHARMECA PRECED TEMPS0 ; 197 : 'SI' ( 'EXIS' TFF1 'ADDI_SECOND'); 198 : FF1=TFF1 .'ADDI_SECOND'; 'FINSI'; 199 : 'SI' ('EGA' ('TYPE' F1) 'CHPOINT '); 200 : F1=F1 + FF1; 201 : 'SINON'; 202 : F1 = FF1; 203 : 'FINSI'; 204 : 'FINSI'; 205 : 'SI' WTAB.'RAIDCONST' ; 206 : MAI2 = 'EXTR' WTAB.'RIGIDITE_CONSTANTE' 'MAIL'; 207 : LAF0 = ('BSIG' WTAB.'MO_TOT' ('REDU' WTAB.'MO_TOT' 208 : conti.'CONTRAINTES') WTAB.'MAT1') 209 : 'ET' ('REDU' MAI2 210 : (WTAB.'RIGIDITE_CONSTANTE'*conti.'DEPLACEMENTS')); 211 : 'SINON'; 212 : LAF0 = 'BSIG' WTAB.'MO_TOT' conti.'CONTRAINTES' 213 : WTAB.'MAT1'; 214 : 'FINSI'; 215 : 'SI' (('EXIS' WTAB.'CHARGEMENT' 'MECA') 'OU' 216 : ('EXIS' WTAB.'CHARGEMENT' 'FORC') 'OU' 217 : wtab.'PROCEDURE_CHAR_MECA'); 218 : LAF1 = F1 - LAF0 ; 219 : 'SINON'; 220 : LAF1 = -1 * LAF0; 221 : 'FINSI'; 222 : LAF2 = 'ENLEVER' (WTAB . 'BLOCAGES_MECANIQUES' 223 : * conti.'DEPLACEMENTS' ) 'FLX'; 224 : * forces exterieures + reactions - forces interieures au debut du calcul 225 : * c.a.d. (masse*acceleration initiale)+(amortissement*vitesse initiale) 226 : WTAB.'FREA1' = LAF1 - LAF2 ; 227 : 'FINSI'; 228 : 'SI' wtab.'LIAISON_PERSISTANTE' ; 229 : * forces d'acceleration au debut du pas 230 : 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU'); 231 : FF4 = WTAB.'AMORTISSEMENT'* conti.'VITESSES'; 232 : WTAB.'FMAN'= WTAB.'FREA1' - FF4 ; 233 : 'SINON' ; 234 : WTAB.'FMAN'= WTAB.'FREA1' ; 235 : 'FINSI'; 236 : 'FINSI'; 237 : *------------ il faut calculer la matrice de masse tout de suite ------------- 238 : 'SI' ( ('NON' ('EXIS' WTAB MASSE )) 'OU' 239 : WTAB.'GRANDS_DEPLACEMENTS'); 240 : WTAB.'MASSE' = 'MASS' WTAB.'MO_TOT'('CHAN' 'MASSE' 241 : (WTAB.'MAT1') WTAB.'MO_TOT' ) ; 242 : 'SI' WTAB.'MASSCONST'; 243 : WTAB.'MASSE'=WTAB.'MASSE' 'ET' WTAB.'MASSE_CONSTANTE'; 244 : 'FINSI'; 245 : 'FINSI'; 246 : FF = WTAB.'MASSE' *conti.'VITESSES'; 247 : FF4 = 4. / DT * FF; 'DETR' FF; 248 : * partie du second membre qui ne depend que des informations du pas prec 249 : WTAB.'FREA1' = FF4 + WTAB.'FREA1'; 250 : 'FINSI'; 251 : *--------- consolidation : preparation du second membre --------- 252 : 'SI' WTAB.'CONSOLIDATION' ; 253 : FF = BSIGMA WTAB.'MOD_POR' 254 : ('REDU' WTAB.'MOD_POR' conti.'CONTRAINTES'); 255 : FF4 = 'EXCO' WTAB.'MOT_POR' FF 256 : WTAB.'MOT_POR' 'NOID' 'NATURE' 'DISCRET' ; 257 : 'SI' WTAB.'DYNAMIQUE'; 258 : WTAB.'FREA1' = WTAB.'FREA1' + FF4 ; 259 : 'SINON'; 260 : WTAB.'FREA1' = FF4 ; 261 : 'FINSI'; 262 : ZFEXT2 = ZFEXT2 + FF4 ; 'DETR' FF ; 263 : * ---- traitement des flux si besoin ---- 264 : 'SI' ( 'EXIS' WTAB.'CHARGEMENT' 'FLUX' ) ; 265 : FLUXT0= 'TIRE' WTAB.'CHARGEMENT' 'FLUX' TEMPS0; 266 : FLUXTI= 'TIRE' WTAB.'CHARGEMENT' 'FLUX' TI ; 267 : FLUXT = ((1 - WTAB.'TETA')*FLUXT0 ) + 268 : (WTAB.'TETA' *FLUXTI ) ; 269 : FACFLU = -1. * WTAB.'DT'; 270 : ZFEXT2 = ZFEXT2 + ( FACFLU * FLUXT) ; 271 : 'DETR' FLUXT ; 'DETR' FLUXT0; 'DETR' FLUXTI; 272 : 'FINSI' ; 273 : 'FINSI'; 274 : *----------------- calcul de la masse si frequentiel************ 275 : 'SI' ( WTAB.'FREQUENTIEL' 'ET' ( 'NON' ('EXIS' WTAB MASSE ))); 276 : WTAB.'MASSE' = 'MASS' WTAB.'MO_TOT'('CHAN' 'MASSE' 277 : (WTAB.'MAT1') WTAB.'MO_TOT' ) ; 278 : 'FINSI'; 279 : * --------- y-a-t-il parallelisation?************************* 280 : PARTLOCA=FAUX; 281 : PARALLEL=FAUX; 282 : NBPART=WTAB.'NBPART'; 283 : ZMODLI= WTAB.'MO_TOT';ZMODL=ZMODLI; 284 : 'SI' ('EGA' WTAB.'PROCESSEURS' 'COMPORTEMENT' ); 285 : PARALLEL=VRAI; 286 : PARTLOCA = VRAI; 287 : MODRELOC = 'PART' ZMODLI NBPART ; 288 : 'FINSI'; 289 : 'SI' ('EGA' WTAB.'PROCESSEURS' 'AUTOMATIQUE'); 290 : PARALLEL=VRAI; 291 : PARTLOCA = FAUX; 292 : ZMODL = 'PART' ZMODLI NBPART ; 293 : 'OPTI' 'PARA' VRAI; 294 : 'FINSI'; 295 : * -----quelques initialisations************************************** 296 : * 297 : STAB12 = 'TABLE' ; 298 : STAB12.'MAT1' = WTAB.'MAT1'; 299 : STAB12.'ZU1' = CONTI.'DEPLACEMENTS'; 300 : *'SI' ('EXIS' PRECED 'ECRIT'); 301 : * mess ' conti.contraintes ' ; list resu conti.'CONTRAINTES'; 302 : * mess ' zmodl'; list zmodl; 303 : * 'FINSI'; 304 : STAB12.'SIGF' = 'REDU' (CONTI.'CONTRAINTES') ZMODL ; 305 : STAB12.'DEFTF ' = 'REDU' (conti.'DEFORMATIONS') ZMODL ; 306 : STAB12.'FNONL'= WTAB.'FNONL'; 307 : STAB12.'RESIDU'=WTAB.'RESIDU'; 308 : STAB12.'XDENO'=WTAB.'XDENO'; 309 : STAB12.'XDENOM'=WTAB.'XDENOM'; 310 : 'SI' ( 'EXIS' WTAB 'ETAT1' ); 311 : STAB12.'ETAT1' = WTAB.'ETAT1'; 312 : 'FINSI'; 313 : STAB12.'ETAT2'=WTAB.'ETAT2'; 314 : 'SI' ('EXIS' WTAB 'DEFOR1' ); 315 : STAB12.'DEFOR1' = WTAB.'DEFOR1'; 316 : STAB12.'DEFOR2' = WTAB.'DEFOR2'; 317 : 'FINSI'; 318 : 'SI' ('EXIS' WTAB 'ETHER1'); 319 : STAB12.'ETHER1'=WTAB.'ETHER1'; 320 : 'FINSI'; 321 : 'SI' ('EXIS' WTAB 'MSRTHER1' ) ; 322 : STAB12.'MSRTHER1'= WTAB.'MSRTHER1'; 323 : 'FINSI'; 324 : 'SI' ( 'EXIS' WTAB 'FNONL'); 325 : STAB12.'FNONL'=WTAB.'FNONL'; 326 : 'FINSI'; 327 : 'SI' ('EXIS' WTAB 'TET1') ; 328 : STAB12.'TET1'=WTAB.'TET1'; 329 : STAB12.'TET2'=WTAB.'TET2'; 330 : 'FINSI'; 331 : * STAB12.'SUCCES' = VRAI ; 332 : 'SI' ('NEG' WTAB.'AUTOCOEF' 'INCONNU') ; 333 : STAB12.'AUTOCOEF' = WTAB.'AUTOCOEF' ; 334 : 'FINSI' ; 335 : 'SI' ('NEG' WTAB.'AUTOREDU' 'INCONNU') ; 336 : STAB12.'AUTOREDU' = WTAB.'AUTOREDU' ; 337 : 'FINSI' ; 338 : 'SI' ('NEG' WTAB.'SECOND_MEMBRE' 'INCONNU') ; 339 : STAB12.'SECOND_MEMBRE' = WTAB.'SECOND_MEMBRE' ; 340 : 'FINSI' ; 341 : 'SI' ('NEG' WTAB.'LASTKTAN' 'INCONNU') ; 342 : STAB12.'LASTKTAN' = WTAB.'LASTKTAN' ; 343 : 'FINSI' ; 344 : 'SI' ('NEG' WTAB.'AUTORED1' 'INCONNU') ; 345 : STAB12.'AUTORED1' = WTAB.'AUTORED1' ; 346 : 'FINSI' ; 347 : 'SI' ('NEG' WTAB.'LISEA_M' 'INCONNU') ; 348 : STAB12.'LISEA_M' = WTAB.'LISEA_M' ; 349 : STAB12.'RIBLO_M' = WTAB.'RIBLO_M' ; 350 : 'FINSI' ; 351 : 'SI' ('NEG' WTAB.'INCREMENT' 'INCONNU' ); 352 : STAB12.'INCREMENT' = WTAB.'INCREMENT'; 353 : 'FINSI'; 354 : STAB12.'FFROT' =WTAB.'FFROT'; 355 : STAB12.'INITEMPS' = WTAB.'INITEMPS' ; 356 : STAB12.'DT'=WTAB.'DT'; 357 : 'SI' ('NEG' WTAB.'INCREMENT' 'INCONNU') ; 358 : STAB12.'INCREMENT' = WTAB.'INCREMENT' ; 359 : INCRPREC = STAB12.'INCREMENT' ; 360 : 'FINSI' ; 361 : com_sig = 'EXTR' ZMODLI 'CONT'; 362 : ZMATI = 'REDU' STAB12.'MAT1' ZMODLI; 363 : ZMAT = 'REDU' ZMODL ZMATI ; zmat05 = zmat; 364 : HPP_EPS = FAUX; 365 : EPS_EPS = 'TEXTE' ' '; 366 : EPS_NLIN = VRAI; 367 : 'SI' ('EGA' ('VALE' 'EPSI') 'LINEAIRE'); EPS_NLIN = FAUX; 'FINSI'; 368 : * Option a n'utiliser que par les utilisateurs avertis 369 : 'SI' ('EXISTE' PRECED 'ACCELERATION') ; 370 : III = PRECED.'ACCELERATION' ; 371 : 'SI' ('EGA' ('TYPE' III) 'ENTIER') ; ZNACCE = III ; 'FINSI' ; 372 : 'FINSI' ; 373 : * Matrice tangente : non utilisee si IPLAVI a FAUX 374 : IKTAN = IKTAN 'ET' IPLAVI ; 375 : 'SI' (WTAB.'K_TANGENT' 'ET' ('NON' IPLAVI)) ; 376 : 'MESS' 'IPLAVI faux : pas de matrice tangente ->' 377 : ' on utilise la rigidite elastique' ; 378 : 'FINSI' ; 379 : * Matrice tangente par perturbation : 380 : * Option non disponible si non local ou si IPLAVI a FAUX 381 : IPERT = WTAB.'K_TANGENT_PERT' 'ET' ('NON' LNLOC) 'ET' IPLAVI ; 382 : ZPERC1 = WTAB.'K_TANG_PERT_C1' ; ZPERC2 = WTAB.'K_TANG_PERT_C2' ; 383 : * Matrice tangente : partie symetrique utilisee 384 : 'SI' WTAB.'K_TANGENT_SYME' ; 385 : ZKTASYM = 'MOT' 'SYME' ; 386 : 'SINON' ; 387 : ZKTASYM = 'TEXTE' ' ' ; 388 : 'FINSI'; 389 : * Matrice tangente : pas d'acceleration en cas de modele FEFP ou SSTE 390 : 'SI' IKTAN ; 391 : 'SI' (IFEFP 'OU' ISSTE) ; ZNACCE = 999 ; 'FINSI'; 392 : 'FINSI' ; 393 : * 394 : 'SI' IFTOL ; 395 : ZFTOL = 'ABS' WTAB.'FTOL' ; 396 : 'FINSI'; 397 : 'SI' IMTOL ; 398 : ZMTOL = 'ABS' WTAB.'MTOL' ; 399 : 'FINSI'; 400 : 'SI' IRCON; 401 : MAI2 ='EXTR' (WTAB.'RIGIDITE_CONSTANTE') 'MAIL'; 402 : 'FINSI'; 403 : ITCAR = 'EXISTE' ZMATI 'EPAI' ; 404 : 'SI' (ITCAR 'EGA' FAUX) ; 405 : ITCAR = 'OU' ('EXISTE' ZMATI 'INRY') ('EXISTE' ZMATI 'MODS'); 406 : 'FINSI' ; 407 : 'SI' (ITCAR 'EGA' FAUX) ; 408 : ZMAT2 = ZMATI ; ZMAT2R= ZMAT; 409 : 'FINSI'; 410 : 411 : 'SI' ('OU' ('OU' IVISCO IVIDOM) IVIEXT); ZPREK = 5.E-7 ; 'FINSI'; 412 : 'SI' IENDOM; ZPREK = ZPREC ; 'FINSI'; 413 : 'SI' ITHER ; 414 : stab12.'TETA1' = WTAB.'TET1'; 415 : stab12.'TETA2' = WTAB.'TET2' ; 416 : 'FINSI' ; 417 : 418 : * on fait ici la séparatuion poreux .. pour l'avoir sur 419 : *les modèles partitionnes 420 : 'SI' WTAB.'POR1'; 421 : mo_pori= 'EXTR' ZMODLi 'FORM' 'POREUX'; 422 : MO_POR= 'EXTR' ZMODL 'FORM' 'POREUX'; 423 : * MA_pori='REDU' ZMATIN MO_PORi; 424 : MA_POR= 'REDU' ZMATIN MO_POR; 425 : MA_POR0= 'REDU' MO_POR (STAB12.'MAT1'); 426 : * MA_POR0i= 'REDU' MO_PORi (WTAB.'MAT1'); 427 : MAI_POR= 'EXTR' MO_POR 'MAILLAGE'; 428 : MAI_PORi= 'EXTR' MO_PORi 'MAILLAGE'; 429 : 'FINSI'; 430 : * recuperation de certains champs, si nbpart>1 zmodl est partitionné 431 : * sinon c'est le modele initial 432 : 433 : STAB12.'DFGRAD' = WTAB.'DFGRAD' ; 434 : DEFT0 = 'REDU' (conti.'DEFORMATIONS') ZMODL ; 435 : 'SI' IPLAVI ; 436 : * DEFT0 = 'REDU' (conti.'DEFORMATIONS') ZMODL ; 437 : ZEPS0 = 'REDU' (conti.'DEFORMATIONS_INELASTIQUES') ZMODL ; 438 : ZVAR0 = 'REDU' (conti.'VARIABLES_INTERNES') ZMODL ; 439 : com_var = 'EXTR' ZMODLI 'VARI' ; 440 : com_dei = 'EXTR' ZMODLI 'DEIN' ; 441 : lnom=com_var; 442 : 'SI' ISOL ; 443 : com_maa = 'EXTR' ZMODLI 'MATE' ; 444 : 'FINSI' ; 445 : 'FINSI' ; 446 : * 447 : * teste t'on les moments ? 448 : TSTMOM = ITCAR 'OU' ('EGA' ('VALE' 'MODE') 'PLANGENE') ; 449 : * teste t'on les POREUX ? 450 : 'SI' POR1 ; TSTMOM=VRAI ; 'FINSI'; 451 : * 452 : IKLFFF=VRAI; 453 : 'SI'TSTMOM; 'SI' IFTOL; 'SI' IMTOL; 454 : IKLFFF=FAUX; 455 : 'FINSI'; 'FINSI'; 'FINSI'; 456 : * 457 : 'SI'('NON' TSTMOM); 'SI' IFTOL; 458 : IKLFFF=FAUX; 459 : 'FINSI';'FINSI'; 460 : * 461 : GEOREF0 = WTAB.'FOR0' ; 462 : WTAB.'CONV'=VRAI; 463 : WTAB . 'ISOUSPAS' = 0; 464 : NSOUSPAS = WTAB . 'MAXSOUSPAS'; 465 : 466 : ************************************************************************ 467 : ****** boucle de non convergence 468 : ************************************************************************ 469 : 'REPETER' BONOCONV NSOUSPAS; 470 : 471 : 472 : STAB12.'CONV'=FAUX; 473 : DT_INIT=STAB12.'DT';DTINI=STAB12.'DT'; 474 : ZSIG0=STAB12.'SIGF'; 475 : ZPI0 = ZSIG0; 476 : ZU1= STAB12.'ZU1'; 477 : GR_U_DEB=STAB12.'DFGRAD'; 478 : 'SI' ITHER ; 479 : TETA1 = STAB12.'TETA1'; 480 : TETA2 = STAB12.'TETA2' ; 481 : DTETD = TETA2 - TETA1 ; 482 : 'SINON' ; 483 : che3 = 'MANU' 'CHML' ZMODL 'T' 20. 'NOEUD' ; 484 : che4 = 'MANU' 'CHML' ZMODL 'T' 20. 'NOEUD' ; 485 : 'FINSI' ; 486 : * matetriau au debut du pas en cas de non convergence etat1=etat2 487 : 'SI' (WTAB.'MATVAR' 'OU' WTAB.'MODAL' 'OU' WTAB.'FREQUENTIEL'); 488 : STAB12.'MAT1' = PAS_MATE PRECED WTAB.'ETAT1'; 489 : 'SINON'; 490 : 'SI' WTAB.'FOR_MECA' ; 491 : 'SI' WTAB.'MEC1'; 492 : MA=WTAB.'MAT_MEC'; 493 : 'SI' WTAB.'POR1' ; MA=MA 'ET' WTAB.'MAT_POR'; 'FINSI'; 494 : 'SINON'; 495 : MA= WTAB.'MAT_POR'; 496 : 'FINSI'; 497 : 'FINSI'; 498 : STAB12.'MAT1'=MA; 499 : 'FINSI'; 500 : *------ caracteristiques initiales en cas de grands deplacements ------ 501 : 502 : 'SI' WTAB.'ITCAR'; 503 : 'SI' ('EGA' WTAB.'CARA' 'INCONNU'); 504 : WTAB.'CARA' = STAB12.'MAT1'; 505 : 'SINON'; 506 : MOCA = 'MOTS' 'VECT' 'VX' 'VY' 'VZ' 'VXF' 'VYF' 'VZF'; 507 : MECAR1 = 'EXCO' MOCA STAB12.'MAT1' 'NOID'; 508 : MECAR1 = 'CHAN' 'TYPE' MECAR1 'CARACTERISTIQUES'; 509 : MECAR2 = 'EXCO' MOCA WTAB.'CARA' 'NOID'; 510 : MECAR2 = 'CHAN' 'TYPE' MECAR2 'CARACTERISTIQUES'; 511 : STAB12.'MAT1' = STAB12.'MAT1' - MECAR1 + MECAR2; 512 : 'FINSI'; 513 : 'FINSI'; 514 : 515 : * -----------operteur amortissement en frequentiel 516 : 'SI' WTAB.'FREQUENTIEL' ; 517 : 'SI' ('EXISTE' STAB12.'MAT1' 'AMOR') ; 518 : RRR2 = 'AMOR' WTAB.'MO_TOT' STAB12.'MAT1' ; 519 : RR2 = 'CHAN' 'INCO' RRR2 520 : ('MOTS' 'ALFA' 'BETA') ('MOTS' 'IALF' 'IBET') 521 : ('MOTS' 'FALF' 'FBET') ('MOTS' 'FALF' 'FBET') 'QUEL' ; 522 : RR3 = 'CHAN' 'INCO' RRR2 523 : ('MOTS' 'ALFA' 'BETA') ('MOTS' 'ALFA' 'BETA') 524 : ('MOTS' 'FALF' 'FBET') ('MOTS' 'IFAL' 'IFBE') 'QUEL' ; 525 : RRR2 = RR2 'ET' RR3 ; 526 : 'FINSI' ; 527 : 'FINSI' ; 528 : *----------- Calcul du champ de materiau a la fin du pas ------------ 529 : 'SI' WTAB.'MATVAR' ; 530 : MCHC= PAS_ETAT PRECED TI; 531 : MMMM= PAS_MATE PRECED MCHC; 532 : 'SINON'; 533 : MMMM= WTAB.'CARACTERISTIQUES'; 534 : 'SI' (WTAB.'MODAL' 'OU' WTAB.'FREQUENTIEL') ; 535 : 'SI' ('EXISTE' STAB12.'MAT1' 'MAIB') ; 536 : LMOMOST = 'MOTS' 'RICR' 'MAIA' 'MAIB' 'MACR' 'AMCR' ; 537 : MMMM = MMMM 'ET' ('EXCO' STAB12.'MAT1' LMOMOST 'NOID'); 538 : 'FINSI' ; 539 : 'FINSI' ; 540 : 'FINSI'; 541 : *----- Caracteristiques initiales en cas de grands deplacements ----- 542 : 'SI' WTAB.'ITCAR'; 543 : MECAR1 = 'EXCO' MOCA MMMM 'NOID'; 544 : MECAR1 = 'CHAN' 'TYPE' MECAR1 'CARACTERISTIQUES'; 545 : MECAR2 = 'EXCO' MOCA WTAB.'CARA' 'NOID'; 546 : MECAR2 = 'CHAN' 'TYPE' MECAR2 'CARACTERISTIQUES'; 547 : MMMM = MMMM - MECAR1 + MECAR2; 548 : 'FINSI'; 549 : *------------ Calcul de la rigidite a la fin du pas ---------------- 550 : 'SI' (WTAB.'RECARI' 'ET' WTAB.'CONV') ; 551 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 552 : HOOKENDO='HOOK' WTAB.'MO_TOT' MMMM conti.'VARIABLES_INTERNES'; 553 : RH='RIGI' WTAB.'MO_TOT' HOOKENDO MMMM ; 554 : *'SI' ( TI > 0.145); 555 : *aze= manu obje 'EVOLUTIO' 2136870; 556 : *mess ' aze******* ' ; list aze; 557 : **'FINSI'; 558 : *mess ' mmmm********' ; list resu mmmm; 559 : *mess ' hookendo******' ; list resu hookendo; 560 : 'DETR' HOOKENDO; 561 : 'SINON'; 562 : RH= 'RIGI' WTAB.'MO_TOT' MMMM ; 563 : 'FINSI'; 564 : *mess ' rh************** ' ; list resu rh; 565 : RRRR = RH 'ET' WTAB.'BLOCAGES_MECANIQUES'; 566 : 'SI' WTAB.'RAIDCONST'; 567 : RRRR = RRRR 'ET' WTAB.'RIGIDITE_CONSTANTE'; 568 : 'FINSI'; 569 : WTAB.'RRRR'=RRRR; 570 : 'SINON'; 571 : AA1 = 'EXTR' WTAB.'BLOCAGES_MECANIQUES' 'MAIL'; 572 : AA2 = 'EXTR' BLO_INI 'MAIL'; 573 : AA3 = 'DIFF' AA1 AA2; 574 : 'SI' ('NEG' (NBNO AA3) 0); 575 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 576 : HOOKENDO='HOOK' WTAB.'MO_TOT' MMMM conti.'VARIABLES_INTERNES'; 577 : RH='RIGI' WTAB.'MO_TOT' HOOKENDO MMMM ; 578 : 'DETR' HOOKENDO; 579 : 'SINON'; 580 : RH = 'RIGI' WTAB.'MO_TOT' MMMM ; 581 : 'FINSI'; 582 : RRRR = RH 'ET' WTAB.'BLOCAGES_MECANIQUES'; 583 : 'SI' WTAB.'RAIDCONST'; 584 : RRRR = RRRR 'ET' WTAB.'RIGIDITE_CONSTANTE'; 585 : 'FINSI'; 586 : WTAB.'RRRR'=RRRR; 587 : BLO_INI = WTAB.'BLOCAGES_MECANIQUES'; 588 : 'SINON'; 589 : RRRR=WTAB.'RRRR'; 590 : 'FINSI'; 591 : 'FINSI'; 592 : ZRAID=RRRR; 593 : 594 : *------------ consolidation ou dynamique faut-il recalculer l'operateur? 595 : * -----: preparation du pas de temps ------------ 596 : 'SI' ( WTAB.'CONSOLIDATION' 'OU' WTAB.'DYNAMIQUE'); 597 : DT = TI - TEMP0; 598 : 'SI' ( '>' (DELTAN*0.9999) DT) ; 599 : WTAB . 'RECAOP' = VRAI; 600 : 'FINSI'; 601 : 'SI' ( '<' (DELTAN*1.0001) DT) ; 602 : WTAB . 'RECAOP' = VRAI; 603 : 'FINSI'; 604 : 'SI' WTAB.'MATVAR'; 605 : WTAB . 'RECAOP' = VRAI; 606 : 'FINSI'; 607 : DELTAN=WTAB.'DT'; 608 : 'FINSI'; 609 : *---------------------- Formation de l operateur ----------------------- 610 : ZRIAD = RRRR ; 611 : * 612 : 'SI' ( WTAB.'DYNAMIQUE' 'OU' WTAB.'CONSOLIDATION'); 613 : 'SI' ('NEG' WTAB.'OPERATEUR' 'INCONNU'); 614 : ZRAID = WTAB.'OPERATEUR'; 615 : 'SI' (WTAB . 'RECAOP') ; 616 : ZRAID = RRRR ; 617 : 'FINSI'; 618 : 'FINSI'; 619 : 'FINSI'; 620 : *------------ operateur frequentiel ----------------------- 621 : 'SI' WTAB.'FREQUENTIEL' ; 622 : RR1 = ZRAID ; 623 : OMEGI = 2.* PI * TI ; 624 : RRR1 = OMEGI * OMEGI * (-1.) * WTAB.'MASSE' ; 625 : RR1 = ZRAID 'ET' RRR1 ; 626 : RR4 = 'CHAN' 'INCO' (RR1 * (-1.)) 627 : ('MOTS' 'ALFA' 'BETA') ('MOTS' 'IALF' 'IBET') 628 : ('MOTS' 'FALF' 'FBET') ('MOTS' 'IFAL' 'IFBE') 'QUEL'; 629 : ZRAID = RR1 'ET' RR4 ; 630 : 'SI' ('EXISTE' MMMM 'AMOR') ; 631 : RR5 = OMEGI * RRR2 ; 632 : ZRAID = ZRAID 'ET' RR5 ; 633 : 'FINSI' ; 634 : 'FINSI' ; 635 : *--------------- et la perméabilité ---------------------------------- 636 : 'SI' (WTAB.'CONSOLIDATION') ; 637 : 'SI' (WTAB.'GRANDS_DEPLACEMENTS' 'OU' WTAB.'MATVAR') ; 638 : WTAB.'PERMEABILITE'= 'PERM' WTAB.'MOD_POR' MMMM ; 639 : WTAB . 'RECAOP' = VRAI; 640 : 'FINSI'; 641 : 'FINSI'; 642 : *------------- Cas de la consolidation ou de la dynamique ------------- 643 : *------------- il faut recalculer l'operateur d'iteration ------------- 644 : 'SI' (WTAB . 'RECAOP') ; 645 : 'SI' ( WTAB.'DYNAMIQUE'); 646 : ZRAID = 4. /( DT * DT) * WTAB.'MASSE' 'ET' ZRAID; 647 : 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU'); 648 : ZRAID = WTAB.'AMORTISSEMENT'*(2. /DT) 'ET' ZRAID ; 649 : 'FINSI'; 650 : 'FINSI' ; 651 : 'SI' ( WTAB.'CONSOLIDATION'); 652 : ZRAID = -1. * DT * WTAB.'TETA' 653 : * WTAB.'PERMEABILITE' 'ET' ZRAID; 654 : 'FINSI' ; 655 : WTAB.'OPERATEUR'=ZRAID; 656 : WTAB . 'RECAOP'= FAUX; 657 : 'FINSI'; 658 : *-------------- traitement des contacts frottements automatiques ------- 659 : WTAB.'CLIM' = WTAB.'BLOCAGES_MECANIQUES'; 660 : CDEP = STAB12.'ZU1' ; 661 : CDEPSLX = 'ENLEVER' CDEP 'LX' ; 662 : 'SI' WTAB.'CONTACT'; 663 : modcon= wtab.'MODCONTA'; 664 : WTAB.'CONT_REEL'=modcon; 665 : CDAP CRR RFROTE= 'RFCO' modcon WTAB.'CONV' ; 666 : 'SI' (WTAB . 'MODAL') ; 667 : CRR = 'PJBA' CRR WTAB.'MO_TOT' MMMM ; 668 : MCRR = 'EXTR' CRR 'MAIL' 'MULT' ; 669 : MCDAP = 'EXTR' CDAP 'MAIL' ; 670 : 'REPETER' BCDA ('NBNO' MCDAP) ; 671 : PBCDA = MCDAP 'POINT' &BCDA ; 672 : PCRR = 'POINT' MCRR &BCDA ; 673 : CHCR='MANU' 'CHPO' PCRR 1 'FLX' ('EXTR' CDAP 'FLX' PBCDA) 674 : 'NATURE' 'DISCRETE' ; 675 : 'SI' ('EGA' 1 &BCDA) ; 676 : CCDA = CHCR ; 677 : 'SINON' ; 678 : CCDA = CCDA 'ET' CHCR ; 679 : 'FINSI' ; 680 : 'FIN' BCDA ; 681 : CDAP = CCDA ; 682 : 'FINSI' ; 683 : wtab . l_cdap = cdap ; 684 : * attention mettre les conditions de frottement en tete pour 685 : * qu'elles soient numerotees en dernier 686 : 'SI' ('NEG' CRR 0); 687 : ZRAID= CRR 'ET' ZRAID ; 688 : WTAB.'CLIM' = WTAB.'CLIM' 'ET' CRR ; 689 : CCOR = CRR * CDEPSLX; 690 : ZFEXT2=ZFEXT2 + CCOR; 691 : 'FINSI'; 692 : 'SI' ( 'NEG' 0 CDAP); 693 : ZFEXT2 = ZFEXT2 + CDAP ; 694 : WTAB.'IMPO' = CDAP ; 695 : 'FINSI'; 696 : 'SI' ('NEG' 0 RFROTE); 697 : RFROT=RFROTE; 698 : 'FINSI'; 699 : 'SI' ('NEG' 0 RFROT); 700 : ZRAID = RFROT 'ET' ZRAID; 701 : WTAB.'CLIM' = RFROT 'ET' WTAB.'CLIM' ; 702 : CCOR = RFROT * CDEPSLX ; 703 : ZFEXT2 = ZFEXT2 + CCOR; 704 : 'FINSI'; 705 : ZCLIM= WTAB.'CLIM'; 706 : 'FINSI'; 707 : * --------------- pilotage automatique ******************************** 708 : ISNPB = FAUX ; 709 : AL1 = 1. ;COEPI = 1.d0; COEINC=0.d0;COEPI0=1.d0;DAL1=100.D0; 710 : CORPREC = 1. ; 711 : * CORPREC = 10.; 712 : 'SI' (('EGA' ipredic 'HPP') 'ET' WTAB.'CONV'); 713 : EPS_EPS = 'TEXTE' 'LINEAIRE'; 714 : HPP_EPS = VRAI; 715 : 'FINSI'; 716 : * 717 : 'SI' IPILOT ; 718 : 'SI' ( WTAB.'AUTODEUX' ) ; 719 : COEPI = 'ABS' ( STAB12.'AUTOCOEF'); 720 : COEPI = COEPI / (1.-COEPI); 721 : 'SI' (COEPI > 1.D0) ; COEPI=1.D0;'FINSI'; 722 : COEPI0=COEPI;STAB12.'AUTOCOEF'=COEPI; 723 : 'SINON'; 724 : STAB12.'AUTOCOEF' = 1.D0; 725 : 'FINSI' ; 726 : RED1 = 1. ; 727 : RED2 = 0 ; 728 : 'SI' ('NEG' WTAB.'AUTORED1' 'INCONNU') ; 729 : 'SI' (STAB12.'AUTORED1' > 0); 730 : STAB12.'AUTORED1' = STAB12.'AUTORED1' - 1; 731 : 'SI' (STAB12.'AUTORED1' 'EGA' 0) ; 732 : COEPI = 3 * COEPI ; 733 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' / 3.; 734 : 'SI' (STAB12.'AUTOREDU' > 1.1 ); 735 : * on travaille encore avec un critere reduit 736 : STAB12.'AUTORED1' = 4 ; 737 : RED1 = 3. ; 738 : 'FINSI'; 739 : 'MESS' 'On multiplie le critere de pilotage par 3'; 740 : 'FINSI'; 741 : 'FINSI'; 742 : 'FINSI'; 743 : 'SI' (COEPI > 1d0); 744 : RED1 = RED1 / COEPI ;COEPI =1d0; 745 : 'FINSI'; 746 : 'SI' ( 'NEG' WTAB.'NBPLAS' 'INCONNU') ; 747 : 'SI' ( WTAB.'NBPLAS' 'EGA' 0) ; 748 : 'SI' (COEPI < 0.) ;COEPI = COEPI * -2.;'FINSI'; 749 : 'FINSI'; 750 : 'FINSI'; 751 : COEPI = 'ABS' COEPI ; 752 : COEPI0 = COEPI; 753 : * sans pilotage 754 : 'SINON'; 755 : STAB12.'AUTOCOEF'= 1.D0; 756 : 'FINSI'; 757 : ************************************************************************ 758 : *------------- quelques initialisations pour la boucle ETIQ ******** 759 : ************************************************************************ 760 : URG = FAUX;RED_URG = 0 ;IT= 0 ; c_zdepr = faux;ITACC = 0; 761 : ZICONV = VRAI; MMC = 0 ; MMCMAX = 0 ; EPSM = 0.; DPSMAX = 0. ; 762 : DEPSTDM = 0. ; DEKREAC1 = 0. ;XCONVNOR = 0. ; ITNORM1 = 0 ; 763 : DEPSTREF = 100. * (WTAB . 'MAXDEFOR') ;ZDEPL=0; 764 : GR_U_K = GR_U_DEB ; 765 : DITNORM1 = 0 ;NBCYCLE1 = 0 ;zdept = 0; zdeptq = 0; zdeptp = 0; 766 : zprecnc=1e-5;FTHE = 0. ; FDEF = 0. ; ITNV = -5 ; 767 : TABCONV = 'TABLE' ; 768 : 'SI' IFEFPUL; XUPDA = 1; 'FINSI'; 769 : DEPST0=0; 770 : *********** en cas de materiaux variables ******************************* 771 : 'SI' (WTAB.'MATVAR'); 772 : ZMAT1 = 'REDU' (STAB12.'MAT1') ZMODL ; 773 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 774 : XXX3 = 'ELAS' ZMODL ZSIG0 ZMAT ZVAR0; 775 : XXX4 = 'ELAS' ZMODL ZSIG0 ZMAT1 ZVAR0; 776 : 'SINON'; 777 : XXX3 = 'ELAS' ZMODL ZSIG0 ZMAT ; 778 : XXX4 = 'ELAS' ZMODL ZSIG0 ZMAT1 ; 779 : 'FINSI'; 780 : DDEF0 = XXX4 - XXX3; 781 : 'DETR' XXX3;'DETR' XXX4; 782 : DEPST0=-1.* DDEF0; 783 : 'FINSI'; 784 : *en cas de cvhargement thermiques ********************************* 785 : 'SI' ITHER ; 786 : * 787 : 'SI' (WTAB.'MATVAR' 'ET' IPILOT); 788 : 'MESS' 'Le pilotage n est pas possible avec un' 789 : ' materiau qui depend de la temperature' ; 790 : ERREUR(19) ; 791 : 'FINSI' ; 792 : XXX1 = TETA2 - WTAB.'TALPHA_REFERENCE'; 793 : ETT= 'EPTH' ZMODL ZMAT XXX1 ; 794 : ETT0 ='REDU' (STAB12.'ETHER1') ZMODL; 795 : ETT = ETT - ('REDU' (WTAB.'ETREF') ZMODL); 796 : DTT = ETT - ETT0; 797 : 'SI' ('EGA' DEPST0 0); DEPST0=DTT; 798 : 'SINON'; 799 : DEPST0 = DTT +DEPST0 ; 'FINSI'; 800 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 801 : DSIGT0 = 'ELAS' ZMODL DEPST0 ZMAT ZVAR0; 802 : 'SINON'; 803 : DSIGT0 = 'ELAS' ZMODL DEPST0 ZMAT; 804 : 'FINSI'; 805 : * 806 : *--------- Cas du milieu poreux avec chargement thermique ---------- 807 : * cas isotrope seulement pour le moment 808 : * et on ne s'occupe pas du alpha-reference !! 809 : 'SI' POR1 ; 810 : MSRTT0 = 'REDU' (STAB12.'MSRTHER1') ZMODL; 811 : ZMATP = 'REDU' ZMAT MO_POR; 812 : ZALM=('EXCO' 'ALPM' ZMATP 'MSR0')'CHAN' 'TYPE' 'SCALAIRE'; 813 : ZBI=('EXCO' 'COB' ZMATP 'MSR0')'CHAN' 'TYPE' 'SCALAIRE'; 814 : ZALPH = ('EXCO' 'ALPH' ZMATP 'MSR0') 815 : 'CHAN' 'TYPE' 'SCALAIRE' ; 816 : ZFAC = 3. * ( ZALM - ( ZBI * ZALPH ) ); 817 : ZFAC = 'CHAN' 'STRESSES' MO_POR ZFAC ; 818 : ZDT = 'REDU' ( TETA2 - WTAB.'TEMPERATURE_REFERENCE') 819 : MAI_PORi; 820 : ZDDT = 'CHAN' 'CHAM' ZDT MO_POR 'STRESSES' 'SCALAIRE'; 821 : MSRTT = ZFAC * ZDDT ; 822 : DMSRT0 = MSRTT - MSRTT0; 823 : 'FINSI' ; 824 : 'FINSI'; 825 : * calcul de dsig0 et fthe en casde chargement si necessaire************ 826 : 'SI' ( ITHER 'OU' WTAB.'MATVAR'); 827 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 828 : DSIGT0 = 'ELAS' ZMODL DEPST0 ZMAT ZVAR0; 829 : 'SINON'; 830 : DSIGT0 = 'ELAS' ZMODL DEPST0 ZMAT; 831 : 'FINSI'; 832 : 'SI' (POR1 'ET' ITHER);DSIGT0 = DSIGT0 + DMSRT0;'FINSI'; 833 : FTHE = 'BSIGMA' ZMODL DSIGT0 ZMAT ; 834 : 'FINSI'; 835 : *-------------- deformations imposes ********************************** 836 : 'SI' LOGDEF; 837 : DDEFOR0 ='REDU' (STAB12.'DEFOR2' - STAB12.'DEFOR1') ZMODL; 838 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 839 : DSI1 = 'ELAS' ZMODL DDEFOR0 ZMAT ZVAR0; 840 : 'SINON'; 841 : DSI1 = 'ELAS' ZMODL DDEFOR0 ZMAT; 842 : 'FINSI'; 843 : FDEF = 'BSIGMA' ZMODL DSI1 ZMAT ; 844 : 'FINSI'; 845 : * --------- ktangent et fefp****************************************** 846 : 'SI' IKTAN ; 847 : 'SI' IFEFP ; 848 : IKT_SAUV = VRAI ; 849 : 'SI' ('NEG' WTAB.'LASTKTAN' 'INCONNU') ; 850 : 'MESS' 'FEFP: Start with LASTKTAN' ; 851 : ZRIKTA = STAB12.'LASTKTAN' ; 852 : ZRAID = ZCLIM 'ET' ZRIKTA ; 853 : 'SINON' ; 854 : 'MESS' 'FEFP: Previous KTAN not available' ; 855 : ZRAID = ZRAID 'ET' ('KSIGMA' ZMODL ZSIG0 ZMAT) ; 856 : 'FINSI' ; 857 : 'SINON' ; 858 : 'SI' ('NEG' WTAB.'LASTKTAN' 'INCONNU') ; 859 : IKT_SAUV = VRAI ; 860 : 'SI' IPERT ; 861 : 'MESS' 'Matrice tangente par perturbation - ' 862 : 'Demarrage avec KTAN = LASTKTAN' ; 863 : 'SINON' ; 864 : 'MESS' 'Matrice tangente "coherente" - ' 865 : 'Demarrage avec KTAN = LASTKTAN' ; 866 : 'FINSI' ; 867 : ZRIKTA = STAB12.'LASTKTAN' ; 868 : ZRAID = ZCLIM 'ET' ZRIKTA ; 869 : 'SINON' ; 870 : 'SI' IPERT ; 871 : IKT_SAUV='NEG' WTAB.'K_TANGENT_ITER0' 872 : 'MAT_ELASTIQUE'; 873 : 'MESS' 'Matrice tangente par perturbation - ' 874 : 'Demarrage avec KTAN = rigidite elastique' ; 875 : 'SINON' ; 876 : IKT_SAUV = ('NEG' WTAB.'K_TANGENT_ITER0' 'MAT_ELASTIQUE') 877 : 'ET' ('NEG' WTAB.'K_TANGENT_ITER0' 'MAT_TANGENTE') ; 878 : 'SI' ('EGA' WTAB.'K_TANGENT_ITER0' 879 : 'MAT_ELASTIQUE') ; 880 : 'MESS' 'Matrice tangente "coherente" - ' 881 : 'Demarrage avec KTAN = rigidite elastique' ; 882 : 'SINON' ; 883 : 'MESS' 'Matrice tangente "coherente" - ' 884 : 'Demarrage avec KTAN (DTTAN = 0.)' ; 885 : DTTAN = 0. ; 886 : ZRIKTA = 'KTAN' ZMODL ZSIG0 ZVAR0 ZMAT 887 : 'PREC' ZPREK 'DT ' DTTAN ZKTASYM ; 888 : ZRAID = ZCLIM 'ET' ZRIKTA ; 889 : 'FINSI' ; 890 : 'FINSI' ; 891 : 'FINSI' ; 892 : 'FINSI' ; 893 : 'FINSI' ; 894 : *-------- en grands deplacements option K_SIGMA *********************** 895 : * 896 : 'SI' (IGRD 'ET' ('NON' HPP_EPS)); 897 : 'SI' (IKSIA 'ET' ('NON' IFEFP)) ; 898 : KSI1 = 'KSIGMA' ZMODL ZSIG0 ZMAT ; 899 : ZRAIDINI=ZRAID; 900 : ZRAID = ZRAID 'ET' KSI1 ; 901 : 'FINSI' ; 902 : 'FINSI' ; 903 : 904 : * Y a-t-il des forces non conservatives ( forces suiveuses)? ************ 905 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 906 : * on ajoute l indice ADDI_MATRICE pour signaler a char_meca qu on 907 : * souhaite aussi l operateur linearisé des Forces NL de charmeca 908 : PRECED . 'ADDI_MATRICE' = vrai; 909 : TFP22= CHARMECA PRECED WTAB.'T_FINAL'; 910 : PRECED . 'ADDI_MATRICE' = faux; 911 : * FP22 = F^suiv_n+1 912 : 'SI' ('EXIS' TFP22 'ADDI_SECOND'); 913 : FP22 = TFP22.'ADDI_SECOND';'FINS'; 914 : 'SI' ('EXIS' TFP22 'ADDI_MATRICE'); 915 : ZRAID=ZRAID 'ET' TFP22.'ADDI_MATRICE'; 'FINSI'; 916 : * FP0 = F^suiv_n 917 : TFP0= CHARMECA PRECED TEMPS0;; 918 : 'SI'('EXIS' TFP0 'ADDI_SECOND');FP0=TFP0.'ADDI_SECOND';'FINS'; 919 : 'SI' ('EXIS' TFP0 'ADDI_MATRICE'); 920 : ZRAID=ZRAID 'ET' TFP0.'ADDI_MATRICE'; 921 : 'FINSI'; 922 : * et pas 'ADDI_MATRICE' 923 : MZPRES0 = 'MAXI' 'ABS' FP0; MZPRES = 'MAXI' 'ABS' FP22; 924 : DMZPRES = MZPRES - MZPRES0 ; 925 : FP022 = 'COPIER' FP22;COEFP=1.D0; 926 : 'FINSI'; 927 : * -----------calcul de la partie constante du second membre ********** 928 : * en consolidation 929 : * ZFP1 est cense contenir : - B0*SIG0 et 930 : * DT* (1-TETA)*FI0 + DT*H*P 931 : * 932 : * dans ZFCONSTA on mets le second membre de u ************************** 933 : * 934 : ZFCONSTA = 'COPIER' ZFEXT2; 935 : * en dynamique ******************************************************** 936 : * ZFP1 est cense contenir : F0 + 4/DT*M*V0 - B0*SIG0 937 : 'SI' IDYN ; 938 : UNSURH = 1. / STAB12.'DT'; 939 : ZFP1 = WTAB.'FREA1' ; 940 : ZDYFEXT = ZFCONSTA 'ENLEVER' 'FLX'; 941 : XXX1 = ZFCONSTA + ZFP1; 942 : 'DETR' ZFCONSTA; 943 : ZFCONSTA = XXX1; 944 : 'FINSI'; 945 : ZFEXT = ZFCONSTA 'ENLEVER' 'FLX'; 946 : *---------deplacement (ou jeu) e imposer e la fin du pas ************* 947 : * on separe les efforts ZFEXT (=F^ext_n+1) *************************** 948 : * et deplacement (ou jeu) ZFLX1 (u^imp_n+1) a imposer a la fin du pas 949 : ZFLX1 = 'EXCO' ZFCONSTA 'FLX' 'NOID' 'FLX' 'NATURE' 'DISCRET'; 950 : 'SI' ('NEG' STAB12.'FFROT' 'INCONNU'); FFROT = STAB12.'FFROT'; 951 : 'SINON' ; FFROT=ZFEXT * 0; 'FINSI'; 952 : FFROTP = FFROT; 953 : * calcul des forces externes deja equilibrees au debut du pas ******** 954 : * par B*SIGMA : ZF1 = F^int_n = B*sigma_n + K^cst*u_n 955 : ZF1 = 'BSIGMA' ZMODL ZSIG0 ZMAT ; 956 : 'SI' IRCON; 957 : ZF1 =ZF1 + ('REDU' MAI2 ((WTAB.'RIGIDITE_CONSTANTE')*ZU1)); 958 : 'FINSI'; 959 : 'SI' IDYN ; FFDYN = 'COPIER' ZF1; 'FINSI'; 960 : 'SI' ISOL ; 961 : GRAP0= 'GRAD' MO_POR ZU1 MA_POR0 'CONS' ; 962 : XXX1 = 'GRAD' MO_POR ZU1 MA_POR 'CONS' ; 963 : XXXS =((1.- WTAB. 'TETA' )*GRAP0)+ (WTAB. 'TETA' * XXX1); 964 : XXX2 = STAB12.'DT' * ('GNFL' MO_POR XXXS) ; 965 : XXX3 = ZF1 ; 966 : ZF1 = XXX3 - XXX2;'DETR' XXX3; 967 : 'DETR' XXX2 ; 968 : 'FINSI'; 969 : * initialisation des variables forces et deplacement******************* 970 : * zzd est le deplacement au pas precedent (=u_n) et ZLX=lambda_n 971 : ZZD = 'ENLEVER' ZU1 'LX'; 972 : ZLX = ZU1 'EXCO' 'LX' 'NOID' 'LX' 'NATURE' 'DIFFUS'; 973 : * --------- flxini est la partie des FLX deja realisee au debut du pas 974 : FLXINI= ZZD * ZCLIM; 975 : * FREAP : -1*reactions du pas precedent (=F^reac_n) 976 : FREAP = ZLX * ZCLIM; 977 : FEXT0 = ZF1 + FREAP; 978 : * FEXT0 est le chargement externe (sans reactions vu par la 979 : * structure le pas d'avant) = F^ext_n = F^int_n - F^reac_n 980 : * 981 : * on va calculer le premier residu c'est a dire le desequilibre ******* 982 : * entre les forces externes et le calcul B*SIGMA. 983 : * le sigma qui sert est celui qui existerait si le champ de 984 : * deplacement ne changeait pas (ZU1). faire attention aux FLX 985 : * En pilotage on reprend ce residu que l'on multiplie par COEPI 986 : * XXX1 = [F^ext_n+1 ; Du^imp] 987 : * DFEXT0 = increment des forces et des FLX a imposer (le residu 988 : * du pas precedent) = [DF^ext ; Du^imp] 989 : XXX1 = ZFCONSTA - FLXINI ; 990 : DFEXT0 = XXX1 - FEXT0; 991 : * si pression suiveuse dfext0 contient en plus l'increment des forces 992 : * de pression du uniquement a la reactualisation de la geometrie (sans 993 : * augmentation du module) 994 : * mais comme F^int_n equilibre deja F^ext_n + F^suiv_n +... et qu'on est 995 : * toujours sur config_n, on doit avoir : DFEXT0= [DF^ext ; Du^imp] 996 : * avec DF^ext qui ne contient pas de forces suiveuses (...a vérifier) 997 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; DFEXT0 = DFEXT0 + FP0;'FINSI'; 998 : DFEXT0F = DFEXT0 'ENLEVER' 'FLX'; 999 : DFEXT0L = DFEXT0 'EXCO' 'FLX' 'NOID' 'FLX'; 1000 : *DFEXT0 = [DFEXT0F ; DFEXT0L] 1001 : * = [F^ext_n+1 - (F^int_n - F^reac_n - F^suiv_n) ; Du^imp] 1002 : * residu = forces exterieures sans reactions (avec des termes supplement 1003 : * le cas echeant p.ex. en dynamique ou en poreux) - forces interieures 1004 : * et increment des relations imposees ---> la resolution fournira du et 1005 : XXX2 = XXX1 + FTHE + FDEF; 1006 : * RESIDU = [F^ext_n+1 + F^ther_n+1 + F^defi_n+1 - F^int_n ; Du^imp] 1007 : RESIDU = XXX2 - ZF1;'DETR' XXX1; 'DETR' XXX2; 1008 : ZDFINI = 'COPIER' DFEXT0 ; 1009 : ZFPLO= ZF1 - FTHE - FDEF; 1010 : 'SI' (ITHER 'OU' WTAB.'MATVAR') ;ZDFINI=ZDFINI + FTHE;'FINSI'; 1011 : 'SI' LOGDEF; ZDFINI= ZDFINI + FDEF; 'FINSI'; 1012 : 'SI' WTAB.'PROCEDURE_CHAR_MECA' ; 1013 : * mess ' fp22 ' ; list resu fp22; 1014 : RESIDU = RESIDU + FP22 ; 1015 : * on tient compte de l'increment des forces suiveuses en direction et en 1016 : * module 1017 : ZDFINI = ZDFINI + FP22 - FP0 ; 1018 : 'FINSI'; 1019 : * ici, on a : 1020 : * RESIDU = [F^ext_n+1 + F^ther_n+1 + F^defi_n+1 + F^suiv_n+1 1021 : * - F^int_n ; Du^imp] 1022 : * = [ DF^tot ; Du^imp] 1023 : * ZDFINI = [F^ext_n+1 + F^ther_n+1 + F^defi_n+1 + F^suiv_n+1 1024 : * - (F^int_n - F^reac_n) ; Du^imp] 1025 : * 1026 : IMPO12=FAUX;XXX1 = 'EXTR' ZCLIM 'MAIL' 'UNIL'; 1027 : 'SI' ( ('NBEL' XXX1) > 0); 1028 : IMPO12 = VRAI; 1029 : DIMPO12='REDU' DFEXT0L XXX1; 1030 : DIMPOV= DFEXT0L - DIMPO12; 1031 : 'FINSI'; 1032 : stab12.'SECOND_MEMBRE' = residu * 1.; 1033 : 1034 : ************************************************************************ 1035 : *** 1ERE RESOLUTION *** 1036 : ************************************************************************ 1037 : 1038 : 'SI' ('EXIS' STAB12 'RIBLO_M' ) ; 1039 : 'SI' ( WTAB. 'CAFROTTE' ); 1040 : ZDEP1 BID BID BID BID = 'RESOU' ZRAID RESIDU 'INIB' 1041 : STAB12.'RIBLO_M' STAB12.'LISEA_M' FFROT; 1042 : 'SINON'; 1043 : ZDEP1 BID BID BID = 'RESOU' ZRAID RESIDU 'INIB' 1044 : STAB12.'RIBLO_M' STAB12.'LISEA_M' ; 1045 : 'FINSI'; 1046 : 'SINON'; 1047 : 'SI' (WTAB. 'CAFROTTE'); 1048 : ZDEP1 = 'RESOU' ZRAID RESIDU FFROT; 1049 : 'SINON'; 1050 : ZDEP1 = 'RESOU' ZRAID RESIDU; 1051 : 'FINSI'; 1052 : 'FINSI'; 1053 : ZRAID_T = 'EXTR' ZRAID 'CONT'; 1054 : 'SI' IDYN; STAB12.'ZRAIDV'= ZRAID; 'FINSI'; 1055 : 'SI' ('EXIS' ZRAID_T 'NITER'); 1056 : STAB12.'RIBLO_M' = ZRAID_T. 7 ; 1057 : STAB12.'LISEA_M' = ZRAID_T. 6 ; 1058 : 'FINSI'; 1059 : * RENORMALISATION de du (ajout bp le 28/11/2012) **************** 1060 : 'SI' (exis WTAB 'RENORMALISATION'); 1061 : 'SI' (WTAB . 'RENORMALISATION'); 1062 : * juste apres le resou, 1063 : * on calcule et on limite ZDEP1 de l iteration 1064 : * en limitant DEPS1 par MAXDEFOR 1065 : coefmul = 1.; 1066 : DEPS1 = EPSI 'LINE' ZMODL ZDEP1 ZMAT; 1067 : DPS1MAX = MAXI 'ABS' DEPS1 'AVEC' MLDEFOR ; 1068 : 'SI' (DPS1MAX > WTAB . 'MAXDEFOR'); 1069 : coefmul = WTAB . 'MAXDEFOR' / DPS1MAX; 1070 : ZDEP1 = coefmul * ZDEP1; 1071 : mess 'MAXDEFOR dépassé : Renormalisation initiale par ' coefmul; 1072 : 'FINSI'; 1073 : 'FINS'; 1074 : 'FINS'; 1075 : * On sauve le deplacement initial pour la convergence forcee *********** 1076 : 'SI' ('EXIS' WTAB 'DEPI'); 1077 : zdeptini = WTAB.'DEPI'; 1078 : 'SINON'; 1079 : zdeptini = zdep1; 1080 : 'FINSI'; 1081 : * 1082 : * calcul d'une norme pour la convergence************************** 1083 : * 1084 : XXX1= ZFEXT; 1085 : 'SI' WTAB.'PROCEDURE_CHAR_MECA';XXX1=ZFEXT+FP22;'FINSI'; 1086 : ZDEP1P50 = ZDEP1 + 1D-50 ; 1087 : XDENO='XTY' ZDEP1P50 ( XXX1 -( RESIDU 'EXCO' 1088 : 'FLX' 'NOID' 'FLX' 'NATURE' 'DISCRET')) MLPRIM MLDUAL; 1089 : MZDEP1M = 'MAXI' ZDEP1P50 'ABS' 'AVEC' MLDEPL; 1090 : MZFM = 'MAXI' (ZF1 + FTHE + FDEF) 'ABS' 'AVEC' MLDUAL; 1091 : MZFM = MZFM + 1D-50 ; 1092 : XDENO1 = 'ABS' XDENO + (MZFM * MZDEP1M); 1093 : XDENO=XDENO1/MZDEP1M; 1094 : XDENO = XDENO + MZFM; 1095 : 'SI' TSTMOM ; 1096 : XDENOM = XDENO1/('MAXI' ZDEP1P50 'ABS' 'AVEC' MLROTA); 1097 : 'FINSI' ; 1098 : 'SI' IPILOT ; 1099 : 'SI' ( WTAB.'AUTODEUX' ) ; 1100 : XDENO = STAB12.'XDENO'; 1101 : XDENOM = STAB12.'XDENOM'; 1102 : 'FINSI'; 1103 : 'FINSI'; 1104 : 'SI' ('NON' WTAB.'CONV'); 1105 : XDENO = STAB12.'XDENO'; 1106 : XDENOM = STAB12.'XDENOM'; 1107 : 'FINSI'; 1108 : 1109 : IAFAIR=FAUX; 1110 : 'SI' WTAB.'CONV'; 1111 : STAB12.'INCREMENT' = 'COPIER' ZDFINI ; 'FINSI'; 1112 : RESIDNOR = 'COPIER' RESIDU ; 1113 : 'SI' IPILOT; 1114 : XXX3=DFEXT0F * ( 1-COEPI) ; 1115 : XXX2 = ZFEXT - XXX3;'DETR' XXX3; 1116 : 'DETR' ZFEXT; ;ZFEXT = XXX2; 1117 : XXX1 = RESIDU * COEPI; 'DETR' RESIDU; 1118 : XXX2 = 1.D0 -COEPI * FREAP;RESIDU = XXX1 + XXX2; 1119 : 'SI' IMPO12; 1120 : RESIDU = 1.D0 - COEPI * DIMPO12 + RESIDU; 1121 : 'FINSI'; 1122 : IAFAIR=VRAI; 1123 : 'FINSI'; 1124 : * 1125 : * petite correction du residu pour esperer gagner du temps ************ 1126 : * 1127 : INIT = FAUX ; 1128 : 'SI'(('NEG' STAB12.'FNONL' 'INCONNU') 'ET' 1129 : (WTAB.'INITIALISATION')); 1130 : 'SI' IPILOT; 1131 : 'SI' ( WTAB.'AUTODEUX' 'ET' (COEPI 'NEG' 1.D0)) ; 1132 : 'MESS' 'Initialisation a partir du pas precedent ' COEPI; 1133 : IAFAIR=VRAI; INIT = VRAI; 1134 : XXX1= RED1 * STAB12.'FNONL'; 1135 : XXX2= XXX1 + RESIDU ; 1136 : 'DETR' RESIDU ;'DETR' XXX1 ;RESIDU =XXX2; 1137 : 'FINSI' ; 1138 : 'SINON'; 1139 : * on fait la correction si le pas precedent a converge 1140 : 'SI' WTAB.'CONV'; 1141 : * on fait la correction si le pas precedent etait non lineaire. 1142 : 'SI' (('MAXI' 'ABS' STAB12.'FNONL') > (ZPREC * XDENO)) ; 1143 : * on enleve le residu du pas precedent pour recuperer l'increment 1144 : * nominal du second membre e imposer f1. 1145 : * f2 et l'increment du second membre du pas precedent 1146 : STAB12.'INCREMENT'=STAB12.'INCREMENT' - STAB12.'RESIDU'; 1147 : zdeps = WTAB.'ZDEP1' + zdep1; 1148 : FFNO= 'XTY' STAB12.'FNONL' zdeps MLDUAL MLPRIM; 1149 : F1 = STAB12.'INCREMENT' ; 1150 : F2 = INCRPREC ; 1151 : f12 = 'XTY' f1 zdeps MLDUAL MLPRIM; 1152 : f22 = 'XTY' f2 zdeps MLDUAL MLPRIM; 1153 : AMPL = f12/(f22 + 1d-30); 1154 : DTPREC=1E30; AMPLT = 0; 1155 : 'SI' ('NEG' WTAB.'DTPREC' 'INCONNU'); 1156 : DTPREC = WTAB.'DTPREC'; 1157 : 'SI' (DTPREC > 1E-30); 1158 : AMPLT=WTAB.'DT_INIT' /DTPREC; 1159 : 'FINSI'; 1160 : 'FINSI'; 1161 : * Le chargement n'est il pas de fluage ou de thermique ?'; 1162 : XDCOMP = ('XTY' ZDEP1 F1 MLPRIM MLDUAL) ; 1163 : 'SI' (('ABS' XDCOMP) < (ZPREC * XDENO * mzdep1m) 1164 : 'OU' (('ABS' FFNO) > (('ABS' F22) * 2.e2 ))); 1165 : DTPREC = WTAB.'DTPREC'; 1166 : AMPL=AMPLT; 1167 : * la decharge est-elle significative 1168 : 'SI'((F12/(f22 + 1.d-20)) < -0.05);ampl=0.;'FINS'; 1169 : STAB12.'INITEMPS'=VRAI;LOGTEMP=FAUX;; 1170 : 'MESS' 1171 : 'Pas d increment de charge, initialisation calculee avec le temps'; 1172 : 'SINON'; 1173 : AMPL = F12 / (F22 + 1d-30); 1174 : LOGTEMP=STAB12.'INITEMPS'; 1175 : STAB12.'INITEMPS'=FAUX; 1176 : 'FINSI'; 1177 : AMPL = MINI (prog AMPL AMPLT); 1178 : 'SI' ((AMPL > 0) 'ET' (AMPL < 2e1)) ; 1179 : 'MESS' 'Initialisation a partir de la solution precedente Coeff' 1180 : AMPL; 1181 : XXX1 = AMPL * STAB12.'FNONL'; 1182 : XXX2 =RESIDU+ XXX1; 1183 : 'DETR' XXX1;'DETR' RESIDU; 1184 : RESIDU = XXX2; 1185 : IAFAIR=VRAI; INIT = VRAI; 1186 : 'FINSI'; 1187 : 'FINSI'; 1188 : 'FINSI'; 1189 : 'FINSI'; 1190 : 'FINSI'; 1191 : WTAB.'ZDEP1'=zdep1; 1192 : * 1193 : * initialisation en plastique ***************************************** 1194 : * 1195 : 'SI' IPLAVI ; 1196 : 'SI' ('NEG' WTAB.'MOVA' 'RIEN') ; 1197 : ACC0 = 'EXCO' (WTAB.'MOVA') ZVAR0 ; 1198 : 'FINSI' ; 1199 : 'FINSI' ; 1200 : * 1201 : * debut des iterations internes boucle etiquette ******************** 1202 : * 1203 : IKT = FAUX ; 1204 : IPREM = VRAI ; RECA_K = FAUX; RECA_N = 0; 1205 : DEPSTP = 'ZERO' ZMODL 'DEFORMATIONS' ; 1206 : DEPSTK = DEPSTP ; 1207 : * 1208 : * initialisation acceleration de convergence ******************** 1209 : * 1210 : iafair = vrai; 1211 : PASTEST = FAUX; 1212 : ZITAC= 0 ; 1213 : * on peut mettre n'importe quoi c'est pour 1214 : * ne pas faire de tests dans la boucle 1215 : ACFP1 = 'COPIER' ZFEXT2 * 0; ACFP2 = ACFP1 ; ZDEPLD = ACFP1; 1216 : ACFP3 = ACFP1 ; ACFEP1 = ACFP1; 1217 : ACFEP2 = ACFP1 ; FCORF = 'COPIER' FREAP; 1218 : * initialisation du meilleur critere 1219 : XCONVMIN = 1e20; DPSMREF=0; 1220 : XCONV = 0; XCONVP=1.; 1221 : NSOINCR= 1; 1222 : 'SI' ('NEG' WTAB.'SOUS_INCREMENT' 'INCONNU') ; 1223 : NSOINCR = WTAB.'SOUS_INCREMENT' ; 1224 : 'FINSI'; 1225 : NONCONV = FAUX; 1226 : CORREC=0; 1227 : PASREINI=VRAI; 1228 : coefmt=1.; 1229 : * 1230 : * initialisation des messages pour l'iteration en cours **************** 1231 : * 1232 : 'SI' IKLFFF ; 1233 : 'MESSAGE' 1234 : ' Iter Nplas Critere Deps.max Eps.max Crit.flex' 1235 : ; 1236 : 'SINON'; 1237 : 'MESSAGE' 1238 : ' Iter Nplas Fresidu Deps.max Eps.max Mresidu ' 1239 : ; 1240 : 'FINSI'; 1241 : * 1242 : *======================================================================= 1243 : *======= DEBUT DE LA BOUCLE DE CONVERGENCE ======= 1244 : *======================================================================= 1245 : 'REPETER' ETIQ ; 1246 : *IT est le compteur de ETIQ, ITACC doit etre =< 0 pour qu'on accelere 1247 : IT= IT + 1 ; 1248 : ITACC = ITACC - 1; 1249 : ZITAC = ZITAC + 1 ; 1250 : * 1251 : *--------------------------------------------------------------------- 1252 : * La force motrice de l'iteration est fixee: RESIDU 1253 : * on va calculer un nouveau champ de deplacement 1254 : * 1255 : * calcul de l'increment de l'increment de deplacement zdep1 1256 : * par resolution lineaire 1257 : *----------------------------------------------------------------------- 1258 : * 1259 : * petits travaux pour acceleration de convergence 1260 : * 1261 : CORRECP = CORREC; 1262 : CORREC = 0; 1263 : PASTEST=FAUX; 1264 : ACFP0 = (RESIDU - FCORF) 'ENLE' FLX ; 1265 : ACFEP0 = ACFP0; 1266 : ACFEP0 = ACFEP0 - CORRECP ; 1267 : 'SI' IGRD ; 1268 : * si (it>2 et (Depsi>0.1 ou URG ou itacc>4)) 1269 : * ou si on l'impose via nrecalc (FAUX ici)... 1270 : * rem : 0.1 est la valeur par defaut de EKREAC (= . 'REAC_GRANDS') 1271 : 'SI' ((&etiq '>EG' 2) 'ET' ((DEKREAC1 > EKREAC) 1272 : 'OU' URG 'OU'(ITACC >EG 4)) 'OU' (FAUX )); 1273 : URG=FAUX; 1274 : sigttcca= zsigf ; 1275 : geor='FORM' zdept; 1276 : zdepr = zdept; 1277 : c_zdepr = faux; 1278 : RECA_K = VRAI; 1279 : RECA_N = RECA_N + 1; 1280 : 'SI' (RECA_N > 20) ; nonconv = vrai; 'FINSI'; 1281 : txt_k = chai ' Recalcul de K (= K^el'; 1282 : ritc = 'RIGI' zmodl zmat; 1283 : ZRAID= ritc 'ET' zclim; 1284 : 'SI' iksia ; 1285 : ksigtc= 'KSIGM' sigttcca zmodl zmat; 1286 : ZRAID= ZRAID 'ET' ksigtc; 1287 : 'FINSI'; 1288 : 'SI' IRCON; 1289 : ZRAID = ZRAID 'ET' (WTAB . 'RIGIDITE_CONSTANTE'); 1290 : txt_k = chai txt_k ' + K^cst'; 1291 : 'FINSI'; 1292 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 1293 : PRECED . 'ADDI_MATRICE' = vrai; 1294 : TFP22= CHARMECA PRECED WTAB.'T_FINAL'; 1295 : PRECED . 'ADDI_MATRICE' = faux; 1296 : 'SI' (EXIS TFP22 'ADDI_MATRICE'); 1297 : zraid = zraid 'ET' TFP22.'ADDI_MATRICE'; 1298 : txt_k = chai txt_k ' + K^cent'; 1299 : 'FINSI'; 1300 : 'FINSI'; 1301 : 'SI' IDYN; 1302 : * bp : en toute rigueur, il faudrait aussi recalculer la MASSE ... 1303 : * et ajouter l'amortissement le cas échéant ... 1304 : MMA= WTAB.'MASSE' * ( 4.D0 / WTAB.'DT' / WTAB.'DT'); 1305 : ZRAID= ZRAID 'ET' MMA; 1306 : 'FINSI'; 1307 : mess ( chai txt_k ' ) dans config deformee ' DEKREAC1 ); 1308 : 'FORM' GEOM1; 1309 : 'DETR' GEOR; 1310 : * on impose le recalcul de K a la prochaine iteration si it=2 1311 : 'SI' (IT 'EGA' 2) ;ITACC = 5 ; 'SINO' ; ITACC = 3 ;'FINS' ; 1312 : GR_U_K = GR_U_FIN ; 1313 : zdeptm = zdept ; 1314 : 'FINSI'; 1315 : 'FINSI'; 1316 : * 1317 : * acceleration de convergence effective ------------------------------ 1318 : * 1319 : 'SI' (('NON' NONCONV) 'OU' ('NON' ZICONV) ); 1320 : 'SI' (('MULT' IT ZNACCE) 'ET' (ITACC '<EG' 0)) ; 1321 : 'SI' (IT > 3); 1322 : CORREC = 'ACT3' ACFEP2 ACFEP1 ACFEP0 1323 : ACFP3 ACFP2 ACFP1 ACFP0 ; 1324 : RESIDU = RESIDU - CORREC; 1325 : 'FINSI'; 1326 : 'FINSI'; 1327 : 'SI' (IT > 3); 1328 : 'DETR' ACFP3; 1329 : 'DETR' ACFEP2; 1330 : 'FINSI'; 1331 : 'FINSI'; 1332 : ACFP3 = ACFP2 ; ACFP2 = ACFP1 ; ACFP1 = ACFP0 ; 1333 : ACFEP2 = ACFEP1 ; ACFEP1 = ACFEP0 ; 1334 : * 1335 : * Resolution --------------------------------------------------------- 1336 : * on obtient ZDEP1 = [ du ; Dlx ] 1337 : 'SI' IAFAIR; 1338 : 'SI' (('NEG' WTAB.'RIBLO_M' 'INCONNU') 'ET' 1339 : (IPREM 'OU' RECA_K) ) ; 1340 : 'SI' ( WTAB.'CAFROTTE' ); 1341 : ZDEP1 BID BID BID BID = 'RESOU' ZRAID RESIDU 'INIB' 1342 : STAB12.'RIBLO_M' STAB12.'LISEA_M' FFROT; 1343 : 'SINON'; 1344 : ZDEP1 BID BID BID = 'RESOU' ZRAID RESIDU 'INIB' 1345 : STAB12.'RIBLO_M' STAB12.'LISEA_M' ; 1346 : 'FINSI'; 1347 : 'SINON'; 1348 : 'SI' ( WTAB.'CAFROTTE' ); 1349 : ZDEP1 = 'RESOU' ZRAID RESIDU FFROT ; 1350 : 'SINON'; 1351 : ZDEP1 = 'RESOU' ZRAID RESIDU; 1352 : 'SI' (WTAB.'MAN' 'ET' IPREM); 1353 : ordre=WTAB.'ORDRE' ; 1354 : ZDEP2 IOUT = corman ZRAIDINI ZMODL ZMAT ordre 1355 : ZU1 ZSIG0 RESIDNOR WTAB ; 1356 : 'SI' (IOUT 'EGA' 1) ;ZDEP1=ZDEP2;'FINSI'; 1357 : 'FINSI'; 1358 : 'FINSI'; 1359 : 'FINSI'; 1360 : 1361 : * 1362 : ZRAID_T = 'EXTR' ZRAID 'CONT'; 1363 : 'SI' ('EXIS' ZRAID_T 'NITER'); 1364 : 'SI' IDYN ; STAB12.'ZRAIDV'= ZRAID; 'FINSI'; 1365 : STAB12.'RIBLO_M' = ZRAID_T.7; 1366 : STAB12.'LISEA_M' = ZRAID_T.6; 1367 : 'FINSI'; 1368 : 'FINSI'; 1369 : * RENORMALISATION de du (ajout bp le 28/11/2012) *********************** 1370 : 'SI' ('EXIS' WTAB 'RENORMALISATION'); 1371 : 'SI' (WTAB . 'RENORMALISATION'); 1372 : * juste apres le resou, 1373 : * on calcule et on limite ZDEP1 de l iteration 1374 : * en limitant DEPS1 par MAXDEFOR 1375 : coefmul = 1.; 1376 : DEPS1 = EPSI 'LINE' ZMODL ZDEP1 ZMAT; 1377 : DPS1MAX = MAXI 'ABS' DEPS1 'AVEC' MLDEFOR ; 1378 : 'SI' (DPS1MAX > WTAB . 'MAXDEFOR'); 1379 : coefmul = WTAB . 'MAXDEFOR' / DPS1MAX; 1380 : 'SI' IPREM; 1381 : ZDEP1 = coefmul * ZDEP1 ; 1382 : 'SINO'; 1383 : ZDLX0 = ZDEPTP 'EXCO' 'LX' 'NOID' 'LX'; 1384 : ZDEP1 = (coefmul * ZDEP1) + ((1.-coefmul) * ZDLX0); 1385 : 'DETR' ZDLX0; 1386 : 'FINS'; 1387 : 'MESS' 'MAXDEFOR dépassé : Renormalisation de l iteration par ' 1388 : coefmul; 1389 : 'FINSI'; 1390 : 'FINSI'; 1391 : 'FINSI'; 1392 : 'REPETER' bzdept2 7; 1393 : * 1394 : * verif sens ---------------------------------------------------------- 1395 : * 1396 : 'SI' WTAB.'STABILITE'; 1397 : sens = xty ((residu enle 'FLX') + 1398 : (-1 * residu exco 'FLX' 'NOID' 'FLX')) zdep1 MLDUAL MLPRIM; 1399 : 'SI' (SENS < 0); 1400 : ZDEP1 = (zdep1 enle lx) * -0.2 et (zdep1 exco 'LX' 'NOID' 'LX') ; 1401 : 'MESS' 'instabilite detectee'; 1402 : 'FINSI'; 1403 : 'FINSI'; 1404 : * 1405 : * 1ere iteration ------------------------------------------------------ 1406 : 'SI' IPREM ; 1407 : ZDEPT = 'COPIER' ZDEP1 ; 1408 : ZDEPTM = ZDEPT; 1409 : ZDEPTP = ZDEPT; 1410 : ZDELA = 'COPIER' ZDEPT ; 1411 : 'SI' (WTAB . 'MODAL') ; 1412 : 'SI' ('EXISTE' WTAB 'MODCONTA') ; 1413 : mamoco1 = 'EXTR' (zdept 'ENLEVER' 'LX') 'MAIL' ; 1414 : 'FINSI'; 1415 : 'FINSI' ; 1416 : * iprem est faux: on est apres la premiere operation--------------- 1417 : * 1418 : 'SINON'; 1419 : * zdept est l'increment de deplacement total avec les lagrangiens 1420 : * de la solution complete 1421 : XXX1 = ZDEPT 'ENLEVER' 'LX' ; 1422 : zdeptp=zdept; 1423 : zsigfp = zsigf; 1424 : fcorfp = fcorf; 1425 : * on cumule les deplacements mais pas les lx 1426 : * Du^(i) = Du^(i-1) + du ; Dlx^(i) = 0 + Dlx 1427 : ZDEPT = XXX1 + ZDEP1 ; 1428 : 'DETR' XXX1 ; 1429 : 'FINSI' ; 1430 : * 1431 : 'SI' (WTAB . 'MODAL') ; 1432 : 'SI' ('EXISTE' WTAB 'MODCONTA') ; 1433 : * mettre les point materiels dans zdept 1434 : zdeptu1 = 'REDU' zdept mamoco1 ; 1435 : ch_dco = 'RECO' zdeptu1 ZMODL ZMATIN ; 1436 : ZDEPT = ('EXCO' zdept 'LX' 'LX') 'ET' zdeptu1 et ch_dco ; 1437 : 'FINSI'; 1438 : 'FINSI' ; 1439 : * boucle de reduction de zdept si necessaire 1440 : 1441 : ACC_Q = FAUX; ACC_R = VRAI; 1442 : 'REPETER' bzdept 40; 1443 : nsoincr = 1; 1444 : *--- CAS 1 ------------------------------------------------------------* 1445 : * Limitation du maximum d'increment de deformation (DPSMAX) : * 1446 : * En non-convergence, on limite l'increment de deformation pour faci- * 1447 : * -liter l'integration du comportement. * 1448 : * En convergence normale, on limite l'increment de deformation max. * 1449 : * entre 2 iterations pour tenter d'eviter de partir dans le decors * 1450 : * en grands deplacement (Jacobien negatifs, etc...) * 1451 : * nul si mouvement corps rigide (contact...) : * 1452 : 'SI' ((IT '>' 5 ) 'ET' (DPSMAX '>' 0.)'ET' (&BZDEPT 'EGA' 1)) ; 1453 : coefmul = WTAB.maxdefor / (DPSMAX+1e-30) ; 1454 : * cas ou le residu augmente... 1455 : 'SI' (XCONV > TABCONV.(IT - 2) ) ; 1456 : * on n'a pas convergé ET DPSMAX trop grand : MAXDEFOR/zprec < DPSMAX 1457 : * ou trop petit : DPSMAX < 1E-4*zprec 1458 : 'SI' ((NONCONV 'ET' ((coefmul < zprec) 'OU' (dpsmax*1e4 < zprec))) ); 1459 : coefmul = coefmul * 1e-1; 1460 : ZDEPT = zdept* coefmul ; 1461 : 'SI' ((RED_URG > 1) 'ET' NONCONV); 1462 : zflx1 = flxini + ((zflx1 - flxini) * 0.5 ); 1463 : 'FINSI'; 1464 : RED_URG = RED_URG + 1; 1465 : ZNACCE = 999; 1466 : 'MESS' ' Renormalisation de l increment de deplacement' 1467 : dpsmax coefmul; 1468 : 'SI' (DEPSTDM '>' DEPSTREF) ; DEPSTREF = 2. * DEPSTDM ; 'FINS' ; 1469 : * Est-ce qu'on cycle des renormalisations en Non-convergence ? * 1470 : * On regarde le nombre d'iterations entre 2 renormalisations * 1471 : * & la valeur de XCONV. * 1472 : 'SI' NONCONV ; 1473 : 'SI' (ITNORM1 'EGA' 0) ; 1474 : ITNORM1 = IT ; 1475 : 'SINO' ; 1476 : 'SI' (DITNORM1 'EGA' 0) ; 1477 : XCONVNOR = 2. * XCONV ; 1478 : DITNORM1 = IT - ITNORM1 ; 1479 : ITNORM1 = IT ; 1480 : 'SINO' ; 1481 : 'SI' (XCONV '<EG' XCONVNOR) ; 1482 : XCONVNOR = 2. * XCONV ; 1483 : 'SI' ((IT - ITNORM1) 'EGA' DITNORM1) ; 1484 : NBCYCLE1 = NBCYCLE1 + 1 ; 1485 : 'SI' (NBCYCLE1 'EGA' 2) ; 1486 : 'MESS' 1487 : ' Renormalisation cyclique en non-convergence detectee ' ; 1488 : 'FINS' ; 1489 : 'FINS' ; 1490 : DITNORM1 = IT - ITNORM1 ; 1491 : ITNORM1 = IT ; 1492 : 'FINS' ; 1493 : 'FINS' ; 1494 : 'FINS' ; 1495 : 'FINS' ; 1496 : * 'SI' (coefmtt < 1.); 1497 : **pv zflx1 = flxini + ((zflx1 - flxini) * coefmul); 1498 : * coefmt=coefmtt; 1499 : * 'FINSI'; 1500 : 'FINSI' ; 1501 : 'FINSI' ; 1502 : * fin du cas ou le residu augmente... 1503 : 'FINSI'; 1504 : 1505 : * 1506 : *--- CAS 2 ------------------------------------------------------------* 1507 : * si on part dans les decors on redemarre a 0 1508 : 'SI' ((XCONV > 1E8) 'ET' PASREINI 'ET' ('NON' IPILOT)) ; 1509 : 'MESS' 'Reinitialisation du schema'; 1510 : XXX1 = ZDEPT 'ENLEVER' 'LX' ; 1511 : ZDEPT = ZDEPT - XXX1 ; 1512 : PASREINI=FAUX; 1513 : ITACC=3; 1514 : 'FINSI'; 1515 : *--- CAS 3 ------------------------------------------------------------* 1516 : 'SI' (('MULT' IT ZNACCE) 'ET' (ITACC '<EG' 0)) ; 1517 : * 1518 : * pilotage automatique 1519 : 'SI' IPILOT; 1520 : RED1 = STAB12.'AUTOREDU' ; 1521 : * 1522 : * reduction du critere de pilotage red2 sert d'incateur si 1523 : * pas accelere tous les 2 pas 1524 : 'SI' (IT 'EGA' 20 'OU' (IT 'EGA' 22 'ET' (RED2 'EGA' 0))); 1525 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1526 : RED2 = 1 ;ITACC=3; 1527 : 'FINSI'; 1528 : 'SI' (IT 'EGA' 40 'OU' (IT 'EGA' 42 'ET' (RED2 'EGA' 1))); 1529 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1530 : RED2 = 2 ;ITACC=3; 1531 : 'FINSI'; 1532 : 'SI' (IT 'EGA' 60 'OU' (IT 'EGA' 62 'ET' (RED2 'EGA' 2))); 1533 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1534 : RED2 = 3 ;ITACC=3; 1535 : 'FINSI'; 1536 : 'SI' (IT 'EGA' 80 'OU' (IT 'EGA' 82 'ET' (RED2 'EGA' 3))); 1537 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1538 : RED2 = 4 ;ITACC=3; 1539 : 'FINSI'; 1540 : 'SI' (IT 'EGA' 100 'OU' (IT 'EGA' 102 'ET' (RED2 'EGA' 4))); 1541 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1542 : RED2 = 5 ;ITACC=3; 1543 : 'FINSI'; 1544 : 'SI' (IT 'EGA' 120 'OU' (IT 'EGA' 122 'ET' (RED2 'EGA' 5))); 1545 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1546 : RED2 = 6 ;ITACC=3; 1547 : 'FINSI'; 1548 : 'SI' (IT 'EGA' 140 'OU' (IT 'EGA' 142 'ET' (RED2 'EGA' 5))); 1549 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1550 : RED2 = 7 ;ITACC=3; 1551 : 'FINSI'; 1552 : 'SI' (IT 'EGA' 160 'OU' (IT 'EGA' 162 'ET' (RED2 'EGA' 5))); 1553 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1554 : RED2 = 8 ;ITACC=3; 1555 : 'FINSI'; 1556 : 'SI' (IT 'EGA' 180 'OU' (IT 'EGA' 182 'ET' (RED2 'EGA' 5))); 1557 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1558 : RED2 = 9 ;ITACC=3; 1559 : 'FINSI'; 1560 : 'SI' (IT 'EGA' 200 'OU' (IT 'EGA' 202 'ET' (RED2 'EGA' 5))); 1561 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1562 : RED2 = 10 ;ITACC=3; 1563 : 'FINSI'; 1564 : 'SI' (IT 'EGA' 220 'OU' (IT 'EGA' 222 'ET' (RED2 'EGA' 5))); 1565 : STAB12.'AUTOREDU' = STAB12.'AUTOREDU' * 3. ; 1566 : RED2 = 11 ;ITACC=3; 1567 : 'FINSI'; 1568 : * 1569 : RED1 = RED1 / (STAB12.'AUTOREDU') ; 1570 : 'SI' (RED1 < 0.9) ; STAB12.AUTORED1 = 10 ; 'FINSI' ; 1571 : * 1572 : 'SI' ( STAB12.'AUTOREDU' > 1.D0 ) ; 1573 : 'MESS' 'On divise le critere de pilotage par ' 1574 : STAB12.'AUTOREDU'; 1575 : 'FINSI' ; 1576 : * 1577 : * test si snap back et si refus de l'acceleration 1578 : 'SI' IPLAVI ; 1579 : XXX2 = 'EXCO' ZDEPT 'LX' 'NOID' 'LX' ; 1580 : XXX1= 2. * XXX2;XXX3 = ZDEPT -XXX1; 1581 : 1582 : SRE = 'XTY' ZDFINI XXX3 MLDUAL MLPRIM; 1583 : 'SINON' ; 1584 : XXX1=COEPI * ZDELA;XXX3 = ZDEPT - XXX1; 1585 : XXX2 = 'EXCO' XXX3 'LX' 'NOID' 'LX'; 1586 : 'DETR' XXX1;'DETR' XXX3;XXX1=XXX2 *2.;XXX4=COEPI* ZDELA; 1587 : XXX3= ZDEPT - XXX4;'DETR' XXX4;XXX4=XXX3 -XXX1; 1588 : SRE = 'XTY' ZDFINI XXX4 MLDUAL MLPRIM ; 'DETR' XXX4; 1589 : 'FINSI' ; 1590 : 'DETR' XXX2 ;'DETR' XXX1; 'DETR' XXX3; 1591 : XXX1 = 'EXCO' ZDEPT 'LX' 'NOID' 'LX' ;XXX2=XXX1* 2.; 1592 : XXX3= ZDEPT - XXX2; 1593 : SRT = 'XTY' ZDFINI XXX3 MLDUAL MLPRIM; 1594 : 'DETR' XXX1 ; 'DETR' XXX2; 'DETR' XXX3; 1595 : * 1596 : ISNPB = FAUX; 1597 : 'SI' (SRT < 0) ; 1598 : ISNPB = VRAI ; 1599 : 'FINSI'; 1600 : * 1601 : OO = WTAB.AUTOCRIT ; 1602 : OO = OO / STAB12.'AUTOREDU' ; 1603 : U1MA = AUTOPILO ZDEPT (COEPI*ZDELA) ZMODLI ZMATIN WTAB; 1604 : AL1 = OO / U1MA ; 1605 : * al1 est le coefficient de normalisation 1606 : 'SI' (( al1 '>EG' 1.d0) 'ET' (coepi '>EG' 1.d0)) ; 1607 : * pour eviter d'aller au dela de alpha=1 on ignore le critere 1608 : AL1 = 1.d0 ; 1609 : 'FINSI' ; 1610 : 'SI'((AL1 '>' 1.D0) 'ET' (COEPI '>' 0.D0)); 1611 : 'SI' ( AL1 '>' (1.D0 /COEPI)); 1612 : AL1 = 1.D0 /COEPI; 1613 : 'FINSI';'FINSI'; 1614 : * normalisation 1615 : 1616 : PASTEST=VRAI;XXX1 = ZLX *( 1.d0 -AL1); 1617 : XXX3=ZDEPT * AL1;XXX2 = XXX3 + XXX1; 1618 : 'DETR' XXX3;ZDEPT=XXX2; 1619 : 'FINSI'; 1620 : 'SINON'; 1621 : 'SI' IPILOT ; 1622 : ** 1623 : * le calcul d'al1 est fait pour eviter la convergence 1624 : * s'il est externe a l'interval 0.5 --- 2. 1625 : OO = WTAB.'AUTOCRIT' ; 1626 : OO = OO / STAB12.'AUTOREDU' ; 1627 : U1MA = AUTOPILO ZDEPT (COEPI*ZDELA) ZMODLI ZMATIN WTAB; 1628 : AL1 = OO / U1MA ; 1629 : 'SI' (( AL1 '>EG' 1.d0) 'ET' (COEPI '>EG' 1.d0)) ; 1630 : AL1 = 1.d0 ; 1631 : 'FINSI' ; 1632 : 'FINSI' ; 1633 : 'FINSI'; 1634 : * 1635 : * garder les reactions pour le test de convergence 1636 : * 1637 : ZDEPLP = ZDEPL; 1638 : ZDEPL = ZDEPT 'EXCO' 'LX' 'NOID' 'LX' ; 1639 : 1640 : *---------------------------------------------------------------------- 1641 : * le nouveau champ est fixe on va tester l'equilibre(convergence) 1642 : * et calculer la force motrice pour l'iteration suivante 1643 : *---------------------------------------------------------------------- 1644 : * 1645 : * calcul de fcorf = lambda * m force de reaction ----------------- 1646 : * fcoru = m * u depimp (flx) 1647 : 1648 : 'DETRUIRE' FCORF; 1649 : * calcul du deplacement total u 1650 : ZDETOT = ZZD + ZDEPT; 1651 : XXX1= ZCLIM * ZDETOT; 1652 : * -1*reactions a l'iteration it 1653 : FCORF = 'ENLEVER' XXX1 'FLX'; 1654 : * valeur des relations imposees a l'iteration it 1655 : FCORU = 'EXCO' XXX1 'FLX' 'NOID' 'FLX'; 1656 : 'DETR' XXX1 ; 1657 : * 1658 : * dans le cas des modeles endommageables de Lemaitre, on ecoule 1659 : * en tenant compte, dans les iterations internes, de la variation du 1660 : * materiau avec la temperature 1661 : * 1662 : ZMATT = ZMAT ; 1663 : 'SI' ('ET' ('ET' ITHER ('OU' IENDOM IVIDOM ) ) WTAB.'MATVAR') ; 1664 : * on recupere certain materiau avec les parametres fct de la temperatue 1665 : * voir PAS_mate (il ne faut que la dependance thermique) 1666 : ZMATT = (WTAB.'MA_COMP') 'REDU' ZMODL; 1667 : 'FINSI'; 1668 : 1669 : 'SI' IFEFP; 1670 : * Update or total lagrangian ----------------------------------------- 1671 : 'SI' IFEFPUL; 1672 : * mess ' update lagrangian ZRIKTA'; 1673 : GEOM2 = 'FORM' ZDEPT ; 1674 : ZRIKTA ZSIGF ZVARF ZDEIF = 'ECFEFP' 1675 : ZMODL ZEPS0 ZVAR0 ZDEPT ZMAT ZPREK NITMA XUPDA; 1676 : 'SINON'; 1677 : * mess ' total lagrangian ZRIKTA'; 1678 : chp_z = ZDEPT + ZU1 ; 1679 : GEOM2 = 'FORM' chp_z ; 1680 : ZRIKTA ZSIGF ZVARF ZDEIF = 'ECFEFP' 1681 : ZMODL ZEPS0 ZVAR0 chp_z ZMAT ZPREK NITMA ; 1682 : chp_z = 1 ; 1683 : 'FINSI'; 1684 : FEQU2 = 'BSIGMA' ZMODL ZSIGF ZMAT ; 1685 : ZRAID = ZRIKTA 'ET' ZCLIM ; 1686 : 'FORM' GEOM1 ; 1687 : ** 1688 : XXX1 = 'EXCO' (WTAB.'MOVA') ZVARF ; 1689 : EPSM = 'MAXI' XXX1 'AVEC' MLDEFOR ; 1690 : ACC = 'ABS' ( XXX1 - ACC0 ) ; 1691 : *'DETR' XXX1 ; 1692 : MMC = 'MASQUE' ACC 'SUPERIEUR' 1.D-10 'SOMME' ; 1693 : 'SI' (MMC > MMCMAX) ; MMCMAX = MMC ; 'FINSI' ; 1694 : DPSMAXP = DPSMAX ; 1695 : DPSMAX = 'MAXI' ACC 'AVEC' MLDEFOR ; 1696 : DEPST = 'CHAN' 'TYPE' ZDEIF 'DEFORMATIONS' ; 1697 : 'SINON'; 1698 : * cas standard -------------------------------------------------------- 1699 : ZMAT05=ZMAT; 1700 : * 1701 : * calcul de l'increment de deformation elast totale DEPST-------- 1702 : * 1703 : * on essaye d'abord à configuration intermédiaire, et si ça rate au debut 1704 : SI (EPS_NLIN 'ET' IGRD); 1705 : coe1 = 0.211324865405187; 1706 : coe2 = 0.788675134594813; 1707 : zdepm = zdept * 0.5; 1708 : zdepm1 = zdept * coe1; 1709 : zdepm2 = zdept * coe2; 1710 : GEOTEMP= 'FORM' zdepm1; 1711 : DEPST1='EPSI' 'LINE' 'NOER' ZMODL ZDEPM ZMAT05 ; 1712 : 'FORM' geom1; 1713 : 'DETR' GEOTEMP; 1714 : GEOTEMP='FORM' zdepm2; 1715 : DEPST2='EPSI' 'LINE' 'NOER' ZMODL ZDEPM ZMAT05 ; 1716 : 'FORM' geom1; 1717 : 'DETR' GEOTEMP; 1718 : PASOK = FAUX; 1719 : 'SI' ((NBPART < 1) 'OU' PARTLOCA 'OU' ('NON' PARALLEL)); 1720 : 'SI' ('EGA' ('TYPE' DEPST2) 'ENTIER'); PASOK = VRAI; 'FINSI'; 1721 : 'SINON'; 1722 : 'REPETER' BTEST ('DIME' DEPST2 - 1); 1723 : 'SI' ('EGA' ('TYPE' (DEPST2 . &BTEST) ) 'ENTIER'); 1724 : ** 'MESS' 'epsi trop grand '; 1725 : PASOK = VRAI; 'FINSI'; 1726 : 'FIN' BTEST; 1727 : 'FINSI'; 1728 : 'SI' ('NON' PASOK); 1729 : DEPST1 = CAPI DEPST1 ZMODL ZDEPM1; 1730 : DEPST2 = CAPI DEPST2 ZMODL ZDEPM2; 1731 : DEPST = DEPST1 + DEPST2; 1732 : 'SI' ('MAXI' 'ABS' DEPST > 2); PASOK = VRAI; 'FINSI'; 1733 : 'FINSI'; 1734 : 'SINON'; 1735 : PASOK = vrai; 1736 : 'FINSI'; 1737 : ** on n'a pas calculé DEPST : on utilise les deformations lineaires 1738 : 'SI' PASOK; 1739 : zdepm = 0. * zdept; 1740 : DEPST='EPSI' 'LINE' ZMODL ZDEPT ZMAT05 ; 1741 : 'FINSI'; 1742 : * il faut soustraire les parties thermique et deformations imposees 1743 : 'SI' IPLAVI; 1744 : 'SI' ('OU' ('OU' IENDOM IVIDOM) ICERAM); 1745 : * mess ' ici 3 on passe la!!!!!!!!!!!!!!!!'; 1746 : HOOKENDO = 'HOOK' ZMODL ZMAT05 ZVAR0 ; 1747 : * mess ' appel 3 a epsi'; 1748 : DEPST= 'EPSI' 'LINE' ZMODL ZDEPT HOOKENDO ZMAT05; 1749 : * mess ' sortie appel 3 a epsi'; 1750 : 'SINON'; 1751 : **pv DEPST='EPSI' 'LINE' ZMODL ZDEPT ZMAT05 ; deja fait ! 1752 : 'FINSI'; 1753 : * si thermoplastique on enleve e alpha *dt et d'autres termes 1754 : * si le materiau depend de la temperature 1755 : 'SI' (ITHER 'OU' WTAB.'MATVAR') ; 1756 : XXX1 = DEPST0 * COEPI; 1757 : XXX2 = DEPST - XXX1; 1758 : * 'DETR' DEPST ; 'DETR' XXX1; 1759 : DEPST = XXX2 ; 1760 : 'FINSI' ; 1761 : 'SI' LOGDEF ; 1762 : XXX1 = DDEFOR0 * COEPI; 1763 : XXX2 = DEPST - XXX1; 1764 : * 'DETR' DEPST ; 'DETR' XXX1; 1765 : DEPST = XXX2 ; 1766 : 'FINSI' ; 1767 : * 1768 : 'SINON'; 1769 : * en elasticite, on a directement l'increment de contrainte 1770 : **pv DEPST= 'EPSI' 'LINE' ZMODL ZDEPT ZMAT05 ; dÃeja fait! 1771 : DSIGT= 'ELAS' ZMODL DEPST ZMAT05 ; 1772 : * mess ' depst ' ; list depst; 1773 : * mess ' zmat05 '; list zmat05; 1774 : 'SI' (('NON' ITHER) 'ET' (WTAB.'MATVAR')) ; 1775 : XXXXX3 = 'ELAS' ZMODL ZSIG0 ZMAT05 ; 1776 : XXXXX4 = 'ELAS' ZMODL ZSIG0 ('REDU' (STAB12. 'MAT1') ZMODL) ; 1777 : XXDEFO = XXXXX4 - XXXXX3 ; 1778 : DSIGTV = 'ELAS' ZMODL XXDEFO ZMAT05 ; 1779 : DSIGT = DSIGT + DSIGTV ; 1780 : * 'DETR' XXXXX3 ; 'DETR' XXXXX4 ; 1781 : * 'DETR' XXDEFO ; 'DETR' DSIGTV ; 1782 : 'FINSI' ; 1783 : * si thermoplastique on enleve e alpha *dt et d'autres termes 1784 : * si le materiau depend de la temperature 1785 : 'SI' ITHER ; 1786 : XXX1 = DSIGT0 * COEPI; 1787 : XXX2 = DSIGT - XXX1; 1788 : * 'DETR' DSIGT ; 'DETR' XXX1; 1789 : DSIGT = XXX2 ; 1790 : 'FINSI'; 1791 : 'SI' LOGDEF ; 1792 : XXX1 = DSI1 * COEPI; 1793 : XXX2 = DSIGT - XXX1; 1794 : * 'DETR' DSIGT ; 'DETR' XXX1; 1795 : DSIGT = XXX2 ; 1796 : 'FINSI'; 1797 : 'FINSI'; 1798 : * 1799 : * Calcul du gradient des deplacements (total) a la fin du pas de ------ 1800 : * temps par rapport a la configuration de reference GEOREF0 (initiale) 1801 : * rappel : On a : ZDETOT = ZZD + ZDEPT ; 1802 : 'SI' ('NEG' GR_U_DEB 'INCONNU'); 1803 : 'FORM' GEOREF0 ; 1804 : GR_U_FIN = 'GRADIENT' ZDETOT ZMODL ZMAT; 1805 : D_GR_U = GR_U_FIN - GR_U_DEB ; 1806 : 'FORM' GEOM1 ; 1807 : 'SINON'; 1808 : GR_U_FIN = 'MOT' 'INCONNU'; 1809 : 'FINSI'; 1810 : STAB12.'DT' = DTINI * COEPI; 1811 : * 1812 : * si on est plastique ou viscoplastique on ecoule pour avoir----------- 1813 : * le nouveau champ de contraintes 1814 : * 1815 : MMC = 0 ; 1816 : 'SI' IPLAVI ; 1817 : 1818 : *...cas SSTE... 1819 : 'SI' ISSTE; 1820 : ZRIKTA ZSIGF ZVARF ZDEIF = 1821 : 'SSTE' ZMODL ZSIG0 ZVAR0 DEPST ZMATT 1822 : ZPREK NSSTE NITMA; 1823 : zvar0 = ('EXCO' zvar0 ('ENLE' lnom ('DIME' lnom))) 'ET' 1824 : ('EXCO' zvarf ssii); 1825 : zvar0 = 'CHANGER' 'TYPE' zvar0 'VARIABLES INTERNES'; 1826 : 1827 : *...cas non SSTE... 1828 : 'SINON'; 1829 : ZSIG01=ZSIG0;ZVAR01 =ZVAR0;ZEPS01=ZEPS0; 1830 : ** defineto = DEPIN0 ; TABCONT='TABLE'; 1831 : CHASANST= WTAB.'CHARGEMENT' 'ENLE' 'T'; 1832 : 1833 : 'SI' (nsoincr 'NEG' 1); ZSIGM=ZSIG0/2; 'FINSI'; 1834 : 1835 : 'REPETER' sousinc nsoincr; 1836 : 1837 : tsodeb='FLOT' stab12.'DT'/nsoincr*( &sousinc - 1)+conti.'TEMPS'; 1838 : tsofin='FLOT' stab12 .'DT'/nsoincr* &sousinc + conti.'TEMPS'; 1839 : * mess ' stab12 .DT nsoincr &sousinc conti.TEMPS'; 1840 : * mess stab12 .'DT' nsoincr &sousinc conti.'TEMPS'; 1841 : 'SI' NONCONV ; tsofin = tsodeb ; 'FINSI' ; 1842 : che1= 'ADET' 'NOUV' ZMODLI CHASANST tsodeb 'TEMP' tsodeb; 1843 : che2= 'ADET' 'NOUV' ZMODLI CHASANST tsofin 'TEMP' tsofin; 1844 : 'SI' ('EXISTE' WTAB 'MOD_LIA') ; 1845 : vite1 = 'CHANGER' 'COMP' conti.'VITESSES' MLPRIM MVPRIM ; 1846 : che1 = che1 'ET' ('CHANGER' 'CHAM' ZMODLI vite1 'STRESSES') 1847 : 'ET' ('CHANGER' 'CHAM' ZMODLI conti.'DEPLACEMENTS' 'STRESSES') ; 1848 : che2 = che2 'ET' ('CHANGER' 'CHAM' ZMODLI ZDETOT 'STRESSES') 1849 : 'ET' ('CHANGER' 'CHAM' ZMODLI ZFEXT2 'STRESSES'); 1850 : 'FINSI'; 1851 : 1852 : 'SI' ither ; 1853 : TETDE=STAB12.'TET1'+(DTETD *('FLOT' (&sousinc - 1)/nsoincr)); 1854 : TETDF=STAB12.'TET1' + ( DTETD * ( 'FLOT' &sousinc / nsoincr)); 1855 : che3 = 'CHANGER' 'CHAM' zmOdli TETDE 'NOEUD' ; 1856 : che4 = 'CHANGER' 'CHAM' zmodli TETDF 'NOEUD' ; 1857 : 'FINSI' ; 1858 : che1 = che1 'ET' che3 ; che2 = che2 'ET' che4 ; 1859 : che1='REDU' che1 ZMODL; che2='REDU' che2 ZMODL; 1860 : aa5=DEPST * ( (&sousinc - 1.)/ nsoincr); 1861 : che5 = DEFT0 + aa5; 1862 : cc5= DEPST * ('FLOT' &sousinc / nsoincr); 1863 : che6 =DEFT0 + CC5; 1864 : *On met les deformations en tete des champs pour COMP ('KTAN' 'PERT') 1865 : che1 = che5 'ET' che1 ; che2 = che6 'ET' che2 ; 1866 : * pour les materiaux on garde toujours la valeur a la fin du pas 1867 : * et au debut du pas 1868 : * 'SI' ('NEG' STAB12.'MAT1' 'INCONNU') ; 1869 : che1 = che1 'ET' ('REDU' (STAB12 .'MAT1') ZMODL) ; 1870 : * 'FINSI' ; 1871 : * 1872 : * Modele NON LINEAIRE UTILISATEUR + GRANDES DEFORMATIONS 1873 : * On ajoute les gradients de deplacements qui seront transformes en 1874 : * gradients de transformation avant appel a UMAT (dans WKUMA1.ESO) 1875 : 1876 : 'SI' ( 'NEG' GR_U_DEB 'INCONNU') ; 1877 : gru1=GR_U_DEB +( D_GR_U * ('FLOT' (&sousinc-1) / nsoincr)); 1878 : che1 = che1 'ET' gru1; 1879 : gru2 = GR_U_DEB + ( D_GR_U * ('FLOT' &sousinc / nsoincr) ) ; 1880 : che2 = che2 'ET' gru2 ; 1881 : 'FINS'; 1882 : 'SI' LNLOC ; 1883 : CHE1A = CHE1 ; 1884 : CHE2A = CHE2 ; 1885 : ISTEP = 1 ; 1886 : CHE1= CHE1A 'ET' ('REDU' 1887 : ('ADET' 'NOUV' ZMODLI CHASANST tsodeb 'STEP' ISTEP)ZMODL); 1888 : CHE2= CHE2A 'ET' ('REDU' 1889 : ('ADET' 'NOUV' ZMODLI CHASANST tsofin 'STEP' ISTEP)ZMODL); 1890 : che11 = che1 'ET' ZSIG01 'ET' ZVAR01 'ET' ZEPS01 ; 1891 : che22 = che2 'ET' ZMATT ; 1892 : cho2 = 'COMP' ZMODL che11 che22; 1893 : 1894 : ZVARF = 'CHANGER' ('EXCO' cho2 com_var 'NOID') 1895 : 'TYPE' 'VARIABLES INTERNES' ; 1896 : 'SI' ('EGA' WTAB.'NON_LOCAL' 'MOYE') ; 1897 : ZVARN = 'NLOC' ZVARF WTAB.'CONN' WTAB.'LVIAM' ; 1898 : 'FINS' ; 1899 : 'SI' ('EGA' WTAB.'NON_LOCAL' 'SB ') ; 1900 : MOD_SB = WTAB.'NLOC_SB_MODL' ; 1901 : CONTP = 'PRIN' ('REDU' ZSIG01 MOD_SB) MOD_SB ; 1902 : ZVARF = ZVARF + CONTP + WTAB.'NLOC_SB_REGU' ; 1903 : ZVARN = 'NLOC' 'SB' ZVARF WTAB.'CONN' 1904 : WTAB.'NLOC_SB_CCS' ; 1905 : ZVARN = 'CHANGER' ('EXCO' ZVARN com_var) 1906 : 'TYPE' 'VARIABLES INTERNES' ; 1907 : 'FINS' ; 1908 : ZVARN = 'REDU' ZVARN ZMODL ; 1909 : 1910 : 1911 : ISTEP=2; 1912 : CHE1= CHE1A 'ET' ('REDU' 1913 : ('ADET' 'NOUV' ZMODLI CHASANST tsodeb 'STEP' ISTEP)ZMODL); 1914 : CHE2= CHE2A 'ET' ('REDU' 1915 : ('ADET' 'NOUV' ZMODLI CHASANST tsofin 'STEP' ISTEP)ZMODL); 1916 : che11 = che1 'ET' ZSIG01 'ET' ZVARN 'ET' ZEPS01 ; 1917 : che22 = che2 'ET' ZMATT ; 1918 : cho2 = 'COMP' ZMODL che11 che22; 1919 : CHE1A = 1; CHE2A = 1; ZVARN = 1 ; 1920 : 'SINON' ; 1921 : che11 = che1 'ET' ZSIG01 'ET' ZVAR01 'ET' ZEPS01 ; 1922 : che22 = che2 'ET' ZMATT ; 1923 : si ( 'EXIST' PRECED 'ECRIT' ) ; 1924 : 'FINSI'; 1925 : 'SI' PARTLOCA; 1926 : cha11= ASSIS TOUS 'REDU' MODRELOC che11; 1927 : cha22= ASSIS TOUS 'REDU' MODRELOC che22; 1928 : cho22= ASSIS TOUS 'COMP' MODRELOC cha11 cha22; 1929 : cho2 = 'REDU' ZMODL cho22 ; 1930 : 'SINON'; 1931 : * 'SI' ( 'EXIS' PRECED 'ECRIT' ); 1932 : * mess ' che11 ' ; list resu che11; 1933 : * mess ' che22' ; list resu che22; 1934 : * 'FINSI'; 1935 : cho2 = 'COMP' ZMODL che11 che22 ; 1936 : 'FINSI'; 1937 : 'FINSI' ; 1938 : ZSIGF = 'CHANGER' ('EXCO' cho2 com_sig 'NOID') 1939 : 'TYPE' 'CONTRAINTES' ; 1940 : ZVARF = 'CHANGER' ('EXCO' cho2 com_var 'NOID') 1941 : 'TYPE' 'VARIABLES INTERNES' ; 1942 : ZDEIF = 'CHANGER' ('EXCO' cho2 com_dei 'NOID') 1943 : 'TYPE' 'DEFORMATIONS INELASTIQUES' ; 1944 : 1945 : 'SI' ('EXISTE' WTAB 'MOD_LIA') ; 1946 : ZFLIA = 'EXCO' cho2 'FLIA' 'NOID'; 1947 : 'FINSI' ; 1948 : 'SI' (nsoincr 'NEG' 1); 1949 : 'SI' (&sousinc 'EGA' nsoincr); 1950 : aaa1=zsigf/2; 1951 : aaa2=aaa1+ zsigm; 1952 : 'DETR' aaa1; 'DETR' zsigm; 1953 : zsigm=aaa2; 1954 : 'SINON'; 1955 : aaa2=zsigf+ zsigm; 1956 : 'DETR' zsigm; 1957 : zsigm=aaa2; 1958 : 'FINSI'; 1959 : 'FINSI'; 1960 : zsig01= zsigf;ZVAR01=ZVARF;ZEPS01=ZDEIF; 1961 : ** defineTO=ZDEIF+defineTO; 1962 : 'FIN' sousinc; 1963 : * 1964 : * Matrice tangente par perturbation evaluee pour la derniere iteration calculee 1965 : * A voir : cas grand deplacement ZSIGF et ZMAT, cas poreux et thermique ZSIGF 1966 : 'SI' (IKTAN 'ET' IPERT) ; 1967 : Z1COMP = che11 ; Z2COMP = che22 'ET' ZSIGF ; 1968 : 'FINSI' ; 1969 : * 1970 : 'SI' (nsoincr 'NEG' 1); 1971 : * pour tenir compte de ce que le travail de la correction est 1/2 FU, 1972 : * on la multiplie par 2 1973 : CONT=(ZSIGF + ZSIG0); 1974 : ZSIGM=ZSIGM*(2. /nsoincr); 1975 : ZSIGM=ZSIGM - CONT; 1976 : BZSIGM='BSIGMA' ZMODL ZSIGM ZMAT; 1977 : ** ZDEPSPL=defineTO - ZEPS0 ; 1978 : 'FINSI'; 1979 : * on enleve toutes traces de champs inutiles 1980 : zsig01=1;ZVAR01=1;ZEPS01=1; 1981 : ** defineTO=1; tabcont =1; 1982 : 1983 : * le fin d'en dessous est le fin de "si isste ... sinon ... finsi" 1984 : * on est encore dans "si iplavi ... finsi" 1985 : 'FINSI'; 1986 : *...fin du si ISSTE sinon ... 1987 : * 1988 : * cas particulier poreux et thermique 1989 : * 1990 : 'SI' ITHER; 1991 : 'SI' POR1 ; 1992 : ZSIGF = ZSIGF - ( COEPI * DMSRT0 ) ; 1993 : 'FINSI'; 1994 : 'FINSI'; 1995 : * 1996 : * max de epse pendant l'iteration 1997 : * nbre de points qui ont une evolution non lineaire 1998 : * 1999 : 'SI' ('EGA' WTAB.'MOVA' 'RIEN') ; 2000 : ** EPSM = 0.; DPSMAX=0.; 2001 : MMC=0; 2002 : 'SINON'; 2003 : XXX1 = 'EXCO' (WTAB.'MOVA') ZVARF ; 2004 : ** EPSM = 'MAXI' XXX1 ; 2005 : ACC = 'ABS' ( XXX1 - ACC0 ) ; 2006 : ** 'DETR' XXX1 ; 2007 : MMC = 'MASQUE' ACC 'SUPERIEUR' 1.D-10 'SOMME' ; 2008 : 'SI' (MMC > MMCMAX) ; MMCMAX = MMC ; 'FINSI' ; 2009 : ** DPSMAX = 'MAXI' ACC ; 2010 : 'FINSI'; 2011 : * 2012 : * dans le cas SANS plasticite,viscoplas,endommagement 2013 : * on calcule directement le nouveau champ de contrainte 2014 : * 2015 : 'SINON' ; 2016 : ZSIGF = ZSIG0 + DSIGT ; 2017 : 'FINSI'; 2018 : * 2019 : DPSMAXP = DPSMAX ; 2020 : DPSMAX = 'MAXI' 'ABS' DEPST 'AVEC' MLDEFOR ; 2021 : EPSM = 'MAXI' 'ABS' (ZDETOT 'EPSI' ZMAT ZMODL) 'AVEC' MLDEFOR ; 2022 : * 2023 : *--- CAS 4 ------------------------------------------------------------- 2024 : * on determine les forces resultantes de l'increment------------------ 2025 : * 2026 : * en grand deplacements on transforme pi en sigma 2027 : * on met a jour les coordonnees 2028 : * 2029 : ZMAT2=ZMAT; 2030 : 2031 : 'SI' (IGRD 'ET' ('NON' HPP_EPS) ); 2032 : 2033 : coefmul = 1.d0 / (DPSMAX + 1e-30); 2034 : * coefmulr = -1; 2035 : ref = 75; 2036 : 'SI' ((&bzdept > 1) 'ET' ACC_Q 'ET' ACC_R ); 2037 : ref = 200 ; 'FINSI'; 2038 : 'SI' ((coefmul < ref) 'ET' WTAB.'LINESEARCH'); 2039 : * il faut reduire d'urgence les deplacements ; 2040 : zdeptlx = zdept 'EXCO' 'LX' 'LX'; 2041 : ACC_Q = VRAI; 2042 : znacce=999; zmaxit = it; 2043 : * coefmulr = (2*dpsmax+1) ** 0.5 - 1 ; 2044 : * coefmulr = 5e1 / coefmulr; 2045 : * coefmuls = 8e-3 * coefmul; 2046 : * coefmul = coefmulr; 2047 : ** si (coefmuls < coefmulr); coefmul = coefmuls; finsi; 2048 : * si (coefmul > 0.3) ; coefmul = 0.3; finsi; 2049 : coefmul = 0.5; 2050 : 'SI' ((&bzdept 'EGA' 1) 'ET' (RED_URG < 5)); 2051 : coefmul = coefmul * -1; 2052 : urg = vrai; 2053 : 'FINSI'; 2054 : zdeptq = zdeptp; 2055 : 'SI' (&bzdept > 1);zdeptq=zdeptini exco 'LX' 'NOID' 'LX'; finsi; 2056 : ZDEPT = zdeptq +( coefmul * (ZDEPT -zdeptq)) ; 2057 : * zdept = (zdept enle 'LX') + zdeptlx; 2058 : 2059 : 'SI' (RED_URG > 2 ) ; 2060 : 'SI' ('NON' nonconv); 'MESS' ' non convergence detectee ' ; 2061 : ZMAXIT = IT+5; 2062 : 'FINSI'; 2063 : nonconv = vrai; 2064 : 'FINSI'; 2065 : 'SI' (&bzdept 'EGA' 1); 2066 : 'MESS' 'reduction d urgence des deplacements'; 2067 : hpp_eps=faux; RED_URG = RED_URG + 1; 2068 : 'FINSI'; 2069 : SI (RED_URG > 6 ); ZMAXIT = IT; 'FINSI'; 2070 : 2071 : 'ITERER' bzdept; 2072 : 'FINSI'; 2073 : 'FINSI'; 2074 : 2075 : 'FINSI'; 2076 : 2077 : * au dessus le finsi du si fefp sinon(Update or total lagrangian) ---- 2078 : 2079 : * 2080 : * linesearch ----------------------------------------------------------- 2081 : * 2082 : 'SI' ('NON' WTAB.'LINESEARCH'); 'QUITTER' bzdept; 'FINSI'; 2083 : 'SI' (it < 3); 'QUITTER' bzdept; 'FINSI'; 2084 : 'SI' ('MULT' IT ZNACCE); 'QUITTER' bzdept; 'FINSI'; 2085 : 'SI' (HPP_EPS); 'QUITTER' bzdept; 'FINSI'; 2086 : 'SI' ACC_Q ; 'QUITTER' bzdept; 'FINSI'; 2087 : ACC_Q = VRAI; ACC_R = FAUX; 2088 : 2089 : r1 = (residc ) * -1.; 2090 : pzsigfp = zsigfp ; 2091 : 2092 : 2093 : * pzsigf = 'PICA' zsigf zdeptp zmodl; 2094 : zdeptdif = (zdept - zdeptp) ; 2095 : GEOTEMP='FORM' zdeptp; 2096 : k1 = bsigma (sigma zdeptdif zmodl zmat) zmodl zmat; 2097 : b1dspp = bsigma pzsigfp zmodl zmat; 2098 : 2099 : 'FORM' geom1 ; 2100 : 'DETR' GEOTEMP; 2101 : pzsigfp = 'PICA' zsigfp (zdept - zdeptp) zmodl; 2102 : * pzsigf = 'PICA' zsigf zdept zmodl; 2103 : 2104 : GEOTEMP='FORM' zdept ; 2105 : k2 = bsigma (sigma zdeptdif zmodl zmat) zmodl zmat; 2106 : b2dspp = bsigma pzsigfp zmodl zmat; 2107 : 'FORM' geom1 ; 2108 : 'DETR' GEOTEMP; 2109 : 2110 : alpha = (k2 - k1 ) ; 2111 : 2112 : xx2 = b2dspp - b1dspp; 2113 : beta = k1 + xx2; 2114 : 2115 : 2116 : * nouvelle acceleration de convergence pour les grands deplacements 2117 : 2118 : a0 = xty beta r1 mldual mldual ; 2119 : a1 = (xty beta beta mldual mldual)+(xty alpha r1 mldual mldual); 2120 : a2 = (3./2.) * (xty alpha beta mldual mldual); 2121 : a3 = (1./2.) * (xty alpha alpha mldual mldual); 2122 : 2123 : xr1 = racpol a0 a1 a2 a3; 2124 : lambd = extr xr1 1; 2125 : 'SI' WTAB.'STABILITE' ; 2126 : 'SI' (lambd < 0); lambd = 0.2; 'FINSI';; 2127 : 'FINSI'; 2128 : 2129 : 'SI' ((dime xr1) > 1 ); 2130 : lambd2 = extr xr1 2; 2131 : lambd3 = extr xr1 3; 2132 : 'SI' WTAB.'STABILITE' ; 2133 : 'SI' (lambd2 < 0); lambd2 = 0.2; 'FINSI'; 2134 : 'SI' (lambd3 < 0); lambd3 = 0.2; 'FINSI'; 2135 : 'FINSI'; 2136 : 'SI' ((lambd2 - 1.5 abs) < (lambd - 1.5 abs)); lambd = lambd2;'FINS'; 2137 : 'SI' ((lambd3 - 1.5 abs) < (lambd - 1.5 abs)); lambd = lambd3;'FINSI'; 2138 : 'FINSI'; 2139 : lambdav=lambd; 2140 : 'SI' (lambd > 4 ); lambd = 4 ; 'FINSI'; 2141 : 'SI' (('ABS' lambd < 1e-4) 'ET' (itacc 'NEG' 3) 'ET' 2142 : (dpsmax > zprecnc)); 2143 : lambd = 0.1 ; urg = vrai; ; znacce = 999; itacc=4; 2144 : 'FINSI'; 2145 : 'SI' ((lambd < 0) 'ET' WTAB.'STABILITE'); 2146 : lambd = 0.3 ; finsi; 2147 : 'SI' ('ABS' lambd < 1e-3 ); 2148 : lambd = 1e-3; 2149 : 'FINSI'; 2150 : 'SI' (lambd < -3 ); lambd =-3. ; 'FINSI'; 2151 : 'SI' ((lambd < 0) 'ET' (itacc 'NEG' 3)) ; znacce = 999;'FINSI'; 2152 : 2153 : 2154 : * 2155 : * 2156 : * verif sens 2157 : * 2158 : **'SI' WTAB.'STABILITE' ; 2159 : ** 'SI' (lambd < 0); lambd = 0.3; finsi; 2160 : ** znacce = 999; 2161 : **'FINSI'; 2162 : * zdeptm = (zdep1 'ENLE' 'LX') * (lambd - 1); 2163 : zdeptm = (zdep1 - (zdeptp 'EXCO' 'LX' 'LX')) * (lambd - 1); 2164 : zdept = zdept + zdeptm ; 2165 : 2166 : 2167 : * pour l(autre acceleration de convergence 2168 : correc = correc - (ZRAID * zdeptm); 2169 : 2170 : fin bzdept; 2171 : * fin de boucle de reduction de zdept 2172 : *--------------------------------------------------------------------- 2173 : 2174 : 'SI' ('NON' IFEFP); 2175 : 'SI' (IGRD 'ET' ('NON' HPP_EPS)); 2176 : * grands deplacements ----------------------------------------------- 2177 : 2178 : ZPI = ZSIGF ; 2179 : zdepf = zdept ; 2180 : ZSIGF = 'PICA' ZMODL ZPI ZDEPF ; 2181 : 'DETR' ZPI ; 2182 : 'SI' ITCAR ; 2183 : GEOM2 ZMAT2 ='FORM' ZDEPF ZMODLI ZMATI; 2184 : ZMAT2 = 'REDU' ZMAT2 ZMODL; 2185 : 'SINON'; 2186 : GEOM2 = 'FORM' ZDEPF ; 2187 : 'FINSI'; 2188 : FEQU2='BSIGMA' ZMODL ZSIGF ZMAT2 ; 2189 : 'SI' IRCON; 2190 : FEQU2 = FEQU2 2191 : + ('REDU' MAI2 ((WTAB.'RIGIDITE_CONSTANTE')*ZDETOT)); 2192 : 'FINSI'; 2193 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 2194 : ZDFINI = ZDFINI - FP22 ; 2195 : 'DETR' FP22; 2196 : TFP22 = CHARMECA PRECED WTAB.'T_FINAL' ; 2197 : 'SI' ('EXIS' TFP22 'ADDI_SECOND');FP22 = TFP22.'ADDI_SECOND';'FINS'; 2198 : ZDFINI = ZDFINI + FP22; 2199 : 'SI' IPILOT ; 2200 : COEFP =(COEPI*DMZPRES+ MZPRES0)/(MZPRES+1.E-15); 2201 : 'FINSI' ; 2202 : 'FINSI' ; 2203 : 'FORM' GEOM1 ; 2204 : * 2205 : * dans les autres que IGRD cas on calcule fequ2(desequilibre)---------- 2206 : * 2207 : 'SINON'; 2208 : FEQU2='BSIGMA' ZMODL ZSIGF ZMAT ; 2209 : 'SI' IRCON; 2210 : FEQU2 = FEQU2 2211 : + ('REDU' MAI2 ((WTAB.'RIGIDITE_CONSTANTE')*ZDETOT)); 2212 : 'FINSI'; 2213 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; ; 2214 : ZDFINI = ZDFINI - FP22 ; 2215 : 'DETR' FP22; 2216 : TFP22 = CHARMECA PRECED WTAB.'T_FINAL' ; 2217 : 'SI' ('EXIS' TFP22 'ADDI_SECOND');FP22 = TFP22.'ADDI_SECOND';'FINS'; 2218 : ZDFINI = ZDFINI + FP22; 2219 : 'SI' IPILOT ; 2220 : COEFP =(COEPI*DMZPRES+ MZPRES0)/(MZPRES+1.E-15); 2221 : 'FINSI' ; 2222 : 'FINSI' ; 2223 : 'FINSI'; 2224 : 'FINSI'; 2225 : * le finsi au dessus est le finsi de si iefefp 2226 : 'SI' ('EXISTE' WTAB 'MOD_LIA') ; 2227 : FLIAI = 0.d0 ; 2228 : 'SI' ('EGA' ('TYPE' ZFLIA) 'MCHAML ') ; 2229 : NZLIA = 'EXTR' ZFLIA 'NBZO' ; 2230 : 'SI' (NZLIA > 0) ; 2231 : 'REPETER' BZLIA NZLIA ; 2232 : * un point support par zone - 2010 kich 2233 : FLIAI= FLIAI + 2234 : ('EXCO' ('EXTR' ZFLIA 'FLIA' &BZLIA 1 1) MLDUAL 'NOID') ; 2235 : 'FIN' BZLIA ; 2236 : 'FINSI' ; 2237 : FEQU2 = FEQU2 + FLIAI ; 2238 : 'FINSI' ; 2239 : 'FINSI' ; 2240 : * 2241 : * calcul des forces correctrices de frottement------------------------- 2242 : * 2243 : 'SI' (WTAB.'CAFROTTE'); 2244 : * apres non convergence, on maintient les forces de frottement 2245 : MAINT=FAUX; 2246 : 'SI' ('NON' WTAB.'CONV' 'ET' ('NEG' WTAB.'FFROT' 'INCONNU')); 2247 : MAINT=VRAI; 2248 : 'FINSI'; 2249 : zsigfT='REDU' ('ETG' zsigf) ZMODLI; 2250 : MODFRO= 'EXTR' WTAB.'CONT_REEL' 'COMP' 'FROTTANT'; 2251 : MATFRO= 'REDU' WTAB.'MAT_FRO' WTAB.'CONT_REEL'; 2252 : 'SI' MAINT; 2253 : FFROT1 = 'EXCF' ZRAID ZDEPT MODFRO 2254 : MATFRO WTAB.'FFROT' ZSIGFt ; 2255 : 'SINON'; 2256 : FFROT1 = 'EXCF' ZRAID ZDEPT MODFRO 2257 : MATFRO ZSIGFt ; 2258 : 'FINSI'; 2259 : FFROT = ((1*FFROT1) + FFROTP)/2; 2260 : 'DETR' FFROTP; 2261 : FFROTP = FFROT1; 2262 : 'FINSI'; 2263 : 2264 : 'SI' ISOL ; 2265 : 'SI' IPLAVI ; 2266 : ZMATPF = 'CHANGER' ('EXCO' cho2 com_maa 'NOID') 2267 : 'TYPE' 'CARACTERISTIQUES'; 2268 : MA_POR = 'REDU' ZMATPF MO_POR ; 2269 : 'FINSI'; 2270 : XXX1 = 'GRAD' MO_POR ZDETOT MA_POR 'CONS' ; 2271 : XXXS = (1. - WTAB.'TETA' )*GRAP0 + (WTAB.'TETA'*XXX1) ; 2272 : XXX2 = STAB12.'DT' * ('GNFL' MO_POR XXXS) ; 2273 : XXX3 = FEQU2 ; 2274 : FEQU2 = XXX3 - XXX2;'DETR' XXX3; 'DETR' XXX2 ; 2275 : * 'DETR' XXX1; 'DETR' XXXS ; 2276 : 'FINSI' ; 2277 : * si on a fait de la sous incrementation ( a cause du dynamique 2278 : 'SI' ( nsoincr > 1); 2279 : FEQU2= FEQU2 + BZSIGM; 2280 : 'FINSI'; 2281 : * 2282 : * forces qui varient en dynamique------------------------------------ 2283 : * b*sigma + 4/h2*m*dx 2284 : * + 2/h *c*dx 2285 : * 2286 : 'SI' IDYN; 2287 : 'DETR' FFDYN; 2288 : FFDYN = 'COPIER' FEQU2 ; 2289 : XXX1 = WTAB.'MASSE' * ZDEPT; 2290 : XXX3 = 4. * UNSURH * UNSURH * XXX1 ; 2291 : 'DETR' XXX1; 2292 : 'SI' ('EXISTE' WTAB 'MOD_LIA'); 2293 : 'SI' (NZLIA > 0) ; 2294 : XVIT2 = 0.d0; 2295 : 'REPETER' BZLIA NZLIA ; 2296 : XVIT2 = XVIT2 + 2297 : ('EXCO' ('EXTR' ZFLIA 'FLIA' &BZLIA 1 1) MVPRIM MLPRIM 'NOID') ; 2298 : 'FIN' BZLIA ; 2299 : 'FINSI' ; 2300 : 'FINSI' ; 2301 : 'SI' ( 'NEG' WTAB.'AMORTISSEMENT' 'INCONNU') ; 2302 : XXX1 = WTAB.'AMORTISSEMENT' * ZDEPT; 2303 : XXX2 = 2. * UNSURH * XXX1 ; 2304 : XXX4 = XXX3 + XXX2 ; 2305 : 'DETR' XXX3 ;'DETR' XXX1;'DETR' XXX2;XXX3=XXX4; 2306 : 'FINSI' ; 2307 : XXX4 = FEQU2 + XXX3; 2308 : 'DETR' XXX3;'DETR' FEQU2; 2309 : FEQU2 = XXX4; 2310 : * 2311 : * forces correctrices en cas de liaison persistante : 2312 : * on veut avoir (forces inertielles + forces visqueuses) compatibles 2313 : * avec accelerations et vitesses relatives nulles aux points de contact 2314 : * (pendant le contact). On modifie fequ2 ---> residu et l'iteration sui 2315 : * fournira les bonnes reactions 2316 : * 2317 : 'SI' IMPLP; 2318 : VADD XXX3 = VITETFOR ZRAID_T WTAB FCORU ; 2319 : XXX4 = FEQU2 - XXX3; 2320 : 'DETR' XXX3;'DETR' FEQU2; 2321 : FEQU2 = XXX4; 2322 : 'FINSI' ; 2323 : * 2324 : 'FINSI'; 2325 : * 2326 : * preparation des tests de convergence.------------------------------- 2327 : * on calcule la plus grande composante de f + freac(sans flx) 2328 : * fequi est de plus le second membre que l'on veut equilibrer 2329 : * ne pas oublier d'y ajouter les forces suiveuses 2330 : * test de convergence: equilibre de la structure 2331 : * il se fait sur residc, on calcule auusi le nouveau second 2332 : * membre qui est residc moins les forces d'appuis, il faut aussi 2333 : * remettre a jour les FLX qui travaillent eux en incremental 2334 : * pour les depl imposes cela revient a imposer un increment nul et 2335 : * pour les rela unilaterales cela revient a mettre a jour le jeu 2336 : * 2337 : RESIDUP= RESIDU; 2338 : XXX1= ZFEXT; 2339 : 'SI'WTAB.'PROCEDURE_CHAR_MECA' ; XXX2= XXX1 + (FP22 * COEFP); 2340 : XXX1=XXX2;'FINSI'; 2341 : 2342 : * forces exterieures(+ autres termes p.ex. en dynamique ou en poreux) 2343 : * sans reactions 2344 : * - forces interieures(+ autres termes p.ex. en dynamique ou en poreux) 2345 : 2346 : RESIDU = XXX1 - FEQU2; 2347 : * forces exterieures(+ autres termes p.ex. en dynamique ou en poreux) 2348 : * + reactions 2349 : FEQUI = XXX1 - FCORF; 2350 : 2351 : * forces exterieures(+ autres termes p.ex. en dynamique ou en poreux) 2352 : * + reactions - forces interieures(+ autres termes p.ex. en dynamique 2353 : * ou en poreux) 2354 : RESIDC= RESIDU - FCORF; 2355 : 2356 : * relations unilaterales et autres(Reinitialisation) 2357 : *'SI' IMPO12 ; 2358 : XXX1 = RESIDU +ZFLX1;'DETR' RESIDU; 2359 : RESIDU = XXX1 - FCORU;'DETR' XXX1; 2360 : 'SI' (IPILOT 'ET' IMPO12); 2361 : XXX3 =COEPI-1.D0*DIMPOV; 2362 : XXX1= RESIDU + XXX3;'DETR' RESIDU;RESIDU=XXX1; 2363 : 'DETR' XXX3; 2364 : 'FINSI'; 2365 : *'FINSI'; 2366 : XXX1 = FEQUI - ZFPLO; 2367 : ZFAU1 = 'ABS' XXX1 ;'DETR' XXX1; 2368 : XAUXF = 'MAXI' ZFAU1 'ABS' 'SANS' MXMFLX; 2369 : 'SI' TSTMOM ; 2370 : XAUXM = 'MAXI' ZFAU1 'ABS' 'AVEC' MXMYMZ; 2371 : 'FINSI'; 2372 : 'DETR' ZFAU1; 2373 : 'DETR' ZDETOT ; 2374 : COEINC = 0.D0; 2375 : * 2376 : * Calcul du nouveau alpha pour le pilotage ----------------------------- 2377 : * 2378 : 'SI' (IPILOT 'ET' PASTEST) ; 2379 : * seulement si on a accelere 2380 : * 2381 : 'SI' (WTAB.'VISCOPLASTIQUE' 'OU' WTAB.'VISCODOMMAGE' 2382 : 'OU' ITHER 'OU' LOGDEF ); 2383 : 'MESS' 'ALPHA calcule avec la norme de l increment' ; 2384 : COEPI0 = COEPI; 2385 : COEPI = 'MINI' ('PROG' 1. (STAB12.'AUTOCOEF' * al1) ); 2386 : * les acceleration auront lieu toutes les 4 pas 2387 : COEINC =COEPI0 - COEPI ; 2388 : * ITACC=3 ; 2389 : 'SINON' ; 2390 : * les multiplicateurs sont affectes d'un signe - 2391 : XXX1 = 'EXCO' ZDEPT 'LX' 'NOID' 'LX'; 2392 : XXX2=2.D0 * XXX1;'DETR' XXX1; 2393 : XXX4=ZDEPT - XXX2;'DETR' XXX2; 2394 : XXX3=DFEXT0L *( COEPI * ( 1 - AL1 )); 2395 : XXX2 = XXX3 + RESIDC;'DETR' XXX3;XXX5=RESIDNOR* 1.D0; 2396 : 'SI' IMPO12 ; 2397 : XXX1= COEPI * ( 1 - AL1 ) * DIMPO12; 2398 : XXX3= XXX2 - XXX1;'DETR' XXX1;'DETR' XXX2; 2399 : XXX2 = XXX3;XXX1 = XXX5 - DIMPO12; 2400 : 'DETR' XXX5; XXX5=XXX1; 2401 : 'FINSI'; 2402 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 2403 : XXX7= XXX5 + FP22;'DETR' XXX5; 2404 : XXX5 = XXX7 - FP022;'DETR' XXX7;CORFR='COPIER' XXX5; 2405 : 'FINSI'; 2406 : XX3 = 'XTY' RESIDNOR XXX4 MLDUAL MLPRIM; 2407 : XX1='XTY' XXX2 XXX4 MLDUAL MLPRIM; 2408 : XX2='XTY' XXX5 XXX4 MLDUAL MLPRIM ; 2409 : COEINC = XX1 / XX2; 2410 : 'DETR' XXX4;'DETR' XXX2;'DETR' XXX5; 2411 : COEPI0 = COEPI; 2412 : COEPI = 'MINI' ('PROG' (COEPI0 - COEINC) 1.d0 ) ; 2413 : 'SI' ((COEPI0 'EGA' 1d0) 'ET' (AL1 'EGA' 1D0)); 2414 : COEPI = 1d0; 2415 : 'FINSI'; 2416 : COEINC = COEPI0 - COEPI; 2417 : 'SI' ((COEPI 'EGA' 1d0) 'ET' (COEPI0 'NEG' 1d0));ITACC=3; 2418 : 'FINSI'; 2419 : 'FINSI' ; 2420 : * mise a jour de ZFEXT en fonction de coepi on ne met a jour 2421 : * de maniere definitive que les forces, les modifs sur les FLX 2422 : * pour reimposer les conditions de deplacements ne 2423 : * sont faites que pour le premier residu attention au cas des jeux 2424 : * sortis de IMPO qu'il ne faut pas toucher 2425 : XXX3=DFEXT0F * COEINC ; 2426 : XXX2 = ZFEXT - XXX3;'DETR' XXX3; 2427 : 'DETR' ZFEXT; ;ZFEXT = XXX2; 2428 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 2429 : MZPRES2=COEPI*DMZPRES+ MZPRES0; 2430 : COEFP =MZPRES2/(MZPRES+1.E-15);XXX3 = FP22* COEFP; 2431 : XXX2 = ZFEXT + XXX3;'DETR' XXX3; 2432 : 'FINSI'; 2433 : XXX1= XXX2 - FEQU2; 2434 : 'DETR' RESIDU;XXX3=COEPI * DFEXT0L; XXX4= XXX3 + FLXINI; 2435 : 'DETR' XXX3; XXX3 = XXX4 - FCORU;'DETR' XXX4; 2436 : RESIDU = XXX1 + XXX3;'DETR' XXX3; 2437 : 'SI' IMPO12; 2438 : XXX3= 1.D0 - COEPI * DIMPO12; 2439 : XXX2= RESIDU + XXX3; 'DETR' RESIDU; 2440 : RESIDU = XXX2; 'DETR' XXX3; 2441 : 'FINSI'; 2442 : 'SI' (ITHER 'OU' WTAB.'MATVAR') ; 2443 : XXX3 = FTHE * COEINC; 2444 : XXX2= RESIDU + XXX3; 'DETR' RESIDU; 2445 : RESIDU = XXX2; 'DETR' XXX3; 2446 : 'FINSI'; 2447 : 'SI' LOGDEF ; 2448 : XXX3 = FDEF * COEINC; 2449 : XXX2= RESIDU + XXX3; 'DETR' RESIDU; 2450 : RESIDU = XXX2; 'DETR' XXX3; 2451 : 'FINSI'; 2452 : 2453 : STAB12.'AUTOCOEF'= COEPI ; 2454 : * 2455 : * mise a jour des termes force de l'acceleration de convergence 2456 : 'SI' WTAB.'PROCEDURE_CHAR_MECA'; 2457 : XXX1= COEINC * CORFR;'DETR' CORFR; 2458 : 'SINON'; 2459 : XXX1=(COEINC * RESIDNOR) 'ENLE' FLX; 2460 : 'FINSI'; 2461 : 2462 : XXX3 = ACFEP2 - XXX1 ; 2463 : XXX4 = ACFEP1 - XXX1 ; 2464 : 'DETR' ACFEP2; ACFEP2= XXX3; 2465 : 'DETR' ACFEP1; ACFEP1= XXX4; 2466 : 'DETR' XXX1; 2467 : 2468 : * test si on est sur une branche descendante 2469 : * corprec est la correction de precision 2470 : CORPREC = 1. ; 2471 : 'SI' (COEPI < 0) ; 2472 : CORPREC = ZPRECD / ZPREC; 2473 : 'MESS' 'Chargement decroissant. Critere divise par ' CORPREC; 2474 : 'FINSI'; 2475 : 'SI' ISNPB ; 2476 : 'SI' ( COEPI > 0) ; 2477 : ISNPB = FAUX ; 2478 : 'FINSI' ; 2479 : 'FINSI' ; 2480 : 'MESS' 'nouvelle valeur de ALPHA' COEPI; 2481 : 'FINSI' ; 2482 : * 2483 : 'DETR' FCORU; 2484 : 2485 : XNUMF = 'MAXI' RESIDC 'ABS' 'SANS' MXMFLX; 2486 : XNUMG = 'MAXI' ((ZDEPL - ZDEPLP)*ZCLIM) 'ABS'; 2487 : XNUMF = 'MAXI' ('PROG' XNUMF XNUMG); 2488 : * 2489 : 'SI' TSTMOM ; 2490 : XNUMM= 'MAXI' RESIDC 'ABS' 'AVEC' MXMYMZ; 2491 : 'FINSI'; 2492 : * 2493 : 'SI' IFTOL; 2494 : ZPREC = ZFTOL ; 2495 : XDENO = 1.; 2496 : 'FINSI'; 2497 : 'SI' IMTOL; 2498 : ZPRECM = ZMTOL ; 2499 : XDENOM = 1.; 2500 : 'FINSI'; 2501 : * 2502 : XCONV = XNUMF/ XDENO ; 2503 : XCONVM = XCONV ; 2504 : * 2505 : 'SI' TSTMOM ; 2506 : 'SI' ( < XAUXM 1.D-30 ) ; 2507 : XCONVM=0.; 2508 : 'SINON'; 2509 : 'SI' ( < (XAUXF / XAUXM) 1.D-12 ) ; 2510 : XCONV=0.; 2511 : 'FINSI'; 2512 : XCONVM =XNUMM/ XDENOM ; 2513 : 'FINSI'; 2514 : 'FINSI' ; 2515 : * 2516 : *--------------------------------------------------------------------- 2517 : * resume de l'iteration 2518 : *--------------------------------------------------------------------- 2519 : * 2520 : 'MESS' IT MMC XCONV DPSMAX EPSM XCONVM ; 2521 : 2522 : 2523 : * Faut-il reactualiser K ? ----------------------- 2524 : * Faut-il detruire RESIDUP ? 2525 : DETRRES = vrai; 2526 : * Increment de deformation entre 2 reactualisations de K : 2527 : 'SI' (IGRD 'ET' ('NON' HPP_EPS)); 2528 : DGR_U_K = GR_U_FIN - GR_U_K ; 2529 : DEKREAC1 = 'MAXI' 'ABS' DGR_U_K ; 2530 : 'FINSI' ; 2531 : * en grand deplacement, on teste la decroissance du residu 2532 : 'SI' (IGRD 'ET' WTAB.'CONVERGENCE_MONOTONE'); 2533 : 'SI' (XCONV > XCONVP); 2534 : txtres = 'CHAI' ' Croissance du residu detectee'; 2535 : 'SI' (RECA_K); 2536 : txtres = 'CHAI' txtres ': reduction de du^i'; 2537 : coefmul=0.2**(&bzdept2); 2538 : 'SI' (IPREM); 2539 : ZDEP1 = coefmul * ZDEP1; 2540 : 'SINO'; 2541 : URG = VRAI; 2542 : ZDEPL = ZDEPLP; ZDEPT = ZDEPTP; 2543 : si(ega &bzdept2 1); ZDEP1P= ZDEP1; 'FINSI'; 2544 : ZDLX0 = ZDEPTP 'EXCO' 'LX' 'NOID' 'LX'; 2545 : ZDEP1 = (coefmul * ZDEP1P) + ((1.-coefmul) * ZDLX0); 2546 : 'DETR' ZDLX0; 2547 : 'FINS'; 2548 : 'ITER' bzdept2; 2549 : 'SINO'; 2550 : txtres = chai txtres ': refus de la participation de l itéré'; 2551 : URG = VRAI; 2552 : ZDEPL = ZDEPLP; ZDEPT = ZDEPTP; 2553 : RESIDU = RESIDUP; DETRRES = faux; 2554 : 'FINS'; 2555 : *si le residu croit, un traitement préventif pour les prochains pas sera 2556 : *d'utiliser un EKREAC + petit. pb:il faudrait aussi pouvoir l'augementer 2557 : * 'SI' (DEKREAC1 < EKREAC et ...option?...); 2558 : * EKREAC = DEKREAC1; 2559 : * ETAB12 . 'REAC_GRANDS' = EKREAC; 2560 : * txtres = chai txtres ' ' EKREAC; 2561 : * 'FINS'; 2562 : 'MESS' txtres; 2563 : 'FINS'; 2564 : 'FINS'; 2565 : 'SI' (DETRRES); 'DETR' RESIDUP; 'FINS'; 2566 : * on quitte si tout s'est bien passé ... 2567 : 'QUIT' bzdept2; 2568 : 2569 : 'FIN' bzdept2; 2570 : ******************************************************************** 2571 : * 2572 : * on sauve le deplacement si le critere est bon au cas ou il y ait une 2573 : * non conv 2574 : * 2575 : 'SI'(xconv < xconvp); zdeptm = zdept ; xconvp = xconv ; 'FINSI'; 2576 : 2577 : *--------------------------------------------------------------------- 2578 : * test de convergence 2579 : *--------------------------------------------------------------------- 2580 : * 2581 : TABCONV.IT=XCONV; 2582 : 'SI' IPILOT;'SI' ((MMC 'EGA' 0) 'ET' (MMCMAX > 0.) 'ET' (COEPI < 0.)); 2583 : * on refuse de converger si on est elastique et en decharge 2584 : COEPI = 'ABS' COEPI;PASTEST = VRAI; 2585 : 'FINSI'; 'FINSI'; 2586 : * on refuse de converger a la premiere iteration si frottement 2587 : 'SI' (WTAB .'CAFROTTE' 'ET' (IT < 2 )); 2588 : PASTEST=VRAI; 2589 : 'FINSI'; 2590 : PASUNIL = FAUX; 2591 : 'SI' ('EXISTE' ZRAID_T 'OK'); 2592 : 'SI' ( 'NON' ZRAID_T.'OK'); 2593 : PASUNIL= VRAI; 2594 : 'FINSI'; 2595 : 'FINSI'; 2596 : 2597 : 'SI' ('NON' PASTEST); 2598 : * variation de Despi entre 2 itérés 2599 : DEPSTD = DEPST - DEPSTP; 2600 : DEPSTDM = 'MAXI' 'ABS' DEPSTD 'AVEC' MLDEFOR; 2601 : DEPSTP = DEPST; 2602 : *'DETR' DEPSTP; 'DETR' DEPSTD; 2603 : * on ne peut pas tester la convergence apres une acceleration 2604 : * ni apres une initialisation a partir de la solution precedente 2605 : *OF Le SI ci-dessous est forcement verifie !!! 2606 : *OF'SI' ('NON' (IPILOT 'ET' FAUX 2607 : *OF 'ET' ( COEPI < 1.))); 2608 : 'SI' ( ( IT > 1) 'OU' ('NON' INIT) ) ; 2609 : 'SI' (RED_URG <EG 2); 2610 : * si les criteres (deplacements + moments) sont < precision 2611 : * et la variation sur Depsi est < precision souhaitee : on a convergé! 2612 : 'SI' ( XCONV < (ZPREC*CORPREC)) ; 2613 : 'SI' ( XCONVM < (ZPRECM*CORPREC)); 2614 : 'SI' (DEPSTDM < (ZPREC*CORPREC)); 2615 : 'SI' PASUNIL; 2616 : 'MESS' ' ****** NON CONVERGENCE DE CONTACT A L ITERATION ' IT ; 2617 : ZICONV = FAUX; 2618 : 'SI' IDYN ; 2619 : VITI = UNSURH * 2. * ZDEPT - 2620 : conti. 'VITESSES'; 2621 : VITI = 'ENLE' VITI 'LX' ; 2622 : *DMODI_NB 2623 : ZVITET = VITI - conti. 'VITESSES'; 2624 : ACCEI = UNSURH * 2. * ZVITET - 2625 : conti. 'ACCELERATIONS'; 2626 : ACCEI = 'ENLE' ACCEI 'LX' ; 2627 : *FMODI_NB 2628 : ZFPU = ZDYFEXT - FFDYN; 2629 : * forces exterieures + reactions - forces interieures a la fin du pas 2630 : * c.a.d. (masse*acceleration ) + (amortissement*vitesse ) + (residu = qu 2631 : ZFP = ZFPU - FCORF; 2632 : 'DETR' ZFPU;'DETR' FFDYN;'DETR' ZDYFEXT; 2633 : 'FINSI'; 2634 : 'QUITTER' ETIQ; 2635 : 'FINSI'; 2636 : 'SI' ('NON' HPP_EPS) ; 2637 : 2638 : * la precision est satisfaisante 2639 : 'MESS' ' ****** CONVERGENCE A L ITERATION ' IT 2640 : ' SOUS-PAS ' WTAB . 'ISOUSPAS'; 2641 : 'MESS' ' '; 2642 : * on sauve le nombre de points plastique 2643 : STAB12.'NBPLAS'= MMC ; 2644 : 'SI' IDYN ; 2645 : VITI = UNSURH * 2. * ZDEPT - 2646 : conti. 'VITESSES' ; 2647 : VITI = 'ENLE' VITI 'LX' ; 2648 : ZFPU = ZDYFEXT - FFDYN; 2649 : * forces exterieures + reactions - forces interieures a la fin du pas 2650 : * c.a.d. (masse*acceleration ) + (amortissement*vitesse ) + (residu = qu 2651 : ZFP = ZFPU - FCORF; 2652 : 'DETR' ZFPU;'DETR' FFDYN;'DETR' ZDYFEXT; 2653 : 2654 : 'SI' ('EXISTE' WTAB 'MOD_LIA'); 2655 : 'SI' ('EXISTE' WTAB.'MOD_LIA' 'MATE' 'NEWMARK') ; 2656 : 'SI' ('EGA' 'CHPOINT ' ('TYPE' FLIAI) ) ; 2657 : MODNEW = 'EXTR' WTAB.'MOD_LIA' 'MATE' 'NEWMARK' ; 2658 : MAUNEW = 'EXTR' MODNEW 'MAIL' ; 2659 : 'SI' ('EXIS' ZFLIA MODNEW) ; 2660 : ZFLIANEW = 'REDU' ZFLIA MODNEW ; 2661 : NZNEW = 'EXTR' ZFLIANEW 'NBZO' ; 2662 : ZFPNW = 0. ; XVITW = 0. ; 2663 : 'REPETER' BZLIAW NZNEW ; 2664 : * un point support par zone - 2010 kich 2665 : ZFPNW = ZFPNW + 2666 : ('EXCO' ('EXTR' ZFLIANEW 'FLIA' &BZLIAW 1 1) MLDUAL 'NOID') ; 2667 : XVITW = XVITW + 2668 : ('EXCO' ('EXTR' ZFLIANEW 'FLIA' &BZLIAW 1 1) MVPRIM MLPRIM 'NOID') ; 2669 : 'FIN' BZLIAW ; 2670 : 2671 : ZFP = ZFP + ZFPNW ; 2672 : 'FINSI' ; 2673 : 'FINSI' ; 2674 : 'FINSI' ; 2675 : 2676 : 'SI' (NZLIA > 0) ; 2677 : XVIT2 = 0.d0; 2678 : 'REPETER' BZLIA NZLIA ; 2679 : XVIT2 = XVIT2 + 2680 : ('EXCO' ('EXTR' ZFLIA 'FLIA' &BZLIA 1 1) MVPRIM MLPRIM 'NOID') ; 2681 : 'FIN' BZLIA ; 2682 : 'SI' ('EGA' ('TYPE' XVIT2) 'CHPOINT ') ; 2683 : MAAUT2 = 'DIFF' ('EXTR' VITI 'MAIL') ('EXTR' XVIT2 'MAIL') ; 2684 : VITI = ('REDU' VITI MAAUT2) + XVIT2 ; 'DETR' XVIT2 ; 2685 : 'SI' ('EGA' ('TYPE' XVITW) 'CHPOINT ') ; 2686 : MAAUT3 = 'DIFF' ('EXTR' VITI 'MAIL') ('EXTR' XVITW 'MAIL'); 2687 : VITI = ('REDU' VITI MAAUT3) + XVITW ; 'DETR' XVITW ; 2688 : 'FINSI' ; 2689 : 'FINSI' ; 2690 : 'DETR' FLIAI ;'DETR' ZFLIA ; 2691 : 'FINSI' ; 2692 : 'FINSI' ; 2693 : 2694 : *DMODI_NB 2695 : ZVITET = VITI - conti. 'VITESSES'; 2696 : ACCEI = UNSURH * 2. * ZVITET - 2697 : conti. 'ACCELERATIONS'; 2698 : ACCEI = 'ENLE' ACCEI 'LX' ; 2699 : *FMODI_NB 2700 : 'FINSI' ; 2701 : STAB12.'NOMBRE_ITERATIONS' = IT; 2702 : 'QUITTE' ETIQ ; 2703 : 'SINON'; 2704 : 2705 : CORPREC=1; ITACC=5; 2706 : EPS_EPS = TEXTE ' '; HPP_EPS = FAUX; 2707 : xconvp = 1; 2708 : XCONVMIN = 1e20; DPSMREF=0; 2709 : 'REPETER' tabraz it; 2710 : tabconv.&tabraz = 1; 2711 : 'FIN' tabraz; 2712 : 2713 : PASTEST=VRAI; 2714 : 'MESS' ' passage en grands deplacements'; 2715 : 'FINSI'; 2716 : 'FINSI'; 2717 : 'FINSI'; 2718 : 'FINSI'; 2719 : 'FINSI'; 2720 : 'FINSI' ; 2721 : *OF 'SINON'; mess 'refus de convergence al1 ' al1; 2722 : *OF 'FINSI'; 2723 : 'FINSI' ; 2724 : * 2725 : * 2726 : * test de non convergence -------------------------------------------- 2727 : * 2728 : XCONVREF=1E50; 2729 : 'SI' (IT > WTAB.'DELTAITER'); 2730 : XCONVREF=TABCONV.(IT-WTAB.'DELTAITER') * 0.99; 2731 : 'FINSI'; 2732 : 'SI' (('NON' PASTEST) 'ET' (XCONV < XCONVMIN)); 2733 : XCONVMIN = XCONV; DPSMREF=DPSMAX/10; 2734 : 'SI' (XCONVMIN < ZPREC); XCONVMIN=ZPREC; 'FINSI'; 2735 : 'FINSI'; 2736 : * si on a depasse le nombre max d'iterations ou si le residu augmente 2737 : * ou si on aurait du converger et que cela n'est pas le cas : 2738 : * => non convergence detectee ! 2739 : 'SI'(IT '>EG' ZMAXIT 'OU' (XCONV > XCONVREF) 'OU' 2740 : ((XCONV < ZPREC) 'ET' ( XCONVM < ZPREC) 'ET' (DEPSTDM < ZPREC)) 2741 : 'ET' ('NON' PASTEST) 'ET' ('NON' NONCONV) 'ET' ( IT > 1) 2742 : 'ET' ('NON' IPILOT) 'ET' ('NON' PASUNIL)); 2743 : 'MESS' ' non convergence detectee ' ;ZMAXIT = 3 * IT; 2744 : HPP_EPS=FAUX; 2745 : URG = VRAI; RED_URG = RED_URG + 1; 2746 : COEPI = WTAB.'RELAXATION_NONCONV'; 2747 : STAB12.'AUTOCOEF'= COEPI ; 2748 : 'SI' (dpsmax < (zprec * 1e3)); 2749 : zdept = zdept *coepi; 2750 : 'SINON'; 2751 : zdept = zdeptm *coepi; 2752 : 'FINSI'; 2753 : NONCONV = VRAI; 2754 : itacc=4; 2755 : 'SI' (COEPI < 0.99999); ZICONV = FAUX; 'FINSI'; 2756 : ITNV=IT; 2757 : 'FINSI'; 2758 : * changement de la precision en non convergence 2759 : 'SI' nonconv ;'SI' (it > (zmaxit *2 /3)); zprecnc=zprecnc*1.4; 2760 : 'FINSI';'FINSI'; 2761 : 'SI' ('NON' PASTEST 'ET' (dpsmax < zprecnc)); 2762 : 'SI' ((IT '>EG' ZMAXIT) 2763 : 'OU' ((NBCYCLE1 '>EG' 3) 'ET' (IT 'EGA' (ITNORM1 + DITNORM1 - 1))) 2764 : 'OU' (NONCONV 'ET' ('NON' PASTEST) 2765 : 'ET' (XCONV '>' XCONVREF) 'ET' (DPSMAX '>EG' DPSMREF) 2766 : 'ET' (ITNV 'NEG' IT))); 2767 : 2768 : 'MESS' ' ****** NON CONVERGENCE A L ITERATION ' IT ' /' ZMAXIT 2769 : ' SOUS-PAS ' WTAB . 'ISOUSPAS';; 2770 : ZICONV = FAUX; 2771 : 'SI' IDYN ; 2772 : VITI = UNSURH * 2. * ZDEPT - 2773 : conti. 'VITESSES'; 2774 : VITI = 'ENLE' VITI 'LX' ; 2775 : *DMODI_NB 2776 : ZVITET = VITI - conti. 'VITESSES'; 2777 : ACCEI = UNSURH * 2. * ZVITET - 2778 : conti. 'ACCELERATIONS'; 2779 : ACCEI = 'ENLE' ACCEI 'LX' ; 2780 : *FMODI_NB 2781 : ZFPU = ZDYFEXT - FFDYN; 2782 : * forces exterieures + reactions - forces interieures a la fin du pas 2783 : * c.a.d. (masse*acceleration ) + (amortissement*vitesse ) + residu=qu 2784 : ZFP = ZFPU - FCORF; 2785 : 'DETR' ZFPU;'DETR' FFDYN;'DETR' ZDYFEXT; 2786 : 'FINSI'; 2787 : 'QUITTER' ETIQ; 2788 : 'FINSI' ; 2789 : 'FINSI' ; 2790 : * 2791 : 'DETR' FEQU2; 2792 : 'SI' WTAB.'PROCEDURE_CHAR_MECA' ; 2793 : 'SI' IDYN ; 2794 : XXX1=ZFCONSTA - ZFP1 + FP22; 2795 : ZDYFEXT = XXX1 'ENLEVER' 'FLX';'DETR' XXX1; 2796 : 'FINSI'; 2797 : 'FINSI' ; 2798 : * 2799 : *KTAN*DEBUT************************************************************* 2800 : * EVALUATION DE LA MATRICE TANGENTE SI DEMANDEE 2801 : 'SI' IKTAN ; 2802 : 'SI' ('NON' IFEFP) ; 2803 : 'SI' ('MULT' ZITAC ZNCONS) ; 2804 : * 'SI' IKT ; 2805 : * 'DETR' ZRIKTA 'ELEM' ; 'DETR' ZRAID ; 2806 : * 'FINSI' ; 2807 : 'SI' (IGRD 'ET' ('NON' HPP_EPS)); 2808 : 'FORM' GEOM2 ; 2809 : ZMATloc = ZMAT2 ; 2810 : 'SINON' ; 2811 : ZMATloc = ZMAT ; 2812 : 'FINSI' ; 2813 : 2814 : 'SI' ('NON' ISSTE) ; 2815 : 'SI' IPERT ; 2816 : 'SI' PARTLOCA ; 2817 : cha1 = 'ASSIS' 'TOUS' 'REDU' MODRELOC Z1COMP ; 2818 : cha2 = 'ASSIS' 'TOUS' 'REDU' MODRELOC Z2COMP ; 2819 : zktap = 'ASSIS' 'TOUS' 'KTAN' 'PERT' MODRELOC cha1 cha2 2820 : 'C1' ZPERC1 'C2' ZPERC2 2821 : ZKTASYM ; 2822 : ZRIKTA = 'ET' zktap ; 2823 : 'SINON'; 2824 : ZRIKTA = 'KTAN' 'PERT' ZMODL Z1COMP Z2COMP 2825 : 'C1' ZPERC1 'C2' ZPERC2 ZKTASYM ; 2826 : 'FINSI'; 2827 : * Attention au ZMAT et ZSIGF a utiliser en IGRD !! 2828 : 'SINON' ; 2829 : 'SI' ('ET' ('NON' IVISCO) ('NON' IVIDOM)) ; 2830 : DTTAN = 0. ; 2831 : 'SINON' ; 2832 : DTTAN = STAB12.'DT' ; 2833 : 'FINSI' ; 2834 : ZRIKTA = 'KTAN' ZMODL ZSIGF ZVARF ZMATloc 2835 : 'PREC' ZPREK 'DT ' DTTAN ZKTASYM ; 2836 : 'FINSI' ; 2837 : 'FINSI' ; 2838 : 2839 : 'SI' IKSIA ; 2840 : KSIG = 'KSIGMA' ZMODL ZSIGF ZMATloc ; 2841 : ZRIKTA = ZRIKTA 'ET' KSIG ; 2842 : 'FINSI' ; 2843 : 2844 : ZRAID = ZRIKTA 'ET' ZCLIM ; 2845 : 2846 : 'SI' IGRD ; 'FORM' GEOM1 ; 'FINSI' ; 2847 : 2848 : IKT = VRAI ; ZMATloc = 1. ; 2849 : 2850 : 'FINSI' ; 2851 : 'FINSI' ; 2852 : 'FINSI' ; 2853 : *KTAN*FIN*************************************************************** 2854 : * 2855 : 'SI' (IGRD 'ET' ('NON' HPP_EPS)); 2856 : 'SI' ('EGA' ('TYPE' GEOM2) 'CONFIGUR'); 2857 : 'DETR' GEOM2 ; 2858 : 'FINSI'; 2859 : * 'SI' ITCAR ; 'DETR' ZMAT2R ; 'FINSI'; 2860 : 'FINSI' ; 2861 : * 2862 : *'SI' IPLAVI ; 2863 : * 'DETR' ZSIGF ; 'DETR' ZVARF ; 'DETR' ZDEIF ; 2864 : *'FINSI' ; 2865 : 2866 : 'SI' IFEFP ; 'DETR' ZRIKTA ; 'DETR' GEOM2; 'FINSI' ; 2867 : * 2868 : IPREM = FAUX; IAFAIR=VRAI; RECA_K = FAUX; 2869 : * 2870 : 'FIN' ETIQ ; 2871 : *======================================================================= 2872 : *===== FIN DE LA BOUCLE DE CONVERGENCE ===== 2873 : *======================================================================= 2874 : * 2875 : * 2876 : * on sauve les pseudo forces de frottement pour initialiser 2877 : * l'iteration suivante 2878 : 'SI' (WTAB. 'CAFROTTE' ); 2879 : STAB12.'FFROT'= 'COPIER' FFROT; 2880 : 'FINSI'; 2881 : ** ON cherche a sauver la partie Forces nonlineaires trouvee pendant 2882 : * ce pas pour s'en servir pour l'estimation de l'initialisation du pas 2883 : * DFNL = K*DU - DF - residu 2884 : * Ktot*dutot ne contient pas les forces de reactions mais les forces 2885 : * internes dues a un champ de deformation initiales ( thermique) 2886 : * donc enlever ZDFINI au lieu de DFEXT0 2887 : * pour les forces suiveuses on fait delta FP 2888 : * pour etre plus precis on fait aussi intervenir le residu 2889 : * 2890 : STAB12.'RESIDU' = RESIDC; 2891 : XXX1 = ZRAID * ZDEPT; 2892 : XXX3 = ZDFINI * COEPI; 2893 : XXX4 = XXX1 - XXX3; 2894 : XXX3 = XXX4 + RESIDC; 2895 : XXX1 = XXX3 - FREAP ; 2896 : XXX5 = XXX1 'ENLEVER' 'FLX ' ; 2897 : 'DETR' XXX1 ; 'DETR' XXX3 ; 'DETR' XXX4 ; 2898 : * en cas de non convergence on cumule les forces non lineaires 2899 : 'SI' WTAB.'CONV'; 2900 : STAB12.'FNONL' = XXX5 ; 2901 : 'SINON'; 2902 : STAB12.'FNONL' = XXX5 + STAB12.'FNONL'; 2903 : 'DETR' XXX5 ; 2904 : 'FINSI'; 2905 : *fba verifier WTAB.'ITERPREC' =IT; 2906 : STAB12.'DTPREC'= WTAB.'DT_INIT'; 2907 : * 2908 : * On garde la derniere matrice KTAN calculee dans ETIQ si necessaire 2909 : 'SI' IKTAN ; 2910 : 'SI' IFEFP ; 2911 : * 'MESS' 'FEFP: Last KTAN is kept for next increment' ; 2912 : STAB12.'LASTKTAN' = ZRIKTA ; 2913 : 'SINON' ; 2914 : 'SI' (IKT_SAUV 'ET' IKT) ; 2915 : * 'MESS' 'KTAN : La matrice est conservee pour le pas suivant' ; 2916 : STAB12.'LASTKTAN' = ZRIKTA ; 2917 : 'FINSI' ; 2918 : 'FINSI' ; 2919 : 'FINSI' ; 2920 : * 2921 : * quelques destructions supplementaires 2922 : * 2923 : 'SI' IPLAVI ; 2924 : 'SI' ('NEG' WTAB.'MOVA' 'RIEN') ; 2925 : * 'DETR' ACC0; 'DETR' ACC; 2926 : 'FINSI' ; 2927 : ** 'DETR' DEPIN0 ; 2928 : 'FINSI' ; 2929 : 'DETR' ZFEXT ; 'DETR' FREAP ; 2930 : 'SI' IPILOT; 2931 : 'SI' ITHER ; 2932 : 'DETR' FTHE ; 2933 : 'DETR' ETT; 2934 : XXX1= (TETA2 - TETA1) * COEPI + TETA1; 2935 : STAB12.'TET2' = XXX1; 2936 : XXX1 = XXX1 - WTAB.'TEMPERATURE_REFERENCE'; 2937 : ETT = 'EPTH' ZMODL ZMAT XXX1 ; 2938 : ETT=ETT - WTAB.'ETREF' ; 2939 : 'SI' POR1 ; 2940 : ZMATP = 'REDU' ZMAT MO_POR ; 2941 : ZALM = 'EXCO' 'ALPM' ZMATP 'MSR0' ; 2942 : ZBI = 'EXCO' 'COB' ZMATP 'MSR0' ; 2943 : ZALPH = 'EXCO' 'ALPH' ZMATP 'MSR0' ; 2944 : ZFAC = 3. * ( ZALM - ( ZBI * ZALPH ) ); 2945 : ZFAC = 'CHAN' 'STRESSES' MO_POR ZFAC ; 2946 : * 2947 : ZDT = 'REDU' XXX1 MAI_POR; 2948 : ZDDT = 'CHAN' 'CHAM' ZDT MO_POR 2949 : 'STRESSES' 'SCALAIRE'; 2950 : MSRTT = ZFAC * ZDDT ; 2951 : * 'DETR' ZALM ; 'DETR' ZBI ; 'DETR' ZALPH ; 2952 : * 'DETR' ZFAC ; 'DETR' ZDT ; 'DETR' ZDDT ; 2953 : * 'DETR' ZMATP ; 2954 : 'FINSI'; 2955 : * 2956 : 'FINSI'; 2957 : 'SI' LOGDEF ; 2958 : 'DETR' FDEF ; 2959 : XXX1=('REDU'('ETG' DDEFOR0)ZMODL)* COEPI+STAB12.'DEFOR1'; 2960 : STAB12.'DEFOR2' = XXX1; 2961 : 'FINSI'; 2962 : 'FINSI'; 2963 : * 2964 : *'SI' LOGDEF ; 2965 : * 'DETR' DDEFOR0; 'DETR' DSI1; 2966 : *'FINSI'; 2967 : 2968 : 'SI' ITHER ; 2969 : STAB12.'ETHER2'='REDU' ('ETG' ETT) ZMODLI ; 2970 : STAB12.'ETHER1'=STAB12.'ETHER2' ; 2971 : 'SI' POR1 ; 2972 : STAB12.'MSRTHER2'='REDU' ('ETG' MSRTT) ZMODLI; 2973 : 'FINSI'; 2974 : * 'DETR' DSIGT0 ; 'DETR' DEPST0 ; 2975 : 'FINSI'; 2976 : * 2977 : 'SI' IDYN ; 2978 : STAB12.'FOPL' = ZFP ; 2979 : STAB12.'VITI' = VITI; 2980 : STAB12.'ACCEI' = ACCEI; 2981 : 'SI' IMPLP; STAB12.'VAUX' = VADD; 'FINSI'; 2982 : 'FINSI' ; 2983 : 'SI' IGRD; 2984 : DEPST = 'CAPI' zu1 depst zmodl; 2985 : 'FINSI'; 2986 : 2987 : 2988 : STAB12.'DEFF' = 'REDU' ('ETG' (DEFT0 + DEPST)) ZMODLI; 2989 : 'SI' IPLAVI ; 2990 : STAB12.'VARF' = 'REDU' ('ETG' ZVARF) ZMODLI ; 2991 : STAB12.'DFPF'='REDU' ('ETG' ZDEIF) ZMODLI; 2992 : 'SI' IFEFPUL; 2993 : STAB12.'FOR' = GEOM2 ; 2994 : 'FINSI'; 2995 : ZVAR0=STAB12.'VARF'; ZEPS0=STAB12.'DFPF'; 2996 : 'FINSI'; 2997 : 2998 : STAB12.'DEPT' = ZDEPT ; 2999 : STAB12.'ZU1'= ('ENLE' ZU1 'LX' ) + ZDEPT ; 3000 : STAB12.'SIGF' = 'REDU' ('ETG' ZSIGF) ZMODLI; 3001 : STAB12.'CONV' = ZICONV ; 3002 : STAB12.'XDENO'=XDENO; 3003 : STAB12.'XDENOM' = XDENOM; 3004 : 'SI' ('NEG' GR_U_FIN 'INCONNU'); 3005 : STAB12.'DFGRAD' ='ETG' GR_U_FIN ; 3006 : 'SINON'; 3007 : STAB12.'DFGRAD' ='MOT' 'INCONNU'; 3008 : 'FINSI'; 3009 : 3010 : 'SI' IGRD; 3011 : 'SI' ('EGA' GEOM2 'GEOM2'); 3012 : 'SI' ITCAR ; 3013 : GEOM2 ZMAT2 ='FORM' ZDEPT ZMODLI ZMATI; 3014 : ZMAT2 = 'REDU' ZMAT2 ZMODL; 3015 : 'SINON'; 3016 : GEOM2 = 'FORM' ZDEPT ; 3017 : 'FINSI'; 3018 : 'FINSI'; 3019 : STAB12.'FOR' = GEOM2 ; 3020 : GEOM1=GEOM2; 3021 : GEO_COUR= STAB12.'FOR'; 3022 : 'FORM' GEO_COUR; 3023 : STAB12.'FOR' = GEOM2 ; 3024 : GEOM2='MOT' 'GEOM2'; 3025 : 'SI' (&BONOCON 'NEG' 1); 3026 : 'DETR' GEO_COUR; 3027 : 'FINSI'; 3028 : GEOM1= STAB12.'FOR'; 3029 : 'FORM' GEOM1; 3030 : 'SI' ITCAR;STAB12.'CARA'=('ETG' ZMAT2) 'REDU' ZMODLI;'FINSI'; 3031 : * 'SI' IKSIA ; 'DETRUIRE' KSI1 'ELEM' ; 'FINSI'; 3032 : 'FINSI' ; 3033 : 'SI' LOGDEF;STAB12.'DEFOR1'=STAB12.'DEFOR2';'FINSI'; 3034 : STAB12.'MAT1'=ZMAT2; 3035 : STAB12.'ETAT1'=STAB12.'ETAT2'; 3036 : 'SI' ('NEG' WTAB.'DT' STAB12.'DT'); 3037 : STAB12.'DT'=WTAB.'DT' - STAB12.'DT'; 3038 : 'FINSI'; 3039 : DEPS0=STAB12.'DEFF'; 3040 : *mess ' fin de boucle wtab.ether1'; list wtab.'ETHER1'; 3041 : TEMPS0=TI; 3042 : 'SI' ZICONV;'QUITTER' BONOCONV;'FINSI'; 3043 : WTAB.'CONV'=STAB12.'CONV'; 3044 : 3045 : *Nombre maximum de sous-pas atteint? si oui, arret de pasapas 3046 : WTAB.'ISOUSPAS' = WTAB.'ISOUSPAS' + 1; 3047 : 'SI' (WTAB.'ISOUSPAS' >EG WTAB.'MAXSOUSPAS'); 3048 : 'ERREUR' 996 ; 3049 : 'FINSI'; 3050 : 3051 : 'FIN' BONOCONV; 3052 : ************************************************************************ 3053 : * fin de la boucle de non convergence 3054 : ************************************************************************ 3055 : 3056 : 'OPTI' 'PARA' FAUX; 3057 : * 3058 : 'FINPROC' STAB12; 3059 : 3060 : 3061 : 3062 : 3063 : 3064 : 3065 :
© Cast3M 2003 - All rights reserved.
Disclaimer