1bc62cfd4SCameron Smith program readheaderFtn 2bc62cfd4SCameron Smith use iso_c_binding 3bc62cfd4SCameron Smith use phio 4ab645d52SCameron Smith use syncio 5ab645d52SCameron Smith use posixio 6bc62cfd4SCameron Smith use chdir_mod 7bc62cfd4SCameron Smith include "mpif.h" 8bc62cfd4SCameron Smith 9bc62cfd4SCameron Smith type :: ptrarr 10bc62cfd4SCameron Smith real(c_double), pointer :: ptr(:,:) 11bc62cfd4SCameron Smith end type ptrarr 12bc62cfd4SCameron Smith 13d07d6b0bSCameron Smith integer :: rank, ierror, two, nfiles 14ab645d52SCameron Smith type(c_ptr), dimension(2) :: handle 15bc62cfd4SCameron Smith character(len=30) :: dataDbl, iotype 16bc62cfd4SCameron Smith character(len=256) :: phrase 17bc62cfd4SCameron Smith character(len=256), dimension(2) :: dir, fname 18ab645d52SCameron Smith integer, target, dimension(2) :: numpts, ncoords 19bc62cfd4SCameron Smith real(c_double), allocatable, target :: syncCoords(:,:), posixCoords(:,:) 209a6935e5SKenneth E. Jansen type(ptrarr), target, dimension(2) :: coords 21bc62cfd4SCameron Smith 22bc62cfd4SCameron Smith call MPI_Init(ierror) 23bc62cfd4SCameron Smith call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierror) 24bc62cfd4SCameron Smith 25bc62cfd4SCameron Smith coords(1)%ptr => syncCoords 26bc62cfd4SCameron Smith coords(2)%ptr => posixCoords 27bc62cfd4SCameron Smith 28bc62cfd4SCameron Smith phrase = c_char_"co-ordinates"//c_null_char 29bc62cfd4SCameron Smith dataDbl = c_char_"double"//c_null_char 30bc62cfd4SCameron Smith iotype = c_char_"binary"//c_null_char 31bc62cfd4SCameron Smith two = 2 32d07d6b0bSCameron Smith nfiles = 2 33bc62cfd4SCameron Smith 34*50eda766SCameron Smith dir(1) = c_char_"4-procs_case-SyncIO-2_ref"//c_null_char 35*50eda766SCameron Smith dir(2) = c_char_"4-procs_case-Posix_ref"//c_null_char 36bc62cfd4SCameron Smith fname(1) = c_char_"geombc-dat."//c_null_char 37bc62cfd4SCameron Smith fname(2) = c_char_"geombc.dat."//c_null_char 38d07d6b0bSCameron Smith call syncio_setup_read(nfiles, handle(1)) 39ab645d52SCameron Smith call posixio_setup(handle(2), c_char_"r"//c_null_char) 40bc62cfd4SCameron Smith do i=1,2 41bc62cfd4SCameron Smith call chdir(dir(i)) 42bc62cfd4SCameron Smith call MPI_Barrier(MPI_COMM_WORLD, ierror) 43d07d6b0bSCameron Smith call phio_openfile(fname(i), handle(i)) 44d07d6b0bSCameron Smith call phio_readheader(handle(i), phrase, c_loc(numpts), 45bc62cfd4SCameron Smith & two, dataDbl, iotype) 46bc62cfd4SCameron Smith ncoords(i) = numpts(1)*numpts(2) 47bc62cfd4SCameron Smith allocate( coords(i)%ptr(numpts(1),numpts(2)) ) 48d07d6b0bSCameron Smith call phio_readdatablock(handle(i), phrase, 49d6c1fe40SCameron Smith & c_loc(coords(i)%ptr(1,1)), ncoords(i), dataDbl, iotype) 50d07d6b0bSCameron Smith call phio_closefile(handle(i)) 51bc62cfd4SCameron Smith call chdir(c_char_'..'//c_null_char) 52bc62cfd4SCameron Smith end do 53bc62cfd4SCameron Smith if( ncoords(1) .ne. ncoords(2) ) then 54bc62cfd4SCameron Smith write (*,*) 'rank ncoords', rank, ncoords 55bc62cfd4SCameron Smith stop 1 56bc62cfd4SCameron Smith endif 57bc62cfd4SCameron Smith do i=1,numpts(1) 58bc62cfd4SCameron Smith do j=1,numpts(2) 59bc62cfd4SCameron Smith if( coords(1)%ptr(i,j) .ne. coords(2)%ptr(i,j) ) then 60bc62cfd4SCameron Smith write (*,*) 'rank coordinate mismatch i,j', rank, i, j 61bc62cfd4SCameron Smith stop 1 62bc62cfd4SCameron Smith end if 63bc62cfd4SCameron Smith end do 64bc62cfd4SCameron Smith end do 65bc62cfd4SCameron Smith deallocate(coords(1)%ptr) 66bc62cfd4SCameron Smith deallocate(coords(2)%ptr) 67bc62cfd4SCameron Smith call MPI_Finalize(ierror) 68bc62cfd4SCameron Smith end 69