program ftest
use qmxf03_module
implicit none
integer, parameter :: DP=KIND(1.0d0)
integer, parameter :: SP=KIND(1.0e0)
integer, parameter :: NDAT=3*4*16*16*16
integer :: myrank,i,iout
character(len=256) :: fname
real(DP) :: et0,et1
integer :: idata(NDAT)
real(DP) :: ddata(NDAT),dtmp,dtmp2
real(SP) :: sdata(NDAT),stmp,stmp2
complex(DP) :: szdata(NDAT),rzdata(NDAT),ztmp
complex(SP) :: scdata(NDAT),rcdata(NDAT),ctmp
iout = 33
call qmx_init()
myrank = qmx_get_local_rank()
write(fname,'("fqmx.",I2.2)')myrank
open(iout,file=TRIM(fname),form='formatted',status='unknown')
write(iout,'("RANK=",I3)')myrank
call qmx_clock(et0)
do i=1,NDAT
call qmx_barrier()
enddo
call qmx_clock(et1)
et1 = et1 - et0
write(iout,'("qmx_barrier(",I2,"): ",I2," [called] ",ES14.6," [sec] ",F14.6," [usec/call]")') myrank,NDAT,et1,et1*1000*1000/NDAT
do i=1,NDAT
idata(i) = qmx_get_local_rank()*i
enddo
call qmx_sumcast_int(NDAT,idata)
do i=1,NDAT
write(iout,'("qmx_sumcast_int(",I2,"): data[",I10,"] = ",I10)') myrank,i,idata(i)/i
enddo
do i=1,NDAT
ddata(i) = REAL(qmx_get_local_rank()*i,kind=DP)*sqrt(2.0_DP)
enddo
call qmx_sumcast_double(NDAT,ddata)
do i=1,NDAT
write(iout,'("qmx_sumcast_double(",I2,"): data[",I10,"] = ",ES24.15)')myrank,i,ddata(i)/i
enddo
do i=1,NDAT
sdata(i) = REAL(qmx_get_local_rank()*i,kind=SP)
enddo
call qmx_bcast_float(NDAT,sdata,2)
do i=1,NDAT
write(iout,'("qmx_bcast_float(",I2,"): data[",I10,"] = ",ES14.6)')myrank,i,sdata(i)/i
enddo
do i=1,NDAT
dtmp = REAL(qmx_get_local_rank()+1,kind=SP)
scdata(i) = cmplx(dtmp,1.0_SP/dtmp,kind=SP)*i
rcdata(i) = (0.0_SP,0.0_SP)
enddo
call qmx_clock(et0)
call qmx_sendrecv_cmplx(NDAT,scdata,qmx_get_2d_next_x_rank(),rcdata,qmx_get_2d_prev_x_rank())
call qmx_clock(et1)
et1 = et1 - et0
write(iout,'("qmx_sendrecv_cmplx(",I2,") ETIME=",F14.6," [sec] MBYTE=",F14.6," MB/s=",F14.6)') myrank,et1,real(8*NDAT)/1000/1000,real(8*NDAT)/1000/1000/et1
do i=1,NDAT
write(iout,'("qmx_sendrecv_cmplx(",I2,"): data[",I10,"] = ",2ES14.6)')myrank,i,rcdata(i)
enddo
do i=1,NDAT
dtmp = REAL(qmx_get_local_rank()+1,kind=DP)
szdata(i) = cmplx(dtmp,1.0_DP/dtmp,kind=DP)*i
rzdata(i) = (0.0_DP,0.0_DP)
enddo
call qmx_clock(et0)
call qmx_sendrecv_dcmplx(NDAT,szdata,qmx_get_2d_next_y_rank(),rzdata,qmx_get_2d_prev_y_rank())
call qmx_clock(et1)
et1 = et1 - et0
write(iout,'("qmx_sendrecv_dcmplx(",I2,") ETIME=",F14.6," [sec] MBYTE=",F14.6," MB/s=",F14.6)') myrank,et1,real(16*NDAT)/1000/1000,real(16*NDAT)/1000/1000/et1
do i=1,NDAT
write(iout,'("qmx_sendrecv_dcmplx(",I2,"): data[",I10,"] = ",4ES24.16)')myrank,i,rzdata(i)
enddo
call qmx_finalize()
close(iout)
stop
end program