Download unpas.procedur

Back to the list

   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