Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

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