Télécharger brui.eso

Retour à la liste

Numérotation des lignes :

brui
  1. C BRUI SOURCE CB215821 25/04/23 21:15:02 12247
  2. SUBROUTINE BRUI
  3. C-----------------------------------------------------------------------
  4. C Génération d'un bruit blanc obéissant à une loi statistique décrite
  5. C via les arguments transmis. Ce bruit est utilisée pour créer :
  6. C 1) Un LISTREEL lorsque on donne le nombre de valeurs à générer ;
  7. C 2) Un objet EVOLUTION si un LISTREEL de temps est fourni ;
  8. C 3) Un CHAMPOINT si le maillage GEO1 est précisé ;
  9. C 4) Un LISTENTI lorsqu'on tire des variables entiere selon un
  10. C processus de Poisson.
  11. C-----------------------------------------------------------------------
  12. C
  13. C---------------------------
  14. C Phrase d'appel (GIBIANE) :
  15. C---------------------------
  16. C
  17. C | ENTI2 |
  18. C RES1 = 'BRUI' 'BLAN' MOT1 FLOT1 (FLOT2) | LREEL1 (COUL) | (ENTI3) ;
  19. C | GEO1 |
  20. C ou
  21. C
  22. C RES1 = 'BRUI' 'BLAN' 'POIS' ENTI1 ENTI2 (ENTI3)
  23. C
  24. C------------------------
  25. C Opérandes et résultat :
  26. C------------------------
  27. C
  28. C 1e Syntaxe :
  29. C ------------
  30. C
  31. C BLAN : Mot indiquant qu'il s'agit d'un bruit blanc
  32. C MOT1 : Mot indiquant la loi statistique suivi par le bruit :
  33. C MOT1 = 'GAUS' : Distribution gaussienne,
  34. C MOT1 = 'UNIF' : Distribution uniforme,
  35. C MOT1 = 'EXPO' : Distribution exponentielle.
  36. C FLOT1 : Moyenne statistique du bruit à créer. Ne sert à rien
  37. C si MOT1='EXPO'.
  38. C FLOT2 : Ecart type du bruit à créer. Ne sert à rien si MOT1='POIS'.
  39. C ENTI2 : Nombre de valeurs du LISTREEL à générer.
  40. C LREEL1 : LISTREEL contenant la liste des temps pour l'EVOLUTION.
  41. C COUL : Mot clef indiquant la couleur associée à l'EVOLUTION RES1.
  42. C GEO1 : Maillage contenant le support géométrique du CHAMPOINT.
  43. C ENTI3 : Entier positif ou nul. Modifie l'initialisation du bruit.
  44. C
  45. C RES1 : LISTREEL, EVOLUTION, CHAMPOINT selon la syntaxe utilisée.
  46. C
  47. C 2e Syntaxe :
  48. C ------------
  49. C
  50. C BLAN : Mot indiquant qu'il s'agit d'un bruit blanc
  51. C 'POIS' : Mot-cle que les valeurs suivent une distribution de Poisson.
  52. C ENTI1 : Valeur moyenne de la distribution.
  53. C ENTI2 : Nombre de valeurs du LISTENTI à générer.
  54. C ENTI3 : Entier positif ou nul. Modifie l'initialisation du bruit.
  55. C
  56. C RES1 : Resultat, LISTENTI de valeurs aleatoires.
  57. C
  58. C----------------------
  59. C Variables en COMMON :
  60. C----------------------
  61. C
  62. C NBCOUL : Nombre de couleurs admises par CASTEM (in CCGEOME)
  63. C NCOUL : Tableau de CHAR*4, dim NBCOUL, Noms des couleurs (in CCGEOME)
  64. C IDCOUL : Valeur de la couleurs par défaut (in CCOPTIO)
  65. C IERR : Numéro de l'erreur détectée (in CCOPTIO)
  66. C IFOUR : Indique le type de calcul (in CCOPTIO)
  67. C NIFOUR : Numéro de l'harmonique de fourier si IFOUR=1 (cf CCOPTIO)
  68. C TITREE : CHAR*72, titre des tracés (cf CCOPTIO)
  69. C
  70. C-----------------------------------------------------------------------
  71. C
  72. C Langage : ESOPE + FORTRAN77
  73. C
  74. C Modifs : F.DABBENE 06/95 (Extension LISTREEL et CHAMPOINT)
  75. C Modifs : S.PASCAL 06/06 (Extension distribution de Poisson)
  76. C
  77. C-----------------------------------------------------------------------
  78. C
  79. IMPLICIT INTEGER(I-N)
  80. IMPLICIT REAL*8(A-H,O-Z)
  81. C
  82. -INC CCGEOME
  83.  
  84. -INC PPARAM
  85. -INC CCOPTIO
  86. -INC SMEVOLL
  87. -INC SMLENTI
  88. -INC SMLREEL
  89. -INC SMCHPOI
  90. -INC SMCOORD
  91. -INC SMELEME
  92. C
  93. CHARACTER*4 MOTYP(4),MOTB(1)
  94. C
  95. DATA MOTB /'BLAN'/
  96. DATA MOTYP /'GAUS','UNIF','EXPO','POIS'/
  97. C
  98. C- Lecture du type de bruit
  99. C
  100. CALL LIRMOT(MOTB,1,IVAL,1)
  101. IF (IVAL.EQ.0) RETURN
  102. C
  103. C- Lecture du type de distribution
  104. C
  105. CALL LIRMOT(MOTYP,4,IVAB,1)
  106. IF (IVAB.EQ.0) RETURN
  107. C
  108. C- Lecture de la moyenne et de l'écart type
  109. C
  110. IF (IVAB.EQ.4) THEN
  111. CALL LIRENT(NMOYE,1,IRET1)
  112. IF (IERR.NE.0) RETURN
  113. ELSE
  114. CALL LIRREE(VMOYE,1,IRET1)
  115. IF (IERR.NE.0) RETURN
  116. CALL LIRREE(ECAR,1,IRET1)
  117. IF (IERR.NE.0) RETURN
  118. IF (IVAB.EQ.3) THEN
  119. REAERR(1) = REAL(VMOYE)
  120. CALL ERREUR(-304)
  121. VMOYE = 0.D0
  122. ENDIF
  123. IF (ECAR.LE.0.D0) THEN
  124. REAERR(1) = REAL(0.D0)
  125. REAERR(2) = REAL(ECAR)
  126. CALL ERREUR(191)
  127. RETURN
  128. ENDIF
  129. ENDIF
  130. C
  131. C- Lecture d'un LISTREEL, d'un MELEME ou d'un ENTIER
  132. C
  133. CALL LIROBJ('LISTREEL',IPT1,0,IRET1)
  134. IF (IERR.NE.0) RETURN
  135. IK1 = 0
  136. IF (IRET1.EQ.0) THEN
  137. CALL LIROBJ('MAILLAGE',IPT1,0,IRET1)
  138. IF (IERR.NE.0) RETURN
  139. IK1 = 1
  140. ENDIF
  141. IF (IRET1.EQ.0) THEN
  142. CALL LIRENT(IPT1,1,IRET1)
  143. IF (IERR.NE.0) RETURN
  144. IK1 = 2
  145. ENDIF
  146. C
  147. C- Lecture facultative pour l'initialisation du générateur
  148. C
  149. CALL LIRENT(NSTRT,0,IRET1)
  150. IF (IRET1.EQ.0) THEN
  151. NSTRT = 0
  152. ELSEIF (NSTRT.LT.0) THEN
  153. INTERR(1) = 0
  154. INTERR(2) = NSTRT
  155. CALL ERREUR(190)
  156. RETURN
  157. ENDIF
  158. C
  159. C- Lecture facultative de la couleur si RES1 est une évolution
  160. C
  161. IF (IK1.EQ.0) THEN
  162. CALL LIRMOT(NCOUL,NBCOUL,ICOUL,0)
  163. IF (ICOUL.EQ.0) ICOUL=IDCOUL+1
  164. ICOUL=ICOUL-1
  165. ENDIF
  166. C
  167. C------------------------------------------
  168. C Génération du LISTREEL de NPTBLO valeurs
  169. C------------------------------------------
  170. C
  171. C- Initialisation de NPTBLO, nombre de valeurs à générer.
  172. C- Les éléments du MELEME sont transformés en POI1 si nécessaire.
  173. C- Le maillage de pointeur IPT1 est ACTIF en sortie de CHANGE.
  174. C
  175. IF (IK1.EQ.0) THEN
  176. MLREEL = IPT1
  177. SEGACT MLREEL
  178. NPTBLO = PROG(/1)
  179. SEGDES MLREEL
  180. ELSEIF (IK1.EQ.1) THEN
  181. MELEME = IPT1
  182. SEGACT MELEME
  183. NBSOUS = LISOUS(/1)
  184. IF ((NBSOUS.NE.0).OR.(ITYPEL.NE.1)) THEN
  185. CALL CHANGE(IPT1,1)
  186. IF (IERR.NE.0) RETURN
  187. MELEME = IPT1
  188. ENDIF
  189. NPTBLO = NUM(/2)
  190. SEGDES MELEME
  191. ELSE
  192. NPTBLO = IPT1
  193. ENDIF
  194. C
  195. C- Création du LISTREEL ou du LISTENTI qui va contenir les valeurs
  196. C- créées.
  197. C
  198. JG = NPTBLO
  199. IF (JG .GE. 0) THEN
  200. IF (IVAB.EQ.4) THEN
  201. SEGINI MLENTI
  202. ELSE
  203. SEGINI MLREEL
  204. ENDIF
  205. ELSE
  206. C Cas ou la taille donnee est negative
  207. INTERR = NPTBLO
  208. CALL ERREUR(36)
  209. RETURN
  210. ENDIF
  211. C
  212. C- Initialisation du générateur TDRAND
  213. C
  214. DO 10 I=1,NSTRT
  215. CALL TDRAND(XRAN)
  216. 10 CONTINUE
  217. C
  218. C- Génération du bruit selon le type de loi repéré par IVAB
  219. C- 1 - Distribution Gaussienne
  220. C- 2 - Distribution Uniforme
  221. C- 3 - Distribution Exponentielle
  222. C- 4 - Distribution de Poisson
  223. C
  224. IF (IVAB.EQ.1) THEN
  225. DO 20 I=1,NPTBLO
  226. AK = ECAR
  227. CALL TDRAND(XRAN)
  228. IF (XRAN.GT.0.5D0) THEN
  229. AK = -ECAR
  230. XRAN = 1.D0 - XRAN
  231. ENDIF
  232. IF (XRAN.LT.1.D-6) XRAN=1.D-6
  233. T = SQRT( LOG(1.D0 / (XRAN*XRAN)) )
  234. YY = VMOYE + AK * ( T - (2.30753D0 + 0.27061D0*T) /
  235. # (1.0D0 + T * (0.99229D0 + 0.04481D0*T)))
  236. PROG(I) = YY
  237. 20 CONTINUE
  238. ELSEIF (IVAB.EQ.2) THEN
  239. DO 30 I=1,NPTBLO
  240. CALL TDRAND(XRAN)
  241. YY =VMOYE + (XRAN - 0.5D0) * 2.D0 * ECAR
  242. PROG(I)=YY
  243. 30 CONTINUE
  244. ELSEIF (IVAB.EQ.3) THEN
  245. DO 40 I=1,NPTBLO
  246. CALL TDRAND(XRAN)
  247. IF (XRAN.LT.1.D-6) XRAN = 1.D-6
  248. YY = -LOG(XRAN) * ECAR
  249. PROG(I)= YY
  250. 40 CONTINUE
  251. ELSE
  252. C Pour generer des variables selon une distrib. de Poisson, on emploi 2
  253. C methodes differentes selon que la moyenne de la distrib. est sup. ou
  254. C non a la valeur 50 :
  255. C - Si sup. a 50 : approximation par une gaussienne ;
  256. C - Sinon : methode directe.
  257. XMOYE=FLOAT(NMOYE)
  258. IF (NMOYE.GE.50) THEN
  259. DO 50 I=1,NPTBLO
  260. AK = SQRT(XMOYE)
  261. CALL TDRAND(XRAN)
  262. IF (XRAN.GT.0.5D0) THEN
  263. AK = -1.D0*AK
  264. XRAN = 1.D0 - XRAN
  265. ENDIF
  266. IF (XRAN.LT.1.D-6) XRAN=1.D-6
  267. T = SQRT( LOG(1.D0 / (XRAN*XRAN)) )
  268. YY = XMOYE + AK * ( T - (2.30753D0 + 0.27061D0*T) /
  269. # (1.0D0 + T * (0.99229D0 + 0.04481D0*T)))
  270. LECT(I) = INT(YY)
  271. 50 CONTINUE
  272. ELSE
  273. XMOYE = EXP(-1.D0*XMOYE)
  274. DO 60 I=1,NPTBLO
  275. CALL TDRAND(XRAN)
  276. A=XRAN
  277. DO 61 J=1,(10*NPTBLO)
  278. CALL TDRAND(XRAN)
  279. A=A*XRAN
  280. IF (A.LT.XMOYE) THEN
  281. LECT(I) = J
  282. GOTO 60
  283. ENDIF
  284. 61 CONTINUE
  285. 60 CONTINUE
  286. ENDIF
  287. ENDIF
  288. C
  289. IF (IVAB.EQ.4) THEN
  290. SEGDES MLENTI
  291. ELSE
  292. SEGDES MLREEL
  293. ENDIF
  294. C
  295. C- Création des objets EVOLUTION, CHAMPOINT, LISTREEL ou LISTENTI
  296. C
  297. IF (IK1.EQ.0) THEN
  298. N = 1
  299. SEGINI MEVOLL
  300. IEVTEX = TITREE
  301. ITYEVO = 'REEL'
  302. SEGINI KEVOLL
  303. KEVTEX = TITREE
  304. IEVOLL(1) = KEVOLL
  305. NUMEVX = ICOUL
  306. NUMEVY = 'REEL'
  307. TYPX = 'LISTREEL'
  308. TYPY = 'LISTREEL'
  309. IPROGX = IPT1
  310. NOMEVX = 'TEMPS'
  311. IPROGY = MLREEL
  312. NOMEVY = 'SIGNAL'
  313. SEGDES KEVOLL,MEVOLL
  314. CALL ECROBJ('EVOLUTIO',MEVOLL)
  315. ELSEIF (IK1.EQ.1) THEN
  316. NAT = 1
  317. NSOUPO = 1
  318. SEGINI MCHPOI
  319. MTYPOI = ' '
  320. MOCHDE = ' '
  321. JATTRI(1) = 2
  322. IFOPOI = IFOUR
  323. NC = 1
  324. SEGINI MSOUPO
  325. IPCHP(1) = MSOUPO
  326. NOCOMP(1) = 'SCAL'
  327. IGEOC = MELEME
  328. NOHARM(1) = NIFOUR
  329. N = NPTBLO
  330. SEGINI MPOVAL
  331. IPOVAL = MPOVAL
  332. SEGACT MLREEL
  333. DO 70 I=1,NPTBLO
  334. VPOCHA(I,1) = PROG(I)
  335. 70 CONTINUE
  336. SEGSUP MLREEL
  337. CALL ACTOBJ('CHPOINT ',MCHPOI,1)
  338. CALL ECROBJ('CHPOINT ',MCHPOI)
  339. ELSE
  340. IF (IVAB.EQ.4) THEN
  341. CALL ECROBJ('LISTENTI',MLENTI)
  342. ELSE
  343. CALL ECROBJ('LISTREEL',MLREEL)
  344. ENDIF
  345. ENDIF
  346. C
  347. END
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  

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