Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

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