Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

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