Télécharger onera5.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : onera5.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. complet = faux;
  5. *
  6. *************************************************
  7. * pour calcul complet mettre complet à : vrai;
  8. ***************************************************
  9. **************************************************
  10. * *
  11. * TEST DE VALIDATION D'UNE LOI DE COMPORTEMENT *
  12. * -------------------------------------------- *
  13. * DE MATERIAU *
  14. * ----------- *
  15. * *
  16. * LOI DE COMPORTEMENT VISCOPLASTIQUE DE: *
  17. * ONERA (CHABOCHE unifie) *
  18. * *
  19. * COMPARAISON DE CALCULS SUR DES ELEMENTS: *
  20. * - MASSIF 2D ( MFR=1 ) *
  21. * ( DEFORMATIONS PLANES ) *
  22. * AVEC UN RESULTAT ANALYTIQUE *
  23. * *
  24. * STRUCTURE : UNE PLAQUE CARREE *
  25. * - COTE : .1 M *
  26. * - EPAISSEUR : 5.E-4 M *
  27. * *
  28. * CHARGEMENT : DEPLACEMENTS IMPOSES *
  29. * CISAILLEMENT PUR *
  30. * *
  31. **************************************************
  32. *
  33. opti echo 0 ;
  34. *
  35. 'DEBPROC' VISOHNO ta1*'TABLE' i0*'ENTIER'
  36. sigx01*'FLOTTANT' gam0*'FLOTTANT'
  37. R01*'FLOTTANT'
  38. epsp01*'FLOTTANT'
  39. gamp01*'FLOTTANT'
  40. Xx11*'FLOTTANT'
  41. Xx21*'FLOTTANT' ;
  42. *
  43. * Résolution des lois viscoplastiques de OHNO dans
  44. * le cas unidirectionnel
  45. *
  46. mat0 = ta1 .'CARACTERISTIQUES' ;
  47. mod0 = ta1 .'MODELE' ;
  48. q00 = 0. ;
  49. rac0 = ( 3. ) ** ( .5 ) ;
  50. *
  51. youn0 = 'MAXI' ( 'EXCO' mat0 'YOUN' ) ;
  52. xnu0 = 'MAXI' ( 'EXCO' mat0 'NU' ) ;
  53. G0 = youn0 / ( 2. * ( 1. + xnu0 ) ) ;
  54. n0 = 'MAXI' ( 'EXCO' mat0 'N' ) ;
  55. kk0 = 'MAXI' ( 'EXCO' mat0 'KK' ) ;
  56. k00 = 'MAXI' ( 'EXCO' mat0 'K0' ) ;
  57. alfk0 = 'MAXI' ( 'EXCO' mat0 'ALFK0' ) ;
  58. alfr0 = 'MAXI' ( 'EXCO' mat0 'ALFR0' ) ;
  59. alf0 = 'MAXI' ( 'EXCO' mat0 'ALF' ) ;
  60. a10 = 'MAXI' ( 'EXCO' mat0 'A1' ) ;
  61. c10 = 'MAXI' ( 'EXCO' mat0 'C1' ) ;
  62. bet10 = 'MAXI' ( 'EXCO' mat0 'BET1' ) ;
  63. r10 = 'MAXI' ( 'EXCO' mat0 'R1' ) ;
  64. a20 = 'MAXI' ( 'EXCO' mat0 'A2' ) ;
  65. c20 = 'MAXI' ( 'EXCO' mat0 'C2' ) ;
  66. bet20 = 'MAXI' ( 'EXCO' mat0 'BET2' ) ;
  67. r20 = 'MAXI' ( 'EXCO' mat0 'R2' ) ;
  68. phi0 = 'MAXI' ( 'EXCO' mat0 'PHI' ) ;
  69. b0 = 'MAXI' ( 'EXCO' mat0 'B' ) ;
  70. gama0 = 'MAXI' ('EXCO' mat0 'GAMA' ) ;
  71. m0 = 'MAXI' ( 'EXCO' mat0 'M' ) ;
  72. qmax0 = 'MAXI ' ( 'EXCO' mat0 'QMAX' ) ;
  73. qsta0 = 'MAXI' ( 'EXCO' mat0 'QSTA' ) ;
  74. mu0 = 'MAXI' ( 'EXCO' mat0 'MU' ) ;
  75. eta0 = 'MAXI' ( 'EXCO' mat0 'ETA' ) ;
  76. *exp10 = 'MAXI' ( 'EXCO' mat0 'EXP1' ) ;
  77. *exp20 = 'MAXI' ( 'EXCO' mat0 'EXP2' ) ;
  78. *
  79. depl0 = ta1 .'DEPLACEMENTS'.( i0 - 1 ) ;
  80. temp1 = ta1 .'TEMPS'.i0 ;
  81. temp0 = ta1 .'TEMPS'.( i0 - 1 ) ;
  82. temp01 = temp0 ;
  83. gam_old = 'MAXI' ( 'EXCO' ( 'EPSI' mod0 depl0 ) 'GAXY' ) ;
  84. *
  85.  
  86. niter0 = 100 ;
  87.  
  88. dt0 = ( temp1 - temp0 ) / niter0 ;
  89. sigx00 = sigx01 ;
  90. R00 = R01 ;
  91. epsp00 = epsp01 ;
  92. gamp00 = gamp01 ;
  93. Xx10 = Xx11 ;
  94. Xx20 = Xx21 ;
  95. *
  96. * Incrément de contrainte test
  97. *
  98. spt0 = G0 * ( gam0 - gam_old ) / ( temp1 - temp0 ) ;
  99. *mess ' sigx00 R00 gamp00 Xx10 Xx20=' sigx00 R00 gamp00 Xx10 Xx20 ;
  100. *
  101. 'REPETER' bloc0 niter0 ;
  102. *
  103. * Initialisation du calcul pour un pas de temps
  104. *
  105. temp01 = temp01 + dt0 ;
  106. depsx9 = 0. ;
  107. dXx8 = 0. ;
  108. dXx9 = 0. ;
  109. dr9 = 0. ;
  110. sigx0 = sigx00 ;
  111. R0 = R00 ;
  112. epsp0 = epsp00 ;
  113. gamp0 = gamp00 ;
  114. Xx1 = Xx10 ;
  115. Xx2 = Xx20 ;
  116. *
  117. 'REPETER' bloc1 2 ;
  118. i1 = &bloc1 ;
  119. *
  120. * Memoire en déformation inélastique
  121. *
  122. qq = eta0 * epsp0 ;
  123. geta0 = ( 1. - eta0 ) * gamp0 / 2. ;
  124. Q0 = qmax0 -
  125. ( ( qmax0 - q00 ) *
  126. ( 'EXP' ( -2. * mu0 * qq ) ) ) ;
  127. QR = Q0 - ( qsta0 * ( 1. - ( ( ( qmax0 - Q0 ) / qmax0 ) ** 2. ) ) ) ;
  128. RR0 = alfr0 * R0 ;
  129. KR0 = k00 + ( alfk0 * R0 ) ;
  130. * mess ' qq, Q0, QR, RR0, KR0=' qq Q0 QR RR0 KR0 ;
  131. *
  132. * Critère
  133. *
  134. Xx0 = Xx1 + Xx2 ;
  135. F0 = rac0 * ( sigx0 - Xx0 ) ;
  136. F0 = F0 - RR0 - kk0 ;
  137. *
  138. * Ecrouissages
  139. *
  140. 'SI' ( F0 '>' 0. ) ;
  141. depsx0 = ( F0 / KR0 ) ** ( n0 ) ;
  142. depsx1 = alf0 * ( ( F0 / KR0 ) ** ( n0 + 1. ) ) ;
  143. depsx1 = 'EXP' ( depsx1 ) ;
  144. depsx0 = depsx0 * depsx1 * dt0 ;
  145. 'SINON' ;
  146. depsx0 = 0. ;
  147. 'FINSI' ;
  148. * mess ' depsx0 F0 = ' depsx0 F0 ;
  149. dr0 = b0 * ( Q0 - R0 ) * depsx0 ;
  150. dr1 = gama0 * ( ( 'ABS' ( QR - R0 ) ) ** ( m0 - 1. ) ) ;
  151. dr1 = dr1 * ( QR - R0 ) ;
  152. dr0 = dr0 + ( dr1 * dt0 ) ;
  153. phi = phi0 + ( ( 1. - phi0 ) * ( 'EXP' ( -1. * b0 * epsp0 ) ) ) ;
  154. dXx1 = 2. * a10 * c10 * rac0 * depsx0 / 6. ;
  155. dXx1 = dXx1 - ( c10 * Xx1 * depsx0 * phi ) ;
  156. dXx1 = dXx1 -
  157. ( ( ( ( Xx1 * rac0 ) / bet10 ) ** ( r10 - 1. ) ) * Xx1 * dt0 ) ;
  158. dXx2 = 2. * a20 * c20 * depsx0 * rac0 / 6. ;
  159. dXx2 = dXx2 - ( c20 * Xx2 * depsx0 * phi ) ;
  160. dXx2 = dXx2 -
  161. ( ( ( ( Xx2 * rac0 ) / bet20 ) ** ( r20 - 1. ) ) * Xx2 * dt0 ) ;
  162. * mess ' dr0 phi dXx1 dXx2 i1 =' dr0 phi dXx1 dXx2 i1 ;
  163. *
  164. * Somme ( Runge-Kutta )
  165. *
  166. dr0 = ( dr0 + dr9 ) / i1 ;
  167. depsx0 = ( depsx0 + depsx9 ) / i1 ;
  168. dXx1 = ( dXx1 + dXx8 ) / i1 ;
  169. dXx2 = ( dXx2 + dXx9 ) / i1 ;
  170. dr9 = dr0 ;
  171. depsx9 = depsx0 ;
  172. dXx8 = dXx1 ;
  173. dXx9 = dXx2 ;
  174. * mess ' dr0 depsx0 dXx1 dXx2 i1 =' dr0 depsx0 dXx1 dXx2 i1 ;
  175. *
  176. * Calcul des grandeurs actuelles
  177. *
  178. R0 = R00 + dr0 ;
  179. epsp0 = epsp00 + depsx0 ;
  180. gamp0 = gamp00 + ( depsx0 * rac0 ) ;
  181. Xx1 = Xx10 + dXx1 ;
  182. Xx2 = Xx20 + dXx2 ;
  183. sigx0 = sigx00 + ( dt0 * spt0 )
  184. - ( G0 * depsx0 * rac0 ) ;
  185. * mess ' R00 epsx00 Xx10 Xx20 sigx00 =' R00 epsx00 Xx10 Xx20 sigx00 ;
  186. * mess ' R0 epsx0 Xx1 Xx2 sigx0 =' R0 epsx0 Xx1 Xx2 sigx0 ;
  187. *
  188. 'FIN' bloc1 ;
  189. *
  190. * Mise à jour des valeurs
  191. *
  192. R00 = R0 ;
  193. epsp00 = epsp0 ;
  194. gamp00 = gamp0 ;
  195. geta0 = ( 1. - eta0 ) * gamp0 / 2. ;
  196. Xx10 = Xx1 ;
  197. Xx20 = Xx2 ;
  198. sigx00 = sigx0 ;
  199. *
  200. 'FIN' bloc0 ;
  201. *
  202. 'MESS' ' Temps final ' temp01 temp1 ;
  203. *
  204. 'FINP' sigx00 R00
  205. epsp0 Xx10 Xx20 gamp0 geta0 ;
  206. *
  207. *---------------------------------------------------------------
  208. *
  209. *
  210. *
  211. opti echo 0 dime 2 elem qua4 ;
  212. *
  213. * Maillage
  214. *
  215. p1 = 0. 0. ;
  216. p2 = 1. 0. ;
  217. p3 = 1. 1. ;
  218. p4 = 0. 1. ;
  219. li1 = d p1 1 p2 ;
  220. li2 = d p2 1 p3 ;
  221. li3 = d p3 1 p4 ;
  222. li4 = d p4 1 p1 ;
  223. mail1 = 'SURF' ( li1 'ET' li2 'ET' li3 'ET' li4 ) 'PLAN' ;
  224. *trace mail1 ;
  225. *
  226. * Modele
  227. *
  228. mod0 = 'MODE' mail1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
  229. 'VISCOPLASTIQUE' 'ONERA' ;
  230. mat0 = 'MATE' mod0 'YOUN' 2.1E11 'NU' .3
  231. 'N' 24 'KK' 10.E6 'K0' 116.E6 'ALFK' 1.5 'ALFR' .35 'ALF' 2.E6
  232. 'A1' 67.5E6 'C1' 1300 'BET1' 4807E6 'R1' 4 'A2' 80.6 'C2' 45
  233. 'BET2' 58480.E6 'R2' 4 'PHI' 1.
  234. 'B' 12 'GAMA' 2.E-7 'M' 2
  235. 'QMAX' 455.E6 'QSTA' 200.E6 'MU' 19 'ETA' 0.50 ;
  236. *
  237. * Conditions aux limites
  238. *
  239. cl1 = 'BLOQ' li1 'UX' 'UY' ;
  240. cl2 = 'BLOQ' li3 'UY' ;
  241. cl3 = 'BLOQ' li3 'UX' ;
  242. cl0 = cl1 'ET' cl2 'ET' cl3 ;
  243. *
  244. * Chargement
  245. *
  246. dep0 = 'DEPI' cl3 .02 ;
  247. ev0 = 'EVOL' 'MANU' temps ( 'PROG' 0. 1000. ) y ( 'PROG' 0. 1. ) ;
  248. cha0 = 'CHAR' 'DIMP' dep0 ev0 ;
  249. *
  250. dt0 = 50. ;
  251.  
  252. tfin0 = 1000. ;
  253.  
  254. *
  255. * Appel à PASAPAS
  256. *
  257. ta1 = 'TABLE' ;
  258. ta1 .'MODELE' = mod0 ;
  259. ta1 .'CARACTERISTIQUES' = mat0 ;
  260. ta1 .'CHARGEMENT' = cha0 ;
  261. ta1 .'BLOCAGES_MECANIQUES' = cl0 ;
  262. ta1 .'TEMPS_CALCULES' = ( 'PROG' 0. 'PAS' dt0 tfin0 ) ;
  263. *
  264. TMASAU=table;
  265. ta1 . 'MES_SAUVEGARDES'=TMASAU;
  266. TMASAU .'DEFTO'=VRAI;
  267. TMASAU .'DEFIN'=VRAI;
  268. PASAPAS ta1 ;
  269. *
  270. * Post traitement
  271. *
  272. dim0 = 'DIME' ( ta1 .'TEMPS' ) ;
  273. epsp00 = 0. ;
  274. sig_th00 = 0. ;
  275. gam_th00 = 0. ;
  276. R01 = 0. ;
  277. Xx11 = 0. ;
  278. Xx21 = 0. ;
  279. sigxy1 = 'PROG' 0. ;
  280. gaxy1 = 'PROG' 0. ;
  281. sig_th1 = 'PROG' 0. ;
  282. gam_th1 = 'PROG' 0. ;
  283. geta_th1 = 'PROG' 0. ;
  284. err_e1 = 'PROG' 0. ;
  285. err_s1 = 'PROG' 0. ;
  286. err_g1 = 'PROG' 0. ;
  287. geta1 = 'PROG' 0. ;
  288. si ( non complet);
  289. sig_th1 = 'PROG' 0. 5.30135E+07 6.72715E+07 7.56639E+07
  290. 8.03405E+07 8.29554E+07 8.45177E+07
  291. 8.55710E+07 8.63894E+07 8.71063E+07
  292. 8.77856E+07 8.84571E+07 8.91349E+07 8.98249E+07 9.05299E+07
  293. 9.12506E+07 9.19870E+07 9.27388E+07 9.35055E+07 9.42864E+07
  294. 9.50810E+07;
  295. gam_th1 = 'PROG' 0. 3.43642E-04 1.16711E-03 2.06321E-03
  296. 3.00531E-03
  297. 3.97293E-03 4.95359E-03 5.94055E-03 6.93042E-03 7.92154E-03
  298. 8.91313E-03 9.90482E-03 1.08964E-02 1.18879E-02
  299. 1.28792E-02 1.38702E-02 1.48611E-02 1.58518E-02
  300. 1.68423E-02 1.78326E-02 1.88228E-02;
  301.  
  302.  
  303. geta_th1 = 'PROG' 0.
  304. 8.54369E-05 2.91779E-04 5.15802E-04 7.51327E-04
  305. 9.93233E-04 1.23840E-03 1.48514E-03 1.73260E-03 1.98039E-03
  306. 2.22828E-03 2.47620E-03 2.72411E-03 2.97197E-03 3.21979E-03
  307. 3.46756E-03 3.71528E-03 3.96295E-03 4.21058E-03 4.45816E-03
  308. 4.70570E-03;
  309. finsi;
  310.  
  311. *
  312. bool0 = faux ;
  313. 'REPETER' bloc0 ( dim0 - 1 ) ;
  314. i0 = &bloc0 ;
  315. depl0 = ta1 .'DEPLACEMENTS'. i0 ;
  316. sigm0 = ta1 .'CONTRAINTES'. i0 ;
  317. eps0 = 'EPSI' mod0 depl0 ;
  318. def0 = ta1 .'DEFORMATIONS_INELASTIQUES'. i0 ;
  319. var0 = ta1 .'VARIABLES_INTERNES'. i0 ;
  320. *
  321. sigxy0 = 'MAXI' ( 'EXCO' sigm0 'SMXY' ) ;
  322. gaxy0 = 'MAXI' ( 'EXCO' def0 'GIXY' ) ;
  323. gam0 = 'MAXI' ( 'EXCO' eps0 'GAXY' ) ;
  324. geta0 = 'MAXI' ( 'EXCO' var0 'GPXY' ) ;
  325. *
  326. gaxy1 = gaxy1 'ET' ( 'PROG' gaxy0 ) ;
  327. sigxy1 = sigxy1 'ET' ( 'PROG' sigxy0 ) ;
  328. geta1 = geta1 'ET' ( 'PROG' geta0 ) ;
  329. *
  330. si complet;
  331. sig_th0 R00 epsp0 Xx10 Xx20 gam_th0 geta_th0 = VISOHNO
  332. ta1 i0 sig_th00 gam0 R01 epsp00 gam_th00 Xx11 Xx21 ;
  333. *
  334. sig_th00 = sig_th0 ;
  335. R01 = R00 ;
  336. epsp00 = epsp0 ;
  337. gam_th00 = gam_th0 ;
  338. Xx11 = Xx10 ;
  339. Xx21 = Xx20 ;
  340. *
  341. sig_th1 = sig_th1 'ET' ( 'PROG' sig_th0 ) ;
  342. gam_th1 = gam_th1 'ET' ( 'PROG' gam_th0 ) ;
  343. geta_th1 = geta_th1 'ET' ( 'PROG' geta_th0 ) ;
  344. sinon;
  345. sig_th0 = extr sig_th1 ( i0 + 1);
  346. gam_th0 = extr gam_th1 ( i0 + 1);
  347. geta_th0= extr geta_th1 ( i0 + 1);
  348. finsi;
  349. *
  350. *'MESS' ' Gama theorique=' gam_th0 ;
  351. *'MESS' ' Gama calculé =' gaxy0 ;
  352. *'MESS' ' sig theorique =' sig_th0 ;
  353. *'MESS' ' sig calcule =' sigxy0 ;
  354. *
  355. * Erreurs
  356. *
  357. 'SI' ( gaxy0 'NEG' 0. ) ;
  358. err_e0 = ( 'ABS' ( gam_th0 - gaxy0 ) ) / gaxy0 ;
  359. err_e0 = err_e0 * 100. ;
  360. 'SINON' ;
  361. err_e0 = 0. ;
  362. 'FINSI' ;
  363. 'SI' ( sigxy0 'NEG' 0. ) ;
  364. err_s0 = ( 'ABS' ( sig_th0 - sigxy0 ) ) / sigxy0 ;
  365. err_s0 = err_s0 * 100. ;
  366. 'SINON' ;
  367. err_s0 = 0. ;
  368. 'FINSI' ;
  369. *mess ' err_e0 , err_s0 =' err_e0 err_s0 ;
  370. err_e1 = err_e1 'ET' ( 'PROG' err_e0 ) ;
  371. err_s1 = err_s1 'ET' ( 'PROG' err_s0 ) ;
  372. 'SI' ( geta0 '>' 0. ) ;
  373. err_g0 = ( 'ABS' ( geta_th0 - geta0 ) ) / geta0 ;
  374. err_g0 = err_g0 * 100. ;
  375. 'SINON' ;
  376. err_g0 = 0. ;
  377. 'FINSI' ;
  378. err_g1 = err_g1 'ET' ( 'PROG' err_g0 ) ;
  379. mess ' err_g0,geta0 , geta_th0 = ' err_g0 geta0 geta_th0 ;
  380. 'SI' ( ( ( err_e0 '>' 1.E-2 ) 'OU' ( err_s0 '>' 1.E-2 ) ) 'OU'
  381. ( err_g0 '>' 8.E-1 ) ) ;
  382. bool0 = vrai ;
  383. 'FINSI' ;
  384. *
  385. 'FIN' bloc0 ;
  386. *
  387. 'SI' ( bool0 'EGA' vrai ) ;
  388. 'ERRE' 5 ;
  389. 'SINON' ;
  390. 'ERRE' 0 ;
  391. 'FINSI' ;
  392. * Traces
  393. *
  394. trac1 = 'EVOL' 'MANU' 'gama' gaxy1 'sigm' sigxy1 ;
  395. trac2 = 'EVOL' 'MANU' 'gama' gam_th1 'sigm' sig_th1 ;
  396. TAB = 'TABLE' ;
  397. TAB. 1 = 'MARQ PLUS ' ;
  398. TAB. 2 = 'MARQ CROI ' ;
  399. TAB.'TITRE' = 'TABLE' ;
  400. TAB.'TITRE'. 1 = MOT 'THEORIE' ;
  401. TAB.'TITRE'. 2 = MOT 'CALCUL' ;
  402. *'DESSIN' ( trac2 'ET' trac1 )
  403. *'TITR' ' Comparaison theorie calcul'
  404. *'LEGE' TAB ;
  405. trac3 = 'EVOL' 'MANU' 'gama' gaxy1 'erreur_%' err_e1 ;
  406. trac4 = 'EVOL' 'MANU' 'gama' gaxy1 'erreur_%' err_s1 ;
  407. TAB = 'TABLE' ;
  408. TAB. 1 = 'MARQ PLUS ' ;
  409. TAB. 2 = 'MARQ CROI ' ;
  410. TAB.'TITRE' = 'TABLE' ;
  411. TAB.'TITRE'. 1 = MOT 'GAMA' ;
  412. TAB.'TITRE'. 2 = MOT 'CONTRAINTE' ;
  413. *'DESSIN' ( trac3 'ET' trac4 )
  414. *'TITR' ' Evolution des erreurs en %'
  415. *'LEGE' TAB ;
  416. trac5 = 'EVOL' 'MANU' 'gama' gaxy1 'erreur_%' err_g1 ;
  417. trac6 = 'EVOL' 'MANU' 'gama' gaxy1 'geta' geta_th1 ;
  418. trac7 = 'EVOL' 'MANU' 'gama' gaxy1 'geta' geta1 ;
  419. 'SI' ( geta0 '>' 0. ) ;
  420. TAB = 'TABLE' ;
  421. TAB. 1 = 'MARQ PLUS ' ;
  422. TAB. 2 = 'MARQ CROI ' ;
  423. TAB.'TITRE' = 'TABLE' ;
  424. TAB.'TITRE'. 1 = MOT 'THEORIE' ;
  425. TAB.'TITRE'. 2 = MOT 'CALCUL' ;
  426. *'DESSIN' ( trac6 'ET' trac7 )
  427. *'TITR' ' Geta calcul theorie'
  428. *'LEGE' TAB ;
  429. *'DESSIN' trac5 'TITR' ' Erreur sur geta en %' ;
  430. 'FINSI' ;
  431. *
  432. 'FIN' ;
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  

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