Télécharger unpas.procedur

Retour à la liste

Numérotation des lignes :

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