Télécharger baryce.eso

Retour à la liste

Numérotation des lignes :

baryce
  1. C BARYCE SOURCE CB215821 26/08/24 21:15:13 12622
  2. *
  3. *---------------------------------------------------------------*
  4. * CALCUL LE BARYCENTRE D'UN OBJET MAILLAGE
  5. *
  6. * Creation : ???
  7. * Modif : BP, 2016-12-13 : ajout de l'option 'ELEM'
  8. *---------------------------------------------------------------*
  9. *
  10. SUBROUTINE BARYCE
  11. IMPLICIT INTEGER(I-N)
  12. IMPLICIT REAL*8(A-H,O-Z)
  13.  
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC SMELEME
  18. -INC SMCOORD
  19.  
  20. DIMENSION XGRAV(4)
  21. CHARACTER*4 MOELEM(1)
  22. DATA MOELEM/'ELEM'/
  23.  
  24. C======================================================================
  25. c LECTURES, ACTIVATIONS ET INITIALISATIONS
  26. C======================================================================
  27.  
  28. CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  29. IF (IERR.NE.0) RETURN
  30.  
  31. SEGACT,MCOORD*mod
  32. IDIMP1=IDIM+1
  33.  
  34. CALL LIRMOT(MOELEM,1,IELEM,0)
  35. IF (IELEM.EQ.1) GOTO 10
  36.  
  37.  
  38. C======================================================================
  39. c BARYcentre du maillage
  40. C======================================================================
  41.  
  42. XGRAV(1)=0.D0
  43. XGRAV(2)=0.D0
  44. XGRAV(3)=0.D0
  45. XGRAV(4)=0.D0
  46. NPOIN=0
  47.  
  48. SEGACT,MELEME
  49. IPT1=MELEME
  50.  
  51. C BOUCLE SUR LE(S) MAILLAGE(S) ELEMENTAIRES
  52. DO 2 IO=1,MAX(1,LISOUS(/1))
  53. IF (LISOUS(/1).NE.0) THEN
  54. IPT1=LISOUS(IO)
  55. SEGACT IPT1
  56. ENDIF
  57.  
  58. NPOIN=NPOIN+IPT1.NUM(/2)*IPT1.NUM(/1)
  59. DO 18 J=1,IPT1.NUM(/2)
  60. DO 3 I=1,IPT1.NUM(/1)
  61. IREF=IDIMP1*(IPT1.NUM(I,J)-1)
  62. DO 5 L=1,IDIMP1
  63. XGRAV(L)=XGRAV(L)+XCOOR(IREF+L)
  64. 5 CONTINUE
  65. 3 CONTINUE
  66. 18 CONTINUE
  67.  
  68. IF (LISOUS(/1).NE.0) SEGDES IPT1
  69. 2 CONTINUE
  70.  
  71. SEGDES,MELEME
  72.  
  73. C ERREUR SI MAILLAGE VIDE
  74. IF (NPOIN.EQ.0) THEN
  75. MOTERR(1:8)='MAILLAGE'
  76. CALL ERREUR(1027)
  77. RETURN
  78. ENDIF
  79.  
  80. C ON MET LE CENTRE DE GRAVITE DANS LA TABLE DES POINTS
  81. NBPTS=NBPTS+1
  82. SEGADJ,MCOORD
  83. IREF=(NBPTS-1)*IDIMP1
  84. DO 7 I=1,IDIMP1
  85. XCOOR(IREF+I)=XGRAV(I)/NPOIN
  86. 7 CONTINUE
  87. KGRAV=nbpts
  88.  
  89. CALL ECROBJ('POINT ',KGRAV)
  90. RETURN
  91.  
  92.  
  93. 10 CONTINUE
  94. C======================================================================
  95. c BARYcentre de chaque ELEMent du maillage
  96. C======================================================================
  97.  
  98. c CREATION D'UN NOUVEAU MAILLAGE DE POI1
  99. NBNN = 1
  100. NBELEM = 0
  101. NBSOUS = 0
  102. NBREF = 0
  103. SEGINI,IPT2
  104. IPT2.ITYPEL = 1
  105. J2 = 0
  106.  
  107. SEGACT,MELEME
  108. IPT1=MELEME
  109.  
  110. C BOUCLE SUR LE(S) MAILLAGE(S) ELEMENTAIRES
  111. DO 12 IO=1,MAX(1,LISOUS(/1))
  112. IF (LISOUS(/1).NE.0) THEN
  113. IPT1=LISOUS(IO)
  114. SEGACT IPT1
  115. ENDIF
  116.  
  117. NBELEM = NBELEM + IPT1.NUM(/2)
  118. SEGADJ,IPT2
  119. NBPTSJ=NBPTS
  120. NBPTS=NBPTS + IPT1.NUM(/2)
  121. SEGADJ,MCOORD
  122.  
  123. DO 13 J=1,IPT1.NUM(/2)
  124. XGRAV(1)=0.D0
  125. XGRAV(2)=0.D0
  126. XGRAV(3)=0.D0
  127. XGRAV(4)=0.D0
  128. DO 14 I=1,IPT1.NUM(/1)
  129. IREF=IDIMP1*(IPT1.NUM(I,J)-1)
  130. DO 15 L=1,IDIMP1
  131. XGRAV(L)=XGRAV(L)+XCOOR(IREF+L)
  132. 15 CONTINUE
  133. 14 CONTINUE
  134. C ON MET LE CENTRE DE GRAVITE DANS:
  135. C LE MAILLAGE IPT2 + LA TABLE DES POINTS XCOOR
  136. NBPTSJ=NBPTSJ+1
  137. J2=J2+1
  138. IPT2.NUM(1,J2)=NBPTSJ
  139. IPT2.ICOLOR(J2)=IPT1.ICOLOR(J)
  140. IREF=(NBPTSJ-1)*IDIMP1
  141. DO 17 I=1,IDIMP1
  142. XCOOR(IREF+I)=XGRAV(I)/IPT1.NUM(/1)
  143. 17 CONTINUE
  144. 13 CONTINUE
  145. IF (LISOUS(/1).NE.0) SEGDES IPT1
  146. 12 CONTINUE
  147.  
  148. C ERREUR SI MAILLAGE VIDE
  149. IF (NBELEM.EQ.0) THEN
  150. MOTERR(1:8)='MAILLAGE'
  151. CALL ERREUR(1027)
  152. RETURN
  153. ENDIF
  154.  
  155. SEGDES,MELEME
  156. SEGDES,IPT2
  157. CALL ECROBJ('MAILLAGE',IPT2)
  158.  
  159.  
  160. RETURN
  161. END
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  

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