Skip to content

Commit

Permalink
Simplify RNG seed in PARPACK
Browse files Browse the repository at this point in the history
  • Loading branch information
FabienPean committed Aug 19, 2023
1 parent e7cf106 commit 052588a
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 78 deletions.
30 changes: 10 additions & 20 deletions PARPACK/SRC/MPI/pcgetv0.f
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ subroutine pcgetv0
c %------------------------%
c
logical first, inits, orth
integer idist, iseed(4), iter, msglvl, jj, myid, igen
integer idist, iseed(4), iter, msglvl, jj, myid
Real
& rnorm0
Complex
Expand Down Expand Up @@ -213,33 +213,23 @@ subroutine pcgetv0
c | Executable Statements |
c %-----------------------%
c
c
if (inits) then
c
c %-----------------------------------%
c | Initialize the seed of the LAPACK |
c | random number generator |
c | Note: seed array elements must be |
c | between 0 and 4095 (12-bit coded) |
c | iseed(4) must be odd |
c %-----------------------------------%
c
if (inits) then
c
c %-----------------------------------%
c | Generate a seed on each processor |
c | using process id (myid). |
c | Note: the seed must be between 1 |
c | and 4095. iseed(4) must be odd. |
c %-----------------------------------%
c
call MPI_COMM_RANK(comm, myid, ierr)
igen = 1000 + 2*myid + 1
if (igen .gt. 4095) then
write(0,*) 'Error in p_getv0: seed exceeds 4095!'
end if
c
iseed(1) = igen/1000
igen = mod(igen,1000)
iseed(2) = igen/100
igen = mod(igen,100)
iseed(3) = igen/10
iseed(4) = mod(igen,10)
iseed(1) = 1
iseed(2) = 3
iseed(3) = 5
iseed(4) = 1+2*mod(myid,2048)
c
inits = .false.
end if
Expand Down
32 changes: 11 additions & 21 deletions PARPACK/SRC/MPI/pdgetv0.f
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ subroutine pdgetv0
c %------------------------%
c
logical first, inits, orth
integer idist, iseed(4), iter, msglvl, jj, myid, igen
integer idist, iseed(4), iter, msglvl, jj, myid
Double precision
& rnorm0, buf2(1)
save first, iseed, inits, iter, msglvl, orth, rnorm0
Expand All @@ -204,7 +204,7 @@ subroutine pdgetv0
c | Intrinsic Functions |
c %---------------------%
c
intrinsic abs, sqrt
intrinsic abs, sqrt, mod
c
c %-----------------%
c | Data Statements |
Expand All @@ -216,33 +216,23 @@ subroutine pdgetv0
c | Executable Statements |
c %-----------------------%
c
c
if (inits) then
c
c %-----------------------------------%
c | Initialize the seed of the LAPACK |
c | random number generator |
c | Note: seed array elements must be |
c | between 0 and 4095 (12-bit coded) |
c | iseed(4) must be odd |
c %-----------------------------------%
c
if (inits) then
c
c %-----------------------------------%
c | Generate a seed on each processor |
c | using process id (myid). |
c | Note: the seed must be between 1 |
c | and 4095. iseed(4) must be odd. |
c %-----------------------------------%
c
call MPI_COMM_RANK(comm, myid, ierr)
igen = 1000 + 2*myid + 1
if (igen .gt. 4095) then
write(0,*) 'Error in p_getv0: seed exceeds 4095!'
end if
c
iseed(1) = igen/1000
igen = mod(igen,1000)
iseed(2) = igen/100
igen = mod(igen,100)
iseed(3) = igen/10
iseed(4) = mod(igen,10)
iseed(1) = 1
iseed(2) = 3
iseed(3) = 5
iseed(4) = 1+2*mod(myid,2048)
c
inits = .false.
end if
Expand Down
29 changes: 12 additions & 17 deletions PARPACK/SRC/MPI/psgetv0.f
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ subroutine psgetv0
c %------------------------%
c
logical first, inits, orth
integer idist, iseed(4), iter, msglvl, jj, myid, igen
integer idist, iseed(4), iter, msglvl, jj, myid
Real
& rnorm0
save first, iseed, inits, iter, msglvl, orth, rnorm0
Expand Down Expand Up @@ -219,25 +219,20 @@ subroutine psgetv0
c
if (inits) then
c
c %-----------------------------------%
c | Generate a seed on each processor |
c | using process id (myid). |
c | Note: the seed must be between 1 |
c | and 4095. iseed(4) must be odd. |
c %-----------------------------------%
c %-----------------------------------%
c | Initialize the seed of the LAPACK |
c | random number generator |
c | Note: seed array elements must be |
c | between 0 and 4095 (12-bit coded) |
c | iseed(4) must be odd |
c %-----------------------------------%
c
call MPI_COMM_RANK(comm, myid, ierr)
igen = 1000 + 2*myid + 1
if (igen .gt. 4095) then
write(0,*) 'Error in p_getv0: seed exceeds 4095!'
end if
c
iseed(1) = igen/1000
igen = mod(igen,1000)
iseed(2) = igen/100
igen = mod(igen,100)
iseed(3) = igen/10
iseed(4) = mod(igen,10)
iseed(1) = 1
iseed(2) = 3
iseed(3) = 5
iseed(4) = 1+2*mod(myid,2048)
c
inits = .false.
end if
Expand Down
30 changes: 10 additions & 20 deletions PARPACK/SRC/MPI/pzgetv0.f
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ subroutine pzgetv0
c %------------------------%
c
logical first, inits, orth
integer idist, iseed(4), iter, msglvl, jj, myid, igen
integer idist, iseed(4), iter, msglvl, jj, myid
Double precision
& rnorm0
Complex*16
Expand Down Expand Up @@ -213,33 +213,23 @@ subroutine pzgetv0
c | Executable Statements |
c %-----------------------%
c
c
if (inits) then
c
c %-----------------------------------%
c | Initialize the seed of the LAPACK |
c | random number generator |
c | Note: seed array elements must be |
c | between 0 and 4095 (12-bit coded) |
c | iseed(4) must be odd |
c %-----------------------------------%
c
if (inits) then
c
c %-----------------------------------%
c | Generate a seed on each processor |
c | using process id (myid). |
c | Note: the seed must be between 1 |
c | and 4095. iseed(4) must be odd. |
c %-----------------------------------%
c
call MPI_COMM_RANK(comm, myid, ierr)
igen = 1000 + 2*myid + 1
if (igen .gt. 4095) then
write(0,*) 'Error in p_getv0: seed exceeds 4095!'
end if
c
iseed(1) = igen/1000
igen = mod(igen,1000)
iseed(2) = igen/100
igen = mod(igen,100)
iseed(3) = igen/10
iseed(4) = mod(igen,10)
iseed(1) = 1
iseed(2) = 3
iseed(3) = 5
iseed(4) = 1+2*mod(myid,2048)
c
inits = .false.
end if
Expand Down

0 comments on commit 052588a

Please sign in to comment.