Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

  1. * UNPAS PROCEDUR OF166741 24/05/06 21:15:27 11082
  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. *CB215821 : Recuperation de XPETIT (07/12/2016)
  26. XPETIT = 'VALE' 'PETI' ;
  27. XGRAND = 'VALE' 'GRAND' ;
  28. *
  29. WTAB = PRECED.'WTABLE' ;
  30. conti = PRECED.'CONTINUATION';
  31. estim = PRECED.'ESTIMATION' ;
  32. *
  33. * Liste de composantes utiles
  34. MXMYMZ = 'MOTS' 'MX' 'MY' 'MZ' 'MT' 'FP' 'FPQ' 'FTP'
  35. 'IMX' 'IMY' 'IMZ' 'IMT' 'IFP' 'IFPQ' 'IFTP' ;
  36. MXMFLX = 'MOTS' 'MX' 'MY' 'MZ' 'MT' 'FLX' 'FP' 'FPQ' 'FTP'
  37. 'IMX' 'IMY' 'IMZ' 'IMT' 'FLX' 'IFP' 'IFPQ' 'IFTP' ;
  38. MNPRIM = 'MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT'
  39. 'P' 'PQ' 'TP' 'ALFA' 'BETA'
  40. 'IUX' 'IUY' 'IUZ' 'IUR' 'IUT' 'IRX' 'IRY' 'IRZ' 'IRT'
  41. 'IP' 'IPQ' 'ITP' 'IALF' 'IBET' ;
  42. MLPRIM = MNPRIM 'ET' ('MOTS' 'LX');
  43. MNDUAL = 'MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT'
  44. 'FP' 'FPQ' 'FTP' 'FALF' 'FBET'
  45. 'IFX' 'IFY' 'IFZ' 'IFR' 'IFT' 'IMX' 'IMY' 'IMZ' 'IMT'
  46. 'IFP' 'IFPQ' 'IFTP' 'IFAL' 'IFBE' ;
  47. MLDUAL = MNDUAL 'ET' ('MOTS' 'FLX');
  48. MLDEPL = 'MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'IUX' 'IUY' 'IUZ' 'IUR' 'IUT'
  49. 'ALFA' 'BETA' 'IALF' 'IBET' ;
  50. MLROTA = 'MOTS' 'RX' 'RY' 'RZ' 'RT' 'P' 'PQ' 'TP'
  51. 'IRX' 'IRY' 'IRZ' 'IRT' 'IP' 'IPQ' 'ITP';
  52. MLDEFOR = 'MOTS' 'EPXX' 'EPYY' 'EPZZ' 'EPSS' 'EPTT' 'EPRR'
  53. 'GAXY' 'GAXZ' 'GAYZ' 'GAST' 'GASN' 'GATN'
  54. 'GARZ' 'GART' 'GAZT' 'GXY '
  55. * 'CX ' 'CY ' 'CZ '
  56. 'EPSE' 'EPS' ;
  57. * Pour MOD_LIAISON :
  58. MLPRIM_LIA = MLPRIM ;
  59. MVPRIM_LIA = 'MOTS' 'VTX' 'VTY' 'VTZ' 'VTR' 'VTT' 'VWX' 'VWY' 'VWZ' 'VWT'
  60. 'VVP' 'VVPQ' 'VVTP' 'VALF' 'VBET'
  61. 'IVTX' 'IVTY' 'IVTZ' 'IVTR' 'IVTT' 'IVWX' 'IVWY' 'IVWZ' 'IVWT'
  62. 'IVVP' 'IVPQ' 'IVTP' 'IVAL' 'IVBE' 'VLX';
  63. MLDUAL_LIA = MLDUAL ;
  64.  
  65. *=DEB===== Formulation HHO = Definition des DDLs ===============================
  66. * Definition des DDLs primaux : inconnues de deplacements des cellules et des Faces
  67. MNPRIM_HHO = 'MOTS'
  68. * 'UXC0' 'UXC1' 'UXC2' 'UXC3' 'UXC4' 'UXC5' 'UXC6' 'UXC7' 'UXC8' 'UXC9'
  69. * 'UYC0' 'UYC1' 'UYC2' 'UYC3' 'UYC4' 'UYC5' 'UYC6' 'UYC7' 'UYC8' 'UYC9'
  70. * 'UZC0' 'UZC1' 'UZC2' 'UZC3' 'UZC4' 'UZC5' 'UZC6' 'UZC7' 'UZC8' 'UZC9'
  71. 'UXF0' 'UXF1' 'UXF2' 'UXF3' 'UXF4' 'UXF5' 'UXF6' 'UXF7' 'UXF8' 'UXF9'
  72. 'UYF0' 'UYF1' 'UYF2' 'UYF3' 'UYF4' 'UYF5' 'UYF6' 'UYF7' 'UYF8' 'UYF9'
  73. 'UZF0' 'UZF1' 'UZF2' 'UZF3' 'UZF4' 'UZF5' 'UZF6' 'UZF7' 'UZF8' 'UZF9' ;
  74. MNDUAL_HHO = 'MOTS'
  75. * 'FXC0' 'FXC1' 'FXC2' 'FXC3' 'FXC4' 'FXC5' 'FXC6' 'FXC7' 'FXC8' 'FXC9'
  76. * 'FYC0' 'FYC1' 'FYC2' 'FYC3' 'FYC4' 'FYC5' 'FYC6' 'FYC7' 'FYC8' 'FYC9'
  77. * 'FZC0' 'FZC1' 'FZC2' 'FZC3' 'FZC4' 'FZC5' 'FZC6' 'FZC7' 'FZC8' 'FZC9'
  78. 'FXF0' 'FXF1' 'FXF2' 'FXF3' 'FXF4' 'FXF5' 'FXF6' 'FXF7' 'FXF8' 'FXF9'
  79. 'FYF0' 'FYF1' 'FYF2' 'FYF3' 'FYF4' 'FYF5' 'FYF6' 'FYF7' 'FYF8' 'FYF9'
  80. 'FZF0' 'FZF1' 'FZF2' 'FZF3' 'FZF4' 'FZF5' 'FZF6' 'FZF7' 'FZF8' 'FZF9' ;
  81. * Pour l'istant on ne considere que les inconnues (DEPL et FORC) de face pour
  82. * le calcul de l'equilibre et l'acceleration de convergence
  83. * D'ou les lignes commentees ci-dessus dans la definition de MNPRIM_HHO et MNDUAL_HHO
  84. MNPRIM = MNPRIM 'ET' MNPRIM_HHO ;
  85. MLPRIM = MLPRIM 'ET' MNPRIM_HHO ;
  86. MNDUAL = MNDUAL 'ET' MNDUAL_HHO ;
  87. MLDUAL = MLDUAL 'ET' MNDUAL_HHO ;
  88. MLDEPL = MLDEPL 'ET' MNPRIM_HHO ;
  89. *A Ameliorer : ne faire que si presence HHO et n'ajouter que les DDLs utilises par HHO !
  90. *=FIN===== Formulation HHO =====================================================
  91. *
  92. * Pour stocker des informations necessaires aux calculs d'usure
  93. WTAB.'POST_COFR' = 'TABL' ;
  94. *----------------------------------------------------------------------*
  95. * Options de pasapas - parametres du calcul *
  96. *----------------------------------------------------------------------*
  97. * 1- rigidite
  98. AUTAUG = WTAB.'AUTOAUGM';
  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. IRAUGLU = WTAB.'RAIDAUGM';
  107. IRAUG = IRAUGLU ;
  108. 'SI' IRAUG;
  109. RIG_AUG = WTAB.'RIGIDITE_AUGMENTEE';
  110. 'FINS';
  111. IRCON = WTAB.'RAIDCONST';
  112. 'SI' IRCON;
  113. RIG_CONS = WTAB.'RIGIDITE_CONSTANTE';
  114. MAI_CONS ='EXTR' RIG_CONS 'MAIL' ;
  115. 'FINS';
  116. * declenchement du recalcul de la matrice
  117. DLTAIT = WTAB.'DELTAITER' ;
  118. ITRCLC = 1 '*' DLTAIT ;
  119. 'SI' (ITRCLC < 20) ; ITRCLC = 20; 'FINSI';
  120. *
  121. * 2- Type de formulation
  122. IFEFP = WTAB.'FEFP_FORMULATION' ;
  123. LAG_TOT= WTAB.'LAG_TOT';
  124. ISSTE = WTAB.'SUBSTEPPING';
  125. IFEFPUL= WTAB.'UPDATE_LAGRANGIAN';
  126. LNLOC = WTAB.'NLOC';
  127. 'SI' (LNLOC 'ET' ('EGA' WTAB.'NON_LOCAL' 'HELM'));
  128. TAHELM = WTAB.'HELMHOLTZ' ;
  129. NHELM = TAHELM . 'N_VARI_NL' ;
  130. 'FINSI' ;
  131. *
  132. * 3- Type de materiau
  133. ICERAM = WTAB.'CERAMIQUE' ;
  134. IENDOM = WTAB.'ENDOMMAGEMENT';
  135. IPLAVI = WTAB.'IPLAVI';
  136. POR1 = WTAB.'POR1' ;
  137. IVIEXT = WTAB.'VISCO_EXTERNE';
  138. IVIDOM = WTAB.'VISCODOMMAGE';
  139. IVISCO = WTAB.'VISCOPLASTIQUE';
  140. *
  141. * 4- Critere de convergence/non-convergence
  142. ZMAXIT = WTAB.'MAXITERATION' ;
  143. NITMA = WTAB.'NITERINTER_MAX';
  144. ZPRECM = WTAB.'PRECFLEX' ;
  145. ZPREK = WTAB.'PRECISINTER' ;
  146. ZPREC = WTAB.'PRECISION' ;
  147. ZPRECHPP = ZPREC ;
  148. IFTOL = 'NEG' WTAB.'FTOL' 'INCONNU' ;
  149. 'SI' IFTOL ;
  150. ZFTOL = 'ABS' WTAB.'FTOL' ;
  151. 'FINS';
  152. IMTOL = 'NEG' WTAB.'MTOL' 'INCONNU';
  153. 'SI' IMTOL ;
  154. ZMTOL = 'ABS' WTAB.'MTOL' ;
  155. 'FINS';
  156. 'SI' ('OU' IVISCO IVIDOM IVIEXT); ZPREK = 5.E-7 ; 'FINS';
  157. 'SI' IENDOM; ZPREK = ZPREC ; 'FINS';
  158. NSOINCR = WTAB.'SOUS_INCREMENT' ;
  159. *
  160. * 5- Type de calcul
  161. IPILOT = WTAB.'AUTOMATIQUE';
  162. ISOL = WTAB.'CONSOLIDATION';
  163. IDYN = WTAB.'DYNAMIQUE';
  164. IGRD = WTAB.'GRANDS_DEPLACEMENTS';
  165. HYPDEF = 'MOT' WTAB.'HYPOTHESE_DEFORMATIONS';
  166. HPP_EPS = 'EGA' WTAB.'PREDICTEUR' 'HPP';
  167. *
  168. * 6- Chargement particulier
  169. LOGDEF = WTAB.'CHAR_DEFI';
  170. LOGPRE = WTAB.'CHAR_PRES' ;
  171. LOGPIL = WTAB.'CHAR_PILO' ;
  172. ITHER = WTAB.'ITHER' ;
  173. *
  174. * 7- Acceleration de convergence
  175. ZNACCE = VRAI;
  176. * Option a n'utiliser que par les utilisateurs avertis
  177. 'SI' ('EXIS' PRECED 'ACCELERATION') ;
  178. III = PRECED.'ACCELERATION' ;
  179. 'SI' ('EGA' ('TYPE' III) 'ENTIER') ;
  180. ZNACCE = III ;
  181. 'FINS' ;
  182. 'FINS' ;
  183. *
  184. * 8- Instant de debut et de fin de pas
  185. TEMPS0 = WTAB.'TEMPS0';
  186. TI = WTAB.'T_FINAL';
  187. *
  188. * 9- Blocages mecaniques (BLOM)
  189. 'SI' WTAB.'CHAR_BLOM' ;
  190. BLOM1 = 'TIRE' PRECED.'BLOCAGES_MECANIQUES' 'BLOM' TI ;
  191. WTAB.'BLOCAGES_MECANIQUES' = BLOM1 ;
  192. 'FINSI' ;
  193. ZCLIM0 = WTAB.'BLOCAGES_MECANIQUES';
  194. ZCLIM = ZCLIM0 ;
  195. *----------------------------------------------------------------------*
  196. * Verification de la compatibilite entre options *
  197. *----------------------------------------------------------------------*
  198. 'SI' (IKTAN 'ET' ('NON' IPLAVI)) ;
  199. 'MESS' 'IPLAVI faux : pas de matrice tangente ->'
  200. ' on utilise la rigidite elastique' ;
  201. IKTAN = FAUX ;
  202. 'FINS' ;
  203. IPERT = WTAB.'K_TANGENT_PERT' 'ET' ('NON' LNLOC) 'ET' IPLAVI ;
  204. * Matrice tangente : pas d'acceleration en cas de modele FEFP ou SSTE
  205. 'SI' IKTAN ;
  206. 'SI' (IFEFP 'OU' ISSTE) ; ZNACCE = FAUX; 'FINS';
  207. 'FINS' ;
  208. *
  209. * Configurations de reference et de debut de pas
  210. GEOREF0 = WTAB.'FOR0' ;
  211. GEOM1 = WTAB.'GE0_DEB' ;
  212. *----------------------------------------------------------------------*
  213. * Modele complet *
  214. * *
  215. * Notations utilisees : *
  216. * ZMODLI : modeles mecanique + poreux (non //) *
  217. * -> aucune parallelisation alors ZMODL = ZMODLI *
  218. * -> parallelisation comportement alors ZMODL = ZMODLI *
  219. * MODRELOC est // *
  220. * -> parallelisation automatique alors ZMODL est // *
  221. *----------------------------------------------------------------------*
  222. * PAS_MODL : mise a jour des indices de PRECED.WTABLE relatifs aux
  223. * modeles si PRECED.WTABLE.MODELE a ete modifie.
  224. PAS_MODL PRECED ;
  225. 'SI' WTAB.'FOR_MECA' ;
  226. PARALLEL = FAUX ; PARTLOCA = FAUX ;
  227. ZMODLI = WTAB.'MO_TOT' ;
  228. ZMODL = ZMODLI ;
  229. 'SI' ('EGA' WTAB.'PROCESSEURS' 'COMPORTEMENT') ;
  230. PARALLEL = VRAI ; PARTLOCA = VRAI ;
  231. MODRELOC = 'PART' 'ARLE' ZMODLI WTAB.'NBPART' ;
  232. 'FINS' ;
  233. 'SI' ('EGA' WTAB.'PROCESSEURS' 'AUTOMATIQUE') ;
  234. PARALLEL = VRAI ; PARTLOCA = FAUX ;
  235. ZMODL = 'PART' 'ARLE' ZMODLI WTAB.'NBPART' ;
  236. 'OPTI' 'PARA' VRAI ;
  237. 'FINS' ;
  238. *
  239. * Si le modele a change, adapter egalement les MCHAMLS
  240. 'SI' ('NEG' ZMODLI WTAB.'MO_TOT_PREC') ;
  241. *
  242. CONTI.'CONTRAINTES' =('REDU' CONTI. 'CONTRAINTES' ZMODLI) '+' ('ZERO' ZMODLI 'CONTRAINTES') ;
  243. CONTI.'DEFORMATIONS'=('REDU' CONTI.'DEFORMATIONS' ZMODLI) '+' ('ZERO' ZMODLI 'DEFORMAT' ) ;
  244. 'SI' IPLAVI ;
  245. CONTI.'DEFORMATIONS_INELASTIQUES'=('REDU' CONTI.'DEFORMATIONS_INELASTIQUES' ZMODLI) '+' ('ZERO' ZMODLI 'DEFINELA') ;
  246. CONTI.'VARIABLES_INTERNES' =('REDU' CONTI.'VARIABLES_INTERNES' ZMODLI) '+' ('ZERO' ZMODLI 'VARINTER') ;
  247. 'FINS';
  248. *
  249. WTAB.'ETAT1' = PAS_ETAT PRECED TEMPS0 ;
  250. WTAB.'MAT1' = PAS_MATE PRECED WTAB.'ETAT1';
  251. *
  252. 'SI' ITHER ;
  253. WTAB.'ETHER1' =('REDU' WTAB.'ETHER1' ZMODLI) '+' ('ZERO' ZMODLI 'DEFORMAT') ;
  254. 'SI' POR1;
  255. WTAB.'MSRTHER1'=('REDU' WTAB.'MSRTHER1' ZMODLI) '+' ('ZERO' ZMODLI 'DEFORMAT') ;
  256. 'FINS';
  257. 'FINS';
  258. *
  259. 'SI' LOGDEF ;
  260. WTAB.'DEFOR1' = ('REDU' WTAB.'DEFOR1' ZMODLI) '+' ('ZERO' ZMODLI 'DEFORMAT') ;
  261. WTAB.'DEFOR2' = ('REDU' WTAB.'DEFOR2' ZMODLI) '+' ('ZERO' ZMODLI 'DEFORMAT') ;
  262. 'FINS';
  263. *
  264. 'FINS';
  265. 'FINSI';
  266. *----------------------------------------------------------------------*
  267. * Champ materiau et caracteristiques a l'instant TEMPS0 *
  268. * *
  269. * Notations utilisees : *
  270. * ZMAT11 : materiau a l'instant TEMPS0 (non //) *
  271. * -> aucune parallelisation alors ZMAT1 = ZMAT11 *
  272. * -> parallelisation comportement alors ZMAT1 = ZMAT11 *
  273. * -> parallelisation automatique alors ZMAT1 est // *
  274. *----------------------------------------------------------------------*
  275. ZMAT11 = WTAB.'MAT1' ;
  276. ZMAT1 = ZMAT11;
  277. 'SI' WTAB.'FOR_MECA' ;
  278. 'SI' ('EGA' WTAB.'PROCESSEURS' 'AUTOMATIQUE') ;
  279. ZMAT1 = 'REDU' ZMAT11 ZMODL ;
  280. 'FINS';
  281. *
  282. * Distinguer les modeles poreux des modeles mecaniques
  283. 'SI' POR1;
  284. MO_PORI = 'EXTR' ZMODLI 'FORM' 'POREUX';
  285. MO_POR = 'EXTR' ZMODL 'FORM' 'POREUX';
  286. *
  287. ** kich ma_por0 intervient si ISOL
  288. ** initialement MA_POR0= 'REDU' MO_POR MAT1 ;
  289. MA_POR0 = 'REDU' ZMAT11 MO_POR ;
  290. 'FINS';
  291. 'FINSI';
  292. *----------------------------------------------------------------------*
  293. * Champ materiau et caracteristiques a l'instant TI *
  294. * *
  295. * Notations utilisees : *
  296. * ZMAT22 : materiau a l'instant TI (non //) *
  297. * -> aucune parallelisation alors ZMAT2 = ZMAT22 *
  298. * -> parallelisation comportement alors ZMAT2 = ZMAT22 *
  299. * -> parallelisation automatique alors ZMAT2 est // *
  300. *----------------------------------------------------------------------*
  301. ZETAT2 = PAS_ETAT PRECED TI ;
  302. ZMAT2I = PAS_MATE PRECED ZETAT2;
  303. *
  304. 'SI' WTAB.'FOR_MECA' ;
  305. ZMAT22 = 'REDU' ZMAT2I ZMODLI ;
  306. 'SI' WTAB.'ITCAR';
  307. 'FORM' GEOREF0 ;
  308. GEOBID ZMAT22 = 'FORM' CONTI.'DEPLACEMENTS' ZMODLI ZMAT22;
  309. 'FORM' GEOM1 ;
  310. 'FINS';
  311. ZMAT2 = 'REDU' ZMAT22 ZMODL ;
  312. 'SI' POR1;
  313. MA_POR = 'REDU' ZMAT2I MO_POR ;
  314. 'FINS';
  315. 'FINSI' ;
  316. *----------------------------------------------------------------------*
  317. * Chargement a imposer a l'instant TI (F^ext_n+1) *
  318. *----------------------------------------------------------------------*
  319. ZFEXT2= 'VIDE' 'CHPOINT' / 'DISCRET';
  320. 'SI' ('EXIS' WTAB.'CHARGEMENT' 'MECA');
  321. ZFEXT2 = 'TIRE' WTAB.'CHARGEMENT' 'MECA' TI;
  322. TYP_2 = 'TYPE' ZFEXT2;
  323. 'SI' ('NEG' TYP_2 'CHPOINT ');
  324. 'MESS' '*** Erreur dans la definition du chargement ( MECA ) ***';
  325. 'ERRE' '*** Le type du champ n est pas CHPOINT ***';
  326. 'FINS';
  327. 'FINS';
  328. *
  329. 'SI' ('EXIS' WTAB.'CHARGEMENT' 'FORC');
  330. F2_FOR = 'TIRE' WTAB.'CHARGEMENT' 'FORC' TI;
  331. TYP_2 = 'TYPE' F2_FOR;
  332. 'SI' ('NEG' TYP_2 'CHPOINT ');
  333. 'MESS' '*** Erreur dans la definition du chargement ( FORC ) ***';
  334. 'ERRE' '*** Le type du champ n est pas CHPOINT ***';
  335. 'FINS';
  336. ZFEXT2 = ZFEXT2 '+' F2_FOR ;
  337. 'FINS';
  338. *
  339. 'SI' (LOGPRE 'ET' ('NON' IGRD)) ;
  340. MOP = WTAB.'MOD_PRE' ;
  341. ZPEXT ='TIRE' WTAB.'CHARGEMENT' 'PRES' TI ;
  342. 'SI' ('EXIS' WTAB 'MAT_PRE') ;
  343. ZFPEXT = 'BSIG' MOP ZPEXT WTAB.'MAT_PRE' ;
  344. 'SINON' ;
  345. ZFPEXT = 'BSIG' MOP ZPEXT ;
  346. 'FINS' ;
  347. ZFEXT2 = ZFEXT2 '+' ZFPEXT ;
  348. 'FINS' ;
  349. *
  350. 'SI' ('EXIS' WTAB.'CHARGEMENT' 'DIMP');
  351. F2_DEP = 'TIRE' WTAB.'CHARGEMENT' 'DIMP' TI;
  352. ZFEXT2 = ZFEXT2 + F2_DEP;
  353. 'FINS';
  354. *
  355. 'SI' ('EXIS' WTAB.'CHARGEMENT' 'DINC');
  356. F2_INC = 'TIRE' WTAB.'CHARGEMENT' 'DINC' TI;
  357. F2_mail = extr f2_inc maillage;
  358. zclim_mail = zclim extrai 'MAILLAGE';
  359. F2_Mcmp = zclim_mail elem appu larg f2_mail;
  360. zclim_inc = zclim redu f2_mcmp;
  361. f2_base = (zclim_inc * conti.'DEPLACEMENTS') exco 'FLX' 'NOID' 'FLX';
  362. ZFEXT2 = ZFEXT2 + F2_INC + F2_base; ;
  363. 'FINS';
  364. *
  365. 'SI' LOGDEF ;
  366. WTAB.'DEFOR2' = 'TIRE' WTAB.'CHARGEMENT' 'DEFI' TI;
  367. 'FINS';
  368. *
  369. 'SI' WTAB.'FOR_MECA' ;
  370. 'SI' ITHER ;
  371. 'SI' WTAB.'CHAR_THE';
  372. WTAB.'TET2' = 'TIRE' WTAB.'CHARGEMENT' 'T ' TI;
  373. 'FINSI';
  374. 'SI' WTAB.'FOR_THER';
  375. WTAB.'TET2' = estim.'TEMPERATURES' ;
  376. 'FINSI';
  377.  
  378. * Champs de temperature en debut (ZTEMP1) et fin de pas (ZTEMP2)
  379. * Si les maillages mecanique/thermique sont differents,
  380. * on projette le champ de temperature sur le modele mecanique
  381. 'SI' WTAB.'PROJECTION';
  382. 'FORM' GEOREF0 ;
  383. 'SI' ('EGA' ('TYPE' WTAB.'TET1') 'CHPOINT') ;
  384. ZTEMP1 = 'PROI' ('EXTR' ZMODL 'MAILLAGE') ('CHAN' 'CHAM' WTAB.'TET1' WTAB.'MOD_THE' 'NOEUD') ;
  385. ZTEMP2 = 'PROI' ('EXTR' ZMODL 'MAILLAGE') ('CHAN' 'CHAM' WTAB.'TET2' WTAB.'MOD_THE' 'NOEUD') ;
  386. 'SINON' ;
  387. ZTEMP1 = 'PROI' ('EXTR' ZMODL 'MAILLAGE') WTAB.'TET1' ;
  388. ZTEMP2 = 'PROI' ('EXTR' ZMODL 'MAILLAGE') WTAB.'TET2' ;
  389. 'FINSI' ;
  390. 'FORM' GEOM1 ;
  391. * Sinon, on vient seulement recuperer les champs de temperature
  392. 'SINON' ;
  393. ZTEMP1 = WTAB.'TET1';
  394. ZTEMP2 = WTAB.'TET2';
  395. 'FINSI' ;
  396. ETT0 ='REDU' WTAB.'ETHER1' ZMODL; 'COMM' 'REDU au cas ou le modele soit parallele';
  397. 'SI' POR1;
  398. MSRTT0='REDU' WTAB.'MSRTHER1' ZMODL; 'COMM' 'REDU au cas ou le modele soit parallele';
  399. 'FINS';
  400. 'SINON' ;
  401. che3 = 'MANU' 'CHML' ZMODL 'T' 20. 'STRESSES' ;
  402. che4 = 'MANU' 'CHML' ZMODL 'T' 20. 'STRESSES' ;
  403. 'FINSI';
  404. 'FINSI';
  405. *----------------------------------------------------------------------*
  406. * Dynamique : ajout au second membre de *
  407. * F0 + 4/DT*M*V0 - B0*SIG0 *
  408. *----------------------------------------------------------------------*
  409. * Matrice de masse
  410. 'SI' (IDYN 'OU' WTAB.'FREQUENTIEL') ;
  411. ICALMAS = FAUX ;
  412. 'SI' ('NON' ('EXIS' WTAB 'MASSE'));
  413. ICALMAS = VRAI ;
  414. 'FINSI' ;
  415. 'SI' (IGRD 'ET' IDYN) ;
  416. ICALMAS = VRAI ;
  417. 'FINSI' ;
  418. 'SI' ICALMAS ;
  419. WTAB.'MASSE' = 'MASS' WTAB.'MO_TOT' ('CHAN' 'MASSE'
  420. ZMAT22 WTAB.'MO_TOT' ) ;
  421. 'SI' (IDYN 'ET' WTAB.'MASSCONST') ;
  422. WTAB.'MASSE' = WTAB.'MASSE' 'ET' WTAB.'MASSE_CONSTANTE';
  423. 'FINS';
  424. 'FINS';
  425. 'FINS';
  426. *
  427. 'SI' IDYN ;
  428. UNSURH = 1.D0 '/' WTAB.'DT' ;
  429. 'SI' ('EGA' WTAB.'FREA1' 'INCONNU');
  430. F1 = 'VIDE' 'CHPOINT' / 'DISCRET';
  431. *
  432. * Forces exterieures a TEMPS0
  433. 'SI' ('EXIS' WTAB.'CHARGEMENT' 'MECA');
  434. F1M = 'TIRE' WTAB.'CHARGEMENT' 'MECA' WTAB.'TEMPS0' ;
  435. F1 = F1 '+' F1M ;
  436. 'FINS';
  437. *
  438. 'SI' ('EXIS' WTAB.'CHARGEMENT' 'FORC');
  439. F1F = 'TIRE' WTAB.'CHARGEMENT' 'FORC' WTAB.'TEMPS0' ;
  440. F1 = F1 '+' F1F ;
  441. 'FINS';
  442. *
  443. 'SI' WTAB.'PROCEDURE_CHARMECA';
  444. TFF1 = CHARMECA PRECED TEMPS0 ;
  445. 'SI' ('EXIS' TFF1 'ADDI_SECOND');
  446. FF1=TFF1 .'ADDI_SECOND';
  447. 'FINS';
  448. F1 = F1 '+' FF1;
  449. 'FINS';
  450. *
  451. 'SI' LOGPRE ;
  452. MOP = WTAB.'MOD_PRE' ;
  453. ZPEXT0 = 'TIRE' WTAB.'CHARGEMENT' 'PRES' TEMPS0 ;
  454. 'SI' ('EXIS' WTAB 'MAT_PRE') ;
  455. FF1 = 'BSIG' MOP ZPEXT0 ('REDU' WTAB.'MAT1' MOP) ;
  456. 'SINON' ;
  457. FF1 = 'BSIG' MOP ZPEXT0 ;
  458. 'FINS' ;
  459. F1 = F1 '+' FF1;
  460. 'FINS';
  461. *
  462. * Forces interieures a TEMPS0
  463. *HHO : Modifications appel a BSIGMA (ajout du champ de deplacements necessaire en HHO)
  464. LAF0 = 'BSIG' WTAB.'MO_TOT' conti.'CONTRAINTES' ZMAT22 conti.'DEPLACEMENTS' ;
  465. 'SI' IRCON ;
  466. LAF0 = LAF0 'ET'
  467. ('REDU' MAI_CONS (RIG_CONS '*' conti.'DEPLACEMENTS'));
  468. 'FINS';
  469. *
  470. * FREA1 : (masse*acceleration initiale)+(amortissement*vitesse initiale)
  471. WTAB.'FREA1' = F1 '-' LAF0 ;
  472. 'FINS';
  473. *
  474. 'SI' IMPLP ;
  475. * forces d'acceleration au debut du pas
  476. 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU');
  477. FF4 = WTAB.'AMORTISSEMENT' '*' conti.'VITESSES';
  478. WTAB.'FMAN' = WTAB.'FREA1' - FF4 ;
  479. 'SINON' ;
  480. WTAB.'FMAN' = WTAB.'FREA1' ;
  481. 'FINS';
  482. 'FINS';
  483. *
  484. FF = WTAB.'MASSE' '*' conti.'VITESSES';
  485. FF4 = 4. '/' WTAB.'DT' '*' FF; 'DETR' FF;
  486. *
  487. * partie du second membre qui ne depend que des informations du pas prec
  488. WTAB.'FREA1' = FF4 '+' WTAB.'FREA1';
  489. 'FINS';
  490. *
  491. * Advection
  492. 'SI' WTAB.'NVSTNL' ;
  493. 'SI' ('EXISTE' WTAB.'CHARGEMENT' 'ADVE') ;
  494. UADV = 'TIRE' WTAB.'CHARGEMENT' 'ADVE' TI ;
  495. LOGADV = VRAI ;
  496. 'SINON' ;
  497. LOGADV = FAUX ;
  498. 'FINSI' ;
  499. 'FINSI' ;
  500. *----------------------------------------------------------------------*
  501. * Consolidation : ajout au second membre de *
  502. * -B0*SIG0 + DT*(1-TETA)*FI0 + DT*H*P *
  503. *----------------------------------------------------------------------*
  504. 'SI' ISOL ;
  505. FF = 'BSIG' WTAB.'MOD_POR' conti.'CONTRAINTES' ;
  506. FF4 = 'EXCO' WTAB.'MOT_POR' FF
  507. WTAB.'MOT_POR' 'NOID' 'NATURE' 'DISCRET' ;
  508. ZFEXT2 = ZFEXT2 '+' FF4 ; 'DETR' FF ;
  509. *
  510. * ---- traitement des flux si besoin ----
  511. 'SI' ( 'EXIS' WTAB.'CHARGEMENT' 'FLUX' ) ;
  512. FLUXT0= 'TIRE' WTAB.'CHARGEMENT' 'FLUX' TEMPS0;
  513. FLUXTI= 'TIRE' WTAB.'CHARGEMENT' 'FLUX' TI ;
  514. FACFLU = -1. * WTAB.'DT';
  515. FLUXT = ( FACFLU * (1 - WTAB.'TETA') * FLUXT0 )
  516. + ( FACFLU * WTAB.'TETA' *FLUXTI ) ;
  517. ZFEXT2 = ZFEXT2 '+' FLUXT ;
  518. 'DETR' FLUXT ; 'DETR' FLUXT0; 'DETR' FLUXTI;
  519. 'FINS' ;
  520. 'FINS';
  521. *----------------------------------------------------------------------*
  522. * Pilotage indirect : preparation *
  523. *----------------------------------------------------------------------*
  524. 'SI' LOGPIL ;
  525. ZFPILIN = WTAB.'FORCES_PILOTEES' 'ET' WTAB.'DEPLACEMENTS_PILOTES' ;
  526. DTAU = ('IPOL' WTAB.'PARAMETRE_DE_PILOTAGE' TI) -
  527. ('IPOL' WTAB.'PARAMETRE_DE_PILOTAGE' TEMPS0) ;
  528. ETA0 = 'EXTR' PRECED.'COEFFICIENT_DE_PILOTAGE'
  529. ('DIME' PRECED.'COEFFICIENT_DE_PILOTAGE') ;
  530. D_ETA=0.;
  531. 'FINS' ;
  532. *----------------------------------------------------------------------*
  533. * Partie constante du second membre sur le pas de temps *
  534. *----------------------------------------------------------------------*
  535. ZFCONST1 = ZFEXT2 ;
  536. 'SI' IDYN ;
  537. ZDYFEXT = 'ENLE' ZFEXT2 'FLX';
  538. ZFEXT2 = ZFEXT2 '+' WTAB.'FREA1';
  539. 'FINSI' ;
  540. ZFCONSTA = ZFEXT2 ;
  541. ZFLXB = 'EXCO' ZFEXT2 'FLX' 'NOID' 'FLX' ;
  542. *----------------------------------------------------------------------*
  543. * Recuperation de valeurs de WTAB pour initialisations eventuelles *
  544. *----------------------------------------------------------------------*
  545. ZRIBLO_M = 'MOT' 'INCONNU' ;
  546. 'SI' WTAB.'FOR_MECA' ;
  547. *
  548. ZXDENO = WTAB.'XDENO' ;
  549. ZXDENOM = WTAB.'XDENOM' ;
  550. * XDENOo = WTAB.'XDENO';
  551. * XDENOMo = WTAB.'XDENOM';
  552. ZETAT1 = WTAB.'ETAT1';
  553. 'SI' LOGDEF ;
  554. ZDEFOR1 = WTAB.'DEFOR1' ;
  555. ZDEFOR2 = WTAB.'DEFOR2' ;
  556. 'FINS';
  557. 'SI' ITHER ;
  558. ZTET1 = WTAB.'TET1' ;
  559. ZTET2 = WTAB.'TET2' ;
  560. 'FINS';
  561. 'SI' IPILOT ;
  562. ZAUTOCOEF = WTAB.'AUTOCOEF' ;
  563. ZAUTOREDU = WTAB.'AUTOREDU' ;
  564. ZAUTORED1 = WTAB.'AUTORED1' ;
  565. 'FINS';
  566. ZLASTKTAN = WTAB.'LASTKTAN' ;
  567. *
  568. 'SI' ('NEG' WTAB.'RIBLO_M' 'INCONNU') ;
  569. ZRIBLO_M = WTAB.'RIBLO_M' ;
  570. ZLISEA_M = WTAB.'LISEA_M' ;
  571. 'FINS' ;
  572. *
  573. ZFNONL = WTAB.'FNONL' ;
  574. 'SI' ('NEG' WTAB.'INCREMENT' 'INCONNU');
  575. INCRPREC = WTAB.'INCREMENT';
  576. 'FINS';
  577. *
  578. * teste t'on les moments ?
  579. TSTMOM = 'EGA' ('VALE' 'MODE') 'PLANGENE' ;
  580. TSTMOM = TSTMOM 'OU' ('EXIS' ZMAT22 'EPAI') 'OU' ('EXIS' ZMAT22 'INRY')
  581. 'OU' ('EXIS' ZMAT22 'MODS') 'OU'
  582. (('EXIS' ZMODLI 'ELEM' 'JOI1') 'ET' ('EXIS' ZMAT22 'V1X ')
  583. 'ET' ('EXIS' ZMAT22 'V1Y '));
  584. * teste t'on les POREUX ?
  585. 'SI' POR1 ; TSTMOM=VRAI ; 'FINS';
  586. *
  587. IKLFFF=VRAI;
  588. 'SI'TSTMOM;
  589. 'SI' IFTOL; 'SI' IMTOL;
  590. IKLFFF=FAUX;
  591. 'FINS'; 'FINS';
  592. 'SINON' ;
  593. 'SI' IFTOL; IKLFFF=FAUX; 'FINS';
  594. 'FINS';
  595. *
  596. * Jacobien du modele pour ponderer les champs de act3
  597. CH1 = 'MANU' 'CHML' zmodli 'SCAL' 1 'GRAVITE';
  598. zjac = 'INTG' 'ELEM' CH1 zmodli;
  599. zjac = zjac zmodli chan 'CHPO' 'SOMM' + xpetit;
  600. zjac = zjac **-0.5;
  601. *
  602. * Initialisation CHArgement SANS T :
  603. CHASANST= WTAB.'CHARGEMENT' 'ENLE' 'T' ;
  604. *
  605. * isoucomp : Indicateur SOUci dans COMPortement, FAUX par defaut
  606. isoucomp = faux ;
  607. PASUNIL = FAUX;
  608. residc = 'VIDE' 'CHPOINT' / 'DISCRET';
  609. RFNS = 'VIDE' 'RIGIDITE' / 'RIGIDITE' ;
  610. RTRSF = 'VIDE' 'RIGIDITE' / 'RIGIDITE' ;
  611. ZNITE = 0 ;
  612. ISOUSPPP = WTAB.'ISOUSPAS' ;
  613. WTAB.'ISOUSPAS' = 0;
  614. 'FINSI' ;
  615. *
  616. RED_URG = 0;
  617. 'SI' autaug; iraug = faux; 'FINSI';
  618. resmul = 1;
  619. augmult = 0.30000000;
  620. XCONV = 0.;
  621. DEPSTDM = 0.;
  622. WTAB.'CONV' = VRAI;
  623. KNOCONV = 0 ;
  624. *----------------------------------------------------------------------*
  625. * Valeurs des champs en debut de pas TEMPS0 *
  626. *----------------------------------------------------------------------*
  627. 'SI' WTAB.'FOR_MECA' ;
  628. ZDEP0 = CONTI.'DEPLACEMENTS' ;
  629. 'SI' (LAG_TOT 'EGA' 1); ZDEP0N = ZDEP0 * -1; 'FINSI';
  630. ZDEF0 = 'REDU' CONTI.'DEFORMATIONS' ZMODL ;
  631. ZSIG0 = 'REDU' CONTI.'CONTRAINTES' ZMODL ;
  632. com_sig = 'EXTR' ZMODLI 'CONT';
  633. 'SI' IPLAVI ;
  634. ZDEI0 = 'REDU' CONTI.'DEFORMATIONS_INELASTIQUES' ZMODL ;
  635. ZVAR0 = 'REDU' CONTI.'VARIABLES_INTERNES' ZMODL ;
  636. 'SI' ('NEG' WTAB.'MOVA' 'RIEN') ;
  637. ACC0 = 'EXCO' ZVAR0 WTAB.'MOVA' ;
  638. 'FINS' ;
  639. com_var = 'EXTR' ZMODLI 'VARI' ;
  640. com_dei = 'EXTR' ZMODLI 'DEIN' ;
  641. 'SI' ISOL ;
  642. com_maa = 'EXTR' ZMODLI 'MATE' ;
  643. 'FINS' ;
  644. 'FINS' ;
  645. ZGRDU0 = 'MOT' 'INCONNU' ;
  646. 'SI' ('NEG' WTAB.'MOD_MEC' 'INCONNU') ;
  647. 'SI' (IGRD 'ET' WTAB.'UTILISATEUR');
  648. 'FORM' GEOREF0 ;
  649. ZGRDU0 ='GRAD' ZMODL ZMAT2 ZDEP0 ;
  650. 'FORM' GEOM1 ;
  651. 'FINS' ;
  652. 'FINS' ;
  653. 'FINSI' ;
  654. *######################################################################*
  655. *----------------------------------------------------------------------*
  656. * Boucle de non convergence BONOCONV (Configuration GEOM1) *
  657. *----------------------------------------------------------------------*
  658. 'REPETER' BONOCONV WTAB.'MAXSOUSPAS' ;
  659. **assi 2 trac cach v1 nclk;
  660. *
  661. 'SI' IGRD ;
  662. 'FORM' GEOM1;
  663. 'FINSI' ;
  664. *
  665. excfconv = 0;
  666. 'SI' ('EGA' RED_URG 0);
  667. 'SI' ((XCONV < ZPREC) 'ET' (DEPSTDM < ZPREC) 'ET' (resmul > 0.99) 'ET' (AUGMULT < 100.));
  668. augmult = 0.30000000;
  669. *pv resmul = 1;
  670. augauto = augmult;
  671. augk = augmult;
  672. 'SI' autaug ; iraug = faux; 'FINSI';
  673. znacce=VRAI;
  674. 'SI' (IFEFP 'OU' ISSTE) ; ZNACCE = FAUX; 'FINS';
  675. 'SINON';
  676. augmult = augmult / 1.5;
  677. si (augmult < 1d-2); augmult = 1d-2; finsi;
  678. 'FINSI';
  679. 'SINON';
  680. augmult = augmult * 1.5;
  681. 'SI' autaug; IRAUG = VRAI; 'FINSI';
  682. 'FINSI';
  683. *
  684. 'SI' WTAB.'FOR_MECA' ;
  685. KNOCONV = KNOCONV+1 ;
  686. *
  687. ZD0SLX = 'ENLE' ZDEP0 'LX';
  688. ZDEPT = ZDEP0 '-' ZD0SLX ;
  689. DEPST = 'ZERO' ZMODL 'DEFORMATIONS' ;
  690. ZSIGF = ZSIG0 ;
  691. *
  692. 'SI' ITHER ;
  693. DTETD = ZTEMP2 '-' ZTEMP1 ;
  694. 'FINS' ;
  695. *
  696. * --------------------------------------------------------------------
  697. * Reevaluer les materiaux en convergence forcee (TEMPS0 =TI)
  698. 'SI' (knoconv '>' 1) ;
  699. ZMAT11 = PAS_MATE PRECED ZETAT1 ;
  700. 'SI' WTAB.'ITCAR';
  701. 'FORM' GEOREF0 ;
  702. GEOBID ZMAT11 = 'FORM' ZDEP0 ZMODLI ZMAT11;
  703. 'FORM' GEOM1 ;
  704. 'FINS';
  705. ZMAT1 = 'REDU' ZMAT11 ZMODL ;
  706. *
  707. MCHC = PAS_ETAT PRECED TI ;
  708. ZMAT22 = PAS_MATE PRECED MCHC;
  709. 'SI' (IGRD 'ET' ('EGA' LAG_TOT 1)) ;
  710. ZMAT2I = ZMAT22 ;
  711. 'FINSI' ;
  712. 'SI' WTAB.'ITCAR';
  713. 'FORM' GEOREF0 ;
  714. GEOBID ZMAT22 = 'FORM' ZDEP0 ZMODLI ZMAT22;
  715. 'FORM' GEOM1 ;
  716. 'FINS';
  717. ZMAT2 = 'REDU' ZMAT22 ZMODL ;
  718. 'FINS' ;
  719. *
  720. * --------------------------------------------------------------------
  721. * Rigidite a la fin du pas
  722. 'SI' ('OU' WTAB.'RECARI' IRAUG ('NON' ('EXIS' WTAB 'RRRR')));
  723. *
  724. 'SI' ('OU' IENDOM IVIDOM ICERAM);
  725. HOOKENDO = 'HOOK' ZMODL ZMAT2 ZVAR0 ;
  726. RH = 'RIGI' ZMODL HOOKENDO ZMAT2 ;
  727. 'DETR' HOOKENDO;
  728. 'SINON';
  729. 'SI' (IGRD 'ET' ('EGA' LAG_TOT 1)) ;
  730. 'FORM' GEOREF0;
  731. HOOKRH = 'HOOK' ZMODL ('REDU' ZMAT2I ZMODL) ;
  732. HOOKRH2 = 'PICA' HYPDEF HOOKRH ZMODL ZDEP0;
  733. 'FORM' GEOM1;
  734. RH = 'RIGI' HOOKRH2 ZMODL ZMAT2;
  735. 'DETR' HOOKRH; 'DETR' HOOKRH2;
  736. 'SINON';
  737. RH = 'RIGI' ZMODL ZMAT2 ;
  738. 'FINSI';
  739. 'FINS';
  740. *
  741. * RH peut contenir des CL
  742. ZCL = 'EXTR' RH 'RIGI' 'MULT' ;
  743. 'SI' ('NEG' ('DIME' ZCL) 0) ;
  744. ZCLIM = ZCLIM0 'ET' ZCL ;
  745. 'FINSI' ;
  746. RRRR = RH 'ET' ZCLIM0 ;
  747. *
  748. * Option 'RIGIDITE_CONSTANTE'
  749. 'SI' IRCON;
  750. RRRR = RRRR 'ET' RIG_CONS;
  751. 'FINS';
  752. ZRAIDNA = RRRR;
  753. *
  754. * Option 'RIGIDITE_AUGMENTEE'
  755. 'SI' (IRAUG 'ET' ('NON' AUTAUG));
  756. RRRR = RRRR 'ET' RIG_AUG ;
  757. 'FINSI';
  758. *
  759. * Option 'AUGMENTATION_AUTOMATIQUE'
  760. 'SI' (AUTAUG 'ET' ('NON' IRAUGLU));
  761. RIG_AUG = 'MASSE' ZMODL ZMAT2 ;
  762. *** mess 'actualisation rig_aug';
  763. 'FINSI';
  764. *
  765. 'SI' (AUTAUG 'ET' IRAUG);
  766. * recalcul masse pour l'augmentation
  767. RRRR = RRRR 'ET' (RIG_AUG * augauto) 'ET' (RH * augk) ;
  768. 'FINS';
  769. *
  770. 'SI' (('NON' IRAUG) 'ET' IRAUGLU) ;
  771. *** 'MESS' ' augmentation residuelle ';
  772. RRRR = RRRR 'ET' RIG_AUG ;
  773. 'FINSI';
  774. *
  775. * Stockage de la rigidite pour eviter de la recalculer
  776. 'SI' ('EGA' ('DIME' ZCL) 0) ;
  777. WTAB.'RRRR'=RRRR;
  778. 'FINSI';
  779. *
  780. 'FINS';
  781. ZRAID = WTAB.'RRRR' ;
  782.  
  783. 'FINSI' ;
  784. *FOR_MECA
  785. *
  786. 'SI' WTAB.'NVSTNL' ;
  787. 'SI' ('NON' ('EXISTE' WTAB 'RNSL')) ;
  788. 'SI' (WTAB.'DT' '&lt;EG' 0.) ; 'MESS' 'PAS DE TEMPS !! ' WTAB.'DT' ;
  789. 'ERRE' 21 ; 'FINSI' ;
  790. WTAB.'MAT_NSL' = WTAB.'MAT_NSL' 'ET'
  791. ('MATE' WTAB.'MOD_NSL' 'FREQ' (WTAB.'DT'**(-1))) ;
  792. RINSL = 'RIGI' WTAB.'MOD_NSL' WTAB.'MAT_NSL' ;
  793. ndiv = 'RIGI' 'DIVE' WTAB.'MOD_NSL' WTAB.'MAT_NSL' ;
  794. WTAB.'NSMA' = 'MASSE' WTAB.'MOD_NSL' WTAB.'MAT_NSL' ;
  795. WTAB.'RNSL' = RINSL 'ET' ZCLIM0 'ET' ndiv ;
  796. 'FINSI' ;
  797. 'FINSI' ;
  798. *
  799. *------------ consolidation ou dynamique faut-il recalculer l'operateur?
  800. 'SI' (ISOL 'OU' IDYN);
  801. 'SI' ( '>' (WTAB.'DTPREC' '*' 0.9999) WTAB.'DT') ;
  802. WTAB.'RECAOP' = VRAI;
  803. 'FINS';
  804. 'SI' ( '<' (WTAB.'DTPREC' '*' 1.0001) WTAB.'DT') ;
  805. WTAB.'RECAOP' = VRAI;
  806. 'FINS';
  807. 'SI' WTAB.'MATVAR';
  808. WTAB.'RECAOP' = VRAI;
  809. 'FINS';
  810. 'SI' ('NON' WTAB.'RECAOP') ;
  811. 'SI' ('NEG' WTAB.'OPERATEUR' 'INCONNU');
  812. ZRAID = WTAB.'OPERATEUR';
  813. 'FINS';
  814. 'FINS';
  815. 'FINS';
  816. *
  817. *------------ operateur amortissement en frequentiel
  818. 'SI' WTAB.'FREQUENTIEL' ;
  819. RRR2 = 'AMOR' ZMODL ZMAT2 ;
  820. RR2 = 'CHAN' 'INCO' RRR2
  821. ('MOTS' 'ALFA' 'BETA') ('MOTS' 'IALF' 'IBET')
  822. ('MOTS' 'FALF' 'FBET') ('MOTS' 'FALF' 'FBET') 'QUEL' ;
  823. RR3 = 'CHAN' 'INCO' RRR2
  824. ('MOTS' 'ALFA' 'BETA') ('MOTS' 'ALFA' 'BETA')
  825. ('MOTS' 'FALF' 'FBET') ('MOTS' 'IFAL' 'IFBE') 'QUEL' ;
  826. RRR2 = RR2 'ET' RR3 ;
  827.  
  828. RR1 = ZRAID ;
  829. OMEGI= 2.* PI * TI ;
  830. RRR1 = OMEGI * OMEGI * (-1.) * WTAB.'MASSE' ;
  831. RR1 = ZRAID 'ET' RRR1 ;
  832. RR4 = 'CHAN' 'INCO' (RR1 '*' (-1.D0))
  833. ('MOTS' 'ALFA' 'BETA') ('MOTS' 'IALF' 'IBET')
  834. ('MOTS' 'FALF' 'FBET') ('MOTS' 'IFAL' 'IFBE') 'QUEL';
  835. ZRAID= RR1 'ET' RR4 ;
  836. RR5 = OMEGI '*' RRR2 ;
  837. ZRAID= ZRAID 'ET' RR5 ;
  838. 'FINS' ;
  839.  
  840. *--------------- et la perméabilité ----------------------------------
  841. 'SI' ISOL ;
  842. 'SI' (IGRD 'OU' WTAB.'MATVAR') ;
  843. WTAB.'PERMEABILITE' = 'PERM' WTAB.'MOD_POR' ZMAT2;
  844. WTAB.'RECAOP' = VRAI ;
  845. 'FINS';
  846. 'FINS';
  847.  
  848. *------------- Cas de la consolidation ou de la dynamique -------------
  849. *------------- il faut recalculer l'operateur d'iteration -------------
  850. 'SI' WTAB.'RECAOP' ;
  851. *
  852. 'SI' IDYN;
  853. ZRMAS = 4.D0 '/' (WTAB.'DT' '**' 2) '*' WTAB.'MASSE' ;
  854. ZRAID = ZRMAS 'ET' ZRAID;
  855. 'SI' ('NEG' WTAB.'AMORTISSEMENT' 'INCONNU');
  856. ZRAID = WTAB.'AMORTISSEMENT' '*' (2.D0 '/' WTAB.'DT') 'ET' ZRAID;
  857. 'FINS';
  858. 'FINS' ;
  859. *
  860. 'SI' ISOL ;
  861. ZRAID =-1.* WTAB.'DT'* WTAB.'TETA'* WTAB.'PERMEABILITE' 'ET' ZRAID ;
  862. 'FINS' ;
  863. *
  864. WTAB.'OPERATEUR'= ZRAID ;
  865. 'FINS';
  866. ZRAIDNA = ZRAID;
  867. *
  868. 'SI' WTAB.'FOR_MECA' ;
  869. *
  870. * --------------------------------------------------------------------
  871. * Conditions de contact-frottement
  872. 'SI' WTAB.'CONTACT';
  873. ITACC = 4;
  874. MODCON = WTAB.'MODCONTA';
  875. 'SI' ('EXIS' WTAB 'MATCONTA') ;
  876. WTAB.'MATCONTA' = 'REDU' MODCON WTAB.'MATCONTA';
  877. CJEU CRR = 'RFCO' MODCON WTAB.'CONV' WTAB.'MATCONTA' ;
  878. 'SINON' ;
  879. CJEU CRR = 'RFCO' MODCON WTAB.'CONV' ;
  880. 'FINS';
  881. *
  882. * Separer ce qui concerne l'adherence (FADH) et les jeux (FLX)
  883. 'SI' ('NEG' CJEU 0) ;
  884. FADHE = 'EXCO' CJEU 'FADH' 'NOID' 'FADH' ;
  885. CDAP = 'EXCO' CJEU 'FLX' 'NOID' 'FLX' ;
  886. 'FINSI' ;
  887. *
  888. 'SI' WTAB.'MODAL' ;
  889. CRR = 'PJBA' CRR ZMODL ZMAT2 ;
  890. MCRR = 'EXTR' CRR 'MAIL' 'MULT' ;
  891. MCDAP= 'EXTR' CDAP 'MAIL' ;
  892. 'REPETER' BCDA ('NBNO' MCDAP) ;
  893. PBCDA ='POIN' MCDAP &BCDA ;
  894. PCRR ='POIN' MCRR &BCDA ;
  895. CHCR ='MANU' 'CHPO' PCRR 1 'FLX' ('EXTR' CDAP 'FLX' PBCDA)
  896. 'NATURE' 'DISCRETE' ;
  897. 'SI' ('EGA' 1 &BCDA) ;
  898. CCDA = CHCR ;
  899. 'SINON' ;
  900. CCDA = CHCR 'ET' CCDA ;
  901. 'FINS' ;
  902. 'FIN' BCDA ;
  903. CDAP = CCDA ;
  904. 'FINS' ;
  905. *
  906. ZFCONT = 'VIDE' 'CHPOINT' / 'DISCRET' ;
  907. 'SI' ('NEG' CRR 0) ;
  908. ZFCONT = CRR '*' ZD0SLX 'EXCO' 'FLX' 'NOID' 'FLX';
  909. ZCLIM = CRR 'ET' ZCLIM ;
  910. ZRAID = CRR 'ET' ZRAID ;
  911. 'FINS';
  912. *
  913. 'SI' ('NEG' CJEU 0) ;
  914. ZFCONT = ZFCONT '+' CDAP ;
  915. 'FINS';
  916. *
  917. 'SI' (('NEG' CRR 0) 'OU' ('NEG' CJEU 0)) ;
  918. ZFCONSTA = ZFCONSTA '+' ZFCONT ;
  919. 'FINS';
  920. *
  921. 'FINS';
  922. *
  923. * --------------------------------------------------------------------
  924. * Matrice tangente et fefp
  925. 'SI' IKTAN ;
  926. 'SI' IFEFP ;
  927. IKT_SAUV = VRAI ;
  928. 'SI' ('NEG' WTAB.'LASTKTAN' 'INCONNU') ;
  929. 'MESS' 'FEFP: Start with LASTKTAN' ;
  930. ZRIKTA = ZLASTKTAN ;
  931. ZRAID = ZCLIM 'ET' ZRIKTA ;
  932. 'SINON' ;
  933. 'MESS' 'FEFP: Previous KTAN not available' ;
  934. ZRAID = ZRAID 'ET' ('KSIGMA' ZMODL ZSIG0 ZMAT2) ;
  935. 'FINS' ;
  936. 'SINON' ;
  937. 'SI' ('NEG' WTAB.'LASTKTAN' 'INCONNU') ;
  938. IKT_SAUV = VRAI ;
  939. 'SI' IPERT ;
  940. 'MESS' 'Matrice tangente par perturbation - '
  941. 'Demarrage avec KTAN = LASTKTAN' ;
  942. 'SINON' ;
  943. 'MESS' 'Matrice tangente "coherente" - '
  944. 'Demarrage avec KTAN = LASTKTAN' ;
  945. 'FINS' ;
  946. ZRIKTA = ZLASTKTAN ;
  947. ZRAID = ZCLIM 'ET' ZRIKTA ;
  948. 'SINON' ;
  949. 'SI' IPERT ;
  950. IKT_SAUV='NEG' WTAB.'K_TANGENT_ITER0'
  951. 'MAT_ELASTIQUE';
  952. 'MESS' 'Matrice tangente par perturbation - '
  953. 'Demarrage avec KTAN = rigidite elastique' ;
  954. 'SINON' ;
  955. IKT_SAUV = ('NEG' WTAB.'K_TANGENT_ITER0' 'MAT_ELASTIQUE')
  956. 'ET' ('NEG' WTAB.'K_TANGENT_ITER0' 'MAT_TANGENTE') ;
  957. 'SI' ('EGA' WTAB.'K_TANGENT_ITER0' 'MAT_ELASTIQUE') ;
  958. 'MESS' 'Matrice tangente "coherente" - '
  959. 'Demarrage avec KTAN = rigidite elastique' ;
  960. 'SINON' ;
  961. 'MESS' 'Matrice tangente "coherente" - '
  962. 'Demarrage avec KTAN (DTTAN = 0.)' ;
  963. DTTAN = 0. ;
  964. ZRIKTA = 'KTAN' ZMODL ZSIG0 ZVAR0 ZMAT2
  965. 'PREC' ZPREK 'DT ' DTTAN ZKTASYM ;
  966. ZRAID = ZCLIM 'ET' ZRIKTA ;
  967. 'FINS' ;
  968. 'FINS' ;
  969. 'FINS' ;
  970. 'FINS' ;
  971. 'FINS' ;
  972. *
  973. * --------------------------------------------------------------------
  974. * Raideur geometrique (option K_SIGMA)
  975. 'SI' IGRD ;
  976. 'SI' (IKSIA 'ET' ('NON' IFEFP) 'ET' ('NON' HPP_EPS)) ;
  977. KSI1 = 'KSIGMA' ZMODL ZSIG0 ZMAT2;
  978. ZRAIDINI= ZRAID ;
  979. ZRAID = ZRAID 'ET' KSI1 ;
  980. 'FINS' ;
  981. 'FINS' ;
  982. *----------------------------------------------------------------------*
  983. * Pilotage automatique
  984. *----------------------------------------------------------------------*
  985. COEPI = 1.D0 ; CORPREC = 1. ;
  986. *
  987. 'SI' IPILOT ;
  988. AL1 = 1. ; COEPI0 = 1.d0;
  989. 'SI' WTAB.'AUTODEUX' ;
  990. COEPI = 'ABS' ZAUTOCOEF ;
  991. COEPI = COEPI / (1.-COEPI);
  992. 'SI' (COEPI > 1.D0) ; COEPI=1.D0;'FINS';
  993. COEPI0=COEPI;ZAUTOCOEF =COEPI;
  994. 'SINON';
  995. ZAUTOCOEF = 1.D0;
  996. 'FINS' ;
  997. RED1 = 1. ;
  998. RED2 = 0 ;
  999. 'SI' ('NEG' ZAUTORED1 'INCONNU') ;
  1000. 'SI' (ZAUTORED1 > 0);
  1001. ZAUTORED1 = ZAUTORED1 - 1;
  1002. 'SI' (ZAUTORED1 'EGA' 0) ;
  1003. COEPI = 3 * COEPI ;
  1004. ZAUTOREDU = ZAUTOREDU / 3.;
  1005. 'SI' (ZAUTOREDU > 1.1 );
  1006. * on travaille encore avec un critere reduit
  1007. ZAUTORED1 = 4 ;
  1008. RED1 = 3. ;
  1009. 'FINS';
  1010. 'MESS' 'On multiplie le critere de pilotage par 3';
  1011. 'FINS';
  1012. 'FINS';
  1013. 'FINS';
  1014. 'SI' (COEPI > 1d0);
  1015. RED1 = RED1 / COEPI ;COEPI =1d0;
  1016. 'FINS';
  1017. 'SI' ('NEG' WTAB.'NBPLAS' 'INCONNU') ;
  1018. 'SI' (WTAB.'NBPLAS' 'EGA' 0) ;
  1019. 'SI' (COEPI < 0.) ;COEPI = COEPI * -2.;'FINS';
  1020. 'FINS';
  1021. 'FINS';
  1022. COEPI = 'ABS' COEPI ;
  1023. COEPI0 = COEPI;
  1024. 'SINON';
  1025. ZAUTOCOEF = 1.D0 ;
  1026. 'FINS';
  1027. *
  1028. 'FINSI' ;
  1029. *FOR_MECA
  1030. *----------------------------------------------------------------------*
  1031. * Partie variable du chargement a imposer a TI *
  1032. * (geometrie, materiaux, chargement en deformations) *
  1033. *----------------------------------------------------------------------*
  1034. XDENDEF = 0. ; FDENDEF = 0. ;
  1035. DEPST0 = 0. ; DMSRT0 = 0. ;
  1036. DFTHE = 0. ; DFDEF = 0. ;
  1037. ZFSUIV = 0. ;
  1038. *
  1039. * - Corrections en cas de materiaux variables
  1040. 'SI' WTAB.'MATVAR' ;
  1041. 'SI' ('OU' IENDOM IVIDOM ICERAM);
  1042. XXX3 ='ELAS' ZMODL ZSIG0 ZMAT2 ZVAR0;
  1043. XXX4 ='ELAS' ZMODL ZSIG0 ZMAT1 ZVAR0;
  1044. 'SINON';
  1045. XXX3 ='ELAS' ZMODL ZSIG0 ZMAT2 ;
  1046. XXX4 ='ELAS' ZMODL ZSIG0 ZMAT1 ;
  1047. 'FINS';
  1048. DDEF0 = XXX4 - XXX3;
  1049. 'DETR' XXX3; 'DETR' XXX4;
  1050. DEPST0 = -1.* DDEF0;
  1051. 'FINS';
  1052. *
  1053. * - En cas de chargement thermiques
  1054. 'SI' ITHER ;
  1055. 'SI' ('EGA' ('TYPE' ZTEMP2) 'CHPOINT');
  1056. MCHTETA2 ='CHAN' 'CHAM' ZTEMP2 ZMODL 'STRESSES' 'TEMPERATURES' ;
  1057. 'SINON';
  1058. MCHTETA2 = ZTEMP2;
  1059. 'FINS';
  1060. ETREF = 'REDU' WTAB.'ETREF' ZMODL ; 'COMM' 'REDU au cas ou le modele soit parallele';
  1061. ETT =('EPTH' ZMODL ZMAT2 MCHTETA2 ) - ETREF ;
  1062. DTT = ETT '-' ETT0 ;
  1063. XDENDEF = XDENDEF '+' ETT ;
  1064.  
  1065. 'SI' WTAB.'POR1';
  1066. *------ Cas du milieu poreux avec chargement thermique ----------
  1067. * cas isotrope seulement pour le moment
  1068. * et on ne s'occupe pas du alpha-reference !!
  1069. MSRTT = PAS_EPTH PRECED ZMODL ZMAT2 MCHTETA2 ;
  1070. DMSRT0= MSRTT '-' MSRTT0 ;
  1071. 'FINS' ;
  1072.  
  1073. DEPST0 = DTT '+' DEPST0 ;
  1074. 'FINS';
  1075. *
  1076. * - Contraintes et forces equivalentes associees a ces deformations
  1077. 'SI' (DEPST0 'NEG' 0);
  1078. 'SI' ('OU' IENDOM IVIDOM ICERAM);
  1079. DSIGT0 = 'ELAS' ZMODL DEPST0 ZMAT2 ZVAR0;
  1080. 'SI' (XDENDEF 'NEG' 0) ;
  1081. XDENDEF = 'ELAS' ZMODL XDENDEF ZMAT2 ZVAR0;
  1082. 'FINSI' ;
  1083. 'SINON';
  1084. DSIGT0 = 'ELAS' ZMODL DEPST0 ZMAT2 ;
  1085. 'SI' (XDENDEF 'NEG' 0) ;
  1086. XDENDEF = 'ELAS' ZMODL XDENDEF ZMAT2 ;
  1087. 'FINSI' ;
  1088. 'FINS' ;
  1089.  
  1090. 'SI' (DMSRT0 'NEG' 0);
  1091. DSIGT0 = DSIGT0 '+' DMSRT0 ;
  1092. XDENDEF = XDENDEF '+' MSRTT ;
  1093. 'FINS';
  1094. DFTHE ='BSIG' ZMODL DSIGT0 ZMAT2 ;
  1095. 'SI' (XDENDEF 'NEG' 0) ;
  1096. FDENDEF = 'BSIG' ZMODL XDENDEF ZMAT2 ;
  1097. 'FINSI' ;
  1098. 'FINS';
  1099. *
  1100. * - Chargement en deformations imposees
  1101. 'SI' LOGDEF;
  1102. DDEFOR0 = 'REDU' (ZDEFOR2 - ZDEFOR1) ZMODL;
  1103. XDENDEF = 'REDU' ZDEFOR2 ZMODL ;
  1104. 'SI' ('OU' IENDOM IVIDOM ICERAM);
  1105. DSI1 = 'ELAS' ZMODL DDEFOR0 ZMAT2 ZVAR0;
  1106. XDENDEF = 'ELAS' ZMODL XDENDEF ZMAT2 ZVAR0;
  1107. 'SINON';
  1108. DSI1 = 'ELAS' ZMODL DDEFOR0 ZMAT2 ;
  1109. XDENDEF = 'ELAS' ZMODL XDENDEF ZMAT2 ;
  1110. 'FINS';
  1111. DFDEF = 'BSIG' ZMODL DSI1 ZMAT2 ;
  1112. FDENDEF = FDENDEF '+' ('BSIG' ZMODL XDENDEF ZMAT2) ;
  1113. 'FINS';
  1114. *
  1115. * - Chargement de pression suiveuse en grands deplacements
  1116. 'SI' (LOGPRE 'ET' IGRD) ;
  1117. MOP = WTAB.'MOD_PRE' ;
  1118. ZPEXTF = 'TIRE' WTAB.'CHARGEMENT' 'PRES' TI ;
  1119. 'SI' ('EXIS' WTAB 'MAT_PRE') ;
  1120. ZFPEXTF = 'BSIG' MOP ZPEXTF WTAB.'MAT_PRE' ;
  1121. 'SINON' ;
  1122. ZFPEXTF = 'BSIG' MOP ZPEXTF ;
  1123. 'FINS' ;
  1124. ZFSUIV = ZFSUIV '+' ZFPEXTF ;
  1125. 'FINS';
  1126. *
  1127. * - Procedure UTILISATEUR : y a-t-il des forces non conservatives
  1128. 'SI' WTAB.'PROCEDURE_CHARMECA';
  1129. * on ajoute l indice ADDI_MATRICE pour signaler a charmeca qu on
  1130. * souhaite aussi l operateur linearisé des Forces NL de charmeca
  1131. PRECED.'ADDI_MATRICE' = vrai;
  1132. TFP22 = CHARMECA PRECED TI ;
  1133. PRECED.'ADDI_MATRICE' = faux;
  1134. *
  1135. * FP22 = F^suiv_n+1
  1136. ADDISEC2 = 'EXIS' TFP22 'ADDI_SECOND' ;
  1137. 'SI' ADDISEC2 ;
  1138. FP22 = TFP22.'ADDI_SECOND' ;
  1139. FP022 = 'COPIER' FP22 ;
  1140. ZFSUIV = ZFSUIV '+' FP22 ;
  1141. 'FINS';
  1142. 'SI' ('EXIS' TFP22 'ADDI_MATRICE');
  1143. ZRAID = ZRAID 'ET' TFP22.'ADDI_MATRICE';
  1144. 'FINS';
  1145. 'FINS';
  1146. *
  1147. * A-t-on des C.L. unilaterales ?
  1148. XXX1 = 'EXTR' ZCLIM 'MAIL' 'UNIL';
  1149. IMPO12 = ('NBEL' XXX1) '>' 0 ;
  1150. *----------------------------------------------------------------------*
  1151. * Second membre RESIDU *
  1152. * *
  1153. * Calcul du premier residu : desequilibre entre les forces externes et *
  1154. * le calcul B*SIGMA. Le sigma qui sert est celui qui existerait si *
  1155. * le champ de deplacement ne changeait pas (ZDEP0). *
  1156. * *
  1157. * | forces exterieures sans reactions - forces interieures | *
  1158. * | F^ext_n+1 + DF^suiv + DF^ther + DF^defi - F^int_n | *
  1159. * | |-------------------------| | *
  1160. * | -1.*ZFPLO | *
  1161. * | (composantes de forces FX FY FZ ...) | *
  1162. * RESIDU = | | *
  1163. * | increment des relations imposees Du^imp | *
  1164. * | (composantes de depl. FLX) | *
  1165. * *
  1166. * A F^ext peuvent s'ajouter des termes supplementaires p.ex. en *
  1167. * dynamique ou en poreux. *
  1168. *----------------------------------------------------------------------*
  1169. * ZFCONSTA = [ F^ext_n+1 ; u^imp_n+1 ]
  1170. ZFEXT = 'ENLE' ZFCONSTA 'FLX';
  1171. ZFLX1 = 'EXCO' ZFCONSTA 'FLX' 'NOID' 'FLX' 'NATURE' 'DISCRET';
  1172. *
  1173. 'SI' WTAB.'FOR_MECA' ;
  1174. *
  1175. * Forces externes deja equilibrees au debut du pas par B*sigma
  1176. * ZF1 = F^int_n = B*sigma_n + K^cst*u_n
  1177. *HHO : Modifications appel a BSIGMA (ajout du champ de deplacements necessaire en HHO)
  1178. ZF1 = 'BSIG' ZMODL ZSIG0 ZMAT1 ZDEP0 ;
  1179. 'SI' IRCON;
  1180. ZF1 = ZF1 '+' ('REDU' MAI_CONS (RIG_CONS '*' ZDEP0));
  1181. 'FINS';
  1182. *
  1183. 'SI' IDYN ;
  1184. FFDYN = 'COPIER' ZF1;
  1185. 'FINS';
  1186. *
  1187. 'SI' ISOL ;
  1188. GRAP0= 'GRAD' MO_POR ZDEP0 MA_POR0 'CONS' ;
  1189. XXX1 = 'GRAD' MO_POR ZDEP0 MA_POR 'CONS' ;
  1190. XXXS =((1.- WTAB. 'TETA' )*GRAP0)+ (WTAB. 'TETA' * XXX1);
  1191. XXX2 = WTAB.'DT' '*' ('GNFL' MO_POR XXXS) ;
  1192. XXX3 = ZF1 ;
  1193. ZF1 = XXX3 - XXX2;
  1194. 'DETR' XXX3; 'DETR' XXX2 ;
  1195. 'FINS';
  1196. *
  1197. * [ FLXINI ; FREAP ] = [ u^imp_n ; -F^reac_n ]
  1198. FZDEP0 = ZDEP0 '*' ZCLIM;
  1199. FLXINI = 'EXCO' FZDEP0 'FLX' 'NOID' 'FLX' 'NATURE' 'DISCRET';
  1200. FREAP = 'ENLE' FZDEP0 'FLX';
  1201. *
  1202. * XXX1 = [ F^ext_n+1 ; u^imp_n+1 - u^imp_n ]
  1203. XXX1 = ZFCONSTA '-' FLXINI ;
  1204. *
  1205. * FEXT0 : chargement externe (sans reactions) au pas precedent
  1206. * FEXT0 = F^int_n - F^reac_n = F^ext_n
  1207. FEXT0 = ZF1 '+' FREAP;
  1208. *
  1209. * RESIDU : forces exterieures sans reactions (avec des termes
  1210. * supplementaires le cas echeant p.ex. en dynamique ou en poreux)
  1211. * - forces interieures et increment des relations imposees
  1212. *
  1213. * RESIDU = [DF^tot ; Du^imp]
  1214. * RESIDU = [F^ext_n+1 + F^suiv_n+1 + DF^ther + DF^defi - F^int_n ; Du^imp]
  1215. RESIDU = XXX1 '+' DFTHE '+' DFDEF '-' ZF1;
  1216. RESIDU = RESIDU '+' ZFSUIV ;
  1217. *
  1218. * ZFPLO = -1.* [- F^int_n + DF^ther + DF^defi ]
  1219. ZFPLO = ZF1 '-' DFTHE '-' DFDEF ;
  1220. *
  1221. * ZDFINI = [F^ext_n+1 + DF^ther + DF^defi - (F^int_n - F^reac_n) ; Du^imp]
  1222. ZDFINI = XXX1 '-' FEXT0 ;
  1223. 'SI' IPILOT ;
  1224. ZLX = 'EXCO' ZDEP0 'LX' 'NOID' 'LX' 'NATURE' 'DIFFUS';
  1225. DFEXT0F = 'ENLE' ZDFINI 'FLX';
  1226. DFEXT0L = 'EXCO' ZDFINI 'FLX' 'NOID' 'FLX';
  1227. 'SI' IMPO12 ;
  1228. DUUNIL = 'REDU' DFEXT0L XXX1 ;
  1229. XXX2 = 'DIFF' ('EXTR' ZCLIM 'MAIL') XXX1 ;
  1230. DUIMPO = 'REDU' DFEXT0L XXX2 ;
  1231. 'FINS';
  1232. 'FINSI' ;
  1233. 'SI' (ITHER 'OU' WTAB.'MATVAR');
  1234. ZDFINI = ZDFINI '+' DFTHE;
  1235. 'FINS';
  1236. 'SI' LOGDEF;
  1237. ZDFINI = ZDFINI '+' DFDEF;
  1238. 'FINS';
  1239. *
  1240. ZSDMBR = RESIDU '*' 1.D0;
  1241. *
  1242. 'FINSI' ;
  1243. * FOR_MECA
  1244. *
  1245. 'SI' WTAB.'NVSTNL' ;
  1246. ZVIFL = conti.'VITESSES_FLUIDE' ;
  1247. movifl = 'EXTR' WTAB.'MOD_NSL' 'DEPL' ;
  1248. UN = 'EXCO' ZVIFL movifl ;
  1249. ch_un = 'MANU' 'CHML' WTAB.'MOD_NSL' 'ADVE' un 'TYPE' 'CARACTERISTIQUES';
  1250. nugrad = 'ADVE' WTAB.'MOD_NSL' ch_un ;
  1251. 'SI' ('EXIS' PRECED 'OPTION_BDF2') ;
  1252. ZRNSL = WTAB.'RNSL' 'ET' nugrad 'ET' (WTAB.'NSMA' '*' 1.5) ;
  1253. unm = 'EXCO' conti.'VITESSES_FLUIDE_0' movifl ;
  1254. fmass = WTAB.'NSMA' '*' ((2. '*' un) '-' (0.5 '*' unm)) ;
  1255. 'SINON' ;
  1256. ZRNSL = WTAB.'RNSL' 'ET' nugrad 'ET' WTAB.'NSMA' ;
  1257. fmass = WTAB.'NSMA' * un ;
  1258. 'FINSI' ;
  1259. ftnsl = ZFCONSTA 'ET' fmass ;
  1260.  
  1261. 'SI' LOGADV ;
  1262. ch_ad = 'MANU' 'CHML' WTAB.'MOD_NSL' 'ADVE' UADV 'TYPE' 'CARACTERISTIQUES';
  1263. nuadv = 'ADVE' WTAB.'MOD_NSL' ch_ad ;
  1264. ZRNSL = ZRNSL 'ET' nuadv ;
  1265. fadv = nugrad * UADV ;
  1266. mess 'advec / inertie' (maxi (abs fadv)) (maxi (abs ftnsl)) (maxi (abs UADV)) ;
  1267. ftnsl = ftnsl '-' fadv ;
  1268. 'FINSI' ;
  1269.  
  1270. resnsl = ftnsl '-' (ZRNSL * ZVIFL) ;
  1271.  
  1272. * resolution
  1273. ZVIF1 = 'KRES' ZRNSL resnsl ;
  1274. ZVIFL = ZVIFL '+' ZVIF1 ;
  1275. 'FINSI' ;
  1276. *
  1277. *----------------------------------------------------------------------*
  1278. * 1ere Resolution - ZDEP1 = [ Du^0 ; LX_n+1 ] *
  1279. * *
  1280. * -> estimation a TI a partir de l'instant TEMPS0 *
  1281. * *
  1282. * K*Du^0 + At*LX_n+1 = F^ext_n+1 - Bsigma_n *
  1283. * A*Du^0 = d1 - A*u_n *
  1284. * |----------------| |-------------------| *
  1285. * ZRAID * ZDEP1 = RESIDU *
  1286. *----------------------------------------------------------------------*
  1287. 'SI' WTAB.'FOR_MECA' ;
  1288. FEXCI = 'VIDE' 'CHPOINT' / 'DISCRET' ;
  1289. 'SI' (WTAB.'ADHERENCE') ;
  1290. 'SI' ('EXIS' WTAB 'MAIL_BLOM') ;
  1291. FADRE = 'REDU' FADHE WTAB.'MAIL_BLOM' ;
  1292. 'SINON' ;
  1293. FADRE = FADHE ;
  1294. 'FINSI' ;
  1295. FEXCI = FEXCI 'ET' FADRE ;
  1296. 'FINSI' ;
  1297. *
  1298. * Modification du residu si automatique
  1299. 'SI' LOGPIL ;
  1300. RESIDU = RESIDU 'ET' (ETA0 '*' ZFPILIN);
  1301. 'FINSI' ;
  1302. *
  1303. * Force limite de frottement
  1304. 'SI' (WTAB.'CAFROTTE' 'ET' IMPO12);
  1305. 'SI' WTAB.'FROCABL' ;
  1306. zsigfT = 'REDU' zsigf ZMODLI;
  1307. FFROT = 'EXCC' ZCLIM ZDEPT MODCON WTAB.'MATCONTA' ZSIGFT;
  1308. RTRSF = 'VIDE' 'RIGIDITE' / 'RIGIDITE' ;
  1309. RFNS = 'VIDE' 'RIGIDITE' / 'RIGIDITE' ;
  1310. FEXCI = FEXCI '+' FFROT ;
  1311. 'FINSI';
  1312. 'SI' WTAB.'FROCOUL' ;
  1313. excfconv = excfconv + 1 ;
  1314. RTRSF*'RIGIDITE' RFNS*'RIGIDITE' FFROT = 'EXCF' ZCLIM ZDEPT MODCON WTAB.'MATCONTA' excfconv;
  1315. FEXCI = FEXCI '+' FFROT ;
  1316. MFROT = 'EXTR' FFROT 'MAIL' ;
  1317. 'FINSI';
  1318. 'FINS';
  1319. *
  1320. 'SI' ('NEG' ZRIBLO_M 'INCONNU') ;
  1321. 'SI' ((WTAB.'CAFROTTE' 'OU' WTAB.'ADHERENCE') 'ET' IMPO12);
  1322. ZDEP1 BID BID BID BID = 'RESO' ZRAID 'SOUC' RESIDU 'INIB'
  1323. ZRIBLO_M ZLISEA_M FEXCI RFNS RTRSF ;
  1324. 'SINON';
  1325. ZDEP1 BID BID BID = 'RESO' ZRAID 'SOUC' RESIDU 'INIB'
  1326. ZRIBLO_M ZLISEA_M ;
  1327. 'FINS';
  1328. ZRIBLO_M = 'MOT' 'INCONNU' ;
  1329. 'SINON';
  1330. 'SI' ((WTAB.'CAFROTTE' 'OU' WTAB.'ADHERENCE') 'ET' IMPO12);
  1331. ZDEP1 = 'RESO' ZRAID 'SOUC' RESIDU FEXCI RFNS RTRSF ;
  1332. 'SINON';
  1333. ZDEP1 = 'RESO' ZRAID 'SOUC' RESIDU;
  1334. 'FINS';
  1335. 'FINS';
  1336. *
  1337. 'SI' LOGPIL ;
  1338. ZDEPII = 'RESO' ZRAID ZFPILIN ;
  1339. ZDEPILO = 0. * ZDEPII ;
  1340. * Calcul de D_eta par appel a la procedure PILOINDI
  1341. D_ETA = PILOINDI PRECED ZDEP0 ZDEPILO ZDEP1 ZDEPII DTAU;
  1342. * Mise à jour
  1343. ZDEP1 = ZDEP1 '+' (D_ETA '*' ZDEPII) ;
  1344. ETA = ETA0 ;
  1345. 'FINSI' ;
  1346. *
  1347. * Pour initialiser le statut des CL unil lors du prochain appel a RESO
  1348. ZRAID_T = 'EXTR' ZRAID 'CONT';
  1349. 'SI' ('EXIS' ZRAID_T 'NITER');
  1350. * Conserver les conditions unilaterales pour VITEUNIL
  1351. 'SI' IDYN;
  1352. WTAB.'ZRAIDV' = ZRAID;
  1353. 'FINS';
  1354. ZRIBLO_M = ZRAID_T. 7 ;
  1355. ZLISEA_M = ZRAID_T. 6 ;
  1356. 'FINS';
  1357. *
  1358. * Pour eventuel calcul de augauto
  1359. zdep1d = zdep1 'ENLE' 'LX';
  1360. * et initialisation zdepl (sert pour xnum)
  1361. ZDEPL = 'EXCO' ZDEP1 'LX' 'NOID' 'LX' ;
  1362. *----------------------------------------------------------------------*
  1363. * Calcul d'une norme pour la convergence *
  1364. *----------------------------------------------------------------------*
  1365. XXX1 = ZFEXT '+' ZFSUIV ;
  1366. 'SI' LOGPIL ;
  1367. XXX1 = XXX1 '+' ((ETA '+' D_ETA) '*' ZFPILIN);
  1368. 'FINSI' ;
  1369. *
  1370. ZDEP1P50 = ZDEP1 ;
  1371. XDENO='XTY' ZDEP1P50 ( XXX1 -( RESIDU 'EXCO'
  1372. 'FLX' 'NOID' 'FLX' 'NATURE' 'DISCRET')) MLPRIM MLDUAL;
  1373. 'SI' ('VERI' xdeno) ; 'SINON'; xdeno = 1; 'FINSI';
  1374. MZDEP1M = 'MAXI' ZDEP1P50 'ABS' 'AVEC' MLDEPL;
  1375. MZFM = 'MAXI' (FDENDEF + DFTHE + DFDEF + ZF1) 'ABS' 'AVEC' MLDUAL;
  1376. XDENO1 = 'ABS' XDENO + (MZFM * MZDEP1M);
  1377. MZDEP1M = MZDEP1M + XPETIT;
  1378. XDENO=XDENO1/MZDEP1M;
  1379. XDENO = XDENO + MZFM;
  1380. XDENO = 'MAXI' XDENO ('MAXI' XXX1 'ABS' 'AVEC' MLDUAL);
  1381. 'SI' (XDENO < XPETIT); XDENO = 1.; 'FINSI';
  1382. XDENOM=XDENO;
  1383. 'SI' TSTMOM ;
  1384. ZDEP1P50 = ZDEP1 + XPETIT; ;
  1385. XDENOM = XDENO1/('MAXI' ZDEP1P50 'ABS' 'AVEC' MLROTA);
  1386. XDENOM = XDENOM + XPETIT ;
  1387. 'FINS' ;
  1388. *
  1389. ** mess 'xdeno propose' ' ' xdeno ' xdeno precedent' ' ' xdenoo;
  1390. ** XDENO = MAXI XDENOo XDENO;
  1391. ** XDENOo = XDENO;
  1392. ** XDENOM = MAXI XDENOMo XDENOM;
  1393. ** XDENOMo = XDENOM;
  1394. *
  1395. 'SI' WTAB.'CONV';
  1396. ZINCREMENT = ZDFINI '+' ZFSUIV ;
  1397. 'SINON' ;
  1398. * 'MESS' 'non convergence on garde xdeno xdenom ' xdeno xdenom;
  1399. 'SI' (XDENO < ZXDENO); XDENO = ZXDENO ; 'FINSI';
  1400. 'SI' (XDENOM < ZXDENOM); XDENOM = ZXDENOM ; 'FINSI';
  1401. 'FINS';
  1402. *
  1403. RESIDNOR = 'COPIER' RESIDU ;
  1404. *
  1405. 'SI' IPILOT;
  1406. 'SI' WTAB.'AUTODEUX' ;
  1407. XDENO = ZXDENO ;
  1408. XDENOM = ZXDENOM ;
  1409. 'FINS';
  1410. DFEXT = DFEXT0F '*' COEPI ;
  1411. ZFEXT = DFEXT '+' FEXT0 ;
  1412. XXX1 = RESIDU '*' COEPI;
  1413. XXX1 = XXX1 '+' ((1. '-' COEPI) '*' FREAP) ;
  1414. 'SI' IMPO12;
  1415. RESIDU = 'ENLE' XXX1 'FLX' ;
  1416. XJEUX = DUIMPO '*' COEPI ;
  1417. RESIDU = RESIDU '+' XJEUX '+' DUUNIL ;
  1418. 'SINON' ;
  1419. RESIDU = XXX1 ;
  1420. 'FINS';
  1421. 'FINS';
  1422. *----------------------------------------------------------------------*
  1423. * Corriger le residu a partir du pas precedent *
  1424. *----------------------------------------------------------------------*
  1425. * petite correction du residu pour esperer gagner du temps ***********
  1426. INIT = FAUX ;
  1427. 'SI'(('NEG' ZFNONL 'INCONNU') 'ET' WTAB.'INITIALISATION');
  1428. 'SI' IPILOT;
  1429. 'SI' ( WTAB.'AUTODEUX' 'ET' (COEPI 'NEG' 1.D0)) ;
  1430. 'MESS' 'Initialisation a partir du pas precedent 'COEPI;
  1431. INIT = VRAI;
  1432. XXX1 = RED1 * ZFNONL ;
  1433. XXX2 = XXX1 + RESIDU ;
  1434. 'DETR' RESIDU ;'DETR' XXX1 ;
  1435. RESIDU = XXX2;
  1436. 'FINS' ;
  1437. 'SINON';
  1438. * on fait la correction si le pas precedent a converge sans non convergence
  1439. 'SI' (WTAB.'CONV' 'ET' (ISOUSPPP 'EGA' 0));
  1440. * on fait la correction si le pas precedent etait non lineaire.
  1441. 'SI' (('MAXI' 'ABS' ZFNONL) > (ZPREC * XDENO)) ;
  1442. * on enleve le residu du pas precedent pour recuperer l'increment
  1443. * nominal du second membre e imposer f1.
  1444. * f2 et l'increment du second membre du pas precedent
  1445. ZINCREMENT = ZINCREMENT - WTAB.'RESIDU' ;
  1446. zdeps = WTAB.'ZDEP1' + zdep1;
  1447. FFNO= 'XTY' ZFNONL zdeps MNDUAL MNPRIM;
  1448. F1 = ZINCREMENT ;
  1449. F2 = INCRPREC ;
  1450. f12 = 'XTY' f1 zdeps MNDUAL MNPRIM;
  1451. f22 = 'XTY' f2 zdeps MNDUAL MNPRIM;
  1452. AMPL = f12/(f22 + XPETIT);
  1453. DTPREC=1E30; AMPLT = 0;
  1454. 'SI' ('NEG' WTAB.'DTPREC' 0);
  1455. DTPREC = WTAB.'DTPREC' ;
  1456. 'SI' (DTPREC > XPETIT);
  1457. AMPLT = WTAB.'DT_INIT' '/' DTPREC;
  1458. 'FINS';
  1459. 'FINS';
  1460. * Le chargement n'est il pas de fluage ou de thermique ?';
  1461. XDCOMP = ('XTY' ZDEP1 F1 MNPRIM MNDUAL) ;
  1462. 'SI' (('ABS' XDCOMP) < (ZPREC * XDENO * mzdep1m)
  1463. 'OU' (('ABS' FFNO) > (('ABS' F22) * 2.e2 )));
  1464. DTPREC = WTAB.'DTPREC' ;
  1465. AMPL=AMPLT;
  1466. * la decharge est-elle significative
  1467. 'SI'((F12/(f22 + XPETIT)) < -0.05);ampl=0.;'FINS';
  1468. ** 'MESS' 'F12 F22_' f12 f22;
  1469. 'MESS' 'Pas d increment de charge, initialisation calculee avec le temps' ;
  1470. 'SINON';
  1471. AMPL = F12 / (F22 + XPETIT);
  1472. 'FINS';
  1473. * changement de modele on n'initialise pas
  1474. 'SI' ('NEG' ZMODLI WTAB.'MO_TOT_PREC'); AMPL = 0; 'FINSI';
  1475. AMPL = MINI (prog AMPL AMPLT);
  1476. 'SI' ((AMPL > 0) 'ET' (AMPL < 2e1)) ;
  1477. 'MESS' 'Initialisation a partir de la solution precedente Coeff'AMPL;
  1478. XXX1 = AMPL * ZFNONL ;
  1479. XXX2 =RESIDU+ XXX1;
  1480. 'DETR' XXX1;'DETR' RESIDU;
  1481. RESIDU = XXX2;
  1482. INIT = VRAI;
  1483. 'FINS';
  1484. 'FINS';
  1485. 'FINS';
  1486. 'FINS';
  1487. 'FINS';
  1488. WTAB.'ZDEP1'=zdep1;
  1489. *
  1490. * Initialisation pour l'acceleration de convergence (on peut mettre
  1491. * n'importe quoi c'est pour ne pas faire de tests dans la boucle)
  1492. ACFP1 = 'COPIER' ZFEXT2 *0. ;
  1493. ACFP2 = ACFP1 ;
  1494. ACFP3 = ACFP1 ;
  1495. ACFEP1 = ACFP1 ;
  1496. ACFEP2 = ACFP1 ;
  1497. FCORF = 'COPIER' FREAP ;
  1498. CORREC = 0;
  1499. *
  1500. zdept = (zdept 'EXCO' 'LX' 'NOID' 'LX') + (ZDEPT * 0.);
  1501. *----------------------------------------------------------------------*
  1502. * Initialisation des messages pour le pas de temps courant *
  1503. *----------------------------------------------------------------------*
  1504. 'SI' IKLFFF ;
  1505. 'MESSAGE'
  1506. 'Iter'*13 'Nplas'*26 'Critere'*39 'Deps.max'*52 'Eps.max'*65 'Crit.flex'*78
  1507. ;
  1508. 'SINON';
  1509. 'MESSAGE'
  1510. 'Iter'*13 'Nplas'*26 'Fresidu'*39 'Deps.max'*52 'Eps.max'*65 'Mresidu'*78
  1511. ;
  1512. 'FINS';
  1513. 'FINSI' ;
  1514. *FOR_MECA
  1515. *
  1516. XCONVMIN = 1e20;
  1517. NONCONV = FAUX;
  1518. PASREINI = VRAI;
  1519. IPREM = VRAI ; ITACC = 0 ;
  1520. RECA_N = 0 ; IT_RECA = 0 ;
  1521. IKT = FAUX ;
  1522. URG = FAUX ; RED_URG = 0 ;
  1523. ZICONV = VRAI; MMCMAX = 0 ;
  1524. DPSMAXP = 0; DEPSTDM = 0. ;
  1525. zprecnc=1e-5; ITNV = -5 ; PASTEST = FAUX; TABCONV = 'TABL';
  1526. IT = 0 ; MMC = 0 ; XCONV = 0. ; DPSMAX = xpetit ; EPSM = 0. ;
  1527. RE_CNTRL = 'VIDE' 'RIGIDITE' / 'RIGIDITE'; DE_CNTRL = 0;
  1528. *######################################################################*
  1529. *----------------------------------------------------------------------*
  1530. * Boucle de convergence ETIQ (Configuration GEOM1) *
  1531. *----------------------------------------------------------------------*
  1532. * preparation pour la gestion du pas avant etiq
  1533. depstp zdeptp zsigfp fcorfp correcp = depst zdept zsigf fcorf 0;
  1534. * initialisation sous decoupage pour epsi
  1535. n_sous_dec = 1 ;
  1536. 'REPETER' ETIQ ;
  1537. *
  1538. * Champ materiau final
  1539. ZMAT2F = ZMAT2 ;
  1540. *
  1541. * partir du bon etat (mis a jour si le sous increment est acceptable)
  1542. depst zdept zsigf fcorf correc = depstp zdeptp zsigfp fcorfp correcp;
  1543.  
  1544. 'SI' WTAB.'FOR_MECA' ;
  1545. zdep1 = (zdept 'EXCO' 'LX' 'NOID' 'LX') + (ZDEPT * 0.);
  1546. 'FINSI' ;
  1547. *
  1548. *
  1549. 'SI' autaug;
  1550. resmul = 2. * resmul;
  1551. 'SI' ((dpsmax < 1d-3) 'ET' (resmul > 1D-20) 'ET' ('NON' PASTEST));
  1552. resmul = resmul / (dpsmax + xpetit) * 1d-3;
  1553. 'FINSI';
  1554. 'SI' (resmul > 1.0); resmul = 1.0; 'SINON'; itacc = 4; 'FINSI';
  1555. 'FINSI';
  1556. *
  1557. INSTAB = FAUX;
  1558. nconvr = FAUX;
  1559. PASTEST = FAUX;
  1560. RECA_K = FAUX;
  1561. *
  1562. * IT est le compteur de ETIQ, ITACC doit etre =< 0 pour qu'on accelere
  1563. IT = IT + 1 ;
  1564. ITACC = ITACC - 1;
  1565. *
  1566. * Pour conserver les criteres de convergence
  1567. tabconv. it = 1;
  1568. *----------------------------------------------------------------------*
  1569. * Recalcul de la rigidite si necessaire *
  1570. *----------------------------------------------------------------------*
  1571. 'SI' IGRD ;
  1572. 'FORM' GEOM1;
  1573. *
  1574. 'SI' ((IT > 1) 'ET' (URG 'OU' (ITACC > 3) 'OU' INSTAB 'OU'
  1575. ('MULT' (IT - IT_RECA) ITRCLC) ));
  1576. HPP_EPS = FAUX;
  1577. URG = FAUX;
  1578. IT_RECA = IT;
  1579. INSTAB = FAUX;
  1580. PASREINI = FAUX;
  1581. * zdeptr = zdept - (zdep1/2);
  1582. zdeptr = zdept ;
  1583. GEOR ZMATTEMP = 'FORM' ZDEPTR ZMODLI ZMAT22 ;
  1584. * A cause de FORM, ZMATTEMP n'est plus parallele...
  1585. ZMATTEMP = 'REDU' ZMATTEMP ZMODL;
  1586. RECA_K = VRAI;
  1587. RECA_N = RECA_N + 1;
  1588. 'SI' (RECA_N > 20) ;
  1589. nonconv = vrai;
  1590. 'FINS';
  1591. *
  1592. * ----------------------------------------------------------------
  1593. * Recalcul de la rigidite a la fin du pas
  1594. txt_k ='CHAI' ' Recalcul de K (= K^el';
  1595. 'SOUC' 0;
  1596. 'SI' ('EGA' LAG_TOT 1) ;
  1597. 'FORM' GEOREF0;
  1598. HOOKRH = 'HOOK' ZMODL ('REDU' ZMAT2I ZMODL) ;
  1599. HOOKRH2 = 'PICA' HYPDEF HOOKRH ZMODL (ZDEP0 + ZDEPTR);
  1600. 'FORM' GEOR;
  1601. RITC = 'RIGI' HOOKRH2 ZMODL zmattemp 'NOER';
  1602. 'DETR' HOOKRH; 'DETR' HOOKRH2;
  1603. 'SINON';
  1604. RITC = 'RIGI' ZMODL ZMATTEMP 'NOER' ;
  1605. 'FINSI';
  1606. 'FORM' GEOM1;
  1607. ZMATTEMP = 0 ;
  1608. PASOK = 'SOUCI';
  1609. 'SI' PASOK;
  1610. 'MESS' 'rigi rate. on reessaye avec la configuration geom1';
  1611. RITC = 'RIGI' ZMODL ZMAT2F ;
  1612. 'FINSI';
  1613. *
  1614. * RITC peut contenir des CL
  1615. ZRI = 'EXTR' RITC 'RIGI' 'NOMU' ;
  1616. ZCL = 'EXTR' RITC 'RIGI' 'MULT' ;
  1617. 'SI' ('NEG' ('DIME' ZCL) 0) ;
  1618. ZCLIM = ZCLIM0 'ET' ZCL ;
  1619. 'SINON' ;
  1620. ZCLIM = ZCLIM0 ;
  1621. 'FINSI' ;
  1622. *
  1623. * ----------------------------------------------------------------
  1624. * Recalcul de la masse, option 'AUGMENTATION_AUTOMATIQUE'
  1625. 'SI' (AUTAUG 'ET' ('NON' IRAUGLU));
  1626. 'FORM' GEOR ;
  1627. RIG_AUG = 'MASSE' ZMODL ZMAT2F ;
  1628. RH = RITC;
  1629. *** mess 'actualisation rig_aug';
  1630. 'FINSI';
  1631. *
  1632. * ----------------------------------------------------------------
  1633. * Ajout de relations issues de la procedure DEFO_IMP
  1634. ZFCONT = 0 ;
  1635. IACTURES = FAUX ;
  1636. CDEPSLX = 'ENLE' (ZDEP0 '+' ZDEPT) 'LX' ;
  1637. 'SI' (AUTAUG 'ET' ('NEG' DE_CNTRL 0));
  1638. IACTURES = VRAI ;
  1639. ZFCONT = RE_CNTRL '*' CDEPSLX 'EXCO' 'FLX' 'NOID' 'FLX' ;
  1640. ZCLIM = RE_CNTRL 'ET' ZCLIM ;
  1641. txt_k = 'CHAI' txt_k ' + K^ctr';
  1642. 'FINSI';
  1643. *
  1644. * ----------------------------------------------------------------
  1645. * Recalcul des conditions de contact-frottement ds la conf finale
  1646. 'SI' WTAB.'CONTACT';
  1647. 'FORM' GEOR ;
  1648. ** 'FORM' ZDEPT ;
  1649. *
  1650. ZFLX = 'EXCO' (CRR '*' ZDEPT) 'FLX' 'NOID' 'FLX' ;
  1651. *
  1652. MODCON = wtab.'MODCONTA';
  1653. 'SI' ('EXIS' WTAB 'MATCONTA');
  1654. CJEU CRR = 'RFCO' MODCON WTAB.'CONV' WTAB.'MATCONTA';
  1655. 'SINON' ;
  1656. CJEU CRR = 'RFCO' MODCON WTAB.'CONV' ;
  1657. 'FINS' ;
  1658. *
  1659. * Separer ce qui concerne l'adherence (FADH) et les jeux (FLX)
  1660. 'SI' ('NEG' CJEU 0) ;
  1661. FADHE = 'EXCO' CJEU 'FADH' 'NOID' 'FADH' ;
  1662. CDAP = 'EXCO' CJEU 'FLX' 'NOID' 'FLX' ;
  1663. *
  1664. * Ajout du glissement deja parcouru sur les conditions de frot.
  1665. 'SI' WTAB.'CAFROTTE' ;
  1666. CGLI = 'REDU' ZFLX MFROT ;
  1667. CDAP = CDAP ET (-1*CGLI) ;
  1668. 'FINSI';
  1669. 'FINSI';
  1670. *
  1671. 'SI' WTAB.'MODAL' ;
  1672. CRR = 'PJBA' CRR ZMODL ZMAT2F ;
  1673. MCRR = 'EXTR' CRR 'MAIL' 'MULT';
  1674. MCDAP = 'EXTR' CDAP 'MAIL' ;
  1675.  
  1676. 'REPETER' BCDA ('NBNO' MCDAP) ;
  1677. PBCDA = MCDAP 'POINT' &BCDA ;
  1678. PCRR ='POINT' MCRR &BCDA ;
  1679. CHCR ='MANU' 'CHPO' PCRR 1 'FLX' ('EXTR' CDAP 'FLX' PBCDA)
  1680. 'NATURE' 'DISCRETE' ;
  1681. 'SI' ('EGA' 1 &BCDA) ;
  1682. CCDA = CHCR ;
  1683. 'SINON' ;
  1684. CCDA = CCDA 'ET' CHCR ;
  1685. 'FINS' ;
  1686. 'FIN' BCDA ;
  1687.  
  1688. CDAP = CCDA ;
  1689. 'FINS' ;
  1690. *
  1691. 'SI' ('NEG' CRR 0) ;
  1692. IACTURES = VRAI ;
  1693. CHPZ = CRR '*' CDEPSLX 'EXCO' 'FLX' 'NOID' 'FLX' ;
  1694. 'SI' ('NEG' ZFCONT 0) ;
  1695. ZFCONT = ZFCONT '+' CHPZ ;
  1696. 'SINON' ;
  1697. ZFCONT = CHPZ ;
  1698. 'FINSI' ;
  1699. ZCLIM = CRR 'ET' ZCLIM ;
  1700. 'FINS';
  1701. *
  1702. 'SI' ('NEG' CJEU 0) ;
  1703. IACTURES = VRAI ;
  1704. ZFCONT = ZFCONT '+' CDAP ;
  1705. 'FINS';
  1706. 'FINS';
  1707. *
  1708. * Mise a jour des jeux dans le residu (partie force inchangee)
  1709. ZFCONSTA = ZFEXT2 ;
  1710. ZFLX1 = ZFLXB ;
  1711. 'SI' IACTURES ;
  1712. ZFCONSTA = ZFCONSTA '+' ZFCONT ;
  1713. RFORCE = 'ENLE' RESIDU 'FLX' ;
  1714. FLXPRE = 'EXCO' (ZCLIM '*' (ZDEP0 '+' ZDEPT)) 'FLX' 'NOID' 'FLX';
  1715. RJEUX = ZFCONT '+' ZFLXB '-' FLXPRE ;
  1716. RESIDU = RFORCE 'ET' RJEUX ;
  1717. ZFLX1 = ZFLX1 'ET' ZFCONT ;
  1718. 'FINS';
  1719. *
  1720. ZRAID = ZCLIM 'ET' ZRI;
  1721. *
  1722. * ----------------------------------------------------------------
  1723. * Ajout de la partie dynamique
  1724. 'SI' IDYN;
  1725. * bp : en toute rigueur, il faudrait aussi recalculer la MASSE ...
  1726. * et ajouter l'amortissement le cas échéant ...
  1727. ZRAID = ZRAID 'ET' ZRMAS ;
  1728. 'FINS';
  1729. *
  1730. * ----------------------------------------------------------------
  1731. * Recalcul de la raideur geometrique (option K_SIGMA)
  1732. 'SI' IKSIA ;
  1733. 'FORM' GEOR;
  1734. ksigtc = 'KSIGM' ZSIGF ZMODL ZMAT2F ;
  1735. ZRAID = ZRAID 'ET' ksigtc ;
  1736. txt_k = 'CHAI' txt_k ' + K^sig';
  1737. 'FINS';
  1738. *
  1739. * ----------------------------------------------------------------
  1740. * Prise en compte d'eventuelles 'RIGIDITE_CONSTANTE'
  1741. 'SI' IRCON;
  1742. ZRAID = ZRAID 'ET' RIG_CONS;
  1743. txt_k = 'CHAI' txt_k ' + K^cst';
  1744. 'FINS';
  1745. *
  1746. * ----------------------------------------------------------------
  1747. * Traitement en de la rigidite augmentee
  1748. 'SI' IRAUG;
  1749. 'SI' iprem; zdep1d = ZDEP0 'ENLE' 'LX'; 'FINSI';
  1750. xkx = (xtmx zdep1d rh) + xpetit;
  1751. xmx = (xtmx zdep1d rig_aug) + xpetit;
  1752. 'SI' (('VERI' xkx) 'ET' ('VERI' xmx) 'NON');
  1753. zu1l = ZDEP0 'ENLE' 'LX';
  1754. xkx = (xtmx zu1l rh) + xpetit;
  1755. xmx = (xtmx zu1l rig_aug) + xpetit;
  1756. 'FINSI';
  1757. augauto = xkx / xmx; augk = 1.;
  1758. augauto = abs augauto;
  1759. augk = abs augk;
  1760. augmult = augmult * 1.02;
  1761. 'SI' (augmult > 1D4 ); augmult=1D4 ; 'FINSI';
  1762.  
  1763. augauto = augauto * augmult ;
  1764. augk = augk * augmult;
  1765.  
  1766. 'SI' (iraug 'ET' autaug) ;
  1767. 'MESS' 'multiplicateur d augmentation masse' augauto ' raideur' augk ;
  1768. 'FINSI';
  1769. ZRAIDNA= ZRAID ;
  1770. 'SI' AUTAUG;
  1771. ZRAID = ZRAID 'ET' (RIG_AUG * augauto) 'ET' (RH * augk) ;
  1772. 'SINON';
  1773. ZRAID = ZRAID 'ET' RIG_AUG ;
  1774. *** 'MESS' ' augmentation residuelle ';
  1775. 'FINSI';
  1776. txt_k = 'CHAI' txt_k ' + K^aug';
  1777. *** ZNACCE = FAUX;
  1778. 'SINON';
  1779. augmult = augmult * 0.55 ;
  1780. si (augmult < 1d-2); augmult = 1d-2; finsi;
  1781. 'SI' iraug;
  1782. 'MESS' 'nouveau augauto augmult' ' ' augauto augmult;
  1783. 'FINSI';
  1784. 'SI' IRAUGLU;
  1785. zraid = zraid 'ET' rig_aug;
  1786. 'FINSI';
  1787. 'FINSI';
  1788. 'FORM' GEOM1;
  1789. *
  1790. XXX1 = 'EXTR' ZCLIM 'MAIL' 'UNIL';
  1791. IMPO12 = ('NBEL' XXX1) '>' 0 ;
  1792. 'SI' (IPILOT 'ET' IMPO12) ;
  1793. DUUNIL = 'REDU' DFEXT0L XXX1 ;
  1794. XXX2 = 'DIFF' ('EXTR' ZCLIM 'MAIL') XXX1 ;
  1795. DUIMPO = 'REDU' DFEXT0L XXX1 ;
  1796. 'FINS';
  1797. *
  1798. * ----------------------------------------------------------------
  1799. * Procedure UTILISATEUR
  1800. 'SI' WTAB.'PROCEDURE_CHARMECA';
  1801. PRECED.'ADDI_MATRICE' = vrai;
  1802. TFP22= CHARMECA PRECED TI ;
  1803. PRECED.'ADDI_MATRICE' = faux;
  1804. 'SI' (EXIS TFP22 'ADDI_MATRICE');
  1805. zraid = zraid 'ET' TFP22.'ADDI_MATRICE';
  1806. txt_k = 'CHAI' txt_k ' + K^cent';
  1807. 'FINS';
  1808. 'FINS';
  1809. *
  1810. 'MESS' ('CHAI' txt_k ' ) dans config deformee ') ;
  1811. *
  1812. * on impose le recalcul de K a la prochaine iteration si it=2 (pq ?)
  1813. 'SI' (IT 'EGA' 2) ;
  1814. ITACC = 4 ;
  1815. 'FINS' ;
  1816. 'FINS';
  1817. 'FINS';
  1818. *
  1819. 'SI' WTAB.'NVSTNL' ;
  1820. UN = 'EXCO' ZVIFL movifl ;
  1821. ch_un = 'MANU' 'CHML' WTAB.'MOD_NSL' 'ADVE' un 'TYPE' 'CARACTERISTIQUES';
  1822. nugrad = 'ADVE' WTAB.'MOD_NSL' ch_un ;
  1823. 'SI' ('EXIS' PRECED 'OPTION_BDF2') ;
  1824. ZRNSL = WTAB.'RNSL' 'ET' nugrad 'ET' (WTAB.'NSMA' '*' 1.5) ;
  1825. 'SINON' ;
  1826. ZRNSL = WTAB.'RNSL' 'ET' nugrad 'ET' WTAB.'NSMA' ;
  1827. 'FINSI' ;
  1828. ftnsl = ZFCONSTA 'ET' fmass ;
  1829.  
  1830. 'SI' LOGADV ;
  1831. ch_ad = 'MANU' 'CHML' WTAB.'MOD_NSL' 'ADVE' UADV 'TYPE' 'CARACTERISTIQUES';
  1832. NUADV = 'ADVE' WTAB.'MOD_NSL' ch_ad ;
  1833. ZRNSL = ZRNSL 'ET' NUADV ;
  1834. ftnsl = ftnsl '-' fadv ;
  1835. 'FINSI' ;
  1836.  
  1837. resnsl = ftnsl '-' (ZRNSL * ZVIFL) ;
  1838.  
  1839. 'FINSI' ;
  1840. *----------------------------------------------------------------------*
  1841. * Acceleration de convergence effective *
  1842. *----------------------------------------------------------------------*
  1843. 'SI' WTAB.'FOR_MECA' ;
  1844. CORRECA = CORREC ;
  1845. CORREC = 0;
  1846. ACFEP0 = RESIDU - FCORF;
  1847. ACFEP0 = ACFEP0 'ENLE' 'FLX';
  1848. ACFEPT = ACFEP0;
  1849. ACFP0 = ACFEP0 * ZJAC ;
  1850. ACFEP0 = ACFEP0 - CORRECA;
  1851. ACCEL = FAUX;
  1852. 'SI' (('NON' instab) 'ET' (ITACC '&lt;EG' 0) 'ET' (IT '>' 3) 'ET' ZNACCE );
  1853. ITACC = 2;
  1854. ACCEL = VRAI;
  1855. CORREC = 'ACT3' ACFEP2 ACFEP1 ACFEP0
  1856. ACFP3 ACFP2 ACFP1 ACFP0 ;
  1857. *
  1858. * verif que l'acceleration ne renvoie pas en arriere
  1859. 'SI' (wtab.'STABILITE' );
  1860.  
  1861. acc_ref = xty acfept zdep1d MNDUAL MNPRIM;
  1862. acc_ref = acc_ref + xpetit;
  1863.  
  1864. acc_dir = xty (acfept - correc) zdep1d MNDUAL MNPRIM;
  1865. acc_rap = acc_dir/acc_ref;
  1866. acc_lim = 256.; 'SI' (acc_ref < 0.); acc_lim = 1.; 'FINSI';
  1867. 'SI' (acc_rap '>' acc_lim) ;
  1868. * en cas d'acceleration trop grande, on la limite
  1869. 'MESS' 'Limitation acceleration ' ' 'acc_rap; CORREC = correc * (acc_lim/acc_rap);
  1870. 'FINSI';
  1871. 'SI' (acc_rap '&lt;EG' 0.) ;
  1872. * en cas d'acceleration retrograde, on n'accelere pas
  1873. 'MESS' 'Annulation acceleration: retrograde' ' ' acc_rap;
  1874. correc = 0.;
  1875. 'FINSI';
  1876. 'FINSI';
  1877. *
  1878. RESIDU = RESIDU '-' CORREC;
  1879. 'FINS';
  1880. *
  1881. ACFP3 = ACFP2 ;
  1882. ACFP2 = ACFP1 ;
  1883. ACFP1 = ACFP0 ;
  1884. ACFEP2 = ACFEP1 ;
  1885. ACFEP1 = ACFEP0 ;
  1886. 'FINSI' ;
  1887. *FOR_MECA
  1888. *
  1889. 'SI' (resmul < 0.99);
  1890. 'MESS' 'Reduction du chargement. Coefficient: ' resmul;
  1891. 'SI' (resmul < 1.d-40); 'ERREUR' 996; 'FINSI';
  1892. residu = ((residu -fcorf) * resmul) + fcorf;
  1893. ACFP0 = (RESIDU - FCORF) ;
  1894. 'FINSI';
  1895. 'SOUCI' 0;
  1896. *----------------------------------------------------------------------*
  1897. * Systeme a resoudre a l'iteration (i) *
  1898. * *
  1899. * | K At | | du | | Fsur + Fvol - Bsigma^(i) | *
  1900. * | | | | = | | *
  1901. * | A 0 | | LX(i) | | d1 - A*u^(i) | *
  1902. *----------------------------------------------------------------------*
  1903. 'SI' WTAB.'FOR_MECA' ;
  1904. FEXCI = 'VIDE' 'CHPOINT' / 'DISCRET' ;
  1905. 'SI' (WTAB.'ADHERENCE') ;
  1906. 'SI' ('EXIS' WTAB 'MAIL_BLOM') ;
  1907. FADRE = 'REDU' FADHE WTAB.'MAIL_BLOM' ;
  1908. 'SINON' ;
  1909. FADRE = FADHE ;
  1910. 'FINSI' ;
  1911. FEXCI = FEXCI 'ET' FADRE ;
  1912. 'FINSI' ;
  1913. *
  1914. * Force limite de frottement
  1915. 'SI' (WTAB.'CAFROTTE' 'ET' IMPO12);
  1916. 'SI' WTAB.'FROCABL' ;
  1917. zsigfT = 'REDU' zsigf ZMODLI;
  1918. FFROT = 'EXCC' ZCLIM ZDEPT MODCON WTAB.'MATCONTA' ZSIGFT;
  1919. RTRSF = 'VIDE' 'RIGIDITE' / 'RIGIDITE';
  1920. RFNS = 'VIDE' 'RIGIDITE' / 'RIGIDITE';
  1921. FEXCI = FEXCI '+' FFROT ;
  1922. 'FINSI';
  1923. 'SI' WTAB.'FROCOUL' ;
  1924. excfconv = excfconv + 1 ;
  1925. RTRSF*'RIGIDITE' RFNS*'RIGIDITE' FFROT = 'EXCF' ZCLIM ZDEPT MODCON WTAB.'MATCONTA' excfconv;
  1926. FEXCI = FEXCI '+' FFROT ;
  1927. MFROT = 'EXTR' FFROT 'MAIL' ;
  1928. 'FINSI';
  1929. 'FINS';
  1930. *
  1931. 'SI' ( ('NEG' ZRIBLO_M 'INCONNU') 'ET' (IPREM 'OU' RECA_K) ) ;
  1932. 'SI' ((WTAB.'CAFROTTE' 'OU' WTAB.'ADHERENCE') 'ET' IMPO12);
  1933. ZDEP1 BID BID BID BID = 'RESO' ZRAID 'SOUC' RESIDU 'INIB'
  1934. ZRIBLO_M ZLISEA_M
  1935. FEXCI RFNS RTRSF;
  1936. 'SINON';
  1937. ZDEP1 BID BID BID = 'RESO' ZRAID 'SOUC' RESIDU 'INIB'
  1938. ZRIBLO_M ZLISEA_M ;
  1939. 'FINS';
  1940. 'SINON';
  1941. 'SI' ((WTAB.'CAFROTTE' 'OU' WTAB.'ADHERENCE') 'ET' IMPO12);
  1942. ZDEP1 = 'RESO' ZRAID 'SOUC' RESIDU FEXCI RFNS RTRSF;
  1943. 'SINON';
  1944. ZDEP1 = 'RESO' ZRAID 'SOUC' RESIDU 'NOID';
  1945. 'SI' (WTAB.'MAN' 'ET' IPREM);
  1946. ORDRE = WTAB.'ORDRE' ;
  1947. ZDEP2 IOUT = CORMAN ZRAIDINI ZMODL ZMAT2F ORDRE
  1948. ZDEP0 ZSIG0 RESIDNOR WTAB ;
  1949. 'SI' (IOUT 'EGA' 1) ;
  1950. ZDEP1=ZDEP2;
  1951. 'FINS';
  1952. 'FINSI' ;
  1953. 'FINS';
  1954. 'FINS';
  1955. *
  1956. * verif stabilite matrice elastique
  1957. 'SI' (wtab.'STABILITE' 'ET' ('NON' HPP_EPS) 'ET' AUTAUG);
  1958. RESIDD = RESIDU - (ZCLIM * (ZDEP1 EXCO 'LX' 'NOID' 'LX'));
  1959. acc_ref = xty (RESIDD ) zdep1 MNDUAL MNPRIM;
  1960. ** diag refactorise la matrise. On evite donc provisoirement de l'appeler
  1961. ** nbng = 'DIAG' ZRAID;
  1962. nbng = 0;
  1963. 'SI' ((acc_ref &lt;EG 0.) 'OU' (nbng > 0));
  1964. 'MESS' 'Raideur negative' ' ' acc_ref ' ' nbng;;
  1965.  
  1966. SI IKSIA; URG = VRAI; SINON;
  1967. MESS 'RAIDEUR ELASTIQUE NEGATIVE'; ERREUR 5; FINSI;
  1968. ** IKSIA = FAUX;
  1969. iraug = vrai;
  1970. *pv itacc = 3;
  1971. resmul = resmul * 0.25;
  1972. HPP_EPS = FAUX;
  1973. pastest = VRAI;
  1974. *** instab = vrai;
  1975. urg = VRAI;
  1976. augmult = augmult * 1.4;
  1977. 'ITERER' ETIQ;
  1978. 'FINSI';
  1979. 'FINSI';
  1980. monsouc ='SOUCI';
  1981. 'SI' monsouc; 'SI' ('NON' autaug);
  1982. 'MESS' 'Souci': (vale 'SOUCI');
  1983. HPP_EPS = FAUX;
  1984. pastest = VRAI;
  1985. *** instab = vrai;
  1986. URG=VRAI;
  1987. 'ITERER' ETIQ;
  1988. 'FINSI'; 'FINSI';
  1989. *
  1990. 'SI' LOGPIL ;
  1991. * Calcul de D_eta par appel a la procedure PILOINDI
  1992. D_ETA = PILOINDI PRECED ZDEP0 ZDEPT ZDEP1 ZDEPII DTAU ;
  1993. * Mise à jour
  1994. ZDEP1 = ZDEP1 '+' (D_ETA '*' ZDEPII) ;
  1995. ETA = ETA '+' D_ETA ;
  1996. 'FINSI' ;
  1997. *
  1998. * verif sens ----------------------------------------------------------
  1999. *
  2000. 'SI' (resmul < 1d-2) ; souci 0; 'FINSI';
  2001. zdep1s = zdep1 'ENLE' 'LX';
  2002. monsouc = souci;
  2003. pasunil = monsouc;
  2004. *
  2005. ZRAID_T = 'EXTR' ZRAID 'CONT';
  2006. 'SI' ('EXIS' ZRAID_T 'NITER');
  2007. * Conserver les conditions unilaterales pour VITEUNIL
  2008. 'SI' IDYN ; WTAB.'ZRAIDV' = ZRAID; 'FINS';
  2009. ZRIBLO_M = ZRAID_T.7;
  2010. ZLISEA_M = ZRAID_T.6;
  2011. WTAB.'MAIL_BLOM' = 'EXTR' ZRIBLO_M 'MAIL' 'MULT' ;
  2012. 'FINS';
  2013. 'FINSI' ;
  2014. *FOR_MECA
  2015.  
  2016. 'SI' WTAB.'NVSTNL' ;
  2017. ZVIF1 = 'KRES' ZRNSL Resnsl ;
  2018. ZVIFL = ZVIFL '+' ZVIF1 ;
  2019. 'FINSI' ;
  2020. *----------------------------------------------------------------------*
  2021. * Increment de deplacements et mult. de Lagrange *
  2022. * *
  2023. * ZDEP1 est un increment d'increment de deplacements, note du, et les *
  2024. * multiplicateurs de Lagrange sont resolus "en total". *
  2025. * La solution de la boucle ETIQ a l'iteration i a fourni : *
  2026. * ZDEP1 = [ du ; LX(i) ] *
  2027. * Le cumul est realise de maniere a avoir : *
  2028. * ZDEPT = [ Du^(i) ; LX(i) ] *
  2029. * avec Du^(i) = Du^(i-1) + du *
  2030. * Le champ de deplacements total s'ecrit : *
  2031. * ZDETOT = ZDEP0 '+' ZDEPT *
  2032. *----------------------------------------------------------------------*
  2033. 'SI' WTAB.'FOR_MECA' ;
  2034. 'SI' IPREM ;
  2035. ZDEPT = 'COPIER' ZDEP1 ;
  2036. ZDELA = 'COPIER' ZDEPT ;
  2037. 'SINON';
  2038. XXX1 = ZDEPT 'ENLEVER' 'LX' ;
  2039. ZDEPT = XXX1 '+' ZDEP1 ;
  2040. 'DETR' XXX1 ;
  2041. 'FINS' ;
  2042. *
  2043. 'SI' WTAB.'MODAL' ;
  2044. 'SI' ('EXIS' WTAB 'MODCONTA') ;
  2045. 'SI' IPREM ;
  2046. mamoco1 = 'EXTR' (ZDEPT 'ENLEVER' 'LX') 'MAIL' ;
  2047. 'SINON' ;
  2048. * mettre les point materiels dans zdept
  2049. zdeptu1 = 'REDU' zdept mamoco1 ;
  2050. ch_dco = 'RECO' zdeptu1 ZMODL ZMAT22 ;
  2051. ZDEPT = ('EXCO' zdept 'LX' 'LX') 'ET' zdeptu1 'ET' ch_dco ;
  2052. 'FINS';
  2053. 'FINS';
  2054. 'FINS' ;
  2055. *
  2056. * On part dans le decor : redemarrer a 0
  2057. 'SI' ((XCONV > 1E8) 'ET' PASREINI 'ET' ('NON' IPILOT)) ;
  2058. 'MESS' 'Reinitialisation du schema';
  2059. PASREINI=FAUX;
  2060. *pv ITACC=3;
  2061. 'ITERER' ETIQ;
  2062. 'FINS';
  2063. *
  2064. * Pilotage automatique
  2065. 'SI' IPILOT;
  2066. 'SI' ACCEL ;
  2067. RED1 = ZAUTOREDU ;
  2068.  
  2069. * reduction du critere de pilotage red2 sert d'incateur si
  2070. * pas accelere tous les 2 pas
  2071.  
  2072. * MODIFICATION CB215821 : 18/06/2015
  2073. 'SI' (RED2 < (IT '/' 20));
  2074. ZAUTOREDU = ZAUTOREDU '*' 3.D0 ;
  2075. RED2 = RED2 '+' 1 ;
  2076. ITACC= 3;
  2077. 'FINS';
  2078.  
  2079. RED1 = RED1 '/' ZAUTOREDU ;
  2080. 'SI' (RED1 '<' 0.9) ; ZAUTORED1 = 10 ; 'FINS' ;
  2081.  
  2082. 'SI' (ZAUTOREDU '>' 1.D0 ) ;
  2083. 'MESS' 'On divise le critere de pilotage par 'ZAUTOREDU;
  2084. 'FINS' ;
  2085.  
  2086. OO = WTAB.'AUTOCRIT' '/' ZAUTOREDU ;
  2087. U1MA = AUTOPILO ZDEPT (COEPI'*'ZDELA) ZMODLI ZMAT22 WTAB;
  2088. AL1 = OO '/' U1MA ;
  2089. * al1 est le coefficient de normalisation
  2090. 'SI' (( al1 '>EG' 1.d0) 'ET' (coepi '>EG' 1.d0)) ;
  2091. * pour eviter d'aller au dela de alpha=1 on ignore le critere
  2092. AL1 = 1.d0 ;
  2093. 'FINS' ;
  2094. 'SI'((AL1 '>' 1.D0) 'ET' (COEPI '>' 0.D0));
  2095. 'SI' ( AL1 '>' (1.D0 '/' COEPI));
  2096. AL1 = 1.D0 '/' COEPI;
  2097. 'FINS';
  2098. 'FINS';
  2099. * normalisation
  2100. PASTEST = VRAI;
  2101. XXX1 = ZLX '*' ( 1.d0 '-' AL1);
  2102. XXX3 = ZDEPT '*' AL1 ;
  2103. ZDEPT = XXX3 '+' XXX1;
  2104. 'DETR' XXX3;
  2105. 'SINON';
  2106. * le calcul d'al1 est fait pour eviter la convergence
  2107. * s'il est externe a l'interval 0.5 --- 2.
  2108. OO = WTAB.'AUTOCRIT' '/' ZAUTOREDU ;
  2109. U1MA = AUTOPILO ZDEPT (COEPI'*'ZDELA) ZMODLI ZMAT22 WTAB;
  2110. AL1 = OO '/' U1MA ;
  2111. 'SI' (( AL1 '>EG' 1.d0) 'ET' (COEPI '>EG' 1.d0)) ;
  2112. AL1 = 1.d0 ;
  2113. 'FINS' ;
  2114. 'FINS' ;
  2115. 'FINS';
  2116. *
  2117. * garder les reactions pour le test de convergence
  2118. ZDEPLP = ZDEPL ;
  2119. ZDEPL = ZDEPT 'EXCO' 'LX' 'NOID' 'LX' ;
  2120. ZGRDUF = 'MOT' 'INCONNU';
  2121. *
  2122. *----------------------------------------------------------------------
  2123. * le nouveau champ est fixe on va tester l'equilibre(convergence)
  2124. * et calculer la force motrice pour l'iteration suivante
  2125. *----------------------------------------------------------------------
  2126. 'DETRUIRE' FCORF;
  2127. *
  2128. * Champ de deplacement total
  2129. ZDETOT = ZD0SLX '+' ZDEPT ;
  2130. *
  2131. * XXX1 = [ FCORF ; FCORU ] = [ -Freac_it ; u^imp_it ]
  2132. XXX1 = ZCLIM '*' ZDETOT;
  2133. FCORF = 'ENLE' XXX1 'FLX';
  2134. FCORU = 'EXCO' XXX1 'FLX' 'NOID' 'FLX';
  2135. 'DETR' XXX1 ;
  2136. *----------------------------------------------------------------------*
  2137. * Increment de deformations totales DEPST *
  2138. *----------------------------------------------------------------------*
  2139. * Update or total lagrangian ---------------------------------------
  2140. 'SI' IFEFP;
  2141. 'SI' IFEFPUL ;
  2142. * mess ' update lagrangian ZRIKTA';
  2143. GEOM2 = 'FORM' ZDEPT ;
  2144. ZRIKTA ZSIGF ZVARF ZDEIF = 'ECFEFP'
  2145. ZMODL ZDEI0 ZVAR0 ZDEPT ZMAT2F ZPREK NITMA 1 ;
  2146. 'SINON';
  2147. * mess ' total lagrangian ZRIKTA';
  2148. chp_z = ZDEPT + ZDEP0 ;
  2149. GEOM2 = 'FORM' chp_z ;
  2150. ZRIKTA ZSIGF ZVARF ZDEIF = 'ECFEFP'
  2151. ZMODL ZDEI0 ZVAR0 chp_z ZMAT2F ZPREK NITMA ;
  2152. chp_z = 1 ;
  2153. 'FINS';
  2154. FEQU2 = 'BSIG' ZMODL ZSIGF ZMAT2F ;
  2155. ZRAID = ZRIKTA 'ET' ZCLIM ;
  2156. 'FORM' GEOM1 ;
  2157. *
  2158. XXX1 = 'EXCO' (WTAB.'MOVA') ZVARF ;
  2159. EPSM = 'MAXI' XXX1 'AVEC' MLDEFOR ;
  2160. ACC = 'ABS' ( XXX1 - ACC0 ) ;
  2161. MMC = 'MASQUE' ACC 'SUPERIEUR' 1.D-10 'SOMME' ;
  2162. 'SI' (MMC '>' MMCMAX) ; MMCMAX = MMC ; 'FINS' ;
  2163. DPSMAX = 'MAXI' ACC 'AVEC' MLDEFOR ;
  2164. DEPST = 'CHAN' 'TYPE' ZDEIF 'DEFORMATIONS' ;
  2165. ZDEFF = ZDEF0 '+' DEPST ;
  2166. *
  2167. * cas standard -----------------------------------------------------
  2168. 'SINON';
  2169. 'SI' IGRD;
  2170. zdepm = zdept '*' 0.5;
  2171. 'FORM' GEOM1 ;
  2172. 'SI' WTAB.'ITCAR';
  2173. GEOM2M ZMATTEMP = 'FORM' ZDEPM ZMODLI ZMAT22 ;
  2174. * A cause de FORM, ZMATTEMP n'est plus parallele...
  2175. ZMATTEMP = 'REDU' ZMATTEMP ZMODL ;
  2176. 'SINON';
  2177. GEOM2M = 'FORM' ZDEPM ;
  2178. ZMATTEMP = ZMAT2F;
  2179. 'FINS';
  2180. GEOM2 = 'FORM' zdepm ;
  2181. 'FORM' GEOM1 ;
  2182. 'FINS';
  2183. *
  2184. * Pour les hypotheses de deformations non lineaires,
  2185. * on calcule l'increment de deformation sur le pas avec EPSI 'LINE'
  2186. * mais en se placant sur une configuration intermediaire (mi pas)
  2187. iDEFOK = VRAI ; PASOK = vrai;
  2188. 'SI' (('NEG' HYPDEF 'LINEAIRE') 'ET' IGRD);
  2189.  
  2190. 'SOUC' 0;
  2191. zdepti = zdept * (1.0 / n_sous_dec);
  2192. depst = 0;
  2193. 'REPE' b_eps n_sous_dec;
  2194. teps = (&b_eps * (1. / n_sous_dec)) - (1. / n_sous_dec /2.);
  2195. zdepa = zdept '*' teps;
  2196.  
  2197. geom2a = form zdepa;
  2198. 'SI' ('OU' IENDOM IVIDOM ICERAM);
  2199. HOOKENDO = 'HOOK' ZMODL ZMAT2F ZVAR0 ;
  2200. DEPSTat = 'EPSI' 'LINE' 'NOER' ZMODL ZDEPTi HOOKENDO ZMAT2F;
  2201. 'DETR' HOOKENDO;
  2202. 'SINON';
  2203. DEPSTat = 'EPSI' 'LINE' 'NOER' ZMODL ZDEPti ZMATTEMP ;
  2204. 'FINSI';
  2205. 'SI' ('SOUCI'); 'FORM' GEOM1; IDEFOK = faux; 'QUIT' b_eps; 'FINSI';
  2206. DEPSTa = 'PICA' HYPDEF DEPSTat ZMODL (-1. '*' ZDEPa) ;
  2207. FORM geom1;
  2208. depst = depst + depsta;
  2209. 'DETR' geom2a; 'DETR' zdepa; 'DETR' depsta; 'DETR' depstat;
  2210. 'FIN' b_eps;
  2211.  
  2212.  
  2213.  
  2214.  
  2215. PASOK = 'SOUCI' 'OU' ('NON' IDEFOK);
  2216.  
  2217. DPSMAX = 10;
  2218. 'SI' ('NON' PASOK);
  2219. 'FORM' GEOM1 ;
  2220.  
  2221. DPSMAX = 'MAXI' 'ABS' DEPST 'AVEC' MLDEFOR;
  2222. 'SI' (DPSMAX '>' 10);
  2223. PASOK = VRAI;
  2224. RE_CNTRL*'RIGIDITE' = DEFO_IMP DEPST ZDEPT ZRAID;
  2225. DE_CNTRL = 1;
  2226. 'FINS';
  2227. 'FINS';
  2228.  
  2229. 'SI' PASOK;
  2230. MSGZ = 'CHAI' 'Deformation non lineaire non calculable' ;
  2231. pastest = vrai;
  2232. iDEFOK = FAUX ;
  2233. 'SI' autaug;
  2234. mess ('CHAI' MSGZ ' : annulation sous-increment');
  2235. iraug = vrai;
  2236. *pv itacc = 3;
  2237. resmul = resmul * (1d-1 /dpsmax);
  2238. HPP_EPS = FAUX;
  2239. pastest = VRAI;
  2240. urg = VRAI;
  2241. augmult = augmult * 1.4;
  2242. 'ITERER' ETIQ;
  2243. 'FINSI';
  2244. MESS MSGZ ;
  2245. 'FINSI';
  2246.  
  2247. 'SI' PASOK;
  2248. 'MESS' 'deformation lineaire';
  2249. 'FINSI';
  2250. 'FINS';
  2251. *
  2252. ** on n'a pas pu calcule DEPST : on utilise les deformations lineaires
  2253. 'SI' PASOK;
  2254. 'SI' ('OU' IENDOM IVIDOM ICERAM);
  2255. HOOKENDO = 'HOOK' ZMODL ZMAT2F ZVAR0 ;
  2256. DEPST = 'EPSI' 'LINE' ZMODL ZDEPT HOOKENDO ZMAT2F;
  2257. 'DETR' HOOKENDO;
  2258. 'SINON';
  2259. DEPST = 'EPSI' 'LINE' ZMODL ZDEPT ZMAT2F;
  2260. 'FINSI';
  2261. 'SI' (('NEG' HYPDEF 'LINEAIRE') 'ET' IGRD);
  2262. 'MESS' 'Attention utilisation des deformations lineaires';
  2263. 'FINS';
  2264. 'FINS';
  2265. *
  2266. * Exprimer l'increment de deformations (DEPST) et les contraintes
  2267. * initiales (ZSIG0a) sur la configuration adequate
  2268. ZSIG0a = ZSIG0;
  2269. 'SI' (IGRD 'ET' iDEFOK);
  2270. 'FORM' GEOM1;
  2271. * Lagrangien total : sur GEOREF0
  2272. 'SI' ('EGA' LAG_TOT 1);
  2273. DEPSTa = 'PICA' HYPDEF DEPST ZMODL ZDEP0N ;
  2274. ZSIG0a = 'PICA' HYPDEF ZSIG0 ZMODL ZDEP0N ;
  2275. 'FORM' GEOREF0;
  2276. 'FINSI';
  2277. * Lagrangien fin pas : sur GEOM2
  2278. 'SI' ('EGA' LAG_TOT 2);
  2279. DEPSTa = 'PICA' HYPDEF DEPST ZMODL ZDEPT ;
  2280. ZSIG0a = 'PICA' HYPDEF ZSIG0 ZMODL ZDEPT ;
  2281. 'FORM' GEOM2;
  2282. 'FINS';
  2283. * Lagrangien mi pas : sur GEOM2M
  2284. 'SI' ('EGA' LAG_TOT 3);
  2285. DEPSTa = 'PICA' HYPDEF DEPST ZMODL ZDEPM ;
  2286. ZSIG0a = 'PICA' HYPDEF ZSIG0 ZMODL ZDEPM ;
  2287. 'FORM' GEOM2M;
  2288. 'FINS';
  2289. 'DETR' depst;
  2290. depst = depsta;
  2291. 'FINS';
  2292. *
  2293. 'SI' (knoconv '>' 1) ;
  2294. ZDT = 0. ;
  2295. 'SINON' ;
  2296. ZDT = WTAB.'DT' '*' COEPI ;
  2297. 'FINS' ;
  2298. *----------------------------------------------------------------------*
  2299. * Loi de comportement (operateur ELAS ou COMP) *
  2300. * sur la configuration definie par LAG_TOT *
  2301. *----------------------------------------------------------------------*
  2302. * Comportement elastique lineaire
  2303. 'SI' ('NON' IPLAVI) ;
  2304. *
  2305. * Increment de contraintes
  2306. DSIGT = 'ELAS' ZMODL DEPST ZMAT2F ;
  2307. *
  2308. * Soustraire les parties thermique et deformations imposees
  2309. 'SI' (ITHER 'OU' WTAB.'MATVAR') ;
  2310. XXX1 = DSIGT0 '*' COEPI;
  2311. XXX2 = DSIGT '-' XXX1;
  2312. DSIGT = XXX2 ;
  2313. 'FINS';
  2314.  
  2315. 'SI' LOGDEF ;
  2316. XXX1 = DSI1 '*' COEPI;
  2317. XXX2 = DSIGT '-' XXX1;
  2318. DSIGT = XXX2 ;
  2319. 'FINS';
  2320. ZSIGF = ZSIG0a + DSIGT ;
  2321. *
  2322. * Comportement non lineaire : integration avec l'operateur COMP
  2323. 'SINON';
  2324. *
  2325. * dans le cas des modeles endommageables de Lemaitre, on ecoule
  2326. * en tenant compte, dans les iterations internes, de la variation du
  2327. * materiau avec la temperature
  2328. *
  2329. * Soustraire les parties thermique et deformations imposees
  2330. 'SI' (ITHER 'OU' WTAB.'MATVAR') ;
  2331. XXX1 = DEPST0 '*' COEPI;
  2332. XXX2 = DEPST '-' XXX1 ;
  2333. DEPST = XXX2 ;
  2334. 'FINS' ;
  2335. *
  2336. 'SI' LOGDEF ;
  2337. XXX1 = DDEFOR0 '*' COEPI;
  2338. XXX2 = DEPST '-' XXX1 ;
  2339. DEPST = XXX2 ;
  2340. 'FINS' ;
  2341. *
  2342. ZMATT = ZMAT2F ;
  2343. 'SI' ('ET' ('ET' ITHER ('OU' IENDOM IVIDOM )) WTAB.'MATVAR') ;
  2344. * on recupere certain materiau avec les parametres fct de la temperature
  2345. * voir PAS_mate (il ne faut que la dependance thermique)
  2346. ZMATT = 'REDU' WTAB.'MA_COMP' ZMODL;
  2347. 'FINS';
  2348. *
  2349. * ...cas SSTE...
  2350. 'SI' ISSTE;
  2351. ZRIKTA ZSIGF ZVARF ZDEIF =
  2352. 'SSTE' ZMODL ZSIG0a ZVAR0 DEPST ZMATT
  2353. ZPREK WTAB.'NMAXSUBSTEPS' NITMA;
  2354. zvar0 = ('EXCO' zvar0 ('ENLE' com_var ('DIME' com_var)))
  2355. 'ET' ('EXCO' zvarf ssii);
  2356. zvar0 = 'CHANGER' 'TYPE' zvar0 'VARIABLES INTERNES';
  2357. *
  2358. * ...cas non SSTE...
  2359. 'SINON';
  2360. *
  2361. * Gradient des deplacements (total) a la fin du pas de temps
  2362. * par rapport a la configuration de reference GEOREF0
  2363. 'SI' IGRD;
  2364. 'SI' ('NEG' ZGRDU0 'INCONNU');
  2365. 'SI' ('NEG' LAG_TOT 1);
  2366. geot = 'FORM';
  2367. 'FORM' GEOREF0 ;
  2368. 'FINS' ;
  2369. ZGRDUF = 'GRAD' ZMODL ZMAT2F ZDETOT ;
  2370. D_GR_U = ZGRDUF '-' ZGRDU0 ;
  2371. 'SI' ('NEG' LAG_TOT 1); 'FORM' GEOT; 'FINS';
  2372. 'FINS';
  2373. 'FINS';
  2374. *
  2375. ZSIG01 = ZSIG0a;
  2376. ZVAR01 = ZVAR0;
  2377. ZDEI01 = ZDEI0;
  2378.  
  2379. 'SI' (nsoincr 'NEG' 1);
  2380. ZSIGM = ZSIG0a '/' 2;
  2381. 'FINS';
  2382. *
  2383. 'REPETER' sousinc nsoincr;
  2384. *
  2385. codeb = 'FLOT' (&sousinc '-' 1) '/' nsoincr ;
  2386. cofin = 'FLOT' &sousinc '/' nsoincr ;
  2387. *
  2388. tsodeb = WTAB.'TEMPS0' '+' (ZDT '*' codeb) ;
  2389. tsofin = WTAB.'TEMPS0' '+' (ZDT '*' cofin) ;
  2390. 'SI' (knoconv '>' 1) ;
  2391. tsodeb = tsofin ;
  2392. 'FINS' ;
  2393. che1 = 'ADET' 'NOUV' ZMODL CHASANST tsodeb 'TEMP' tsodeb;
  2394. che2 = 'ADET' 'NOUV' ZMODL CHASANST tsofin 'TEMP' tsofin;
  2395. *
  2396. 'SI' ('EXIS' WTAB 'MOD_LIA') ;
  2397. vite1 = 'CHAN' 'COMP' conti.'VITESSES' MLPRIM_LIA MVPRIM_LIA ;
  2398. che1 = che1
  2399. 'ET' ('CHAN' 'CHAM' ZMODL vite1 'STRESSES')
  2400. 'ET' ('CHAN' 'CHAM' ZMODL conti.'DEPLACEMENTS' 'STRESSES');
  2401. che2 = che2
  2402. 'ET' ('CHAN' 'CHAM' ZMODL ZDETOT 'STRESSES')
  2403. 'ET' ('CHAN' 'CHAM' ZMODL ZFCONST1 'STRESSES');
  2404. 'FINS';
  2405.  
  2406. 'SI' ither ;
  2407. TETDE = ZTET1 + (DTETD '*' codeb) ;
  2408. TETDF = ZTET1 + (DTETD '*' cofin) ;
  2409. che3 = 'CHAN' 'CHAM' ZMODL TETDE 'STRESSES' ;
  2410. che4 = 'CHAN' 'CHAM' ZMODL TETDF 'STRESSES' ;
  2411. 'FINS' ;
  2412.  
  2413. che1 = che1 'ET' che3 ;
  2414. che2 = che2 'ET' che4 ;
  2415. aa5 = DEPST '*' codeb;
  2416. che5 = ZDEF0 '+' aa5;
  2417. cc5 = DEPST '*' cofin;
  2418. che6 = ZDEF0 '+' CC5;
  2419. *On met les deformations en tete des champs pour COMP ('KTAN' 'PERT')
  2420. che1 = che5 'ET' che1 ;
  2421. che2 = che6 'ET' che2 ;
  2422. * pour les materiaux on garde toujours la valeur a la fin du pas
  2423. * et au debut du pas
  2424. che1 = che1 'ET' ZMAT1 ;
  2425. *
  2426. * Modele NON LINEAIRE UTILISATEUR + GRANDES DEFORMATIONS
  2427. * On ajoute les gradients de deplacements qui seront transformes en
  2428. * gradients de transformation avant appel a UMAT (dans WKUMA1.ESO)
  2429. 'SI' (( 'NEG' ZGRDU0 'INCONNU') 'ET' igrd) ;
  2430. gru1 = ZGRDU0 + (D_GR_U '*' codeb) ;
  2431. che1 = che1 'ET' gru1 ;
  2432. gru2 = ZGRDU0 + (D_GR_U '*' cofin) ;
  2433. che2 = che2 'ET' gru2 ;
  2434. 'FINS';
  2435. *
  2436. 'SI' LNLOC ;
  2437. ISTEP = 1 ;
  2438. chm_z = 'ADET' 'NOUV' ZMODL CHASANST tsodeb 'STEP' ISTEP ;
  2439. Che1a = che1 ;
  2440. che1 = che1 'ET' chm_z ;
  2441. chm_z = 'ADET' 'NOUV' ZMODL CHASANST tsofin 'STEP' ISTEP ;
  2442. Che2a = che2 ;
  2443. che2 = che2 'ET' chm_z ;
  2444. 'FINS';
  2445. *
  2446. che11 = che1 'ET' ZSIG01 'ET' ZVAR01 'ET' ZDEI01 ;
  2447. che22 = che2 'ET' ZMATT ;
  2448. 'SI' PARTLOCA;
  2449. cha11 = 'ASSIS' 'TOUS' 'REDU' MODRELOC che11 ;
  2450. cha22 = 'ASSIS' 'TOUS' 'REDU' MODRELOC che22 ;
  2451. souci 0 ;
  2452. cho22 = 'ASSIS' 'TOUS' 'COMP' MODRELOC cha11 cha22 ;
  2453. isoucomp = souci ;
  2454. cho2 = 'REDU' ZMODL ('ETG' cho22) ;
  2455. cha11 = 0 ; cha22 = 0 ; cho22 = 0 ;
  2456. 'SINON';
  2457. souci 0 ;
  2458. cho2 = 'COMP' ZMODL che11 che22 ;
  2459. isoucomp = souci ;
  2460. 'FINS';
  2461. *
  2462. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2463. * DEBUT MODELE NON LOCAL
  2464. 'SI' LNLOC ;
  2465. ZVARF = 'CHANGER' ('EXCO' cho2 com_var 'NOID') 'TYPE' 'VARIABLES INTERNES' ;
  2466. * NLOC ne traitant pas des champs //, on reduit tout au modele initial.
  2467. 'SI' (PARALLEL 'ET' ('NON' PARTLOCA)) ;
  2468. ZVARF = 'REDU' ZVARF ZMODLI ;
  2469. 'FINS' ;
  2470.  
  2471. ********** boucle sous-iterations Helmholtz **************
  2472.  
  2473. * donnees pour acceleration Helmholtz
  2474. * periode de recours a l acceleration ACT3 pour Helmholtz
  2475. ZNACCEHL = 3;
  2476. * NBR min de sous-iterations d Helmholtz a faire avant d appeler ACT3 pour la 1ere fois
  2477. ITDEPHL = 4;
  2478.  
  2479. 'REPE' BIHL WTAB.'MAXSOUSITERATION' ;
  2480.  
  2481. 'SI' ('NEG' WTAB.'NON_LOCAL' 'HELM');
  2482. * cas non-local MOYE ou SB
  2483. 'SI' ('EGA' WTAB.'NON_LOCAL' 'SB') ;
  2484. MOD_SB = WTAB.'NLOC_MODL' ;
  2485. CONTP = 'PRIN' ('REDU' ZSIG01 MOD_SB) MOD_SB ;
  2486. ZVARF = ZVARF '+' CONTP '+' WTAB.'NLOC_SB_REGU' ;
  2487. 'FINS' ;
  2488. ZVARN = 'NLOC' ZVARF WTAB.'CONN' ;
  2489. ZVARN = 'CHANGER' ('EXCO' ZVARN com_var) 'TYPE' 'VARIABLES INTERNES' ;
  2490. LIERR1='PROG' 0 ;
  2491. LOGHLIN = VRAI ;
  2492. 'SINON' ;
  2493.  
  2494. * cas non-local HELM Sellier Millard
  2495. MOD_HELM = WTAB.'NLOC_MODL' ;
  2496. ZVARN = 'COPI' ZVARF ;
  2497. ZVARF1 = 'REDU' ZVARN MOD_HELM ;
  2498. LICOHELM = 'EXTR' ZVARF1 'COMP' ;
  2499. * (re) lecture du materiau si init ou evolutif
  2500. ZMATHL = PAS_MATE PRECED cho2 ;
  2501. * (re) calcul des matrices de rigidite de Helmholtz Sellier
  2502. PAS_HELM PRECED ZMATHL;
  2503. * variable pour la liste des residus de convergence sur Helmholtz
  2504. LIERR1='PROG';
  2505.  
  2506. * ----- debut boucle sur les formulations de Helmholtz ---
  2507. * on reste en lineaire si toutes les vari sont lineaires (sinon on aura des istep a 3)
  2508. LOGHLIN = VRAI ;
  2509. 'REPE' BH NHELM ;
  2510. LOGHLIN=LOGHLIN 'ET' TAHELM . &BH. 'LINEAIRE' ;
  2511. * nom de la variable a delocaliser
  2512. LEMO = TAHELM . &BH. 'NOM' ;
  2513. * recuperation de la variable sur le modele mecanique
  2514. ZVAUX = 'EXCO' ZVARF1 LEMO 'SCAL';
  2515. ZVAUX2 = 'CHAN' 'NOEUD' MOD_HELM ZVAUX;
  2516. * projection sur le modele de Helmholtz associe
  2517. ZVAUX2 = 'PROI' TAHELM . &BH . 'H_MODELE' ZVAUX2 'MINI';
  2518. * TRAC zvaux2 TAHELM . &BH . 'H_MODELE' titre ('CHAI' 'Vari a diffuser:'LEMO );
  2519. * la variable devient la source
  2520. FSOUR = 'SOUR' (TAHELM . &BH . 'H_MODELE') ZVAUX2 ;
  2521. * trac fsour (extr TAHELM . &BH . 'H_MODELE' 'MAIL') titre 'Source';
  2522. * trac (TAHELM . &BH . 'H_OPER') titre 'H_Oper';
  2523. * *** pour istep=1 *** 1ere etape non locale ***
  2524. 'SI' ('EGA' &BIHL 1) ;
  2525. * &BIHL est le compteur de sous iteration de Helmholtz
  2526. * il vaut forcement 1 si istep vaut 1, on fait la resolution classique
  2527. ZVNEW = 'RESO' (TAHELM . &BH . 'H_OPER') FSOUR ;
  2528. * sauvegarde pour possible acceleration ulterieure
  2529. TAHELM . &BH . 'XN' = ZVNEW ;
  2530. 'SINON';
  2531. * recuperation de la solution de la sous iteration de Helmholtz precedente
  2532. ZVNEW = TAHELM . &BH . 'XN' ;
  2533. 'FINSI';
  2534. * *** traitement non lineaire de la formulation ***
  2535. 'SI' ( 'NON' TAHELM . &BH . 'LINEAIRE' ) ;
  2536. * calcul du residu sur l evolution de la source
  2537. RESN = FSOUR - (TAHELM . &BH . 'H_OPER' '*' TAHELM . &BH . 'XN' );
  2538. * stockage du residu pour la mesure d erreur
  2539. RESN0='NOMC' RESN 'SCAL' ;
  2540. * normalisation des residus par l inverse de la capacite
  2541. * (calculee dans pas_helm.procedur)
  2542. ZERR0 = RESN0 '*' (TAHELM . &BH . 'INV_CAPA' );
  2543. * erreur residu
  2544. ZERR2 = 'MAXI' ( 'ABS' (ZERR0) );
  2545. * 'SI' ('EGA' &BIHL 1);
  2546. * TAHELM . &BH . 'RES1' = ZERR2;
  2547. * 'FINSI';
  2548. * carre de norme du residu
  2549. * ZERR1 = 'XTX' ZERR0;
  2550. * Residu
  2551. * ZERR2 = (ZERR1)**0.5;
  2552. * normalisation de la source par la capacite
  2553. ZERR3 = FSOUR '*' (TAHELM . &BH . 'INV_CAPA' )('MOTS' 'Q') ('MOTS' 'SCAL') ('MOTS' 'SCAL');
  2554. * calcul erreur
  2555. ZERR6 = 'MAXI' ( 'ABS' (ZERR3) );
  2556. * carre de la norme de la source
  2557. * ZERR5 = 'XTX' ZERR3;
  2558. * norme de la source
  2559. * ZERR6 = ZERR5 **0.5;
  2560. * valeur maximale du champs
  2561. * ZERR3='MAXI' (TAHELM . &BH . 'XN') 'ABS';
  2562. * mess 'variable Helmholtz', LEMO;
  2563. * mess 'residu', ZERR2;
  2564. * mess 'norme de la source ', ZERR5;
  2565. * mess 'norme Source', ZERR3;
  2566. * on teste si la valeur maximale est capable de normaliser
  2567. 'SI' (ZERR6 '>' 0.);
  2568. ZERR4 = ZERR2 '/' ZERR6;
  2569. 'SINON';
  2570. ZERR4 = ZERR2;
  2571. 'FINS';
  2572. * preparation acceleration
  2573. 'SI' ( 'EGA' &BIHL 1 ) ;
  2574. TAHELM . &BH . 'H_RESO' = TAHELM . &BH . 'H_OPER' ;
  2575. FWOR = FSOUR * 0. ;
  2576. TAHELM . &BH . 'ACFP1' = FWOR ;
  2577. TAHELM . &BH . 'ACFP2' = FWOR ;
  2578. TAHELM . &BH . 'RESNP' = FWOR ;
  2579. TAHELM . &BH . 'ACFP3' = FWOR ;
  2580. TAHELM . &BH . 'ACFEP1' = FWOR ;
  2581. TAHELM . &BH . 'ACFEP2' = FWOR ;
  2582. TAHELM . &BH . 'CORREC' = 0.;
  2583. 'SINON' ;
  2584. * acceleration de convergence act3
  2585. CORRECPHL = TAHELM . &BH . 'CORREC';
  2586. CORRECHL = 0;
  2587. ACFP0HL = RESN - TAHELM . &BH . 'RESNP' ;
  2588. ACFEP0HL = ACFP0HL - CORRECPHL ;
  2589. 'SI' ('MULT' &BIHL ZNACCEHL) ;
  2590. 'SI' (&BIHL > ITDEPHL);
  2591. CORRECHL = 'ACT3'
  2592. TAHELM . &BH . 'ACFEP2'
  2593. TAHELM . &BH . 'ACFEP1' ACFEP0HL
  2594. TAHELM . &BH . 'ACFP3'
  2595. TAHELM . &BH . 'ACFP2'
  2596. TAHELM . &BH . 'ACFP1' ACFP0HL ;
  2597. RESN = RESN - CORRECHL ;
  2598. 'FINS';
  2599. 'FINS';
  2600. TAHELM . &BH . 'RESNP' = RESN ;
  2601. TAHELM . &BH . 'ACFP3' = TAHELM . &BH . 'ACFP2' ;
  2602. TAHELM . &BH . 'ACFP2' = TAHELM . &BH . 'ACFP1' ;
  2603. TAHELM . &BH . 'ACFP1' = ACFP0HL ;
  2604. TAHELM . &BH . 'ACFEP2' = TAHELM . &BH . 'ACFEP1' ;
  2605. TAHELM . &BH . 'ACFEP1' = ACFEP0HL ;
  2606. * calcul correction delta-sigma
  2607. DZVN = 'RESO' TAHELM . &BH . 'H_RESO' RESN;
  2608. ZVNEW = ZVNEW + DZVN ;
  2609. TAHELM . &BH . 'XN' = ZVNEW ;
  2610. 'FINSI' ;
  2611. 'SINON';
  2612. * cette variable est traitee de facon lineaire
  2613. ZERR4=0.;
  2614. 'FINSI';
  2615. ZVNEW1 = 'NOMC' ZVNEW 'SCAL' ;
  2616. ZVNEW = 'CHAN' 'CHAM' ZVNEW1 MOD_HELM 'STRESSES' 'VARIABLES INTERNES';
  2617. * trac zvnew mod_helm titre 'ZVNEW';
  2618. DZVN = ZVNEW '-' ZVAUX ;
  2619. DZVN = 'NOMC' DZVN LEMO ;
  2620. ZVARN = ZVARN '+' DZVN ;
  2621.  
  2622. * mess 'Erreur retenue', ZERR4;
  2623. * stockage de l erreur normalisee dans la liste des erreurs
  2624. LIERR1 = LIERR1 'ET' ('PROG' ZERR4);
  2625.  
  2626. * cas particulier TWL2 Sellier theorie WL2
  2627. 'SI' ('EGA' LEMO 'TWL2') ;
  2628. ZSMAX = 'EXCO' ZVARF1 'SMAX' 'SMAX' ;
  2629. ZSMAN = 'MANU' 'CHML' MOD_HELM 'SMAX' ('MAXI' ZSMAX) 'TYPE' 'VARIABLES INTERNES' 'STRESSES' ;
  2630. ZVARN = ZVARN '+' ZSMAN '-' ZSMAX ;
  2631. 'FINS' ;
  2632. * ---- cas particulier SER Sellier renfort avec gradient
  2633. * calcul GRADIENT des contraintes sur les renforts (SERi)
  2634. * stockage dans la VARI HELM1(&BH,2) du gradient selon l absc curviligne
  2635. MOPRE = 'EXTR' LEMO 1 3 ;
  2636. 'SI' ('EGA' MOPRE 'SHR');
  2637. NUME='EXTR' LEMO 4;
  2638. NDIM1='VALE' 'DIME';
  2639. 'SI' ( 'EGA' NDIM1 3 );
  2640. * valeur SERi du pas precedent dans Helm(&bh,1)
  2641. LEMO1=CHAI 'H' &BH '1';
  2642. * valeur SERi du pas actuel
  2643. ZAUX1='EXCO' ZVARN LEMO 'SCAL';
  2644. ZVNEW1='NOMC' ZAUX1 'T' ;
  2645. ZVAUX1 = 'CHAN' 'NOEUD' MOD_HELM ZVNEW1;
  2646. ZVNEW2='PROI' TAHELM . &BH . 'H_MODELE' ZVAUX1 'MINI';
  2647. GRA1=GRAD TAHELM . &BH . 'H_MODELE' ZVNEW2;
  2648. GRA2=CHAN 'CHAM' 'NOEUD' GRA1 TAHELM . &BH . 'H_MODELE';
  2649. GRA3=PROI GRA2 MOD_HELM;
  2650. LMO3=EXTR GRA3 COMP;
  2651. NOM1=EXTR LMO3 1;
  2652. NOM2=EXTR LMO3 2;
  2653. NOM3=EXTR LMO3 3;
  2654. GRA11=EXCO NOM1 GRA3 'SCAL';
  2655. GRA22=EXCO NOM2 GRA3 'SCAL';
  2656. GRA33=EXCO NOM3 GRA3 'SCAL';
  2657. * recuperation vecteur direction de projection
  2658. LEMON1=CHAI 'VR' NUME '1';
  2659. NX1=EXCO LEMON1 ZMATHL 'SCAL';
  2660. NX1=CHAN 'NOEUD' NX1 MOD_HELM;
  2661. NX11=CHAN NX1 TYPE 'SCALAIRE';
  2662. LEMON2=CHAI 'VR' NUME '2';
  2663. NX2=EXCO LEMON2 ZMATHL 'SCAL';
  2664. NX2=CHAN 'NOEUD' NX2 MOD_HELM;
  2665. NX22=CHAN NX2 TYPE 'SCALAIRE';
  2666. LEMON3=CHAI 'VR' NUME '3';
  2667. NX3=EXCO LEMON3 ZMATHL 'SCAL';
  2668. NX3=CHAN 'NOEUD' NX3 MOD_HELM;
  2669. NX33=CHAN NX3 TYPE 'SCALAIRE';
  2670. * produit scalaire
  2671. ZVAUX3=(NX11*GRA11)+(NX22*GRA22)+(NX33*GRA33);
  2672. * stockage du gradient de epse dans YU2j
  2673. mot4=CHAI 'H' NUME '2';
  2674. zvaux5= 'NOMC' zvaux3 mot4;
  2675. zvaux6= 'CHAN' 'CHAM' zvaux5 MOD_HELM 'STRESSES' 'VARIABLES INTERNES';
  2676. * trac zvaux6 MOD_HELM titre '3D H2';
  2677. ZVAUX7 = 'EXCO' ZVARF1 MOT4 ;
  2678. DZVN = ZVAUX6 '-' ZVAUX7;
  2679. ZVARN = ZVARN '+' DZVN ;
  2680. 'SINON';
  2681. * valeur SERi du pas precedent dans Helm(&bh,1)
  2682. LEMO1=CHAI 'H' &BH '1';
  2683. ZAUX1='EXCO' ZVARF1 LEMO1 'SCAL';
  2684. ZVNEW1='NOMC' ZAUX1 'T' ;
  2685. ZVAUX1 = 'CHAN' 'NOEUD' MOD_HELM ZVNEW1;
  2686. ZVNEW2='PROI' TAHELM . &BH . 'H_MODELE' ZVAUX1 'MINI';
  2687. GRA1=GRAD TAHELM . &BH . 'H_MODELE' ZVNEW2;
  2688. GRA2=CHAN 'CHAM' 'NOEUD' GRA1 TAHELM . &BH . 'H_MODELE';
  2689. GRA3=PROI GRA2 MOD_HELM;
  2690. LMO3=EXTR GRA3 COMP;
  2691. NOM1=EXTR LMO3 1;
  2692. NOM2=EXTR LMO3 2;
  2693. GRA11=EXCO NOM1 GRA3 'SCAL';
  2694. GRA22=EXCO NOM2 GRA3 'SCAL';
  2695. * recuperation vecteur direction de projection
  2696. LEMON1=CHAI 'VR' NUME '1';
  2697. NX1=EXCO LEMON1 ZMATHL 'SCAL';
  2698. NX1=CHAN 'NOEUD' NX1 MOD_HELM;
  2699. NX11=CHAN NX1 TYPE 'SCALAIRE';
  2700. LEMON2=CHAI 'VR' NUME '2';
  2701. NX2=EXCO LEMON2 ZMATHL 'SCAL';
  2702. NX2=CHAN 'NOEUD' NX2 MOD_HELM;
  2703. NX22=CHAN NX2 TYPE 'SCALAIRE';
  2704. * produit scalaire
  2705. ZVAUX3=(NX11*GRA11)+(NX22*GRA22);
  2706. * stockage du gradient de epse dans YU2j
  2707. mot4=CHAI 'H' NUME '2';
  2708. zvaux5= 'NOMC' zvaux3 mot4;
  2709. zvaux6= 'CHAN' 'CHAM' zvaux5 MOD_HELM 'STRESSES' 'VARIABLES INTERNES';
  2710. * trac zvaux6 MOD_HELM titr '2DH2';
  2711. ZVAUX7 = 'EXCO' ZVARF1 MOT4 ;
  2712. DZVN = ZVAUX6 '-' ZVAUX7;
  2713. ZVARN = ZVARN '+' DZVN ;
  2714. 'FINSI';
  2715. 'FINSI';
  2716. * ------fin du calcul des gradients et Hessiens--------
  2717. 'FIN' BH ;
  2718. * ------fin boucle sur les formulations de Helmholtz ---
  2719. 'FINS' ;
  2720.  
  2721. * On rend ZVARN // si besoin :
  2722. 'SI' (PARALLEL 'ET' ('NON' PARTLOCA)) ;
  2723. ZVARN = 'REDU' ZVARN ZMODL ;
  2724. 'FINS' ;
  2725.  
  2726. * Recherche du residu maxi parmi les formulations non locales
  2727. ISTEP0=ISTEP;
  2728. * residu maxi de tous les Helmholtz actifs
  2729. ZERR6='MAXI' LIERR1;
  2730.  
  2731. 'SI' ('EGA' &BIHL WTAB.'MAXSOUSITERATION') ;
  2732. 'MESSAGE' ' SOUS ITERATION HELMHOLTZ CONVERGENCE FORCEE';
  2733. * on indique au modele de mecanique que la sous
  2734. * iteration de Helmholtz est achevee
  2735. ISTEP = 2 ;
  2736. 'SINON' ;
  2737. 'SI' ((( ZERR6 '<' WTAB.'PRECSOUSITERATION') 'ET' ('NEG' ISTEP 1)) 'OU' LOGHLIN ) ;
  2738. * on indique au modele de mecanique que la sous
  2739. * iteration de Helmholtz est achevee
  2740. ISTEP = 2 ;
  2741. 'SINON';
  2742. * on indique au modele de mecanique que les sous
  2743. * iterations de Helmholtz continuent
  2744. ISTEP = 3 ;
  2745. 'FINS';
  2746. 'FINS' ;
  2747. *
  2748. 'SI' ('EGA' ISTEP0 1);
  2749. mess1=chai ' SOUS ITERATION HELMHOLTZ:' &BIHL ' ISTEP:' ISTEP0 ;
  2750. 'SINON';
  2751. mess1=chai ' SOUS ITERATION HELMHOLTZ:' &BIHL ' ISTEP:' ISTEP0 ' CRITERE:' ZERR6;
  2752. 'FINSI';
  2753. 'MESSAGE' mess1 ;
  2754. *
  2755. chm_z = 'ADET' 'NOUV' ZMODL CHASANST tsodeb 'STEP' ISTEP ;
  2756. che11 = CHE1A 'ET' chm_z ;
  2757. che11 = che11 'ET' ZSIG01 'ET' ZVARN 'ET' ZDEI01 ;
  2758.  
  2759. chm_z = 'ADET' 'NOUV' ZMODL CHASANST tsofin 'STEP' ISTEP ;
  2760. che22 = CHE2A 'ET' chm_z ;
  2761. che22 = che22 'ET' ZMATT ;
  2762.  
  2763. 'SI' PARTLOCA ;
  2764. cha11 = 'ASSIS' 'TOUS' 'REDU' MODRELOC che11 ;
  2765. cha22 = 'ASSIS' 'TOUS' 'REDU' MODRELOC che22 ;
  2766. souci 0 ;
  2767. cho22 = 'ASSIS' 'TOUS' 'COMP' MODRELOC cha11 cha22 ;
  2768. isoucomp = souci ;
  2769. cho2 = 'REDU' ZMODL ('ETG' cho22) ;
  2770. cha11 = 0 ; cha22 = 0 ; cho22 = 0 ;
  2771. 'SINON';
  2772. souci 0 ;
  2773. cho2 = 'COMP' ZMODL che11 che22 ;
  2774. isoucomp = souci ;
  2775. 'FINS' ;
  2776. *
  2777. 'SI' ('EGA' ISTEP 2 );
  2778. 'QUITTER' BIHL;
  2779. 'FINS';
  2780. * fin de boucle sous-iterations
  2781. ZVARF = 'CHANGER' ('EXCO' cho2 com_var 'NOID') 'TYPE' 'VARIABLES INTERNES' ;
  2782. * NLOC ne traitant pas des champs //, on reduit tout au modele initial.
  2783. 'SI' (PARALLEL 'ET' ('NON' PARTLOCA)) ;
  2784. ZVARF = 'REDU' ZVARF ZMODLI ;
  2785. 'FINS' ;
  2786. 'FIN' BIHL ;
  2787. * ------ fin des sous iterations de Helmholtz ------
  2788.  
  2789. * Un peu de menage
  2790. CHE1A = 1 ;
  2791. CHE2A = 1 ;
  2792. ZVARN = 1 ;
  2793. ZVARF = 1 ;
  2794. chm_z = 1 ;
  2795. LIERR1 = 1 ;
  2796. ZMATHL = 1;
  2797. 'FINS' ;
  2798. * FIN MODELE NON LOCAL
  2799. *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2800. *
  2801. si isoucomp ;
  2802. mess ' Souci dans le comportement' ;
  2803. fins ;
  2804. ZSIGF = 'CHANGER' ('EXCO' cho2 com_sig 'NOID')'TYPE' 'CONTRAINTES' ;
  2805. ZVARF = 'CHANGER' ('EXCO' cho2 com_var 'NOID')'TYPE' 'VARIABLES INTERNES' ;
  2806. ZDEIF = 'CHANGER' ('EXCO' cho2 com_dei 'NOID')'TYPE' 'DEFORMATIONS INELASTIQUES' ;
  2807. *
  2808. 'SI' ('EXIS' WTAB 'MOD_LIA') ;
  2809. ZFLIA = 'EXCO' cho2 'FLIA' 'NOID';
  2810. 'FINS' ;
  2811. *
  2812. 'SI' (nsoincr 'NEG' 1);
  2813. 'SI' (&sousinc 'EGA' nsoincr);
  2814. aaa1=zsigf/2;
  2815. aaa2=aaa1+ zsigm;
  2816. 'DETR' aaa1; 'DETR' zsigm;
  2817. zsigm=aaa2;
  2818. 'SINON';
  2819. aaa2=zsigf+ zsigm;
  2820. 'DETR' zsigm;
  2821. zsigm=aaa2;
  2822. 'FINS';
  2823. 'FINS';
  2824. *
  2825. zsig01 = zsigf ;
  2826. ZVAR01 = ZVARF ;
  2827. ZDEI01 = ZDEIF ;
  2828. 'FIN' sousinc;
  2829. *
  2830. * Matrice tangente par perturbation evaluee pour la derniere iteration calculee
  2831. * A voir : cas grand deplacement ZSIGF et ZMAT2, cas poreux et thermique ZSIGF
  2832. 'SI' (IKTAN 'ET' IPERT) ;
  2833. Z1COMP = che11 ;
  2834. Z2COMP = che22 'ET' ZSIGF ;
  2835. 'FINS' ;
  2836. *
  2837. 'SI' (nsoincr 'NEG' 1);
  2838. * pour tenir compte de ce que le travail de la correction est 1/2 FU,
  2839. * on la multiplie par 2
  2840. CONT =(ZSIGF + ZSIG0a) ;
  2841. ZSIGM = ZSIGM*(2. /nsoincr) ;
  2842. ZSIGM = ZSIGM - CONT ;
  2843. BZSIGM='BSIG' ZMODL ZSIGM ZMAT2F ;
  2844. 'FINS';
  2845. zsig01=1;ZVAR01=1;ZDEI01=1;
  2846.  
  2847. * le fin d'en dessous est le fin de "si isste ... sinon ... finsi"
  2848. * on est encore dans "si iplavi ... finsi"
  2849. 'FINS';
  2850. *...fin du si ISSTE sinon ...
  2851. *
  2852. * cas particulier poreux et thermique
  2853. 'SI' ITHER;
  2854. 'SI' POR1 ;
  2855. ZSIGF = ZSIGF - ( COEPI * DMSRT0 ) ;
  2856. 'FINS';
  2857. 'FINS';
  2858. *
  2859. * max de epse pendant l'iteration
  2860. * nbre de points qui ont une evolution non lineaire
  2861. 'SI' ('NEG' WTAB.'MOVA' 'RIEN') ;
  2862. XXX1 = 'EXCO' (WTAB.'MOVA') ZVARF ;
  2863. ACC = 'ABS' ( XXX1 - ACC0 ) ;
  2864. MMC = 'MASQUE' ACC 'SUPERIEUR' 1.D-10 'SOMME' ;
  2865. 'SI' (MMC > MMCMAX) ; MMCMAX = MMC ; 'FINS' ;
  2866. 'FINS';
  2867. 'FINS';
  2868. *
  2869. * Exprimer l'increment de deformations et les contraintes sur la
  2870. * configuration GEOM1
  2871. DDEFT = DEPST ;
  2872. 'SI' (IGRD 'ET' iDEFOK) ;
  2873. * Lagrangien total : GEOREF0 -> GEOM1
  2874. 'SI' ('EGA' LAG_TOT 1);
  2875. 'FORM' GEOREF0 ;
  2876. DEPST = 'PICA' HYPDEF DEPST ZMODL ZDEP0;
  2877. ZSIGF = 'PICA' HYPDEF ZSIGF ZMODL ZDEP0;
  2878. 'FINS';
  2879. * Lagrangien fin pas : GEOM2 -> GEOM1
  2880. 'SI' ('EGA' LAG_TOT 2);
  2881. 'FORM' GEOM2 ;
  2882. DEPST = 'PICA' HYPDEF DEPST ZMODL (-1. '*' ZDEPT);
  2883. DDEFT = DEPST ;
  2884. ZSIGF = 'PICA' HYPDEF ZSIGF ZMODL (-1. '*' ZDEPT);
  2885. 'FINS';
  2886. * Lagrangien mi pas : GEOM2M -> GEOM1
  2887. 'SI' ('EGA' LAG_TOT 3);
  2888. 'FORM' GEOM2M ;
  2889. DEPST = 'PICA' HYPDEF DEPST ZMODL (-1. '*' ZDEPM);
  2890. DDEFT = DEPST ;
  2891. ZSIGF = 'PICA' HYPDEF ZSIGF ZMODL (-1. '*' ZDEPM);
  2892. 'FINS';
  2893. 'FORM' GEOM1;
  2894. 'FINS';
  2895. *
  2896. DPSMAX = 'MAXI' 'ABS' DEPST 'AVEC' MLDEFOR ;
  2897. ZDEFF = ZDEF0 '+' DDEFT ;
  2898. EPSM = 'MAXI' 'ABS' ZDEFF 'AVEC' MLDEFOR ;
  2899. 'DETR' EPSMX;
  2900. *
  2901. * Verifier si les deformations obtenues ne sont pas trop
  2902. * importantes
  2903. 'SI' (IGRD 'ET' (('NON' HPP_EPS) 'OU' (IT > 0 )));
  2904. ref = 20;
  2905. n_sous_dec = MAXI 1 (n_sous_dec - 3) (((dpsmax/1d-2) + 1) ENTIER);
  2906. n_sous_dec = MINI 10 n_sous_dec ;
  2907. ** mess 'sous decoupage pour epsi : ' n_sous_dec;
  2908. coefmul = 1.d0 / (DPSMAX + XPETIT);
  2909. 'SI' (((coefmul < ref) 'OU' PASUNIL) 'ET' AUTAUG);
  2910. 'MESS' 'annulation du sous-increment: trop grand ' dpsmax;
  2911. RE_CNTRL*'RIGIDITE' = (DEFO_IMP DEPST ZDEPT ZRAID 'ET' RE_CNTRL);
  2912. DE_CNTRL = 1 ;
  2913. * il faut reduire d'urgence les deplacements
  2914. coefmul = 0.0;
  2915. 'SI' ((red_urg > 3) 'ET' ('NON' instab));
  2916. resmul = resmul * ('MINI' 0.25 (1d-2 / dpsmax));
  2917. 'FINSI';
  2918. augmult = augmult * 1.5;
  2919. urg = vrai;
  2920. * on garde zdep1d pour le calcul des coeff d'acceleration
  2921. zdep1d = zdep1 'ENLE' 'LX';
  2922. 'SI' AUTAUG;
  2923. iraug = vrai ;
  2924. *pv itacc = 3;
  2925. 'FINSI';
  2926. 'SI' ((dpsmaxp < 5e-4) 'OU' (dpsmaxp > 2e-2 )) ;
  2927. PASTEST=VRAI;
  2928. 'SINON';
  2929. 'SI' (red_urg > 4); nconvr = vrai; 'FINSI';
  2930. 'FINSI';
  2931. 'SI' (RED_URG > 2 ) ;
  2932. 'SI' ('NON' nonconv);
  2933. 'MESS' ' non convergence detectee 1' ;
  2934. ZMAXIT = IT+5;
  2935. 'FINS';
  2936. nonconv = vrai;
  2937. 'FINS';
  2938. *pv itacc = 3;
  2939. 'SI' (resmul < 0.99);
  2940. resmul = resmul * ('MINI' 0.25 (1d-2 / dpsmax));
  2941. 'FINSI';
  2942. HPP_EPS = FAUX;
  2943. RED_URG = RED_URG + 1;
  2944. 'SI' ((dpsmaxp > 1.8d-2) 'ET' (augmult > 100));
  2945. zprecnc= 2.1d-2;
  2946. 'SI' (zmaxit > it) ;
  2947. zmaxit = it - 1;
  2948. 'FINSI';
  2949. 'FINSI';
  2950. 'SI' ((zmaxit > it) 'ET' (RED_URG > 4 )); ZMAXIT = IT-1; 'FINS';
  2951. 'ITERER' etiq;
  2952. 'SINON';
  2953. RE_CNTRL = 'VIDE' 'RIGIDITE' / 'RIGIDITE';
  2954. DE_CNTRL = 0;
  2955. 'FINS';
  2956. 'FINS';
  2957. *----------------------------------------------------------------------*
  2958. * Forces nodales equivalentes au champ de contraintes *
  2959. *----------------------------------------------------------------------*
  2960. 'SI' (IGRD 'ET' ('NON' HPP_EPS));
  2961. * Changer de GEOM1 -> GEOM2
  2962. ZSIGG = 'PICA' HYPDEF ZSIGF ZMODL ZDEPT ;
  2963. 'SOUC' 0;
  2964. 'SI' WTAB.'ITCAR';
  2965. GEOM2 ZMAT2F = 'FORM' ZDEPT ZMODLI ZMAT22;
  2966. ZMAT2F = 'REDU' ZMAT2F ZMODL ;
  2967. 'SINON';
  2968. GEOM2 = 'FORM' ZDEPT ;
  2969. 'FINS';
  2970. *HHO : Modifications appel a BSIGMA (ajout du champ de deplacements necessaire en HHO)
  2971. FEQU2 = 'BSIG' 'NOER' ZMODL ZSIGG ZMAT2F ZDETOT ;
  2972. PASOK = 'SOUCI';
  2973. 'SI' PASOK;
  2974. 'FORM' GEOM1;
  2975. MESS 'BSIG impossible : tentative sur geom1' ;
  2976. *HHO : Modifications appel a BSIGMA (ajout du champ de deplacements necessaire en HHO)
  2977. FEQU2 = 'BSIG' 'NOER' ZMODL ZSIGF ZMAT2F ZDETOT ;
  2978. pastest = vrai;
  2979. 'FINSI';
  2980. ZSIGF = ZSIGG ;
  2981. 'SINON';
  2982. *HHO : Modifications appel a BSIGMA (ajout du champ de deplacements necessaire en HHO)
  2983. FEQU2 = 'BSIG' ZMODL ZSIGF ZMAT2F ZDETOT ;
  2984. 'FINS';
  2985. *
  2986. 'SI' IRCON;
  2987. FEQU2 = FEQU2 '+' ('REDU' MAI_CONS (RIG_CONS '*' ZDETOT));
  2988. 'FINS';
  2989. *----------------------------------------------------------------------*
  2990. * Mise a jour des chargements dependants de la geometrie *
  2991. *----------------------------------------------------------------------*
  2992. iACTU = FAUX ;
  2993. 'SI' (LOGPRE 'ET' IGRD 'ET' ('NON' HPP_EPS)) ;
  2994. 'FORM' GEOM2 ;
  2995. 'SI' ('EXIS' WTAB 'MAT_PRE') ;
  2996. ZFPEXTF = 'BSIG' MOP ZPEXTF WTAB.'MAT_PRE' ;
  2997. 'SINON' ;
  2998. ZFPEXTF = 'BSIG' MOP ZPEXTF ;
  2999. 'FINS' ;
  3000. ZFSUIV = ZFPEXTF ;
  3001. iACTU = VRAI ;
  3002. 'FINS' ;
  3003. 'FORM' GEOM1 ;
  3004. *
  3005. 'SI' WTAB.'PROCEDURE_CHARMECA';
  3006. 'SI' (IGRD 'ET' ('NON' HPP_EPS)) ;
  3007. 'FORM' GEOM2 ;
  3008. 'FINSI' ;
  3009. TFP22 = CHARMECA PRECED TI ;
  3010. ADDISEC2 = 'EXIS' TFP22 'ADDI_SECOND' ;
  3011. 'SI' ADDISEC2 ;
  3012. FP22 = TFP22.'ADDI_SECOND' ;
  3013. 'SI' iACTU ;
  3014. ZFSUIV = ZFSUIV '+' FP22 ;
  3015. 'SINON';
  3016. ZFSUIV = FP22 ;
  3017. 'FINS';
  3018. 'FINS';
  3019. 'FINS' ;
  3020. 'FORM' GEOM1 ;
  3021. *
  3022. 'FINS';
  3023. * le finsi au dessus est le finsi de si ifefp
  3024. *
  3025. 'SI' ('EXIS' WTAB 'MOD_LIA') ;
  3026. FLIAI = 0.d0 ;
  3027. 'SI' ('EGA' ('TYPE' ZFLIA) 'MCHAML ') ;
  3028. NZLIA = 'EXTR' ZFLIA 'NBZO' ;
  3029. 'SI' (NZLIA > 0) ;
  3030. 'REPETER' BZLIA NZLIA ;
  3031. * un point support par zone - 2010 kich
  3032. FLIAI= FLIAI +
  3033. ('EXCO' ('EXTR' ZFLIA 'FLIA' &BZLIA 1 1) MLDUAL_LIA 'NOID') ;
  3034. 'FIN' BZLIA ;
  3035. 'FINS' ;
  3036. FEQU2 = FEQU2 + FLIAI ;
  3037. 'FINS' ;
  3038. 'FINS' ;
  3039. *
  3040. 'SI' ISOL ;
  3041. 'SI' IPLAVI ;
  3042. ZMATPF = 'CHANGER' ('EXCO' cho2 com_maa 'NOID')
  3043. 'TYPE' 'CARACTERISTIQUES';
  3044. MA_POR = 'REDU' ZMATPF MO_POR ;
  3045. 'FINS';
  3046. XXX1 = 'GRAD' MO_POR ZDETOT MA_POR 'CONS' ;
  3047. XXXS = (1. - WTAB.'TETA' )*GRAP0 + (WTAB.'TETA'*XXX1) ;
  3048. XXX2 = ZDT * ('GNFL' MO_POR XXXS) ;
  3049. XXX3 = FEQU2 ;
  3050. FEQU2 = XXX3 - XXX2;'DETR' XXX3; 'DETR' XXX2 ;
  3051. 'FINS' ;
  3052. *
  3053. * si on a fait de la sous incrementation ( a cause du dynamique
  3054. 'SI' (nsoincr > 1);
  3055. FEQU2 = FEQU2 + BZSIGM ;
  3056. 'FINS';
  3057. 'FINSI' ;
  3058. *FOR_MECA
  3059. *----------------------------------------------------------------------*
  3060. * Equilibre (RESIDC) et nouveau second membre (RESIDU) *
  3061. *----------------------------------------------------------------------*
  3062. * Ajout dans le residu de contributions propres a la dynamique :
  3063. * [ 4/h2*m + 2/h *c ] * du
  3064. 'SI' IDYN;
  3065. 'DETR' FFDYN;
  3066. FFDYN = 'COPIER' FEQU2 ;
  3067. XXX1 = WTAB.'MASSE' * ZDEPT;
  3068. XXX3 = 4. * UNSURH * UNSURH * XXX1 ;
  3069. 'DETR' XXX1;
  3070. 'SI' ('EXIS' WTAB 'MOD_LIA');
  3071. 'SI' (NZLIA > 0) ;
  3072. XVIT2 = 0.d0;
  3073. 'REPETER' BZLIA NZLIA ;
  3074. XVIT2 = XVIT2 +
  3075. ('EXCO' ('EXTR' ZFLIA 'FLIA' &BZLIA 1 1) MVPRIM_LIA MLPRIM_LIA 'NOID') ;
  3076. 'FIN' BZLIA ;
  3077. 'FINS' ;
  3078. 'FINS' ;
  3079. 'SI' ( 'NEG' WTAB.'AMORTISSEMENT' 'INCONNU') ;
  3080. XXX1 = WTAB.'AMORTISSEMENT' * ZDEPT;
  3081. XXX2 = 2. * UNSURH * XXX1 ;
  3082. XXX4 = XXX3 + XXX2 ;
  3083. XXX3 = XXX4 ;
  3084. 'FINS' ;
  3085. XXX4 = FEQU2 + XXX3;
  3086. 'DETR' XXX3 ; 'DETR' FEQU2 ;
  3087. FEQU2 = XXX4 ;
  3088. *
  3089. * forces correctrices en cas de liaison persistante :
  3090. * on veut avoir (forces inertielles + forces visqueuses) compatibles
  3091. * avec accelerations et vitesses relatives nulles aux points de contact
  3092. * (pendant le contact). On modifie fequ2 ---> residu et l'iteration sui
  3093. * fournira les bonnes reactions
  3094. *
  3095. 'SI' IMPLP;
  3096. VADD XXX3 = VITETFOR ZRAID_T WTAB FCORU ;
  3097. XXX4 = FEQU2 - XXX3;
  3098. 'DETR' XXX3 ; 'DETR' FEQU2 ;
  3099. FEQU2 = XXX4;
  3100. 'FINS' ;
  3101. 'FINS';
  3102. *
  3103. 'SI' WTAB.'FOR_MECA' ;
  3104. XXX1 = ZFEXT ;
  3105. XXX1 = XXX1 '+' (ZFSUIV '*' COEPI) ;
  3106. *
  3107. * Modification du chargement
  3108. 'SI' LOGPIL ;
  3109. XXX1 = XXX1 '+' (ETA '*' ZFPILIN);
  3110. 'FINSI' ;
  3111. *
  3112. * Forces exterieures (+ autres termes p.ex. en dynamique ou poreux)
  3113. * sans reactions - forces interieures
  3114. RESIDU = XXX1 '-' FEQU2;
  3115. *
  3116. * Forces exterieures (+ autres termes p.ex. en dynamique ou poreux)
  3117. * + reactions
  3118. FEQUI = XXX1 '-' FCORF;
  3119. *
  3120. * Forces exterieures (+ autres termes p.ex. en dynamique ou poreux)
  3121. * + reactions - forces interieures
  3122. RESIDC = RESIDU '-' FCORF;
  3123. *
  3124. * Mise a jour des jeux (FLX) qui travaillent en incremental :
  3125. * - pour les depl imposes cela revient a imposer un increment nul
  3126. * - pour les rela unilaterales cela revient a mettre a jour le jeu
  3127. 'SI' (IPILOT 'ET' IMPO12);
  3128. RESIDU = 'ENLE' RESIDU 'FLX' ;
  3129. XJEUX = (DUIMPO '*' COEPI) '+' DUUNIL ;
  3130. XXX3 = XJEUX '-' FCORU ;
  3131. RESIDU = RESIDU '+' XXX3 ;
  3132. 'SINON' ;
  3133. XXX1 = RESIDU '+' ZFLX1; 'DETR' RESIDU;
  3134. RESIDU = XXX1 '-' FCORU; 'DETR' XXX1;
  3135. 'FINS';
  3136. *----------------------------------------------------------------------*
  3137. * Calcul du nouveau alpha pour le pilotage
  3138. *----------------------------------------------------------------------*
  3139. 'SI' (IPILOT 'ET' PASTEST) ;
  3140. *
  3141. 'SI' ('OU' IVISCO IVIDOM ITHER LOGDEF);
  3142. 'MESS' 'ALPHA calcule avec la norme de l increment' ;
  3143. COEPI0 = COEPI;
  3144. COEPI = 'MINI' ('PROG' 1. (ZAUTOCOEF * al1) );
  3145. * les acceleration auront lieu toutes les 4 pas
  3146. COEINC = COEPI0 - COEPI ;
  3147. 'SINON' ;
  3148. * Les multiplicateurs sont affectes d'un signe -
  3149. XXX4 = ZDEPT '-' (2.D0 '*' ('EXCO' ZDEPT 'LX' 'NOID' 'LX'));
  3150. XXX5 = RESIDNOR* 1.D0;
  3151. XXX6 = DFEXT0L ;
  3152. 'SI' IMPO12 ;
  3153. XXX5 = XXX5 - DUUNIL ;
  3154. XXX6 = DUIMPO ;
  3155. 'FINS';
  3156. XXX3 = COEPI * ( 1 - AL1 ) * XXX6 ;
  3157. XXX2 = XXX3 + RESIDC ; 'DETR' XXX3;
  3158.  
  3159. XX1 ='XTY' XXX2 XXX4 MLDUAL MLPRIM;
  3160. XX2 ='XTY' XXX5 XXX4 MLDUAL MLPRIM;
  3161. COEINC = XX1 '/' XX2;
  3162. 'DETR' XXX4;'DETR' XXX2;'DETR' XXX5;
  3163. *
  3164. COEPI0 = COEPI;
  3165. COEPI = 'MINI' ('PROG' (COEPI0 - COEINC) 1.d0 ) ;
  3166. 'SI' ((COEPI0 'EGA' 1d0) 'ET' (AL1 'EGA' 1D0));
  3167. COEPI = 1d0;
  3168. 'FINS';
  3169. COEINC = COEPI0 - COEPI;
  3170. 'SI' ((COEPI 'EGA' 1d0) 'ET' (COEPI0 'NEG' 1d0));ITACC=3; 'FINS';
  3171. 'FINS' ;
  3172.  
  3173. * Mise a jour des termes force de l'acceleration de convergence
  3174. XXXZ = RESIDNOR ;
  3175. 'SI' WTAB.'PROCEDURE_CHARMECA';
  3176. XXXZ = RESIDNOR '+' (FP22 '-' FP022) ;
  3177. 'FINS';
  3178. XXX1 = 'ENLE' (COEINC '*' XXXZ) 'FLX' ;
  3179. XXX3 = ACFEP2 - XXX1 ;
  3180. XXX4 = ACFEP1 - XXX1 ;
  3181. 'DETR' ACFEP2; ACFEP2= XXX3;
  3182. 'DETR' ACFEP1; ACFEP1= XXX4;
  3183. 'DETR' XXX1;
  3184. *
  3185. * mise a jour de ZFEXT en fonction de coepi on ne met a jour
  3186. * de maniere definitive que les forces, les modifs sur les FLX
  3187. * pour reimposer les conditions de deplacements ne
  3188. * sont faites que pour le premier residu attention au cas des jeux
  3189. * sortis de IMPO qu'il ne faut pas toucher
  3190. *
  3191. DFEXT = DFEXT0F '*' COEPI ;
  3192. ZFEXT = DFEXT '+' FEXT0 ;
  3193. XXX2 = ZFEXT '+' (COEPI '*' ZFSUIV) ;
  3194. XXX1 = XXX2 - FEQU2;
  3195. *
  3196. XXX3 = COEPI * DFEXT0L;
  3197. XXX3 = XXX3 + FLXINI - FCORU;
  3198. RESIDU = XXX1 + XXX3;
  3199. 'SI' IMPO12;
  3200. RESIDU = 'ENLE' RESIDU 'FLX' ;
  3201. XXX3 = COEPI '*' DUIMPO ;
  3202. RESIDU = RESIDU + XXX3 '+' DUUNIL ;
  3203. 'FINS';
  3204. *
  3205. ZAUTOCOEF = COEPI ;
  3206. *
  3207. * test si on est sur une branche descendante
  3208. * corprec est la correction de precision
  3209. CORPREC = 1. ;
  3210. 'SI' (COEPI < 0) ;
  3211. CORPREC = WTAB.'PRECDECHARGE' / ZPREC;
  3212. 'MESS' 'Chargement decroissant. Critere divise par ' CORPREC;
  3213. 'FINS';
  3214. 'MESS' 'nouvelle valeur de ALPHA' COEPI;
  3215. 'FINS' ;
  3216. 'DETR' FCORU;
  3217. *----------------------------------------------------------------------*
  3218. * Critere pour statuer de la convergence ou non *
  3219. *----------------------------------------------------------------------*
  3220. XNUMF = 'MAXI' RESIDC 'ABS' 'SANS' MXMFLX;
  3221. XNUMG = 'MAXI' ((ZDEPL '-' ZDEPLP) '*' ZCLIM) 'ABS';
  3222. XNUMF = 'MAXI' ('PROG' XNUMF XNUMG);
  3223. 'SI' TSTMOM ;
  3224. XNUMM = 'MAXI' RESIDC 'ABS' 'AVEC' MXMYMZ;
  3225. 'FINS';
  3226. *
  3227. ZFAU1 = FEQUI '-' ZFPLO ;
  3228. XAUXF = 'MAXI' ZFAU1 'ABS' 'SANS' MXMFLX;
  3229. 'SI' TSTMOM ;
  3230. XAUXM = 'MAXI' ZFAU1 'ABS' 'AVEC' MXMYMZ;
  3231. 'FINS';
  3232. *
  3233. 'SI' IFTOL;
  3234. ZPREC = ZFTOL ;
  3235. XDENO = 1.;
  3236. 'FINS';
  3237. 'SI' IMTOL;
  3238. ZPRECM = ZMTOL ;
  3239. XDENOM = 1.;
  3240. 'FINS';
  3241. *
  3242. XCONV = XNUMF '/' XDENO ;
  3243. XCONVM = XCONV ;
  3244. *
  3245. 'SI' TSTMOM ;
  3246. 'SI' ('<' XAUXM XPETIT) ;
  3247. XCONVM = 0.;
  3248. 'SINON';
  3249. 'SI' ('<' (XAUXF / XAUXM) 1.D-12) ;
  3250. XCONV = 0.;
  3251. 'FINS';
  3252. XCONVM = XNUMM / XDENOM ;
  3253. 'FINS';
  3254. 'FINS' ;
  3255.  
  3256. * residu etant calcule on met a jour zdep1d qui doit etre coherent avec residu
  3257. zdep1d = zdep1 'ENLE' 'LX';
  3258. **
  3259. 'FINSI' ;
  3260. *FOR_MECA
  3261. *
  3262. 'SI' WTAB.'NVSTNL' ;
  3263. ZFLCONV = FAUX ;
  3264. mofofl = 'EXTR' WTAB.'MOD_NSL' 'FORC ' ;
  3265. dvit2 = 'XTX' ('EXCO' ZVIF1 movifl) ;
  3266. err = dvit2 '**' 0.5 ;
  3267. res2 = 'XTX' ('EXCO' Resnsl mofofl 'NOID') ;
  3268. errres2 = res2 **0.5 ;
  3269. 'MESSAGE' ' ite:' IT*26 ' errdu:' err*52 ' errres:' errres2*78 ;
  3270. 'SI' (err < 1.d-9); ZFLCONV = VRAI ; 'FINSI';
  3271. 'SI' (ZFLCONV 'OU' (it '>EG' WTAB.'MAXSOUSPAS')) ;
  3272. 'QUITTE' ETIQ ; 'FINSI' ;
  3273. 'FINSI' ;
  3274. *----------------------------------------------------------------------*
  3275. * resume de l'iteration *
  3276. *----------------------------------------------------------------------*
  3277. 'SI' WTAB.'FOR_MECA' ;
  3278. 'MESS' IT*13 MMC*26 XCONV*39 DPSMAX*52 EPSM*65 XCONVM*78 ;
  3279. * sauver depstp pour le test increment de deformation
  3280. depstps = depstp;
  3281. * acceptation de l'etat courant pour le sous pas suivant
  3282. depstp zdeptp zsigfp fcorfp correcp = depst zdept zsigf fcorf correc;
  3283. *----------------------------------------------------------------------*
  3284. * test de convergence : equilibre de la structure *
  3285. *----------------------------------------------------------------------*
  3286. TABCONV.IT=XCONV;
  3287. 'SI' nconvr;
  3288. 'MESS' 'non convergence due a une reduction d urgence ';
  3289. ZICONV = FAUX;
  3290. 'QUITTER' etiq;
  3291. 'FINSI';
  3292. *
  3293. 'SI' IPILOT;'SI' ((MMC 'EGA' 0) 'ET' (MMCMAX > 0.) 'ET' (COEPI < 0.));
  3294. * on refuse de converger si on est elastique et en decharge
  3295. COEPI = 'ABS' COEPI;PASTEST = VRAI;
  3296. 'FINS'; 'FINS';
  3297. *
  3298. * Si frottement, faire au moins 2 iterations
  3299. 'SI' (WTAB.'CAFROTTE' 'ET' IMPO12 'ET' (IT < 2 ));
  3300. PASTEST = VRAI;
  3301. 'FINS';
  3302. *
  3303. PASUNIL = FAUX;
  3304. 'SI' ('EXIS' ZRAID_T 'OK');
  3305. PASUNIL = 'NON' ZRAID_T.'OK' ;
  3306. 'FINS';
  3307. *
  3308. 'SI' (('NON' PASTEST) 'ET'
  3309. (('NON' IRAUG) 'OU' ((it > 1) 'OU' (DPSMAX > 1e-3))));
  3310. * Variation de Despi entre 2 itérés
  3311. DEPSTD = DEPST - DEPSTPS ;
  3312. DEPSTDM = 'MAXI' 'ABS' DEPSTD 'AVEC' MLDEFOR;
  3313. * on ne peut pas tester la convergence apres une acceleration
  3314. * ni apres une initialisation a partir de la solution precedente
  3315. 'SI' ( (IT > 1) 'OU' ('NON' INIT) ) ;
  3316. * si les criteres (deplacements + moments) sont < precision
  3317. * et la variation sur Depsi est < precision souhaitee : on a convergé!
  3318. ZPRECHPP = ZPREC;
  3319. SI HPP_EPS; ZPRECHPP = ZPREC * 1d-1; 'FINSI';
  3320.  
  3321. 'SI' ( XCONV < (ZPRECHPP * CORPREC )) ;
  3322. 'SI' ( XCONVM < (ZPRECM * CORPREC )) ;
  3323. 'SI' ( DEPSTDM < (ZPRECHPP * CORPREC )) ;
  3324.  
  3325. 'SI' (WTAB.'CONTACT' 'ET' ('NON' HPP_EPS) 'ET' ('NON' NONCONV));
  3326. 'SI' (('NON' WTAB.'MODAL') 'ET' ('NON' WTAB.'FROCABL'));
  3327. MODCON = WTAB.'MODCONTA';
  3328. 'FORM' ZDEPT ;
  3329. 'SI' ('EXIS' WTAB 'MATCONTA') ;
  3330. WTAB.'MATCONTA'= 'REDU' MODCON WTAB.'MATCONTA';
  3331. CJEU CRRN = 'RFCO' MODCON WTAB.'CONV' WTAB.'MATCONTA' ;
  3332. 'SINON' ;
  3333. CJEU CRRN = 'RFCO' MODCON WTAB.'CONV' ;
  3334. 'FINS';
  3335. 'FORM' GEOM1 ;
  3336. ZDLX = 'EXCO' ZDEPT 'LX' 'NOID' 'LX' ;
  3337. *
  3338. REA1 = 'REAC' CRR ZDLX ;
  3339. CMPF = 'EXTR' REA1 'COMP' ;
  3340. PSC1 = 'PSCA' REA1 CMPF REA1 CMPF ;
  3341. NOR1 = 'MAXI' 'ABS' PSC1 ;
  3342. *
  3343. 'SI' ('>' NOR1 XDENO) ;
  3344. REA2 = 'REAC' CRRN ZDLX ;
  3345. DREA = REA2 '-' REA1 ;
  3346. PSC2 = 'PSCA' DREA CMPF DREA CMPF ;
  3347. *
  3348. RAP4 = ('MAXI' 'ABS' PSC2) '/' NOR1 ;
  3349. *
  3350. 'SI' ('>EG' RAP4 ZPREC) ;
  3351. 'MESS' 'Actualiser les conditions de contact-frottement' rap4 nor1;
  3352. URG = VRAI;
  3353. ZRIBLO_M = 'MOT' 'INCONNU' ;
  3354. ITACC=4;
  3355. DLTAIT = WTAB.'DELTAITER' '+' IT ;
  3356. XCONVREF = 1E50;
  3357. 'SI' autaug; iraug = faux; 'FINSI';
  3358.  
  3359. 'ITERER' ETIQ ;
  3360. 'FINSI' ;
  3361. 'FINSI' ;
  3362. 'FINSI' ;
  3363. 'FINSI' ;
  3364. *
  3365. 'SI' PASUNIL ;
  3366. 'MESS' ' ****** NON CONVERGENCE DE CONTACT A L''ITERATION' ' ' IT ;
  3367. ZICONV = FAUX;
  3368. 'SI' HPP_EPS; itacc=4; 'FINSI';
  3369. hpp_eps = faux;
  3370. 'QUITTER' ETIQ;
  3371. 'FINS';
  3372. *
  3373. 'SI' (IRAUG 'ET' AUTAUG 'ET' ((DPSMAX > ZPREC ) 'OU' (augmult > 0.6e0)) 'OU' (resmul < 0.99));
  3374. 'MESS' ' ****** NON CONVERGENCE DUE A L AUGMENTATION A L''ITERATION' ' ' IT ;
  3375. ZICONV = FAUX;
  3376. 'QUITTER' ETIQ;
  3377. 'FINS';
  3378. *
  3379. 'SI' (('NON' HPP_EPS) et ('NON' isoucomp)) ;
  3380. 'MESS' ' ****** CONVERGENCE A L ITERATION' ' ' IT ' SOUS-PAS' ' ' WTAB.'ISOUSPAS';
  3381. 'MESS' ' ';
  3382. * on sauve le nombre de points plastique
  3383. ZNBPLAS = MMC ;
  3384. ZNITE = ZNITE '+' IT;
  3385. 'QUITTE' ETIQ ;
  3386. 'SINON';
  3387. CORPREC = 1;
  3388. ITACC = 4;
  3389. HPP_EPS = FAUX;
  3390. XCONVMIN = 1e20;
  3391. 'REPETER' tabraz it;
  3392. tabconv.&tabraz = 1;
  3393. 'FIN' tabraz;
  3394. PASTEST = VRAI;
  3395. si IGRD ; 'MESS' ' passage en grands deplacements'; fins ;
  3396. 'SI' autaug; iraug = faux; 'FINSI';
  3397. URG = VRAI;
  3398. 'FINS';
  3399. 'FINS';
  3400. 'FINS';
  3401. 'FINS';
  3402. 'FINS' ;
  3403. 'FINS' ;
  3404. *----------------------------------------------------------------------*
  3405. * test de non convergence
  3406. *----------------------------------------------------------------------*
  3407. XCONVREF=1E50;
  3408. 'SI' (IT > DLTAIT);
  3409. XCONVREF=TABCONV.(IT-DLTAIT) * 0.99;
  3410. 'FINS';
  3411. 'SI' (('NON' PASTEST) 'ET' (XCONV < XCONVMIN));
  3412. XCONVMIN = XCONV;
  3413. 'SI' (XCONVMIN < ZPREC); XCONVMIN=ZPREC; 'FINS';
  3414. 'FINS';
  3415. * si on a depasse le nombre max d'iterations ou si le residu augmente
  3416. * ou si on aurait du converger et que cela n'est pas le cas :
  3417. * => non convergence detectee !
  3418. 'SI'(IT '>EG' ZMAXIT 'OU' (XCONV > XCONVREF) 'OU'
  3419. ((XCONV < ZPRECHPP) 'ET' ( XCONVM < ZPRECHPP) 'ET' (DEPSTDM < ZPRECHPP))
  3420. 'ET' ('NON' PASTEST) 'ET' ('NON' NONCONV) 'ET' ( IT > 1)
  3421. 'ET' ('NON' IPILOT) 'ET' ('NON' PASUNIL));
  3422. 'MESS' ' non convergence detectee 2' ;ZMAXIT = 3 * IT;
  3423. * test pv
  3424. **
  3425. HPP_EPS=FAUX;
  3426. URG = VRAI;
  3427. COEPI = WTAB.'RELAXATION_NONCONV';
  3428. ZAUTOCOEF = COEPI ;
  3429. NONCONV = VRAI;
  3430. itacc=4;
  3431. 'SI' (COEPI < 0.99999); ZICONV = FAUX; 'FINS';
  3432. ITNV=IT;
  3433. 'FINS';
  3434. *
  3435. * Changement de la precision en non convergence
  3436. 'SI' nonconv ;
  3437. * 'SI' (it > (zmaxit *2 /3));
  3438. 'SI' (it > 15);
  3439. zprecnc=zprecnc*2;
  3440. 'FINS';
  3441. 'FINS';
  3442. *
  3443. 'SI' ('NON' PASTEST 'ET' (dpsmax < zprecnc));
  3444. 'SI' ((IT '>EG' ZMAXIT) 'ET' ('NON' IPREM)
  3445. 'OU' (NONCONV
  3446. 'ET' ('NON' PASTEST)
  3447. 'ET' (XCONV '>' XCONVREF)
  3448. 'ET' (DPSMAX '>EG' (DPSMAXP /4 ))
  3449. 'ET' (ITNV 'NEG' IT)) );
  3450. 'MESS' ' ****** NON CONVERGENCE A L''ITERATION' ' ' IT ' SOUS-PAS' ' ' WTAB.'ISOUSPAS';
  3451. ZICONV = FAUX;
  3452. 'QUITTER' ETIQ;
  3453. 'FINS' ;
  3454. 'FINS' ;
  3455. *
  3456. 'DETR' FEQU2;
  3457. *
  3458. *KTAN*DEBUT*************************************************************
  3459. * EVALUATION DE LA MATRICE TANGENTE SI DEMANDEE
  3460. 'SI' IKTAN ;
  3461. 'SI' ('NON' IFEFP) ;
  3462. 'SI' ('MULT' IT WTAB.'NITER_KTANGENT') ;
  3463. 'SI' (IGRD 'ET' ('NON' HPP_EPS));
  3464. 'FORM' GEOM2 ;
  3465. 'FINS' ;
  3466.  
  3467. 'SI' ('NON' ISSTE) ;
  3468. 'SI' IPERT ;
  3469. 'SI' PARTLOCA ;
  3470. cha1 = 'ASSIS' 'TOUS' 'REDU' MODRELOC Z1COMP ;
  3471. cha2 = 'ASSIS' 'TOUS' 'REDU' MODRELOC Z2COMP ;
  3472. zktap = 'ASSIS' 'TOUS' 'KTAN' 'PERT' MODRELOC cha1 cha2
  3473. 'C1' WTAB.'K_TANG_PERT_C1'
  3474. 'C2' WTAB.'K_TANG_PERT_C2'
  3475. ZKTASYM ;
  3476. ZRIKTA = 'ET' zktap ;
  3477. 'SINON';
  3478. ZRIKTA = 'KTAN' 'PERT' ZMODL Z1COMP Z2COMP
  3479. 'C1' WTAB.'K_TANG_PERT_C1'
  3480. 'C2' WTAB.'K_TANG_PERT_C2'
  3481. ZKTASYM ;
  3482. 'FINS';
  3483. 'SINON' ;
  3484. 'SI' ('ET' ('NON' IVISCO) ('NON' IVIDOM)) ;
  3485. DTTAN = 0. ;
  3486. 'SINON' ;
  3487. DTTAN = ZDT ;
  3488. 'FINS' ;
  3489. ZRIKTA = 'KTAN' ZMODL ZSIGF ZVARF ZMAT2F
  3490. 'PREC' ZPREK 'DT ' DTTAN ZKTASYM ;
  3491. 'FINS' ;
  3492. 'FINS' ;
  3493.  
  3494. 'SI' IKSIA ;
  3495. ZKSIG = 'KSIGMA' ZMODL ZSIGF ZMAT2F ;
  3496. ZRIKTA = ZRIKTA 'ET' ZKSIG ;
  3497. 'FINS' ;
  3498.  
  3499. ZRAID = ZRIKTA 'ET' ZCLIM ;
  3500.  
  3501. 'SI' IGRD ; 'FORM' GEOM1 ; 'FINS' ;
  3502.  
  3503. IKT = VRAI ;
  3504.  
  3505. 'FINS' ;
  3506. 'FINS' ;
  3507. 'FINS' ;
  3508. *KTAN*FIN***************************************************************
  3509. *
  3510. 'DETR' ZDEFF;
  3511. *
  3512. * Supprimer les configurations intermediaires
  3513. 'SI' (IGRD 'ET' ('NON' HPP_EPS));
  3514. 'DETR' GEOM2 ;
  3515. 'FINS' ;
  3516. *
  3517. 'SI' IFEFP ;
  3518. 'DETR' ZRIKTA ; 'DETR' GEOM2;
  3519. 'FINS' ;
  3520. *
  3521. 'FINSI' ;
  3522. *FOR_MECA
  3523. *
  3524. IPREM = FAUX;
  3525. *
  3526. dpsmaxp = dpsmax;
  3527. *
  3528. 'FIN' ETIQ ;
  3529. *----------------------------------------------------------------------*
  3530. * Fin de la boucle de convergence ETIQ *
  3531. *----------------------------------------------------------------------*
  3532. *######################################################################*
  3533. 'SI' IDYN ;
  3534. VITI = UNSURH * 2. * ZDEPT - conti. 'VITESSES' ;
  3535. VITI = 'ENLE' VITI 'LX' ;
  3536. ZFP = ZDYFEXT '+' ZFSUIV '-' FFDYN;
  3537. *
  3538. 'SI' ('EXIS' WTAB 'MOD_LIA');
  3539. 'SI' ('EXIS' WTAB.'MOD_LIA' 'MATE' 'NEWMARK') ;
  3540. 'SI' ('EGA' 'CHPOINT ' ('TYPE' FLIAI) ) ;
  3541. MODNEW = 'EXTR' WTAB.'MOD_LIA' 'MATE' 'NEWMARK' ;
  3542. MAUNEW = 'EXTR' MODNEW 'MAIL' ;
  3543. 'SI' ('EXIS' ZFLIA MODNEW) ;
  3544. ZFLIANEW = 'REDU' ZFLIA MODNEW ;
  3545. NZNEW = 'EXTR' ZFLIANEW 'NBZO' ;
  3546. ZFPNW = 0. ; XVITW = 0. ;
  3547. 'REPETER' BZLIAW NZNEW ;
  3548. * un point support par zone - 2010 kich
  3549. ZFPNW = ZFPNW +
  3550. ('EXCO' ('EXTR' ZFLIANEW 'FLIA' &BZLIAW 1 1) MLDUAL_LIA 'NOID') ;
  3551. XVITW = XVITW +
  3552. ('EXCO' ('EXTR' ZFLIANEW 'FLIA' &BZLIAW 1 1) MVPRIM_LIA MLPRIM_LIA 'NOID') ;
  3553. 'FIN' BZLIAW ;
  3554. ZFP = ZFP + ZFPNW ;
  3555. 'FINS' ;
  3556. 'FINS' ;
  3557. 'FINS' ;
  3558.  
  3559. 'SI' (NZLIA > 0) ;
  3560. XVIT2 = 0.d0;
  3561. 'REPETER' BZLIA NZLIA ;
  3562. XVIT2 = XVIT2 +
  3563. ('EXCO' ('EXTR' ZFLIA 'FLIA' &BZLIA 1 1) MVPRIM_LIA MLPRIM_LIA 'NOID') ;
  3564. 'FIN' BZLIA ;
  3565. 'SI' ('EGA' ('TYPE' XVIT2) 'CHPOINT ') ;
  3566. MAAUT2 = 'DIFF' ('EXTR' VITI 'MAIL') ('EXTR' XVIT2 'MAIL') ;
  3567. VITI = ('REDU' VITI MAAUT2) + XVIT2 ; 'DETR' XVIT2 ;
  3568. 'SI' ('EGA' ('TYPE' XVITW) 'CHPOINT ') ;
  3569. MAAUT3 = 'DIFF' ('EXTR' VITI 'MAIL') ('EXTR' XVITW 'MAIL');
  3570. VITI = ('REDU' VITI MAAUT3) + XVITW ; 'DETR' XVITW ;
  3571. 'FINS' ;
  3572. 'FINS' ;
  3573. 'DETR' FLIAI ;'DETR' ZFLIA ;
  3574. 'FINS' ;
  3575. 'FINS' ;
  3576. *DMODI_NB
  3577. ZVITET = VITI - conti. 'VITESSES';
  3578. ACCEI = UNSURH * 2. * ZVITET - conti.'ACCELERATIONS';
  3579. ACCEI = 'ENLE' ACCEI 'LX' ;
  3580. *FMODI_NB
  3581. 'FINS' ;
  3582. *
  3583. 'SI' WTAB.'NVSTNL' ;
  3584. estim.'VITESSES_FLUIDE_0' = estim.'VITESSES_FLUIDE' ;
  3585. estim.'VITESSES_FLUIDE' = ZVIFL ;
  3586. 'SI' ('NON' ('EXISTE' WTAB 'QNSL')) ;
  3587. WTAB.'QNSL' = 'MASSE' 'PRES' WTAB.'MOD_NSL' WTAB.'MAT_NSL' ;
  3588. 'FINSI' ;
  3589. QNSL = WTAB.'QNSL' ;
  3590. FPREFL = 'PROI' WTAB.'MOD_NSL' ZVIFL ;
  3591. ZPREFL = 'RESOUT' QNSL FPREFL ;
  3592. estim.'PRESSION_FLUIDE' = ZPREFL ;
  3593. WTAB.'CONV' = ZFLCONV ;
  3594. 'SI' ('NON' ZFLCONV) ; 'MESS' 'Pas de convergence NVST NLIN'; 'FINSI' ;
  3595. 'QUITTE' BONOCONV ;
  3596. 'FINSI' ;
  3597. *
  3598. * Redefinir les variables associees a l'instant TEMPS0, pour soit :
  3599. * -> ZICONV = VRAI : initialiser et preparer le pas suivant
  3600. * -> ZICONV = FAUX : redemarrer le pas courant en convergence forcee
  3601. 'SI' WTAB.'FOR_MECA' ;
  3602. *
  3603. augmult = augmult * 0.55 ;
  3604. si (augmult < 1d-2); augmult = 1d-2; finsi;
  3605. *
  3606. * Conserver la partie Forces nonlineaires trouvee pendant ce pas pour
  3607. * s'en servir pour l'initialisation du pas suivant
  3608. * DFNL = K*DU - DF - residu
  3609. * Ktot*dutot ne contient pas les forces de reactions mais les forces
  3610. * internes dues a un champ de deformation initiales ( thermique)
  3611. * pour les forces suiveuses on fait delta FP
  3612. * pour etre plus precis on fait aussi intervenir le residu
  3613. *
  3614. zraidna = zraid;
  3615. XXX1 = ZRAIDNA * ZDEPT;
  3616. XXX3 = (ZDFINI '+' ZFSUIV) * COEPI;
  3617. XXX4 = XXX1 - XXX3;
  3618. XXX3 = XXX4 + RESIDC;
  3619. XXX1 = XXX3 - FREAP ;
  3620. XXX5 = XXX1 'ENLEVER' 'FLX ' ;
  3621. 'DETR' XXX1 ; 'DETR' XXX3 ; 'DETR' XXX4 ;
  3622. * en cas de non convergence on cumule les forces non lineaires
  3623. 'SI' WTAB.'CONV';
  3624. ZFNONL = XXX5 ;
  3625. 'SINON';
  3626. ZFNONL = XXX5 + ZFNONL ;
  3627. 'DETR' XXX5 ;
  3628. 'FINS';
  3629. *
  3630. * Garder la derniere matrice KTAN calculee dans ETIQ si necessaire
  3631. 'SI' IKTAN ;
  3632. 'SI' IFEFP ;
  3633. * 'MESS' 'FEFP: Last KTAN is kept for next increment' ;
  3634. ZLASTKTAN = ZRIKTA ;
  3635. 'SINON' ;
  3636. 'SI' (IKT_SAUV 'ET' IKT) ;
  3637. * 'MESS' 'KTAN : La matrice est conservee pour le pas suivant' ;
  3638. ZLASTKTAN = ZRIKTA ;
  3639. 'FINS' ;
  3640. 'FINS' ;
  3641. 'FINS' ;
  3642. *
  3643. 'DETR' ZFEXT ; 'DETR' FREAP ;
  3644. *
  3645. 'SI' IGRD ;
  3646. * Autres choix que Lagrangien total : exprimer les deformations sur GEOM2
  3647. 'SI' ('NEG' LAG_TOT 1) ;
  3648. ZDEFF = 'PICA' HYPDEF ZDEFF ZMODL ZDEPT ;
  3649. 'FINSI';
  3650. 'FINSI';
  3651. *
  3652. 'SI' (IGRD 'OU' IFEFPUL) ;
  3653. 'SI' (knoconv '>' 1) ;
  3654. 'DETR' GEOM1 ;
  3655. 'FINS';
  3656. 'FINS';
  3657. *
  3658. * Utile pour les calculs d'usure
  3659. 'SI' WTAB.'CAFROTTE' ;
  3660. ZFLX = 'EXCO' (ZDEPT '*' ZCLIM) 'FLX' 'NOID' 'FLX' ;
  3661. WTAB.'POST_COFR'.'RIGI_UNILA' = CRR ;
  3662. WTAB.'POST_COFR'.'MULT_SOLUT' = 'EXCO' ZDEPT 'LX' 'NOID' 'LX' ;
  3663. WTAB.'POST_COFR'.'GLISSEMENT' = ZFLX ;
  3664. 'FINSI' ;
  3665. *
  3666. ZXDENO = XDENO;
  3667. ZXDENOM = XDENOM;
  3668. *
  3669. * Faut-il partir en convergence forcee ou ok?
  3670. * -> si convergence forcee, recalcul du pas avec TEMPS0 = TI
  3671. WTAB.'CONV' = ZICONV ;
  3672. 'SI' ('NON' ZICONV) ;
  3673. *
  3674. * -----------------------------------------------------------------
  3675. * Preparation des donnees pour le nouveau sous-pas
  3676. TEMPS0 = TI;
  3677. *
  3678. 'SI' (IGRD 'OU' IFEFPUL) ;
  3679. GEOM1 = GEOM2;
  3680. 'FINS';
  3681. *
  3682. ZDEP0 = ZDETOT ;
  3683. 'SI' (LAG_TOT 'EGA' 1); ZDEP0N = ZDEP0 * -1; 'FINSI';
  3684. ZDEF0 = ZDEFF ;
  3685. ZSIG0 = ZSIGF ;
  3686. 'SI' IPLAVI ;
  3687. ZDEI0 = ZDEIF ;
  3688. ZVAR0 = ZVARF ;
  3689. 'SI' ('NEG' WTAB.'MOVA' 'RIEN') ;
  3690. ACC0 = 'EXCO' ZVAR0 WTAB.'MOVA' ;
  3691. 'FINS' ;
  3692. 'FINS';
  3693. ZGRDU0 = ZGRDUF;
  3694. *
  3695. ZETAT1 = 'REDU' ZETAT2 ZMODLI ;
  3696. 'SI' ('EXIS' WTAB 'MOD_CHA') ;
  3697. ETAZ = 'REDU' ZETAT2 WTAB.'MOD_CHA' ;
  3698. ZETAT1 = ZETAT1 'ET' ETAZ ;
  3699. ETAZ = 1. ;
  3700. 'FINS' ;
  3701. *
  3702. 'SI' ITHER ;
  3703. ZTET1 = ZTET2 ;
  3704. ZTEMP1 = ZTEMP2 ;
  3705. ETT0 = 'REDU' ETT ZMODL ;
  3706. 'SI' WTAB.'POR1' ;
  3707. MSRTT0 = 'REDU' MSRTT ZMODL ;
  3708. 'FINSI' ;
  3709. 'FINSI' ;
  3710. *
  3711. 'SI' LOGDEF;
  3712. ZDEFOR1 = ZDEFOR2 ;
  3713. 'FINS';
  3714. * -----------------------------------------------------------------
  3715. 'FINS' ;
  3716. *
  3717. 'SI' (ZICONV 'OU' ('NON' WTAB.'CONVERGENCE_FORCEE')) ;
  3718. 'QUITTER' BONOCONV;
  3719. 'FINS';
  3720. *
  3721. * Convergence forcee -> on reinitialise ZCLIM
  3722. ZCLIM = ZCLIM0 ;
  3723. 'FINSI' ;
  3724. *FOR_MECA
  3725. *
  3726. * Nombre maximum de sous-pas atteint? si oui, arret de pasapas
  3727. WTAB.'ISOUSPAS' = WTAB.'ISOUSPAS' + 1;
  3728. 'SI' (WTAB.'ISOUSPAS' >EG WTAB.'MAXSOUSPAS');
  3729. 'ERREUR' 996 ;
  3730. 'FINS';
  3731. *
  3732. 'FIN' BONOCONV;
  3733. *----------------------------------------------------------------------*
  3734. * Fin de la boucle de non convergence BONOCONV *
  3735. *----------------------------------------------------------------------*
  3736. *######################################################################*
  3737. *----------------------------------------------------------------------*
  3738. * Preparation du pas suivant TI -> TEMPS0 *
  3739. *----------------------------------------------------------------------*
  3740. WTAB.'KNOCONV' = KNOCONV;
  3741. *
  3742. 'SI' WTAB.'FOR_MECA' ;
  3743. *
  3744. estim.'DEPLACEMENTS' = ZDETOT ;
  3745. estim.'REACTIONS' = 'REAC' estim.'DEPLACEMENTS' ZCLIM ;
  3746. estim.'CONTRAINTES' = 'REDU' ZSIGF ZMODLI;
  3747. estim.'DEFORMATIONS' = 'REDU' ZDEFF ZMODLI ;
  3748. *
  3749. 'SI' IPLAVI ;
  3750. estim.'VARIABLES_INTERNES' = 'REDU' ZVARF ZMODLI ;
  3751. estim.'DEFORMATIONS_INELASTIQUES' = 'REDU' ZDEIF ZMODLI ;
  3752. 'FINS';
  3753. *
  3754. 'SI' IDYN ;
  3755. 'SI' ('NEG' WTAB.'REAPREC' 'INCONNU');
  3756. maireac = 'EXTR' estim.'REACTIONS' 'MAIL' ;
  3757. 'SI' ('EGA' ('TYPE' maireac) 'MAILLAGE');
  3758. reacdif = 'REDU' WTAB.'REAPREC' maireac ;
  3759. estim.'REACTIONS' = estim.'REACTIONS' - REACDIF;
  3760. 'FINSI' ;
  3761. 'FINSI';
  3762. estim.'VITESSES' = VITI;
  3763. *
  3764. 'SI' IMPLP;
  3765. * Correction des vitesses pour avoir des vitesses relatives nulles
  3766. * aux points qui sont en contact
  3767. estim.'VITESSES' = estim.'VITESSES' + VADD ;
  3768. 'SINON' ;
  3769. * Appuis unilateraux + choc elastique : essai de corriger les
  3770. * vitesses fournies par le schema
  3771. 'SI' ('NEG' WTAB.'ZRAIDV' 'INCONNU') ;
  3772. estim.'VITESSES' = VITEUNIL WTAB.'ZRAIDV' WTAB.'MASSE'
  3773. estim.'VITESSES' ZDEPT conti.'DEPLACEMENTS'
  3774. ZDT ZSDMBR WTAB ;
  3775. 'SI' ('EXIS' WTAB 'RATE_VITEUNIL');
  3776. 'ERREUR' 'Probleme dans viteunil' ;
  3777. 'FINSI';
  3778. 'FINSI';
  3779. 'FINS';
  3780. *
  3781. estim.'ACCELERATIONS' = ACCEI ;
  3782. WTAB.'FOPL' = ZFP ;
  3783. 'FINS' ;
  3784. *
  3785. 'SI' LOGPIL ;
  3786. PRECED.'COEFFICIENT_DE_PILOTAGE' = PRECED.'COEFFICIENT_DE_PILOTAGE'
  3787. 'ET' ('PROG'ETA) ;
  3788. 'FINSI' ;
  3789. *
  3790. *----------------------------------------------------------------------
  3791. *
  3792. WTAB.'CLIM' = ZCLIM ;
  3793. 'SI' (IGRD 'OU' IFEFPUL) ;
  3794. WTAB.'FOR' = GEOM2 ;
  3795. 'FINS';
  3796. WTAB.'MAT1' = 'REDU' ZMAT2F ZMODLI ;
  3797. 'SI' ('EXIS' WTAB 'MOD_CHA') ;
  3798. MODZ = 'REDU' ZMAT22 WTAB.'MOD_CHA' ;
  3799. WTAB.'MAT1' = WTAB.'MAT1' 'ET' MODZ ;
  3800. MODZ = 1.D0 ;
  3801. 'FINS' ;
  3802. *
  3803. * Pour initialisation a partir du pas precedent
  3804. WTAB.'DTPREC' = WTAB.'DT_INIT';
  3805. WTAB.'FNONL' = ZFNONL ;
  3806. WTAB.'INCREMENT' = ZINCREMENT ;
  3807. WTAB.'RESIDU' = RESIDC ;
  3808. *
  3809. * Contact-frottement
  3810. 'SI' ('NEG' ZRIBLO_M 'INCONNU') ;
  3811. WTAB.'RIBLO_M' = ZRIBLO_M ;
  3812. WTAB.'LISEA_M' = ZLISEA_M ;
  3813. 'FINSI' ;
  3814. *
  3815. * Pilotage
  3816. WTAB.'AUTOCOEF' = ZAUTOCOEF ;
  3817. 'SI' IPILOT ;
  3818. WTAB.'AUTOREDU' = ZAUTOREDU ;
  3819. WTAB.'AUTORED1' = ZAUTORED1 ;
  3820. WTAB.'NBPLAS' = ZNBPLAS ;
  3821. 'FINSI' ;
  3822. *
  3823. WTAB.'XDENO' = ZXDENO ;
  3824. WTAB.'XDENOM' = ZXDENOM ;
  3825. WTAB.'LASTKTAN' = ZLASTKTAN ;
  3826. WTAB.'NOMBRE_ITERATIONS' = ZNITE ;
  3827. *
  3828. 'SI' ITHER ;
  3829. WTAB.'ETHER2' = 'REDU' ETT ZMODLI ;
  3830. 'SI' POR1 ;
  3831. WTAB.'MSRTHER2' = 'REDU' MSRTT ZMODLI;
  3832. 'FINSI' ;
  3833. 'FINSI' ;
  3834. *
  3835. * Mise a jour du MODELE du PAS precedent
  3836. WTAB.'MO_TOT_PREC' = ZMODLI ;
  3837. *
  3838. 'FINSI' ;
  3839. *FOR_MECA
  3840. *
  3841. 'OPTI' 'PARA' FAUX;
  3842. *
  3843. IERRMEC = ('NON' WTAB.'CONV') 'ET' ('NON' WTAB.'CONVERGENCE_FORCEE') ;
  3844. *
  3845. 'FINPROC' IERRMEC ;
  3846.  
  3847.  
  3848.  
  3849.  
  3850.  
  3851.  
  3852.  
  3853.  
  3854.  
  3855.  
  3856.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales