Télécharger tdran1.eso

Retour à la liste

Numérotation des lignes :

tdran1
  1. C TDRAN1 SOURCE PV 21/12/18 23:25:02 11243
  2. FUNCTION TDRAN1(IDUM)
  3. C-----------------------------------------------------------------------
  4. C Générateur d'un bruit blanc uniforme de moyenne et d'écart-type 1/2
  5. C (i.e. les valeurs générées sont uniformément réparties entre 0. et 1.).
  6. C
  7. C Ce générateur est de type linéaire congruant :
  8. C XRAN(i+1) = a * XRAN(i) mod m
  9. C XRAN(i) est appelé le germe. XRAN(0) initialisant la série peut
  10. C prendre n'importe quelle valeur comprise entre 0. et m, bornes non
  11. C comprises. Un tel générateur est dit de Lehmer ou PMMLG.
  12. C
  13. C XA, XM et XGERME sont définies par PARAMETER. XRAN(0) vaut 123 par
  14. C défaut. Cette valeur peut etre modifié via IDUM non nul.
  15. C Afin d'éviter les problèmes d'erreurs liés à la lecture des flottants,
  16. C le germe transmis via IDUM est de type ENTIER.
  17. C
  18. C Le générateur mis en oeuvre est qualifié de MINIMUM STANDARD dans la
  19. C littérature. On en trouvera une description dans :
  20. C 1- Park S.K. and K.W.Miller
  21. C Random number generators : Good ones are hard to find,
  22. C Communication of the ACM, vol 31, pp 1192-1201, Oct. 1988.
  23. C 2- Press W.H., S.A.Teukolsky, W.T.Vetterling and B.P.Flannery,
  24. C Numerical recipies in C, the art of scientific computers,
  25. C Second edition, Cambridge Univ. Press, 1992.
  26. C L'ancien générateur de Castem était issu de la première édition de 2.
  27. C
  28. C Afin d'éviter que les petites valeurs ne soient suivies par de grandes
  29. C valeurs, on utilise la technique de Bays-Durham (tirage aléatoire au
  30. C sein d'un buffer). On en trouvera une description dans :
  31. C C.Bays and S.D.Durham
  32. C Improving a poor random number generator,
  33. C ACM Transactions on Mathematical Software, 2(1), 59-64, 1976.
  34. C
  35. C Quelques informations sur ce générateur :
  36. C 1- Sa période est de l'ordre de 1.E8,
  37. C 2- Affecté sur un maillage 2D comportant plus de 1.E7 points une
  38. C corellation peut apparaitre entre des points du maillage.
  39. C
  40. C-----------------------------------------------------------------------
  41. C
  42. C---------------------------
  43. C Parametres Entree/Sortie :
  44. C---------------------------
  45. C
  46. C E/S IDUM : Valeur du germe si on souhaite initialiser le générateur
  47. C avec un autre germe que le germe par défaut, 0 sinon.
  48. C Mis à 0 en sortie.
  49. C /S TDRAN1 : Nombre aléatoire compris entre 0. et 1.
  50. C
  51. C-----------------------------------------------------------------------
  52. C Appelé par : tdrand.eso (germe non modifié -> IDUM=0)
  53. C pert.eso (opérateur PERT)
  54. C siar.eso (opérateur SIAR)
  55. C alea.eso (opérateur ALEA)
  56. C-----------------------------------------------------------------------
  57. IMPLICIT INTEGER(I-N)
  58. IMPLICIT REAL*8 (A-H,O-Z)
  59. * les initialisations sont dans bdata il faut ibuff<=32
  60. common/Ctdran/r(32),xa,xm,xg,xval,xgerme,iflag,ibuff
  61. save /ctdran/
  62. C
  63. C- Initialisation du germe et du buffer
  64. C
  65. IF (IFLAG.EQ.0.OR.IDUM.NE.0) THEN
  66. IF (IDUM.EQ.0) THEN
  67. XGERME = XG
  68. ELSE
  69. XVAL = DBLE(ABS(IDUM))
  70. IF (MOD(XVAL,XM).NE.0.D0) THEN
  71. XGERME = XVAL
  72. ELSE
  73. XGERME = XG
  74. ENDIF
  75. ENDIF
  76. DO 10 I=1,IBUFF
  77. XVAL = XA * XGERME
  78. XGERME = MOD(XVAL,XM)
  79. R(I) = XGERME / XM
  80. 10 CONTINUE
  81. IFLAG = 1
  82. IDUM = 0
  83. ENDIF
  84. C
  85. C- Calcul d'une nouvelle valeur
  86. C
  87. J = 1 + INT(IBUFF * XGERME / XM)
  88. TDRAN1 = R(J)
  89. XVAL = XA * XGERME
  90. XGERME = MOD(XVAL,XM)
  91. R(J) = XGERME / XM
  92. C
  93. RETURN
  94. END
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  

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