TABLE OF CONTENTS


tests/test_hxi [ Unit tests ]

[ Top ] [ Unit tests ]

NAME

test_hxi

SYNOPSIS

!$Id: test_hxi.f90 529 2018-03-26 11:25:45Z mexas $

program test_hxi

PURPOSE

Test cgca_hxi, a halo exchange subroutine.

DESCRIPTION

Assign coarrays on each image the value of this_image(). Then do a hx call and check that the halos are flag.

NOTE

AUTHOR

Anton Shterenlikht

COPYRIGHT

See LICENSE

USES

cgca testaux

USED BY

Part of CGPACK test suite

SOURCE

use testaux

implicit none

real,parameter :: gigabyte=real(2**30)
logical( kind=ldef ), parameter :: yesdebug = .true., nodebug = .false.

real( kind=rdef ) ::   &
       qual,           & ! quality
       bsz0(3),        & ! the given "box" size
       bsz(3),         & ! updated "box" size
       dm,             & ! mean grain size, linear dim, phys units
       lres,           & ! linear resolution, cells per unit of length
       res               ! resolutions, cells per grain

integer( kind=idef ) :: ir(3), nimgs, ng, c(3) ! coarray dims

integer( kind=iarr ), allocatable :: space(:,:,:,:)[:,:,:]
integer( kind=iarr ) :: img

integer( kind=ilrg ) :: icells, mcells

integer :: flag

!*********************************************************************72
! first executable statement

! Set to an error value initially

flag = 1 
! physical dimensions of the box, assume mm
  bsz0 = (/ 1.0, 1.1, 0.9 /)

! mean grain size, linear dimension, e.g. mean grain diameter, also mm
  dm = 5.0e-1

! resolution
  res = 1.0e5

  img = int( this_image(), kind=iarr )
nimgs = num_images()

  ! do a check on image 1
  if ( img .eq. 1 ) then

     ! print a banner
     call banner("hxi")

     ! print the parameter values
     call cgca_pdmp

     write (*,'(a,i0,a)') "running on ", nimgs, " images in a 3D grid"

  end if

  ! I want pdmp output appear before the rest.
  ! This might help
  sync all

  ! each image calculates the coarray grid dimensions
  call cgca_gdim( nimgs, ir, qual )

  ! calculate the resolution and the actual phys dimensions
  ! of the box
  ! subroutine cgca_cadim( bsz, res, dm, ir, c, lres, ng )
  ! c - coarray sizes
  ! ir - coarray grid sizes
  bsz = bsz0
  call cgca_cadim( bsz, res, dm, ir, c, lres, ng )

  ! total number of cells in a coarray
  icells = int( c(1), kind=ilrg ) * int( c(2), kind=ilrg ) *           &
       int( c(3), kind=ilrg )

  ! total number of cells in the model
  mcells = icells * int( nimgs, kind=ilrg )

  if ( img .eq. 1 ) then
     write ( *, "(9(a,i0),tr1,g10.3,tr1,g10.3,3(a,g10.3),a)" )         &
          "img: ", img  , " nimgs: ", nimgs, " (", c(1) ,              &
          ","    , c(2) , ","       , c(3) , ")[", ir(1),              &
          ","    , ir(2), ","       , ir(3), "] ", ng   ,              &
          qual, lres,                                                  &
          " (", bsz(1), ",", bsz(2), ",", bsz(3), ")"
     write (*,'(a,i0,a)') "Each image has ",icells, " cells"
     write (*,'(a,i0,a)') "The model has ", mcells, " cells"
  end if

! allocate space coarray with a single layer
! implicit sync all
!subroutine cgca_as( l1, u1, l2, u2, l3, u3, col1, cou1, col2, cou2,   &
!                    col3, props, coarray )
call cgca_as(1, c(1), 1, c(2), 1, c(3), 1, ir(1), 1, ir(2), 1, 1, space)

space = img
sync all

call cgca_hxi( space )
sync all

! Test that hx is flag
call cgca_hxic( space, flag )

call co_sum( flag )

if ( img .eq. 1 ) then
  if ( flag .eq. 0 )  write (*,*) "hxi PASS"
end if

sync all

space = img
sync all

call cgca_hxir( space )
sync all

! Test that hx is flag
call cgca_hxic( space, flag )

call co_sum( flag )

if ( img .eq. 1 ) then
  if ( flag .eq. 0 )  write (*,*) "hxir PASS"
end if

! deallocate all arrays
call cgca_ds( space )

end program test_hxi