Télécharger alea2.eso

Retour à la liste

Numérotation des lignes :

alea2
  1. C ALEA2 SOURCE CB215821 24/04/12 21:15:04 11897
  2. SUBROUTINE ALEA2
  3. & (MELENT,LADIM,XDIR1,XDIR2,XDIR3,ZSIG,CLAMD1,CLAMD2,CLAMD3,VALMOY,
  4. & DELZET,OMMAX)
  5. C
  6. C=======================================================================
  7. C
  8. C Subroutine ALEA2 : génération d'un CHPOINT aléatoire
  9. C
  10. C Appellée par ALEA
  11. C
  12. C---------------------
  13. C Variables internes :
  14. C---------------------
  15. C
  16. C NBEL : nombre d'éléments
  17. C NBPT : nombre de noeuds par éléments
  18. C NBPGAU : nombre de valeurs à stocker par élément
  19. C
  20. C IPTABL : pointeur sur la table domaine, si elle existe
  21. C
  22. C=======================================================================
  23. C
  24. IMPLICIT INTEGER(I-N)
  25. IMPLICIT REAL*8(A-H,O-Z)
  26. REAL*8 ZDIST, VALMOY, OMMAX
  27. C
  28.  
  29. -INC PPARAM
  30. -INC CCOPTIO
  31. -INC CCREEL
  32. -INC CCGEOME
  33. -INC SMELEME
  34. -INC SMCOORD
  35. -INC SMMODEL
  36. -INC SMCHPOI
  37. -INC SMTABLE
  38. -INC SMINTE
  39.  
  40. C Table des coordonnées des points supports
  41. SEGMENT TABCOR
  42. REAL*8 COR(NBL,3)
  43. ENDSEGMENT
  44.  
  45. C Table des valeurs en ces points
  46. SEGMENT TABVAL
  47. REAL*8 VAL(NBL)
  48. ENDSEGMENT
  49.  
  50. DIMENSION XDIR1(3),XDIR2(3),XDIR3(3)
  51. POINTEUR MELENT.MELEME, MELSUP.MELEME
  52. C
  53. C epsilon servant à différents tests
  54. EPS = 1.D-12
  55.  
  56. * ---------
  57. * 2. On construit les coordonnées des points supports
  58. * on initialise le champ résultat en parallèle (CHPOINT)
  59.  
  60. * On tire du maillage les points supports voulus
  61. * en changeant le maillage en POI1 si ce n'est déjà fait.
  62. MELSUP = MELENT
  63. SEGACT MELENT
  64. IF (MELENT.ITYPEL.NE.1) THEN
  65. CALL CHANGE(MELSUP,1)
  66. ENDIF
  67. SEGDES MELENT
  68. *
  69. * 2a. Construction des coordonnnées des points supports :
  70. *
  71. * MELSUP est un maillage simple de POI1
  72. * Les points existent, et leurs coordonnées sont dans XCOOR.
  73. SEGACT MELSUP
  74. NBL = MELSUP.NUM(/2)
  75. SEGINI TABCOR
  76. SEGACT,MCOORD
  77. DO 9 I=1,NBL
  78. IREF = (IDIM+1) * (MELSUP.NUM(1,I)-1)
  79. DO 11 K=1,IDIM
  80. COR(I,K) = XCOOR(IREF+K)
  81. 11 CONTINUE
  82. 9 CONTINUE
  83. SEGDES MELSUP,MCOORD
  84. *
  85. * 2b. Transformation des coordonnées dans le repère adimensionné
  86. * par la matrice lambda de dimension LADIM.
  87. *
  88. IF (IDIM.EQ.2) THEN
  89. IF (LADIM.EQ.1) THEN
  90. * 2D stat 1D
  91. DO 20 L=1,NBL
  92. XX = COR(L,1)
  93. YY = COR(L,2)
  94. COR(L,1) = ((XX * XDIR1(1)) + (YY * XDIR1(2))) / CLAMD1
  95. 20 CONTINUE
  96. ELSE
  97. * 2D stat 2D
  98. DO 21 L=1,NBL
  99. XX = COR(L,1)
  100. YY = COR(L,2)
  101. COR(L,1) = ((XX * XDIR1(1)) + (YY * XDIR1(2))) / CLAMD1
  102. COR(L,2) = ((XX * XDIR2(1)) + (YY * XDIR2(2))) / CLAMD2
  103. 21 CONTINUE
  104. ENDIF
  105. ELSE
  106. IF (LADIM.EQ.1) THEN
  107. * 3D stat 1D
  108. DO 22 L=1,NBL
  109. XX = COR(L,1)
  110. YY = COR(L,2)
  111. ZZ = COR(L,3)
  112. COR(L,1) = ( (XX * XDIR1(1)) + (YY * XDIR1(2))
  113. & + (ZZ * XDIR1(3)) ) / CLAMD1
  114. 22 CONTINUE
  115. ELSEIF (LADIM.EQ.2) THEN
  116. * 3D stat 2D
  117. DO 23 L=1,NBL
  118. XX = COR(L,1)
  119. YY = COR(L,2)
  120. ZZ = COR(L,3)
  121. COR(L,1) = ( (XX * XDIR1(1)) + (YY * XDIR1(2))
  122. & + (ZZ * XDIR1(3)) ) / CLAMD1
  123. COR(L,2) = ( (XX * XDIR2(1)) + (YY * XDIR2(2))
  124. & + (ZZ * XDIR2(3)) ) / CLAMD2
  125. 23 CONTINUE
  126. ELSE
  127. * 3D stat 3D
  128. DO 24 L=1,NBL
  129. XX = COR(L,1)
  130. YY = COR(L,2)
  131. ZZ = COR(L,3)
  132. COR(L,1) = ( (XX * XDIR1(1)) + (YY * XDIR1(2))
  133. & + (ZZ * XDIR1(3)) ) / CLAMD1
  134. COR(L,2) = ( (XX * XDIR2(1)) + (YY * XDIR2(2))
  135. & + (ZZ * XDIR2(3)) ) / CLAMD2
  136. COR(L,3) = ( (XX * XDIR3(1)) + (YY * XDIR3(2))
  137. & + (ZZ * XDIR3(3)) ) / CLAMD3
  138. 24 CONTINUE
  139. ENDIF
  140. ENDIF
  141.  
  142. * 2c. En-tête du CHPO (Diffus, comp. 'SCAL')
  143. NAT = 1
  144. NSOUPO = 1
  145. SEGINI MCHPOI
  146. MTYPOI = ' '
  147. MOCHDE = 'Champ-point cree par l operateur ALEA'
  148. JATTRI(1) = 1
  149. IFOPOI = IFOUR
  150. NC = 1
  151. SEGINI MSOUPO
  152. IPCHP(1) = MSOUPO
  153. NOCOMP(1) = 'SCAL'
  154. IGEOC = MELSUP
  155. NOHARM(1) = NIFOUR
  156. N = NBL
  157. SEGINI MPOVAL
  158. IPOVAL = MPOVAL
  159.  
  160. * ---------
  161. * 3. Génération aléatoire :
  162. *
  163. CALL BANTOU(TABCOR,TABVAL,LADIM,ZSIG,VALMOY,DELZET,OMMAX)
  164. SEGDES TABCOR
  165. *
  166. * ---------
  167. * 4. Construction champ résultat :
  168. *
  169. * BANTOU renvoie le résultat sous la forme d'une table de valeur,
  170. * TABVAL active, que l'on doit maintenant convertir en MPOVAL.
  171. DO 2 IEL=1,NBL
  172. VPOCHA(IEL,1) = VAL(IEL)
  173. 2 CONTINUE
  174.  
  175. SEGDES MPOVAL,MSOUPO,MCHPOI
  176. SEGSUP TABVAL
  177.  
  178. * ---------
  179. * 5. Ecriture en sortie
  180. *
  181. CALL ACTOBJ('CHPOINT ',MCHPOI,1)
  182. CALL ECROBJ('CHPOINT ',MCHPOI)
  183.  
  184. END
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  

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