Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

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

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