Télécharger flufib.eso

Retour à la liste

Numérotation des lignes :

flufib
  1. C FLUFIB SOURCE PV090527 24/06/12 21:15:04 11940
  2. SUBROUTINE FLUFIB(IMOD,PROPS,DEPS,SIG0,VAR0,SIGF,VARF,TIME0,TIMEF,
  3. & NPROPS,NVAR)
  4. C-----------------------------------------------------------------------
  5. C RESOLUTION DES MODELES DE FLUAGE POUR LES POUTRES A FIBRE
  6. C - Implementation des lois de fluage pour les modeles de poutre
  7. C a fibre (modeles de section)
  8. C - Les modeles sont ecrits en dimension 1, dans la direction des
  9. C fibres de la poutre. Ainsi :
  10. C -- la contrainte equivalente est definie comme la valeur absolue
  11. C de la contrainte axiale (composante XX)
  12. C -- la vitesse de deformation equivalente de fluage est definie
  13. C comme la valeur absolue de la vitesse de deformation de
  14. C fluage axiale (composante XX)
  15. C - Le schema d'integration est de type Runge-Kutta a l'ordre 4
  16. C avec controle de l'erreur et adaptation du pas de temps
  17. C - Liste des modeles de fluage actuelement disponibles:
  18. C -- Norton (IMOD=15)
  19. C -- Polynomial (IMOD=16)
  20. C -- Blackburn (IMOD=17)
  21. C -- Blackburn 2 (IMOD=18)
  22. C -- Lemaitre (IMOD=19)
  23. C Francois Di Paola (nov 2019)
  24. C-----------------------------------------------------------------------
  25. C
  26. C Entrees
  27. C -------
  28. C IMOD : Numero du modele a fibre
  29. C PROPS : Caracteristiques du materiaux
  30. C NPROPS : Taille du tableau PROPS
  31. C DEPS : Increment de deformations totales sur le pas de temps (modele section)
  32. C SIG0 : Contraintes au debut du pas de temps (modele section)
  33. C VAR0 : Variables internes au debut du pas de temps
  34. C NVAR : Taille du tableau VAR0 (et aussi VARF)
  35. C TIME0 : Instant initial (debut du pas de temps)
  36. C TIMEF : Instant final (fin du pas de temps)
  37. C
  38. C Sorties
  39. C -------
  40. C SIGF : Contraintes a la fin du pas de temps (modele section)
  41. C VARF : Variables internes a la fin du pas de temps
  42. C
  43. C
  44. C Detail des composantes de materiau
  45. C ----------------------------------
  46. C PROPS(1) : 'YOUN' Module de Young
  47. C PROPS(2) : 'NU ' Coefficient de Poisson
  48. C PROPS(3) : 'RHO ' Masse volumique
  49. C PROPS(4) : 'ALPH' Coefficient de dilatation thermique
  50. C PROPS(.) : puis les autres composantes, selon le modele
  51. C
  52. C Detail des composantes des variables
  53. C ------------------------------------
  54. C DEPS(1) = D Epsilon_xx SIG0(1) SIGF(1) = Sig_xx
  55. C DEPS(2) = D Gamma_xy SIG0(2) SIGF(2) = Sig_xy
  56. C DEPS(3) = D Gamma_xz SIG0(3) SIGF(3) = Sig_xz
  57. C
  58. C
  59. C-----------------------------------------------------------------------
  60. C
  61. C Quelques declarations
  62. IMPLICIT INTEGER(I-N)
  63. IMPLICIT REAL*8(A-H,O-Z)
  64. PARAMETER(XZER=0.D0,XPETIT=1.D-6,
  65. & UNDEMI=0.5D0,UN=1.D0,DEUX=2.D0,TROIS=3.D0,SIX=6.D0)
  66. C
  67. C Declaration de quelques tableaux d'entree/sortie de la subroutine
  68. REAL*8 PROPS(NPROPS),DEPS(3),SIG0(3),VAR0(NVAR),SIGF(3),VARF(NVAR)
  69. C
  70. LOGICAL DTLIBR
  71. C
  72. C=======================================================================
  73. C 1 - Recuperation de l'etat mecanique au debut du pas
  74. C=======================================================================
  75. C Pas de temps
  76. DT=TIMEF-TIME0
  77. C Contrainte au debut du pas
  78. SIG=SIG0(1)
  79. C Variables internes au debut du pas
  80. IF (IMOD.EQ.19) THEN
  81. XXIN=VAR0(1)
  82. EPSIN=VAR0(2)
  83. ELSE
  84. EPSIN=VAR0(1)
  85. ENDIF
  86. C Increment de deformation totale sur le pas
  87. DEPST=DEPS(1)
  88. C Recuperation des parametres materiau
  89. YOU=PROPS(1)
  90. XNU=PROPS(2)
  91. G=YOU/(DEUX*(UN+XNU))
  92. C
  93. C=======================================================================
  94. C 2 - Initialisations pour le schema de Runge-Kutta 4
  95. C=======================================================================
  96. PRECIS=1.D-5
  97. DTLIBR=.TRUE.
  98. IF (DT.LT.0.0) THEN
  99. PRINT*,'ERREUR DT < 0 !'
  100. CALL ERREUR(414)
  101. RETURN
  102. ENDIF
  103. IF (DT.EQ.0.0) DT=1.D-20
  104. VSIG= YOU*DEPST/DT
  105. DTLEFT=DT
  106. BORNE=2.0
  107. RMAX=1.3
  108. RMIN=0.7
  109. DIV=7.0
  110. FAC=3.0
  111. MSOUPA=10000
  112. XMAX=YOU*1.D-3
  113. C
  114. C=======================================================================
  115. C 3 - Initialisations avant iterations en sous-increments
  116. C=======================================================================
  117. ITERO=0
  118. 10 CONTINUE
  119. ITERO=1+ITERO
  120. IF (ITERO.NE.1) THEN
  121. DTLIBR=.TRUE.
  122. PRECIS=PRECIS*7.D0
  123. IF (ITERO.GT.3) THEN
  124. PRINT*,'ERREUR : INCREMENT DE CHARGEMENT TROP GRAND !'
  125. CALL ERREUR(268)
  126. RETURN
  127. ENDIF
  128. ENDIF
  129. DTLEFT=DT
  130. TAU=DTLEFT
  131. ASIG=ABS(SIG)
  132. ERRABS=PRECIS*ASIG
  133. IF (XMAX.GT.ASIG) ERRABS=PRECIS*XMAX
  134. C
  135. C=======================================================================
  136. C 4 - Iterations en sous increments / fin si DTLEFT = 0
  137. C=======================================================================
  138. NSSINC=0
  139. NITERA=0
  140. 20 CONTINUE
  141. NSSINC=NSSINC+1
  142. IF (NSSINC.GT.MSOUPA) THEN
  143. DTLIBR=.FALSE.
  144. GOTO 10
  145. ENDIF
  146. C [1.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat debut du pas
  147. SEQ=ABS(SIG)
  148. IF (SEQ.LT.XPETIT) THEN
  149. VEPSIN1=XZER
  150. IF (IMOD.EQ.19) VXX1=XZER
  151. ELSE
  152. C Modele de Norton
  153. IF(IMOD.EQ.15) THEN
  154. CALL NORTON(SEQ,EPSIN,TAU,PROPS(6),PROPS(7),PROPS(8),VEPSIN1)
  155. C Modele Polynomial
  156. ELSEIF(IMOD.EQ.16) THEN
  157. VEPSIN1=PROPS(6)+PROPS(7)*(SEQ**PROPS(8))+
  158. & PROPS(9)*(SEQ**PROPS(10)) +
  159. & PROPS(11)*(SEQ**PROPS(12))
  160. C Modele de Blackburn
  161. ELSEIF(IMOD.EQ.17) THEN
  162. CALL SOLUTN(20,SEQ,EPSIN,PROPS,DX,TIMEX)
  163. IF(TIMEX.LT.TAU) TIMEX=ABS(TAU)
  164. CALL EQUATN(20,SEQ,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  165. VEPSIN1=VEPSINA+VEPSINB
  166. C Modele de Blackburn_2
  167. ELSEIF(IMOD.EQ.18) THEN
  168. CALL SOLUTN(61,SEQ,EPSIN,PROPS,DX,TIMEX)
  169. IF(TIMEX.LT.TAU) TIMEX=ABS(TAU)
  170. CALL EQUATN(61,SEQ,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  171. VEPSIN1=VEPSINA+VEPSINB
  172. C Modele de Lemaitre
  173. ELSEIF(IMOD.EQ.19) THEN
  174. CALL LEMAIT(SEQ,XXIN,VXX1,TAU,PROPS,VEPSIN1)
  175. ENDIF
  176. ENDIF
  177. VSIG1=DSIGN(YOU*VEPSIN1,SIG)
  178. C Debut des iterations sur tau optimal / fin si RA
  179. NITERA=0
  180. 30 CONTINUE
  181. NITERA=NITERA+1
  182. TAU2=TAU*UNDEMI
  183. C [1.2] 1ere estimation a mi-pas, avec la vitesse debut de pas
  184. SIG1=SIG+(TAU2*(VSIG-VSIG1))
  185. EPSIN1=EPSIN+TAU2*VEPSIN1
  186. IF (IMOD.EQ.19) XX1=XXIN+TAU2*VXX1
  187. C [2.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat a mi-pas [1.2]
  188. SEQ1=ABS(SIG1)
  189. IF (SEQ1.LT.XPETIT) THEN
  190. VEPSIN2=XZER
  191. IF (IMOD.EQ.19) VXX2=XZER
  192. ELSE
  193. C Modele de Norton
  194. IF(IMOD.EQ.15) THEN
  195. CALL NORTON(SEQ1,EPSIN1,TAU2,PROPS(6),PROPS(7),PROPS(8),
  196. & VEPSIN2)
  197. C Modele Polynomial
  198. ELSEIF(IMOD.EQ.16) THEN
  199. VEPSIN2=PROPS(6)+PROPS(7)*(SEQ1**PROPS(8))+
  200. & PROPS(9)*(SEQ1**PROPS(10)) +
  201. & PROPS(11)*(SEQ1**PROPS(12))
  202. C Modele de Blackburn
  203. ELSEIF(IMOD.EQ.17) THEN
  204. CALL SOLUTN(20,SEQ1,EPSIN1,PROPS,DX,TIMEX)
  205. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  206. CALL EQUATN(20,SEQ1,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  207. VEPSIN2=VEPSINA+VEPSINB
  208. C Modele de Blackburn_2
  209. ELSEIF(IMOD.EQ.18) THEN
  210. CALL SOLUTN(61,SEQ1,EPSIN1,PROPS,DX,TIMEX)
  211. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  212. CALL EQUATN(61,SEQ1,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  213. VEPSIN2=VEPSINA+VEPSINB
  214. C Modele de Lemaitre
  215. ELSEIF(IMOD.EQ.19) THEN
  216. CALL LEMAIT(SEQ1,XX1,VXX2,TAU2,PROPS,VEPSIN2)
  217. ENDIF
  218. ENDIF
  219. VSIG2=DSIGN(YOU*VEPSIN2,SIG1)
  220. C [2.2] 2nde estimation a mi-pas, avec la vitesse moyenne sur le mi-pas
  221. VEPSIN12=UNDEMI*(VEPSIN1+VEPSIN2)
  222. VSIG12=UNDEMI*(VSIG1+VSIG2)
  223. SIG2=SIG+(TAU2*(VSIG-VSIG12))
  224. EPSIN2=EPSIN+TAU2*VEPSIN12
  225. IF (IMOD.EQ.19) XX2=XXIN+TAU2*(UNDEMI*(VXX1+VXX2))
  226. C [3.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat a mi-pas [2.2]
  227. SEQ2=ABS(SIG2)
  228. IF (SEQ2.LT.XPETIT) THEN
  229. VEPSIN3=XZER
  230. IF (IMOD.EQ.19) VXX3=XZER
  231. ELSE
  232. C Modele de Norton
  233. IF(IMOD.EQ.15) THEN
  234. CALL NORTON(SEQ2,EPSIN2,TAU2,PROPS(6),PROPS(7),PROPS(8),
  235. & VEPSIN3)
  236. C Modele Polynomial
  237. ELSEIF(IMOD.EQ.16) THEN
  238. VEPSIN3=PROPS(6)+PROPS(7)*(SEQ2**PROPS(8))+
  239. & PROPS(9)*(SEQ2**PROPS(10)) +
  240. & PROPS(11)*(SEQ2**PROPS(12))
  241. C Modele de Blackburn
  242. ELSEIF(IMOD.EQ.17) THEN
  243. CALL SOLUTN(20,SEQ2,EPSIN2,PROPS,DX,TIMEX)
  244. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  245. CALL EQUATN(20,SEQ2,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  246. VEPSIN3=VEPSINA+VEPSINB
  247. C Modele de Blackburn_2
  248. ELSEIF(IMOD.EQ.18) THEN
  249. CALL SOLUTN(61,SEQ2,EPSIN2,PROPS,DX,TIMEX)
  250. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  251. CALL EQUATN(61,SEQ2,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  252. VEPSIN3=VEPSINA+VEPSINB
  253. C Modele de Lemaitre
  254. ELSEIF(IMOD.EQ.19) THEN
  255. CALL LEMAIT(SEQ2,XX2,VXX3,TAU2,PROPS,VEPSIN3)
  256. ENDIF
  257. ENDIF
  258. VSIG3=DSIGN(YOU*VEPSIN3,SIG2)
  259. C [3.2] 1ere estimation a la fin du pas, avec la vitesse a mi-pas
  260. SIG3=SIG2+(TAU2*(VSIG-VSIG3))
  261. EPSIN3=EPSIN2+TAU2*VEPSIN3
  262. IF (IMOD.EQ.19) XX3=XXIN+TAU2*VXX3
  263. C [4.1] Vitesses de contrainte et de deformation inelastique a partir de l'etat a la fin du pas [3.2]
  264. SEQ3=ABS(SIG3)
  265. IF (SEQ3.LT.XPETIT) THEN
  266. VEPSIN4=XZER
  267. IF (IMOD.EQ.19) VXX4=XZER
  268. ELSE
  269. C Modele de Norton
  270. IF(IMOD.EQ.15) THEN
  271. CALL NORTON(SEQ3,EPSIN3,TAU2,PROPS(6),PROPS(7),PROPS(8),
  272. & VEPSIN4)
  273. C Modele Polynomial
  274. ELSEIF(IMOD.EQ.16) THEN
  275. VEPSIN4=PROPS(6)+PROPS(7)*(SEQ3**PROPS(8))+
  276. & PROPS(9)*(SEQ3**PROPS(10)) +
  277. & PROPS(11)*(SEQ3**PROPS(12))
  278. C Modele de Blackburn
  279. ELSEIF(IMOD.EQ.17) THEN
  280. CALL SOLUTN(20,SEQ3,EPSIN3,PROPS,DX,TIMEX)
  281. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  282. CALL EQUATN(20,SEQ3,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  283. VEPSIN4=VEPSINA+VEPSINB
  284. C Modele de Blackburn_2
  285. ELSEIF(IMOD.EQ.18) THEN
  286. CALL SOLUTN(61,SEQ3,EPSIN3,PROPS,DX,TIMEX)
  287. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  288. CALL EQUATN(61,SEQ3,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  289. VEPSIN4=VEPSINA+VEPSINB
  290. C Modele de Lemaitre
  291. ELSEIF(IMOD.EQ.19) THEN
  292. CALL LEMAIT(SEQ3,XX3,VXX4,TAU2,PROPS,VEPSIN4)
  293. ENDIF
  294. ENDIF
  295. VSIG4=DSIGN(YOU*VEPSIN4,SIG3)
  296. C [4.2] 2nde estimation a la fin du pas, avec la vitesse moyenne sur le mi-pas
  297. VEPSIN34=UNDEMI*(VEPSIN3+VEPSIN4)
  298. VSIG34=UNDEMI*(VSIG3+VSIG4)
  299. SIG4=SIG2+(TAU2*(VSIG-VSIG34))
  300. EPSIN4=EPSIN2+TAU2*VEPSIN34
  301. IF (IMOD.EQ.19) XX4=XXIN+TAU2*(UNDEMI*(VXX3+VXX4))
  302. C [5.1] Vitesse de contrainte et de deformation inelastique a partir de l'etat a la fin du pas [4.2]
  303. SEQ4=ABS(SIG4)
  304. IF (SEQ4.LT.XPETIT) THEN
  305. VEPSIN5=XZER
  306. IF (IMOD.EQ.19) VXX5=XZER
  307. ELSE
  308. C Modele de Norton
  309. IF(IMOD.EQ.15) THEN
  310. CALL NORTON(SEQ4,EPSIN4,TAU2,PROPS(6),PROPS(7),PROPS(8),
  311. & VEPSIN5)
  312. C Modele Polynomial
  313. ELSEIF(IMOD.EQ.16) THEN
  314. VEPSIN5=PROPS(6)+PROPS(7)*(SEQ4**PROPS(8))+
  315. & PROPS(9)*(SEQ4**PROPS(10)) +
  316. & PROPS(11)*(SEQ4**PROPS(12))
  317. C Modele de Blackburn
  318. ELSEIF(IMOD.EQ.17) THEN
  319. CALL SOLUTN(20,SEQ4,EPSIN4,PROPS,DX,TIMEX)
  320. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  321. CALL EQUATN(20,SEQ4,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  322. VEPSIN5=VEPSINA+VEPSINB
  323. C Modele de Blackburn_2
  324. ELSEIF(IMOD.EQ.18) THEN
  325. CALL SOLUTN(61,SEQ4,EPSIN4,PROPS,DX,TIMEX)
  326. IF(TIMEX.LT.TAU2) TIMEX=ABS(TAU2)
  327. CALL EQUATN(61,SEQ4,TIMEX,XZER,PROPS,VEPSINA,VEPSINB)
  328. VEPSIN5=VEPSINA+VEPSINB
  329. C Modele de Lemaitre
  330. ELSEIF(IMOD.EQ.19) THEN
  331. CALL LEMAIT(SEQ4,XX4,VXX5,TAU2,PROPS,VEPSIN5)
  332. ENDIF
  333. ENDIF
  334. VSIG5=DSIGN(YOU*VEPSIN5,SIG4)
  335. C [5.2] 3eme estimation a la fin du pas avec les vitesses debut [1.1], mi [3.1] et fin de pas [5.1]
  336. VEPSI135=((VEPSIN1+VEPSIN5)/SIX)+(VEPSIN3*DEUX/TROIS)
  337. VSIG135=((VSIG1+VSIG5)/SIX)+(VSIG3*DEUX/TROIS)
  338. SIG5=SIG+(TAU*(VSIG-VSIG135))
  339. EPSIN5=EPSIN+TAU*VEPSI135
  340. IF (IMOD.EQ.19) VXX135=((VXX1+VXX5)/SIX)+(VXX3*DEUX/TROIS)
  341. IF (IMOD.EQ.19) XX5=XXIN+TAU*VXX135
  342. C Calcul du rapport : erreur calculee / erreur admise
  343. XX=SIG5-SIG4
  344. RA=ABS(XX)/ERRABS
  345. SQRA=SQRT(RA)
  346. C Test de fin d'iterations / mise a jour de tau
  347. C DIV =7 BORNE = 2
  348. C Si SQRA>7 alors TAU = TAU/7 puis nouvel essai
  349. C Si 2<RA<7*7 on vise RA = 1 puis nouvel essai
  350. IF (DTLIBR) THEN
  351. C Petite ruse pour dejouer l'optimisation
  352. RA1=RA*UN
  353. IF ((RA.GT.DIV*DIV).OR.(RA.NE.RA1)) THEN
  354. TAU=TAU/DIV
  355. IF(TAU.LT.1.D-30) THEN
  356. CALL ERREUR(5)
  357. ENDIF
  358. *** TTAUF=TTAU0+TAU
  359. GOTO 30
  360. ELSEIF (RA.GT.BORNE) THEN
  361. TAU = TAU/SQRA
  362. IF(TAU.LT.1.D-30) THEN
  363. CALL ERREUR(5)
  364. ENDIF
  365. *** TTAUF=TTAU0+TAU
  366. GOTO 30
  367. ENDIF
  368. ENDIF
  369. C
  370. C Fin des iterations sur tau optimal / mise a jour des variables
  371. C Ici RA < BORNE
  372. C On avance en temps
  373. SIG=SIG4
  374. EPSIN=EPSIN+TAU2*(VEPSIN12+VEPSIN34)
  375. IF (IMOD.EQ.19) XXIN=XX5
  376. C Test de fin des iterations en sous increments / mise a jour de tau
  377. C Si SQRA<1/3 TAU = TAU*3
  378. C Si 1/3<SQRA<RMIN on vise RA = 1
  379. C Si RMIN<SQRA<RMAX TAU inchange
  380. C Si SQRA>RMAX on vise RA = 1
  381. C Fin des boucles en sous increments si tau = DTLEFT
  382. IF (TAU.LT.DTLEFT) THEN
  383. *** TTAU0=TTAU0+TAU
  384. DTLEFT=DTLEFT-TAU
  385. IF (FAC*SQRA.LT.UN) THEN
  386. TAU=TAU*FAC
  387. ELSEIF ((SQRA.LT.RMIN).OR.(SQRA.GT.RMAX)) THEN
  388. TAU=TAU/SQRA
  389. ENDIF
  390. IF (TAU.GT.DTLEFT) TAU=DTLEFT
  391. *** TTAUF=TTAU0+TAU
  392. GOTO 20
  393. ENDIF
  394. C Ici, on a atteint une subdivision du pas de temps trop petite,
  395. C --> on sort en erreur
  396. IF (ABS(TAU-DTLEFT).GT.(TAU/1000.)) THEN
  397. PRINT*,'ERREUR NBR. MAX. DE SUBDIVISION DU PAS DE TEMPS ATTEINT'
  398. CALL ERREUR(996)
  399. RETURN
  400. ENDIF
  401. C
  402. C=======================================================================
  403. C 5 - Stockage des resultats et sortie
  404. C=======================================================================
  405. SIGF(1)=SIG
  406. SIGF(2)=SIG0(2)+(G*DEPS(2))
  407. SIGF(3)=SIG0(3)+(G*DEPS(3))
  408. IF (IMOD.EQ.19) THEN
  409. VARF(1)=XXIN
  410. VARF(2)=EPSIN
  411. ELSE
  412. VARF(1)=EPSIN
  413. ENDIF
  414. C Sortie du programme
  415. RETURN
  416. END
  417.  
  418.  
  419.  
  420.  
  421.  

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