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