subroutine randomize_field(field, klev, ampl, ir, ihl, jhl)
use decomp_2d, only: zstart
use modglobal, only: ib, ie, jb, je, kb, ke, kh, itot, jtot
integer(KIND=selected_int_kind(6)):: imm, ia, ic, ir
integer ihl, jhl
integer i, j, klev
integer iglob, jglob
integer(KIND=selected_int_kind(12)) :: linear_id, state
real ran, ampl
real field(ib - ihl:ie + ihl, jb - jhl:je + jhl, kb - kh:ke + kh)
parameter(imm=134456, ia=8121, ic=28411)
do j = jb, je
jglob = j + zstart(2) - 1
do i = ib, ie
iglob = i + zstart(1) - 1
! Use the global cell index so the perturbation field is
! identical regardless of the MPI decomposition.
linear_id = int(iglob, kind(linear_id)) &
+ int(itot, kind(linear_id)) * int(jglob - 1, kind(linear_id)) &
+ int(itot, kind(linear_id)) * int(jtot, kind(linear_id)) * int(klev - 1, kind(linear_id))
state = mod(int(ir, kind(state)) + linear_id, int(imm, kind(state)))
state = mod(state * int(ia, kind(state)) + int(ic, kind(state)), int(imm, kind(state)))
ran = real(state)/real(imm)
field(i, j, klev) = field(i, j, klev) + (ran - 0.5)*2.0*ampl
end do
end do
return
end subroutine randomize_field