Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

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