Télécharger baryce.eso

Retour à la liste

Numérotation des lignes :

baryce
  1. C BARYCE SOURCE GOUNAND 21/04/13 21:15:00 10956
  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 3 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. 5 XGRAV(L)=XGRAV(L)+XCOOR(IREF+L)
  64. 3 CONTINUE
  65.  
  66. IF (LISOUS(/1).NE.0) SEGDES IPT1
  67. 2 CONTINUE
  68.  
  69. SEGDES,MELEME
  70.  
  71. C ERREUR SI MAILLAGE VIDE
  72. IF (NPOIN.EQ.0) THEN
  73. MOTERR(1:8)='MAILLAGE'
  74. CALL ERREUR(1027)
  75. RETURN
  76. ENDIF
  77.  
  78. C ON MET LE CENTRE DE GRAVITE DANS LA TABLE DES POINTS
  79. NBPTS=NBPTS+1
  80. SEGADJ,MCOORD
  81. IREF=(NBPTS-1)*IDIMP1
  82. DO 7 I=1,IDIMP1
  83. XCOOR(IREF+I)=XGRAV(I)/NPOIN
  84. 7 CONTINUE
  85. KGRAV=nbpts
  86.  
  87. CALL ECROBJ('POINT ',KGRAV)
  88. RETURN
  89.  
  90.  
  91. 10 CONTINUE
  92. C======================================================================
  93. c BARYcentre de chaque ELEMent du maillage
  94. C======================================================================
  95.  
  96. c CREATION D'UN NOUVEAU MAILLAGE DE POI1
  97. NBNN = 1
  98. NBELEM = 0
  99. NBSOUS = 0
  100. NBREF = 0
  101. SEGINI,IPT2
  102. IPT2.ITYPEL = 1
  103. J2 = 0
  104.  
  105. SEGACT,MELEME
  106. IPT1=MELEME
  107.  
  108. C BOUCLE SUR LE(S) MAILLAGE(S) ELEMENTAIRES
  109. DO 12 IO=1,MAX(1,LISOUS(/1))
  110. IF (LISOUS(/1).NE.0) THEN
  111. IPT1=LISOUS(IO)
  112. SEGACT IPT1
  113. ENDIF
  114.  
  115. NBELEM = NBELEM + IPT1.NUM(/2)
  116. SEGADJ,IPT2
  117. NBPTSJ=NBPTS
  118. NBPTS=NBPTS + IPT1.NUM(/2)
  119. SEGADJ,MCOORD
  120.  
  121. DO 13 J=1,IPT1.NUM(/2)
  122. XGRAV(1)=0.D0
  123. XGRAV(2)=0.D0
  124. XGRAV(3)=0.D0
  125. XGRAV(4)=0.D0
  126. DO 14 I=1,IPT1.NUM(/1)
  127. IREF=IDIMP1*(IPT1.NUM(I,J)-1)
  128. DO 15 L=1,IDIMP1
  129. 15 XGRAV(L)=XGRAV(L)+XCOOR(IREF+L)
  130. 14 CONTINUE
  131. C ON MET LE CENTRE DE GRAVITE DANS:
  132. C LE MAILLAGE IPT2 + LA TABLE DES POINTS XCOOR
  133. NBPTSJ=NBPTSJ+1
  134. J2=J2+1
  135. IPT2.NUM(1,J2)=NBPTSJ
  136. IPT2.ICOLOR(J2)=IPT1.ICOLOR(J)
  137. IREF=(NBPTSJ-1)*IDIMP1
  138. DO 17 I=1,IDIMP1
  139. XCOOR(IREF+I)=XGRAV(I)/IPT1.NUM(/1)
  140. 17 CONTINUE
  141. 13 CONTINUE
  142. IF (LISOUS(/1).NE.0) SEGDES IPT1
  143. 12 CONTINUE
  144.  
  145. C ERREUR SI MAILLAGE VIDE
  146. IF (NBELEM.EQ.0) THEN
  147. MOTERR(1:8)='MAILLAGE'
  148. CALL ERREUR(1027)
  149. RETURN
  150. ENDIF
  151.  
  152. SEGDES,MELEME
  153. SEGDES,IPT2
  154. CALL ECROBJ('MAILLAGE',IPT2)
  155.  
  156.  
  157. RETURN
  158. END
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  

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