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