subroutine rann1(moy,std,iseed,ranorm,n,irc) * implicit none * * CAUTION : N MUST BE EVEN * real moy,std integer iseed,n,irc,ngerme real ranorm(n) CCCC integer germe(((n+1)/2)*2) integer,allocatable,dimension(:) :: germe * integer nn real rr,theta real pi integer i real temp1,temp2 * pi = acos(-1.) CCCCCCCCCCCCCCCCCCC SX5 CC permet d'avoir toujours le meme germe donc la meme suite aleatoire CCCCCCCCCCCCCCCCCCC SX5 call random_seed(SIZE=ngerme) allocate(germe(ngerme)) call random_seed(GET=germe) CCCCCCC germe(:) = iseed write(6,*) 'ngerme = ',ngerme write(6,*) 'germe = ',germe(:) call random_seed(PUT=germe) CCCCCCCCCCCCCCCCCCC SX5 * * Conversion de n en l'entier pair superieur * nn = ((n+1)/2)*2 * C Boucle d'initialisation des ranf dans un tableau intermediaire * call random_number(ranorm(1:nn)) CC-- do i=1,nn CC-- CRAY ranorm(i) = ranf() CC-- ranorm CC-- end do C On en deduit maintenant un tableau de nombres gaussiens do i=1,nn/2 temp1 = ranorm(i) temp2 = ranorm(i+nn/2) rr = sqrt(-2.*log(temp1)) Theta = 2*PI*temp2 ranorm(i) = (rr * cos(Theta) + moy) * std ranorm(i+nn/2) = (rr * sin(Theta) + moy) * std end do * end