- #1

- 1

- 0

Hello everone!So i am writing this code where I am producoing random numbers from a generator through a subroutine.Then I call the subroutine and pass them through a Gaussian distribution.I have problem with my seed subroutine: my program compiles but when i try to execute it complain that "Random_seed(): PUT array too small" i have no idea what does this means!

Here is my subroutine:

subroutine setSEED (seed)

implicit none

real*8:: x

integer, dimension(2), intent(inout):: seed

if (seed(1) == 0.0) &

this where

it complains --> seed = floor(1000*secnds(0.0)) +(/0, 37 /)

--> call random_seed(put=seed)

end subroutine setSEED

and my gaussian distribution :

Real*8 Function gasdev(idum)

implicit none

integer, intent(inout) :: idum

integer, save::iset

real*8:: fac,rsq,v1,v2

real*8, dimension(2) :: x

real*8, save :: gset

!data iset/0/

if (idum.lt.0) iset=0

if (iset.eq.0) then

rsq = 0.0

do while (rsq > 1.0.or.rsq==0)

call random_number(x)

v1=2.*x(1)-1

v2=2.*x(2)-1

rsq=v1**2+v2**2

end do

fac=sqrt(-2.*log(rsq)/rsq)

gset=v1*fac

gasdev=v2*fac

iset=1

else

gasdev=gset

iset=0

endif

return

end Function gasdev

...AND MY MAIN PROGRAM:

program mainprog

implicit none

real*8::angle,gasdev,number

integer::i

integer, dimension(2) :: seed = 0

open(299,FILE='gauss.dat',STATUS='REPLACE')

call setSEED(seed)

Do i=1,10,1

angle=gasdev(seed)

print*,"angle=gasdev =",angle

write(299,*),angle

end do

close(299,STATUS="KEEP")

end program mainprog

Do you guys think can help me?its so frustrating!thank you all! :)

Here is my subroutine:

subroutine setSEED (seed)

implicit none

real*8:: x

integer, dimension(2), intent(inout):: seed

if (seed(1) == 0.0) &

this where

it complains --> seed = floor(1000*secnds(0.0)) +(/0, 37 /)

--> call random_seed(put=seed)

end subroutine setSEED

and my gaussian distribution :

Real*8 Function gasdev(idum)

implicit none

integer, intent(inout) :: idum

integer, save::iset

real*8:: fac,rsq,v1,v2

real*8, dimension(2) :: x

real*8, save :: gset

!data iset/0/

if (idum.lt.0) iset=0

if (iset.eq.0) then

rsq = 0.0

do while (rsq > 1.0.or.rsq==0)

call random_number(x)

v1=2.*x(1)-1

v2=2.*x(2)-1

rsq=v1**2+v2**2

end do

fac=sqrt(-2.*log(rsq)/rsq)

gset=v1*fac

gasdev=v2*fac

iset=1

else

gasdev=gset

iset=0

endif

return

end Function gasdev

...AND MY MAIN PROGRAM:

program mainprog

implicit none

real*8::angle,gasdev,number

integer::i

integer, dimension(2) :: seed = 0

open(299,FILE='gauss.dat',STATUS='REPLACE')

call setSEED(seed)

Do i=1,10,1

angle=gasdev(seed)

print*,"angle=gasdev =",angle

write(299,*),angle

end do

close(299,STATUS="KEEP")

end program mainprog

Do you guys think can help me?its so frustrating!thank you all! :)

Last edited: