Télécharger bantou.eso

Retour à la liste

Numérotation des lignes :

bantou
  1. C BANTOU SOURCE PV 09/03/12 21:15:33 6325
  2. SUBROUTINE BANTOU
  3. # (TABCOR,TABVAL,LADIM,ZSIG,VALMOY,DELZET,OMMAX)
  4. C
  5. C-----------------------------------------------------------------------
  6. C Cet opérateur génère un champ aléatoire par la méthode des
  7. C bandes tournantes.
  8. C Renvoi un pointeur actif TABVAL sur la liste des valeurs
  9. C Les coordonnées en entrée ont été adimensionnées par Lambda,
  10. C c-à-d qu'on s'est ramené au cas isotrope avec lambda = 1
  11. C-----------------------------------------------------------------------
  12. C
  13. C---------------------------
  14. C Paramètres Entrée/Sortie :
  15. C---------------------------
  16. C
  17. C E/ TABCOR : Pointeur sur la TABLE contenant les coordonnées des
  18. C points où l'on va générer les valeurs (il peut y avoir
  19. C répétition)
  20. C /S TABVAL : Pointeur actif sur la TABLE contenant les valeurs en ces
  21. C points
  22. C E/ LADIM : Indicateur de la dimension relative aux propriétés
  23. C aléatoires du champ à générer
  24. C E/ ZSIG : Ecart-type du champ aléatoire à générer
  25. C E/ DELZET : Incrément d'espace sur la bande (Pas de discrétisation)
  26. C E/ OMMAX : Vecteur d'onde de coupure
  27. C
  28. C--------------------------
  29. C Variables internes :
  30. C--------------------------
  31. C
  32. C NLINE : Nombre de bandes
  33. C XLDOM : Dimension maximale du domaine
  34. C DOMEGA : Incrément de vecteur d'onde
  35. C
  36. C---------------------------
  37. C Ajouts intéressants
  38. C---------------------------
  39. C
  40. C=======================================================================
  41. C
  42. IMPLICIT INTEGER(I-N)
  43. IMPLICIT REAL*8(A-H,O-Z)
  44. C
  45.  
  46. -INC PPARAM
  47. -INC CCOPTIO
  48. -INC SMCOORD
  49. -INC SMCHAML
  50. -INC SMELEME
  51. -INC CCREEL
  52. C
  53. C TABLE DES COORDONNEES DES POINTS SUPPORTS
  54. SEGMENT TABCOR
  55. REAL*8 COR(NBL,3)
  56. ENDSEGMENT
  57. C TABLE DES VALEURS EN CES POINTS
  58. SEGMENT TABVAL
  59. REAL*8 VAL(NBL)
  60. ENDSEGMENT
  61.  
  62. SEGMENT TH(NLINE)
  63. SEGMENT PHI(NLINE)
  64. SEGMENT ZETMIN(NLINE)
  65. SEGMENT ZETMAX(NLINE)
  66. SEGMENT XLINE(NZET)
  67. C
  68. C EPSILON SERVANT A DIFFERENTS TESTS
  69. C
  70. EPS=1.D-12
  71. C
  72. C INITIALISATION DU CHAMP ALEATOIRE A ZERO
  73. C
  74. SEGACT TABCOR
  75. NBL = COR(/1)
  76. SEGINI TABVAL
  77. DO 20 I=1,NBL
  78. VAL(I) = 0.D0
  79. 20 CONTINUE
  80. C
  81. C ===========================================================
  82. C = Génération des angles décrivant chaque point des lignes =
  83. C ===========================================================
  84. C
  85. C 1D
  86. C ----
  87. C
  88. IF (LADIM.EQ.1) THEN
  89. C Le champ aléatoire a des propriétés unidirectionnelles
  90. C On génère une seule bande (NLINE = 1) de direction (1 0 0)
  91. C On n'a pas besoin de TH ni de PHI
  92. NLINE=1
  93. C
  94. C 2D
  95. C ----
  96. C
  97. ELSEIF (LADIM.EQ.2) THEN
  98. C Le champ aléatoire a des propriétés bidimensionnelles
  99. C Générer des lignes de direction répartie régulièrement entre 0
  100. C et 2*PI
  101. C NLINE est figé à une valeur fixe : 100
  102. C
  103. NLINE=100
  104. SEGINI TH
  105. C
  106. C THETA VARIE ENTRE 0 ET 2*PI
  107. C
  108. DO 1 I=1,NLINE
  109. TH(I) = 2.D0*XPI * FLOAT(I-1) / FLOAT(NLINE)
  110. 1 CONTINUE
  111. C
  112. C 3D
  113. C ----
  114. C
  115. ELSEIF (LADIM.EQ.3) THEN
  116. C Le champ aléatoire a des propriétés tridimensionnelles
  117. C Générer des lignes de direction aléatoire répartie entre 0 et
  118. C 2*PI pour le site, et 0 et PI pour l'azimuth
  119. C NLINE est figé à une valeur fixe : 1000
  120. C
  121. NLINE=1000
  122. SEGINI TH
  123. SEGINI PHI
  124. C
  125. C THETA varie aléatoirement entre 0 et 2*PI, PHI entre 0 et PI
  126. C THETA et COS(PHI) suivent des lois uniformes
  127. C
  128. DO 2 I=1,NLINE
  129. CALL TDRAND(XRAN)
  130. TH(I)=XRAN*XPI*2.D0
  131. CALL TDRAND(XRAN)
  132. PHI(I)=ACOS(1.D0-2.D0*XRAN)
  133. 2 CONTINUE
  134. ENDIF
  135. C
  136. C ===========================================================
  137. C = Détermination de la dimension maximale du domaine XLDOM =
  138. C = et des pas de discrétisation de l'espace dual DOMEGA =
  139. C ===========================================================
  140. C utile uniquement en dimension > 1
  141. C XLDOM est le maximum sur toutes les bandes de l'intervalle des
  142. C valeurs algébriques des positions de la projection de chaque point
  143. C du maillage sur ces droites.
  144.  
  145. SEGINI ZETMIN
  146. SEGINI ZETMAX
  147. XLDOM=-1.D0
  148. C
  149. IF (LADIM.EQ.1) THEN
  150. L = 1
  151. ZETMAX(L) = -1 * XGRAND
  152. ZETMIN(L) = XGRAND
  153. DO 9 I=1,NBL
  154. ZET = COR(I,1)
  155. ZETMIN(L) = MIN (ZETMIN(L), ZET)
  156. ZETMAX(L) = MAX (ZETMAX(L), ZET)
  157. 9 CONTINUE
  158. XLDOM = MAX (XLDOM, ZETMAX(L)-ZETMIN(L))
  159. C
  160. ELSEIF (LADIM.EQ.2) THEN
  161. C
  162. DO 4 L=1,NLINE
  163. ZETMAX(L) = -1 * XGRAND
  164. ZETMIN(L) = XGRAND
  165. THETA = TH(L)
  166. XLI = COS(THETA)
  167. YLI = SIN(THETA)
  168. DO 5 I=1,NBL
  169. X = COR(I,1)
  170. Y = COR(I,2)
  171. ZET = X*XLI + Y*YLI
  172. ZETMIN(L) = MIN (ZETMIN(L), ZET)
  173. ZETMAX(L) = MAX (ZETMAX(L), ZET)
  174. 5 CONTINUE
  175. XLDOM = MAX (XLDOM, ZETMAX(L)-ZETMIN(L))
  176. 4 CONTINUE
  177. C
  178. ELSE
  179. C
  180. DO 6 L=1,NLINE
  181. ZETMAX(L) = -1 * XGRAND
  182. ZETMIN(L) = XGRAND
  183. THETA = TH(L)
  184. FI = PHI(L)
  185. XLI = COS(THETA) * SIN(FI)
  186. YLI = SIN(THETA) * SIN(FI)
  187. ZLI = COS(FI)
  188. DO 7 I=1,NBL
  189. X = COR(I,1)
  190. Y = COR(I,2)
  191. Z = COR(I,3)
  192. ZET = X*XLI + Y*YLI + Z*ZLI
  193. ZETMIN(L) = MIN (ZETMIN(L), ZET)
  194. ZETMAX(L) = MAX (ZETMAX(L), ZET)
  195. 7 CONTINUE
  196. XLDOM = MAX (XLDOM, ZETMAX(L)-ZETMIN(L))
  197. 6 CONTINUE
  198. C
  199. ENDIF
  200. C
  201. C DOMEGA doit être inférieur à pi / L
  202. DOMEGA = .9 * (XPI / XLDOM)
  203. C
  204. C ===========================================================
  205. C = Génération du champ aléatoire =
  206. C ===========================================================
  207. C Sommation sur toutes les bandes de la valeur trouvée sur la bande
  208. C en cours au point projeté du point considéré sur cette bande,
  209. C et ce, pour chaque point champ à créer.
  210. C Les valeurs en deux points confondus sont égales.
  211. C
  212. C 1D
  213. C ----
  214. C
  215. IF (LADIM.EQ.1) THEN
  216.  
  217. C Valeurs aléatoires sur la bande
  218. NZET = INT ((ZETMAX(1) - ZETMIN(1)) / DELZET) + 2
  219. SEGINI XLINE
  220. ZETMIL = ZETMIN(1)
  221. CALL BANT1D(DOMEGA,OMMAX,DELZET,ZETMIL,XLINE)
  222. C
  223. C PROJECT LINE PROCESS TO GENERATE 2-D ARRAY
  224. C
  225. DO 8 I=1,NBL
  226. ZET = COR(I,1)
  227. INDEX = INT ((ZET - ZETMIN(1)) / DELZET + 0.5D0) + 1
  228. VAL(I) = VAL(I) + XLINE(INDEX)
  229. 8 CONTINUE
  230.  
  231. SEGSUP XLINE
  232. C
  233. C 2D
  234. C ----
  235. C
  236. ELSEIF (LADIM.EQ.2) THEN
  237. C
  238. DO 12 L=1,NLINE
  239.  
  240. C Valeurs aléatoires sur la bande
  241. NZET = INT ((ZETMAX(L) - ZETMIN(L)) / DELZET) + 2
  242. SEGINI XLINE
  243. C
  244. ZETMIL = ZETMIN(L)
  245. CALL BANT2D(DOMEGA,OMMAX,DELZET,ZETMIL,XLINE)
  246. C
  247. C PROJECT LINE PROCESS TO GENERATE 2-D ARRAY
  248. C
  249. THETA = TH(L)
  250. XLI = COS(THETA)
  251. YLI = SIN(THETA)
  252. DO 13 I=1,NBL
  253. X = COR(I,1)
  254. Y = COR(I,2)
  255. ZET = X*XLI + Y*YLI
  256. INDEX = INT ((ZET - ZETMIN(L)) / DELZET + 0.5D0) + 1
  257. VAL(I) = VAL(I) + XLINE(INDEX)
  258. 13 CONTINUE
  259. C
  260. SEGSUP XLINE
  261. C
  262. 12 CONTINUE
  263.  
  264. SEGSUP TH
  265. C
  266. C 3D
  267. C ----
  268. C
  269. ELSEIF (LADIM.EQ.3) THEN
  270. C
  271. DO 15 L=1,NLINE
  272.  
  273. C Valeurs aléatoires sur la bande
  274. NZET = INT ((ZETMAX(L) - ZETMIN(L)) / DELZET) + 2
  275. SEGINI XLINE
  276. ZETMIL = ZETMIN(L)
  277. CALL BANT3D(DOMEGA,OMMAX,DELZET,ZETMIL,XLINE)
  278. C
  279. C PROJECT LINE PROCESS TO GENERATE 3-D ARRAY
  280. C
  281. THETA = TH(L)
  282. FI = PHI(L)
  283. XLI = COS(THETA) * SIN(FI)
  284. YLI = SIN(THETA) * SIN(FI)
  285. ZLI = COS(FI)
  286. DO 16 I=1,NBL
  287. X = COR(I,1)
  288. Y = COR(I,2)
  289. Z = COR(I,3)
  290. ZET = X*XLI + Y*YLI + Z*ZLI
  291. INDEX = INT ((ZET - ZETMIN(L)) / DELZET + 0.5D0) + 1
  292. VAL(I) = VAL(I) + XLINE(INDEX)
  293. 16 CONTINUE
  294. C
  295. SEGSUP XLINE
  296. C
  297. 15 CONTINUE
  298.  
  299. SEGSUP TH
  300. SEGSUP PHI
  301. ENDIF
  302. C
  303. C.....DIVIDE BY SQRT(FLOAT(NLINE))
  304. C et mise à la moyenne
  305. C
  306. XX1 = ZSIG / SQRT(FLOAT(NLINE))
  307.  
  308. DO 18 I=1,NBL
  309. VAL(I) = (VAL(I)*XX1) + VALMOY
  310. 18 CONTINUE
  311. C
  312. SEGSUP ZETMIN
  313. SEGSUP ZETMAX
  314. C
  315. RETURN
  316. END
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  

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