xref: /phasta/phSolver/common/test/phIOread.f (revision 6d0848bbfae688860d74cb6434f989d07b1aad31)
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