Télécharger mesude.eso

Retour à la liste

Numérotation des lignes :

mesude
  1. C MESUDE SOURCE PV 22/06/15 21:15:02 11388
  2.  
  3. C Mesure la carte de densite d'un maillage (CHPOINT)
  4.  
  5. SUBROUTINE MESUDE(MELEME)
  6.  
  7. IMPLICIT INTEGER(I-N)
  8. IMPLICIT REAL*8 (A-H,O-Z)
  9.  
  10. -INC PPARAM
  11. -INC CCOPTIO
  12. -INC SMELEME
  13. -INC SMCHPOI
  14. -INC SMCOORD
  15. -INC CCREEL
  16.  
  17. LOGICAL ISEG3
  18. SEGMENT ICPR(NBPTS)
  19. SEGMENT INLPP
  20. integer INL(NP1)
  21. ENDSEGMENT
  22.  
  23. segact mcoord
  24.  
  25. C---- CAS DU MAILLAGE VIDE
  26.  
  27. ISOU1=LISOUS(/1)
  28. IF (ITYPEL.EQ.0.AND.ISOU1.EQ.0) THEN
  29. NAT=1
  30. NSOUPO=0
  31. SEGINI,MCHPOI
  32. MCHPOI.IFOPOI=IFOUR
  33. MCHPOI.JATTRI(1)=1
  34. CALL ACTOBJ('CHPOINT ',MCHPOI,1)
  35. CALL ECROBJ('CHPOINT ',MCHPOI)
  36. RETURN
  37. ENDIF
  38.  
  39. C---- CAS USUEL
  40.  
  41. C Changement du maillage en lignes : appel a CHANLG
  42. CALL ECROBJ('MAILLAGE',MELEME)
  43. CALL CHANLG
  44. IF (IERR.NE.0) RETURN
  45. CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  46. CALL ACTOBJ('MAILLAGE',MELEME,1)
  47. IF (IERR.NE.0) RETURN
  48.  
  49. NBSOU1 = LISOUS(/1)
  50. IF (NBSOU1.NE.0) THEN
  51. CALL ERREUR(426)
  52. RETURN
  53. ENDIF
  54.  
  55. C IPT1 : maillage des segments, IPT2 : des points
  56. IPT2 = MELEME
  57. CALL CHANGE(IPT2,1)
  58.  
  59. IPT1 = MELEME
  60. NBEL1 = IPT1.NUM(/2)
  61. SEGACT MCOORD
  62.  
  63. C Initialisation du CHPOINT
  64. NAT = 1
  65. NSOUPO = 1
  66. SEGINI, MCHPOI
  67. MTYPOI = ' '
  68. MOCHDE = ' CHPOINT de densite de mailles '
  69. JATTRI(1) = 1
  70. IFOPOI = IFOUR
  71.  
  72. NC = 1
  73. SEGINI, MSOUPO
  74. IPCHP(1) = MSOUPO
  75. NOCOMP(1) = 'SCAL'
  76. IGEOC = IPT2
  77.  
  78. N = IPT2.NUM(/2)
  79. SEGINI, MPOVAL
  80. IPOVAL = MPOVAL
  81.  
  82. C Segments de travail
  83. SEGINI,ICPR
  84. DO 10 IP=1,N
  85. ICPR(IPT2.NUM(1,IP)) = IP
  86. 10 CONTINUE
  87. C Segment INLPP : nb. ligne par point
  88. NP1 = N
  89. SEGINI,INLPP
  90.  
  91. C Gestion maillage quadratique
  92. ISEG3 = (ITYPEL.EQ.3)
  93. IS2 = 2
  94. IF (ISEG3) IS2 = 3
  95.  
  96. C Calcul de la densite
  97. VPOCHA(1,1) = 0.D0
  98. ID1 = IDIM + 1
  99. DO 20 K=1,NBEL1
  100. IP1 = IPT1.NUM(1,K)
  101. IP2 = IPT1.NUM(IS2,K)
  102.  
  103. XD1 = 0.D0
  104. DO 21 I=1,IDIM
  105. XI1 = XCOOR((IP1-1)*ID1+I)
  106. XI2 = XCOOR((IP2-1)*ID1+I)
  107. XD1 = XD1 + (XI2 - XI1)**2
  108. 21 CONTINUE
  109. XD1 = SQRT(XD1)
  110.  
  111. VPOCHA(ICPR(IP1),1) = VPOCHA(ICPR(IP1),1)+XD1
  112. VPOCHA(ICPR(IP2),1) = VPOCHA(ICPR(IP2),1)+XD1
  113. iNL(ICPR(IP1)) = INL(ICPR(IP1))+1
  114. iNL(ICPR(IP2)) = INL(ICPR(IP2))+1
  115. * write(6,*) 'IP1,IP2,XD1 =',IP1,IP2,XD1
  116. 20 CONTINUE
  117.  
  118. DO 30 I=1,N
  119. * en seg3 les points milieux ne sont pas encore remplis
  120.  
  121. if (inl(i).le.0) inl(i)=igrand
  122. if (inl(i).gt.0) then
  123. VPOCHA(I,1) = VPOCHA(I,1) / iNL(I)
  124. else
  125. VPOCHA(I,1) = 0.d0
  126. endif
  127. 30 CONTINUE
  128.  
  129. IF (ISEG3) THEN
  130. DO 40 K=1,NBEL1
  131. IP1 = IPT1.NUM(1,K)
  132. IP2 = IPT1.NUM(IS2,K)
  133. XD1 = VPOCHA(ICPR(IP1),1)
  134. XD2 = VPOCHA(ICPR(IP2),1)
  135. XDM = 0.5D0*(XD1+XD2)
  136. IPM = IPT1.NUM(2,K)
  137. VPOCHA(ICPR(IPM),1) = XDM
  138. 40 CONTINUE
  139. ENDIF
  140. segsup inlpp
  141.  
  142. CALL ACTOBJ('CHPOINT ',MCHPOI,1)
  143. CALL ECROBJ('CHPOINT ',MCHPOI)
  144.  
  145. RETURN
  146. END
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  

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