Télécharger nfin3d.eso

Retour à la liste

Numérotation des lignes :

nfin3d
  1. C NFIN3D SOURCE FD218221 24/02/07 21:15:21 11834
  2. c***********************************************************************
  3. c calcul du nombre de fissures en fonction de la direction
  4. c A.Sellier sept.2022
  5. subroutine nfin3d(ppas,lcr,nc33,NRENF00,vecr,NB_RENF,longr,lsr,
  6. # lfr,deqr,syr,taur,rhor,rt00,XE3D,NBNMAX3D,NBNB3D,IDIMB3D,
  7. # NB_HELM,TAILH,log_H_RENF,Num_H_RENF,err1)
  8.  
  9. c tables de dimension fixe pour resolution des sytemes lineaires
  10. implicit real*8 (a-h,o-z)
  11. implicit integer (i-n)
  12.  
  13. c variables non locales
  14. integer NB_HELM,err1
  15. real*8 TAILH(NB_HELM,3,3)
  16. c nombre reel de renforts
  17. integer NRENF00
  18. integer NBNMAX3D,NBNB3D,idimb3d
  19. real*8 xe3d(3,NBNMAX3D)
  20. c declaration supplementaires pour le traitement non local des renforts
  21. logical log_H_RENF(NB_RENF)
  22. integer Num_H_RENF(NB_RENF)
  23.  
  24. c nombre maxi renfort
  25. integer NB_RENF
  26. logical ppas
  27. real*8 nc33(3,3),rt00
  28. real*8 vecr(NB_RENF,3),longr(NB_RENF),deqr(NB_RENF)
  29. real*8 rhor(NB_RENF),lsr(NB_RENF),lfr(NB_RENF),syr(NB_RENF)
  30. real*8 taur(NB_RENF)
  31. real*8 lcr(NB_RENF)
  32.  
  33. c variables locales
  34. real*8 dir3(3),nfis0,nfis1,dnfis,nc3(3)
  35. integer nl,nd1,id1
  36.  
  37. c initialisation des matrice pour le cas sans renforts
  38. err1=0
  39. do i=1,3
  40. do j=1,3
  41. if(i.eq.j) then
  42. nc33(i,j)=1.d0
  43. else
  44. nc33(i,j)=0.d0
  45. end if
  46. end do
  47. end do
  48.  
  49. c evaluation du nombre de fissures par direction et construction
  50. c d une approximation ellipsoidale du nombre de fissure en fonction
  51. c de la direction
  52. c w contient alors le cumul des ouvertures sur la longueur consideree
  53. if(NRENF00.gt.0) then
  54. c print*,'dans nfin3d'
  55. c boucle sur le nombre de renforts
  56. do i=1,NRENF00
  57. c taille a considerer dans la direction du renfort
  58. c recup direction du renfort
  59. do j=1,3
  60. dir3(j)=vecr(i,j)
  61. end do
  62. if(ppas) then
  63. c calcul de la taille de l element ds la direction du renfort
  64. c toujours calculé avec la vrai taille de l element
  65. call tail1d(longr(i),dir3,.true.,XE3D,NBNMAX3D,NBNB3D,
  66. # IDIMB3D,.false.,1.d0,err1)
  67. if(err1.eq.1) then
  68. print*,'Pb lors du calcul de la taille dans nfin3d'
  69. return
  70. end if
  71. c on sauve la taille
  72. c print*,'renfort',i,longr(i)
  73. lcr(i)=longr(i)
  74. else
  75. c la taille dans la direction du renfort est chargée
  76. longr(i)=lcr(i)
  77. end if
  78. c longueur d ancrage droit
  79. if(( deqr(i).ne.0.).and.( rhor(i).ne.0.)) then
  80. c print*,'rhor',i,'=',rhor(i)
  81. c longueur d ancrage
  82. lsr(i)=0.5d0*deqr(i)*syr(i)/taur(i)
  83. c inter espace max des fissures en regime elastique
  84. lfr(i)=0.5d0*deqr(i)*((1.d0-rhor(i))/rhor(i))*
  85. # (rt00/taur(i))
  86. c print*, lfr(i)
  87. c print*, '------------'
  88. else
  89. lsr(i)=longr(i)
  90. lfr(i)=longr(i)
  91. end if
  92. c print*,'lsr(',i,')=',lsr(i)
  93. c print*,'lfr(',i,')=',lfr(i)
  94. c print*,'-------------------'
  95. c energie de fissuration et nombre de fissures localisees
  96. c en regime etabli
  97. c projection de la matrice du nombre de fissures dans la direction ei
  98. do j=1,3
  99. c vecteur nbre de fissure
  100. nc3(j)=0.d0
  101. do k=1,3
  102. nc3(j)=nc3(j)+nc33(j,k)*dir3(k)
  103. end do
  104. end do
  105. c scalaire nbre de fissure (par projection du vecteur)
  106. nfis0=0.d0
  107. do j=1,3
  108. nfis0=nfis0+nc3(j)*dir3(j)
  109. end do
  110. c evaluation nbre maxi de fissures dans cette direction
  111. if(rhor(i).eq.0.) then
  112. nfis1=1.d0
  113. else
  114. if((lsr(i).ne.0.).and.(lfr(i).ne.0.)) then
  115. nfis1=max(1.d0,longr(i)/lsr(i),longr(i)/lfr(i))
  116. else
  117. c print*,'Distance entre fissures non calculable nfin3d'
  118. c print*,'Ancrage lsr(',i,')=',lsr(i)
  119. c print*,'Regime Elastique lfr(',i,')=',lfr(i)
  120. c print*,'On adopte 1 fissure par element'
  121. nfis1=1.d0
  122. end if
  123. end if
  124. c actualisation du tenseur des nombres de fissure si necessaire
  125. if(nfis1.gt.nfis0) then
  126. dnfis=nfis1-nfis0
  127. do j=1,3
  128. do k=1,3
  129. nc33(j,k)=nc33(j,k)+dnfis*dir3(j)*dir3(k)
  130. end do
  131. end do
  132. end if
  133. c controle longueur des elements
  134. if(longr(i).eq.0.) then
  135. if(rhor(i).ne.0.) then
  136. print*,'nfin3d : reinf nb:',i
  137. print*,'long r:',longr(i),'ls r:',lsr(i),'lf r:',lfr(i)
  138. print*,'lcr(',i,')=',lcr(i),'ppas',ppas
  139. err1=1
  140. end if
  141. end if
  142. end do
  143. end if
  144. c print*,'dans nfin3d matrice des nbr de fiss '
  145. c print*,'nbre fiss nc33'
  146. c call afic33(nc33)
  147.  
  148. return
  149. end
  150.  
  151.  
  152.  
  153.  

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