Télécharger rlexco.eso

Retour à la liste

Numérotation des lignes :

rlexco
  1. C RLEXCO SOURCE PV090527 25/01/07 14:42:58 12115
  2. SUBROUTINE RLEXCO(MLEFC,MACOE2,MCHELM)
  3. C
  4. C**** Definition de MCHAML qui contient les coefficients
  5. C pour le calcul du gradient
  6. C
  7. IMPLICIT INTEGER(I-N)
  8.  
  9. -INC PPARAM
  10. -INC CCOPTIO
  11. -INC SMCOORD
  12. INTEGER NBL, NBTPOI
  13. SEGMENT MLELEM
  14. INTEGER INDEX(NBL+1)
  15. INTEGER LESPOI(NBTPOI)
  16. ENDSEGMENT
  17. POINTEUR MLEFC.MLELEM
  18. C
  19. INTEGER N1,N2
  20. SEGMENT MATRIX
  21. REAL*8 MAT(N1,N2)
  22. ENDSEGMENT
  23. POINTEUR MACOE2.MATRIX
  24. C
  25. INTEGER N3,L1,N1PTEL,N1EL,N2PTEL,N2EL
  26. -INC SMCHAML
  27. INTEGER NBNN,NBELEM,NBSOUS,NBREF
  28. -INC SMELEME
  29. INTEGER JG
  30. -INC SMLENTI
  31. POINTEUR MLELAS.MLENTI, MLECON.MLENTI, MLEELT.MLENTI
  32. C
  33. INTEGER NMAX, IELEM, IPOS, IPOS1, ISOUS, NTSOUS, NG
  34. & , I1, I2, I3, IPOS2
  35. C
  36. SEGACT MLEFC
  37. SEGACT MACOE2
  38. NBL=MLEFC.INDEX(/1)-1
  39. C
  40. NMAX=0
  41. IPOS1=MLEFC.INDEX(1)
  42. DO IELEM = 1, NBL
  43. IPOS=IPOS1
  44. IPOS1=MLEFC.INDEX(1+IELEM)
  45. NMAX=MAX(NMAX,IPOS1-IPOS)
  46. ENDDO
  47. C
  48. C**** L'elt le plus grand a NMAX point
  49. C
  50. JG=NMAX
  51. SEGINI MLELAS
  52. SEGINI MLECON
  53. JG=NBL
  54. SEGINI MLEELT
  55. C
  56. C**** Les MLENTI ici initialisé
  57. C
  58. C MLELAS+MLEELT = structure pour definir les MAILLAGEs
  59. C du MCHELM
  60. C
  61. C NELT1=MLELAS.LECT(I) = 0 -> il n'y a pas d'elts avec I points
  62. C > 0 -> NELT1 a I points
  63. C Les autres elts avec I points sont
  64. C dedans MLEELT (liste chaînée qui
  65. C est lié à MLEELT)
  66. C
  67. C MLECON.LECT(I) = nombre de elts avec I points
  68. C
  69. C N.B: MLECON.LECT(I) est une information redondantemais pratique
  70. C
  71. C
  72. IPOS1=MLEFC.INDEX(1)
  73. DO IELEM = 1, NBL, 1
  74. IPOS=IPOS1
  75. IPOS1=MLEFC.INDEX(1+IELEM)
  76. NBNN=IPOS1-IPOS
  77. MLECON.LECT(NBNN)=MLECON.LECT(NBNN)+1
  78. MLEELT.LECT(IELEM)= MLELAS.LECT(NBNN)
  79. MLELAS.LECT(NBNN)=IELEM
  80. ENDDO
  81. C
  82. C**** Les supports
  83. C
  84. NTSOUS=0
  85. DO ISOUS=1,NMAX,1
  86. IF(MLECON.LECT(ISOUS).NE.0) NTSOUS=NTSOUS+1
  87. ENDDO
  88. C
  89. C**** Initialisation du MCHELM
  90. C
  91. N1=NTSOUS
  92. N2=IDIM
  93. N3=6
  94. L1=8
  95. SEGINI MCHELM
  96. MCHELM.TITCHE='Gradient'
  97. MCHELM.IFOCHE=IFOUR
  98. C
  99. ISOUS=0
  100. NBSOUS=0
  101. NBREF=0
  102. DO I1 = 1, NMAX, 1
  103. NBELEM=MLECON.LECT(I1)
  104. IF(NBELEM .GT. 0)THEN
  105. ISOUS=ISOUS+1
  106. NBNN=I1
  107. SEGINI MELEME
  108. C ITYPEL=32 -> 'POLY'
  109. ITYPEL=32
  110. MCHELM.IMACHE(ISOUS)=MELEME
  111. MCHELM.CONCHE(ISOUS)=' '
  112. MCHELM.INFCHE(ISOUS,6)=1
  113. SEGINI MCHAML
  114. MCHELM.ICHAML(ISOUS)=MCHAML
  115. MCHAML.NOMCHE(1)='alphax'
  116. MCHAML.NOMCHE(2)='alphay'
  117. MCHAML.TYPCHE(1)='REAL*8 '
  118. MCHAML.TYPCHE(2)='REAL*8 '
  119. N1PTEL=NBNN
  120. N1EL=NBELEM
  121. N2PTEL=0
  122. N2EL=0
  123. SEGINI MELVA1
  124. SEGINI MELVA2
  125. MCHAML.IELVAL(1)=MELVA1
  126. MCHAML.IELVAL(2)=MELVA2
  127. IF(IDIM.EQ.3)THEN
  128. MCHAML.NOMCHE(3)='alphaz'
  129. MCHAML.TYPCHE(3)='REAL*8 '
  130. SEGINI MELVA3
  131. MCHAML.IELVAL(3)=MELVA3
  132. ENDIF
  133. IELEM=MLELAS.LECT(I1)
  134. IPOS=MLEFC.INDEX(IELEM)
  135. IPOS1=MLEFC.INDEX(IELEM+1)
  136. IF((IPOS1-IPOS).NE.NBNN)THEN
  137. WRITE(IOIMP,*) 'subroutine rlexco.eso'
  138. CALL ERREUR(5)
  139. GOTO 9999
  140. ENDIF
  141. C
  142. C********** MELEME.NUM(1,*) est le point face
  143. C
  144. DO I3=1,NBNN,1
  145. IPOS2=IPOS+I3-1
  146. NG=MLEFC.LESPOI(IPOS2)
  147. MELEME.NUM(I3,1)=NG
  148. MELVA1.VELCHE(I3,1)=MACOE2.MAT(1,IPOS2)
  149. MELVA2.VELCHE(I3,1)=MACOE2.MAT(2,IPOS2)
  150. IF(IDIM.EQ.3) MELVA3.VELCHE(I3,1)=MACOE2.MAT(3,IPOS2)
  151. ENDDO
  152. C
  153. DO I2=2,NBELEM,1
  154. IELEM=MLEELT.LECT(IELEM)
  155. IPOS=MLEFC.INDEX(IELEM)
  156. IPOS1=MLEFC.INDEX(IELEM+1)
  157. IF((IPOS1-IPOS).NE.NBNN)THEN
  158. WRITE(IOIMP,*) 'subroutine rlexco.eso'
  159. CALL ERREUR(5)
  160. GOTO 9999
  161. ENDIF
  162. C
  163. DO I3=1,NBNN,1
  164. IPOS2=IPOS+I3-1
  165. NG=MLEFC.LESPOI(IPOS2)
  166. MELEME.NUM(I3,I2)=NG
  167. MELVA1.VELCHE(I3,I2)=MACOE2.MAT(1,IPOS2)
  168. MELVA2.VELCHE(I3,I2)=MACOE2.MAT(2,IPOS2)
  169. IF(IDIM.EQ.3) MELVA3.VELCHE(I3,I2)=MACOE2.MAT(3,IPOS2)
  170. ENDDO
  171. ENDDO
  172. C
  173. IELEM=MLEELT.LECT(IELEM)
  174. IF(IELEM.NE.0)THEN
  175. WRITE(IOIMP,*) 'subroutine rlexco.eso'
  176. CALL ERREUR(5)
  177. GOTO 9999
  178. ENDIF
  179. SEGDES MCHAML
  180. SEGDES MELEME
  181. SEGDES MELVA1
  182. SEGDES MELVA2
  183. IF(IDIM.EQ.3) SEGDES MELVA3
  184. ENDIF
  185. ENDDO
  186. C
  187. SEGDES MCHELM
  188. C
  189. SEGSUP MLEFC
  190. SEGSUP MACOE2
  191. SEGSUP MLEELT
  192. SEGSUP MLECON
  193. SEGSUP MLELAS
  194. C
  195. 9999 RETURN
  196. END
  197.  
  198.  
  199.  
  200.  

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