Télécharger crectr.eso

Retour à la liste

Numérotation des lignes :

crectr
  1. C CRECTR SOURCE PV 20/03/24 21:16:35 10554
  2. SUBROUTINE CRECTR
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C*************************************************************************
  6. C
  7. C OBJET : Cree un point au centre de gravite des éléments d'un maillage
  8. C (On ignore si ce point existe déja dans le cas d'éléments quadratiques)
  9. C SYNTAXE : OBJ2 = KCTR OBJ1 <'INCL' TABDOM> ;
  10. C
  11. C OBJ1 : objet 'MAILLAGE'
  12. C OBJ2 : objet 'MAILLAGE' constitué d'éléments POI1
  13. C
  14. C*************************************************************************
  15. -INC SMELEME
  16. POINTEUR MP1.MELEME
  17. POINTEUR MELEMC.MELEME,MELEF1.MELEME
  18. -INC SMTABLE
  19. POINTEUR MTABD.MTABLE
  20. -INC SMCOORD
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. CHARACTER*4 LISMO(1)
  24. PARAMETER (NTB=1)
  25. DIMENSION KTAB(NTB)
  26. CHARACTER*8 LTAB(NTB),TYPE
  27. DATA LISMO /'INCL'/
  28. DATA LTAB /'DOMAINE '/
  29.  
  30. C***
  31.  
  32. CALL LIROBJ('MAILLAGE',MELEME,1,IRET)
  33. IF(IRET.EQ.0)RETURN
  34.  
  35. KINC=0
  36. CALL LIRMOT(LISMO,1,IP,0)
  37. IF(IP.NE.0)THEN
  38. KINC=1
  39. NTO=1
  40. CALL LITABS(LTAB,KTAB,NTB,NTO,IRET)
  41. IF(IRET.EQ.0)RETURN
  42. CALL LIRREE(XVAL,1,IRET)
  43. IF(IRET.EQ.0)RETURN
  44. MTABD=KTAB(1)
  45. TYPE=' '
  46. CALL ACMO(MTABD,'CENTRE',TYPE,MELEMC)
  47. C call ecrobj('MAILLAGE',MELEMC)
  48. IF(TYPE.NE.'MAILLAGE')RETURN
  49. TYPE=' '
  50. CALL ACMO(MTABD,'FACE',TYPE,MELEF1)
  51. ENDIF
  52.  
  53. CALL KNBEL(MELEME,NELN)
  54.  
  55. segact mcoord*mod
  56. NBPTI=nbpts
  57. NBPTS=NBPTI+NELN
  58. SEGADJ MCOORD
  59.  
  60. NBSOUS=0
  61. NBREF=0
  62. NBNN=1
  63. NBELEM=NELN
  64. SEGINI MP1
  65. MP1.ITYPEL=1
  66. SEGACT MELEME
  67. NBSOUS=LISOUS(/1)
  68. IF(NBSOUS.EQ.0)NBSOUS=1
  69. K0=0
  70.  
  71. DO 1 L=1,NBSOUS
  72. IF(NBSOUS.NE.1)THEN
  73. IPT1=LISOUS(L)
  74. SEGACT IPT1
  75. ELSE
  76. IPT1=MELEME
  77. ENDIF
  78. NP=IPT1.NUM(/1)
  79. NEL=IPT1.NUM(/2)
  80.  
  81. IF(IDIM.EQ.2)THEN
  82. DO 2 K=1,NEL
  83. NK=K0+K
  84. XC=0.D0
  85. YC=0.D0
  86. DO 21 I=1,NP
  87. IP=IPT1.NUM(I,K)
  88. XC=XC+XCOOR((IP-1)*(IDIM+1)+1)
  89. YC=YC+XCOOR((IP-1)*(IDIM+1)+2)
  90. 21 CONTINUE
  91. XC=XC/DBLE(NP)
  92. YC=YC/DBLE(NP)
  93. XD=XCOOR(IP*(IDIM+1))
  94.  
  95. IP=NBPTI+NK
  96. XCOOR((IP-1)*(IDIM+1)+1)=XC
  97. XCOOR((IP-1)*(IDIM+1)+2)=YC
  98. XCOOR(IP*(IDIM+1))=XD
  99. MP1.NUM(1,NK)=IP
  100.  
  101. 2 CONTINUE
  102.  
  103.  
  104. ELSEIF(IDIM.EQ.3)THEN
  105. DO 3 K=1,NEL
  106. NK=K0+K
  107. XC=0.D0
  108. YC=0.D0
  109. ZC=0.D0
  110. DO 31 I=1,NP
  111. IP=IPT1.NUM(I,K)
  112. XC=XC+XCOOR((IP-1)*(IDIM+1)+1)
  113. YC=YC+XCOOR((IP-1)*(IDIM+1)+2)
  114. ZC=ZC+XCOOR((IP-1)*(IDIM+1)+3)
  115. 31 CONTINUE
  116. XC=XC/DBLE(NP)
  117. YC=YC/DBLE(NP)
  118. ZC=ZC/DBLE(NP)
  119. XD=XCOOR(IP*(IDIM+1))
  120.  
  121. IP=NBPTI+NK
  122. XCOOR((IP-1)*(IDIM+1)+1)=XC
  123. XCOOR((IP-1)*(IDIM+1)+2)=YC
  124. XCOOR((IP-1)*(IDIM+1)+3)=ZC
  125. XCOOR(IP*(IDIM+1))=XD
  126. MP1.NUM(1,NK)=IP
  127.  
  128. 3 CONTINUE
  129. ENDIF
  130. K0=K0+NEL
  131. IF(NBSOUS.NE.1)THEN
  132. SEGDES IPT1
  133. ENDIF
  134. 1 CONTINUE
  135. SEGDES MELEME
  136. IF(KINC.NE.0)THEN
  137. WRITE(6,1951)NELN
  138. 1951 FORMAT(1X,'KCTR : Creation des points centre :',
  139. & ' Nombre de points a eliminer :',I7)
  140. CALL ECMO(MTABD,'BIDON','MAILLAGE',MP1)
  141. CALL ECRREE(XVAL)
  142. CALL ECROBJ('MAILLAGE',MELEMC)
  143. CALL ECROBJ('MAILLAGE',MP1 )
  144. CALL PRELIM(0)
  145. CALL LIROBJ('MAILLAGE',IP,1,IRET)
  146. C write(6,*)' Retour prelim melemc,mp1,ip=',melemc,mp1,ip
  147. IF(MELEF1.NE.0)THEN
  148. WRITE(6,*)' Elimination avec les faces'
  149. CALL ECRREE(XVAL)
  150. CALL ECROBJ('MAILLAGE',MELEF1)
  151. CALL ECROBJ('MAILLAGE',MP1)
  152. CALL PRELIM(0)
  153. CALL LIROBJ('MAILLAGE',IP,1,IRET)
  154. C write(6,*)' Retour prelim melemc,mp1,ip=',melemc,mp1,ip
  155. ENDIF
  156. ELSE
  157. C Car normalement, ELIM a sans doute desactive MP1
  158. SEGDES MP1
  159. ENDIF
  160. CALL ECROBJ('MAILLAGE',MP1)
  161. RETURN
  162.  
  163. END
  164.  
  165.  
  166.  
  167.  
  168.  

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