tdran1
C TDRAN1 SOURCE PV 21/12/18 23:25:02 11243 C----------------------------------------------------------------------- C Générateur d'un bruit blanc uniforme de moyenne et d'écart-type 1/2 C (i.e. les valeurs générées sont uniformément réparties entre 0. et 1.). C C Ce générateur est de type linéaire congruant : C XRAN(i+1) = a * XRAN(i) mod m C XRAN(i) est appelé le germe. XRAN(0) initialisant la série peut C prendre n'importe quelle valeur comprise entre 0. et m, bornes non C comprises. Un tel générateur est dit de Lehmer ou PMMLG. C C XA, XM et XGERME sont définies par PARAMETER. XRAN(0) vaut 123 par C défaut. Cette valeur peut etre modifié via IDUM non nul. C Afin d'éviter les problèmes d'erreurs liés à la lecture des flottants, C le germe transmis via IDUM est de type ENTIER. C C Le générateur mis en oeuvre est qualifié de MINIMUM STANDARD dans la C littérature. On en trouvera une description dans : C 1- Park S.K. and K.W.Miller C Random number generators : Good ones are hard to find, C Communication of the ACM, vol 31, pp 1192-1201, Oct. 1988. C 2- Press W.H., S.A.Teukolsky, W.T.Vetterling and B.P.Flannery, C Numerical recipies in C, the art of scientific computers, C Second edition, Cambridge Univ. Press, 1992. C L'ancien générateur de Castem était issu de la première édition de 2. C C Afin d'éviter que les petites valeurs ne soient suivies par de grandes C valeurs, on utilise la technique de Bays-Durham (tirage aléatoire au C sein d'un buffer). On en trouvera une description dans : C C.Bays and S.D.Durham C Improving a poor random number generator, C ACM Transactions on Mathematical Software, 2(1), 59-64, 1976. C C Quelques informations sur ce générateur : C 1- Sa période est de l'ordre de 1.E8, C 2- Affecté sur un maillage 2D comportant plus de 1.E7 points une C corellation peut apparaitre entre des points du maillage. C C----------------------------------------------------------------------- C C--------------------------- C Parametres Entree/Sortie : C--------------------------- C C E/S IDUM : Valeur du germe si on souhaite initialiser le générateur C avec un autre germe que le germe par défaut, 0 sinon. C Mis à 0 en sortie. C /S TDRAN1 : Nombre aléatoire compris entre 0. et 1. C C----------------------------------------------------------------------- C Appelé par : tdrand.eso (germe non modifié -> IDUM=0) C pert.eso (opérateur PERT) C siar.eso (opérateur SIAR) C alea.eso (opérateur ALEA) C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) * les initialisations sont dans bdata il faut ibuff<=32 common/Ctdran/r(32),xa,xm,xg,xval,xgerme,iflag,ibuff save /ctdran/ C C- Initialisation du germe et du buffer C IF (IFLAG.EQ.0.OR.IDUM.NE.0) THEN IF (IDUM.EQ.0) THEN XGERME = XG ELSE XVAL = DBLE(ABS(IDUM)) IF (MOD(XVAL,XM).NE.0.D0) THEN XGERME = XVAL ELSE XGERME = XG ENDIF ENDIF DO 10 I=1,IBUFF XVAL = XA * XGERME XGERME = MOD(XVAL,XM) R(I) = XGERME / XM 10 CONTINUE IFLAG = 1 IDUM = 0 ENDIF C C- Calcul d'une nouvelle valeur C J = 1 + INT(IBUFF * XGERME / XM) XVAL = XA * XGERME XGERME = MOD(XVAL,XM) R(J) = XGERME / XM C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales