module test_psb_zhalo use pfunit_mod use psb_base_mod implicit none include 'mpif.h' contains ! A dense vector of size 6: [1 1 1 2 2 2]. 3rd and 4th entries (global) are halo indices. ! Before halo exchange: img1 [1 1 1 4] img2 [2 2 2 3] ! After halo exchange: img1 [1 1 1 2] img2 [2 2 2 1] subroutine prepare_test2imgs(desc_a,x,check, np, icontxt, info) use psb_base_mod IMPLICIT NONE type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt, info integer, intent(in) :: np integer :: me, i=0, j integer, parameter :: nrows=6 integer :: mid, true integer, allocatable :: vg(:), ia(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag me = this_image() info = 0 if (np < 2) then print*,'You need at least 2 processes to run this test.' info = 1 return endif call psb_init(icontxt,np,MPI_COMM_WORLD) !Allocate vectors if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) allocate(vg(nrows), STAT=info) if (info == 0) allocate(ia(nrows), STAT=info) if (info == 0) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 2 processes !Assuming nrows is a multiple of 2 so mid is an integer !Distribute equally to the two processes mid=nrows/2 do i=1, mid vg(i)=0 enddo do i=mid+1, nrows vg(i)=1 enddo do i=1,size(ia,1) ia(i)=i enddo do i=1,mid val(i)=(1.0d0,1.0d0) enddo do i=mid + 1,nrows val(i)=(2.0d0,2.0d0) enddo call psb_cdall(icontxt,desc_a,info, vg=vg) if (info /=0) then print*,'ERROR in desc allocation', info stop endif if ( me == 1) call psb_cdins(nz=1,ia=(/mid/),ja=(/mid+1/), desc_a=desc_a, info=info) if ( me == 2) call psb_cdins(nz=1,ia=(/mid+1/),ja=(/mid/), desc_a=desc_a, info=info) if (info /=0) then print*,'ERROR in psb_cdins', info stop endif call psb_cdasb(desc_a, info) if (info /=0) then print*,'an error in psb_cdasb', info stop endif call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=ia, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) sync all !Let's modify x, so we need to update halo indices if ((me == 1).or.(me == 2)) then x%v%v(mid +1)=x%v%v(mid+1) + (2.0d0,2.0d0) endif !Let's build the expected solution if (allocated(check)) deallocate(check) if ((me == 1).or.(me==2)) then allocate(check(mid+1), STAT=info) else allocate(check(1), STAT=info) endif if (info /=0) then print*,'ERROR in allocating vectors', info stop endif if (me == 1 ) then check(1:mid)=(1.0d0,1.0d0) check(mid + 1)=(2.0d0,2.0d0) else if (me == 2) then check(1:mid)=(2.0d0,2.0d0) check(mid + 1)=(1.0d0,1.0d0) else check(1)=0.0d0 endif if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) end subroutine prepare_test2imgs ! Before halo exchange: img1 [1 1 1, 4] img2 [2 2 2, 3] ! After halo exchange: img1 [1 1 2, 2] img2 [6 4 4, 1] subroutine prepare_test2imgs_tran(desc_a,x,check, np, icontxt, info) IMPLICIT NONE type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt, info integer, intent(in) :: np integer :: me, i=0, j integer, parameter :: nrows=6 integer :: mid, true integer, allocatable :: vg(:), ia(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag me = this_image() info = 0 if (np < 2) then print*,'You need at least 2 processes to run this test.' info = 1 return endif call psb_init(icontxt,np,MPI_COMM_WORLD) !Allocate vectors if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) allocate(vg(nrows), STAT=info) if (info == 0) allocate(ia(nrows), STAT=info) if (info == 0) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 2 processes !Assuming nrows is a multiple of 2 so mid is an integer !Distribute equally to the two processes mid=nrows/2 do i=1, mid vg(i)=0 enddo do i=mid+1, nrows vg(i)=1 enddo do i=1,size(ia,1) ia(i)=i enddo do i=1,mid val(i)=(1.0d0,1.0d0) enddo do i=mid + 1,nrows val(i)=(2.0d0,2.0d0) enddo call psb_cdall(icontxt,desc_a,info, vg=vg) if (info /=0) then print*,'ERROR in desc allocation', info stop endif if ( me == 1) call psb_cdins(nz=1,ia=(/mid/),ja=(/mid+1/), desc_a=desc_a, info=info) if ( me == 2) call psb_cdins(nz=1,ia=(/mid+1/),ja=(/mid/), desc_a=desc_a, info=info) if (info /=0) then print*,'ERROR in psb_cdins', info stop endif call psb_cdasb(desc_a, info) if (info /=0) then print*,'an error in psb_cdasb', info stop endif call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=ia, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) sync all !Let's modify x, so we need to update halo indices if ((me == 1).or.(me == 2)) then x%v%v(mid +1)=x%v%v(mid+1) + (2.0d0,2.0d0) endif !Let's build the expected solution if (allocated(check)) deallocate(check) if ((me == 1).or.(me==2)) then allocate(check(mid+1), STAT=info) else allocate(check(1), STAT=info) endif if (info /=0) then print*,'ERROR in allocating vectors', info stop endif if (me == 1 ) then check(1:mid-1)=(1.0d0,1.0d0) check(mid)=(4.0d0,4.0d0) check(mid + 1)=(4.0d0,4.0d0) else if (me == 2) then check(1)=(6.0d0,6.0d0) check(mid-1:mid)=(2.0d0,2.0d0) check(mid + 1)=(3.0d0,3.0d0) else check(1)=0.0d0 endif if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) end subroutine prepare_test2imgs_tran subroutine prepare_test4imgs(desc_a,x,check,np,icontxt, info) implicit none type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt integer, intent(in) :: np integer, optional :: info integer :: me, i=0, j,nz integer, parameter :: nrows = 8 integer :: mid, true integer, allocatable :: vg(:), ia(:), ja(:), irw(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag class(psb_xch_idx_type), pointer :: xchg me = this_image() info = 0 if (np < 4) then print*,'You need at least 4 processes to run this test.' info = 1 return endif call psb_init(icontxt,np,MPI_COMM_WORLD) !Allocate vectors if (allocated(vg)) deallocate(vg) allocate(vg(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (allocated(val)) deallocate(val) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 4 processes !Assuming nrows is a multiple of 4 so mid is an integer !Distribute equally to the two processes mid=nrows/4 do i=1, mid vg(i)=0 enddo do i=mid+1, 2*mid vg(i)=1 enddo do i=2*mid + 1, 3*mid vg(i)=2 enddo do i=3*mid+1, nrows vg(i)=3 enddo if (me == 1) nz = 5 if (me == 2) nz = 7 if (me == 3) nz = 7 if (me == 4) nz = 5 if (me > 4) nz = 0 if (allocated(ia)) deallocate(ia) if (allocated(ja)) deallocate(ja) allocate(ia(nz),ja(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then ia(1)=2 ja(1)=1 ia(2)=1 ja(2)=2 ia(3)=2 ja(3)=3 ia(4)=1 ja(4)=4 ia(5)=2 ja(5)=5 endif if (me == 2) then ia(1)=4 ja(1)=1 ia(2)=3 ja(2)=2 ia(3)=4 ja(3)=3 ia(4)=3 ja(4)=4 ia(5)=4 ja(5)=5 ia(6)=3 ja(6)=6 ia(7)=4 ja(7)=6 endif if (me == 3) then ia(1)=5 ja(1)=2 ia(2)=6 ja(2)=3 ia(3)=5 ja(3)=4 ia(4)=6 ja(4)=5 ia(5)=5 ja(5)=6 ia(6)=6 ja(6)=7 ia(7)=5 ja(7)=8 endif if (me == 4) then ia(1)=7 ja(1)=4 ia(2)=8 ja(2)=5 ia(3)=7 ja(3)=6 ia(4)=8 ja(4)=7 ia(5)=7 ja(5)=8 endif do i=1,mid val(i)=(1.0d0,1.0d0) enddo do i= mid + 1, 2*mid val(i)=(2.0d0,2.0d0) enddo do i=2*mid + 1, 3*mid val(i)=(3.0d0,3.0d0) enddo do i=3*mid + 1, nrows val(i)=(4.0d0,4.0d0) enddo call psb_cdall(icontxt,desc_a,info, vg=vg) call psb_cdins(nz=nz,ia=ia,ja=ja, desc_a=desc_a, info=info) call psb_cdasb(desc_a, info) allocate(irw(nrows)) do i=1,nrows irw(i)=i enddo call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=irw, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) if (me==1) nz = 5 if (me==2) nz = 6 if (me==3) nz = 7 if (me==4) nz = 5 if (me > 4) nz = 1 if (allocated(check)) deallocate(check) allocate (check(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then check(1)=(2.0d0,2.0d0) check(2)=(2.0d0,2.0d0) check(3)=(8.0d0,8.0d0) check(4)=(8.0d0,8.0d0) check(5)=(18.0d0,18.0d0) endif if (me == 2) then check(1)=(8.0d0,8.0d0) check(2)=(8.0d0,8.0d0) check(3)=(2.0d0,2.0d0) check(4)=(2.0d0,2.0d0) check(5)=(18.0d0,18.0d0) check(6)=(18.0d0,18.0d0) endif if (me == 3) then check(1)=(18.0d0,18.0d0) check(2)=(18.0d0,18.0d0) check(3)=(1.0d0,1.0d0) check(4)=(8.0d0,8.0d0) check(5)=(8.0d0,8.0d0) check(6)=(32.0d0,32.0d0) check(7)=(32.0d0,32.0d0) endif if (me == 4) then check(1)=(32.0d0,32.0d0) check(2)=(32.0d0,32.0d0) check(3)=(8.0d0,8.0d0) check(4)=(18.0d0,18.0d0) check(5)=(18.0d0,18.0d0) endif ! END OF SETUP call psb_barrier(icontxt) !We can do something better here x%v%v = x%v%v*2*me if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) end subroutine prepare_test4imgs subroutine prepare_test4imgs_tran(desc_a,x,check,np,icontxt, info) implicit none type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt integer, intent(in) :: np integer, optional :: info integer :: me, i=0, j,nz integer, parameter :: nrows = 8 integer :: mid, true integer, allocatable :: vg(:), ia(:), ja(:), irw(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag class(psb_xch_idx_type), pointer :: xchg me = this_image() info = 0 if (np < 4) then print*,'You need at least 4 processes to run this test.' info = 1 return endif call psb_init(icontxt,np,MPI_COMM_WORLD) !Allocate vectors if (allocated(vg)) deallocate(vg) allocate(vg(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (allocated(val)) deallocate(val) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 4 processes !Assuming nrows is a multiple of 4 so mid is an integer !Distribute equally to the two processes mid=nrows/4 do i=1, mid vg(i)=0 enddo do i=mid+1, 2*mid vg(i)=1 enddo do i=2*mid + 1, 3*mid vg(i)=2 enddo do i=3*mid+1, nrows vg(i)=3 enddo if (me == 1) nz = 5 if (me == 2) nz = 7 if (me == 3) nz = 7 if (me == 4) nz = 5 if (me > 4) nz = 0 if (allocated(ia)) deallocate(ia) if (allocated(ja)) deallocate(ja) allocate(ia(nz),ja(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then ia(1)=2 ja(1)=1 ia(2)=1 ja(2)=2 ia(3)=2 ja(3)=3 ia(4)=1 ja(4)=4 ia(5)=2 ja(5)=5 endif if (me == 2) then ia(1)=4 ja(1)=1 ia(2)=3 ja(2)=2 ia(3)=4 ja(3)=3 ia(4)=3 ja(4)=4 ia(5)=4 ja(5)=5 ia(6)=3 ja(6)=6 ia(7)=4 ja(7)=6 endif if (me == 3) then ia(1)=5 ja(1)=2 ia(2)=6 ja(2)=3 ia(3)=5 ja(3)=4 ia(4)=6 ja(4)=5 ia(5)=5 ja(5)=6 ia(6)=6 ja(6)=7 ia(7)=5 ja(7)=8 endif if (me == 4) then ia(1)=7 ja(1)=4 ia(2)=8 ja(2)=5 ia(3)=7 ja(3)=6 ia(4)=8 ja(4)=7 ia(5)=7 ja(5)=8 endif do i=1,mid val(i)=(1.0d0,1.0d0) enddo do i= mid + 1, 2*mid val(i)=(2.0d0,2.0d0) enddo do i=2*mid + 1, 3*mid val(i)=(3.0d0,3.0d0) enddo do i=3*mid + 1, nrows val(i)=(4.0d0,4.0d0) enddo call psb_cdall(icontxt,desc_a,info, vg=vg) call psb_cdins(nz=nz,ia=ia,ja=ja, desc_a=desc_a, info=info) call psb_cdasb(desc_a, info) allocate(irw(nrows)) do i=1,nrows irw(i)=i enddo call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=irw, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) if (me==1) nz = 5 if (me==2) nz = 6 if (me==3) nz = 7 if (me==4) nz = 5 if (me > 4) nz = 1 if (allocated(check)) deallocate(check) allocate (check(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then check(1)=(6.0d0,6.0d0) check(2)=(12.0d0,12.0d0) check(3)=(4.0d0,4.0d0) check(4)=(4.0d0,4.0d0) check(5)=(6.0d0,6.0d0) endif if (me == 2) then check(1)=(24.0d0,24.0d0) check(2)=(40.0d0,40.0d0) check(3)=(4.0d0,4.0d0) check(4)=(4.0d0,4.0d0) check(5)=(12.0d0,12.0d0) check(6)=(12.0d0,12.0d0) endif if (me == 3) then check(1)=(6.0d0,6.0d0) check(2)=(54.0d0,54.0d0) check(3)=(6.0d0,6.0d0) check(4)=(12.0d0,12.0d0) check(5)=(12.0d0,12.0d0) check(6)=(24.0d0,24.0d0) check(7)=(24.0d0,24.0d0) endif if (me == 4) then check(1)=(56.0d0,65.0d0) check(2)=(56.0d0,65.0d0) check(3)=(16.0d0,16.0d0) check(4)=(24.0d0,24.0d0) check(5)=(24.0d0,24.0d0) endif ! END OF SETUP call psb_barrier(icontxt) !We can do something better here x%v%v = x%v%v*2*me if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) end subroutine prepare_test4imgs_tran subroutine prepare_test8imgs(desc_a,x,check,np,icontxt, info) implicit none type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt integer, intent(in) :: np integer :: info integer :: me, i=0, j,nz integer, parameter :: nrows = 8 integer :: mid, true integer, allocatable :: vg(:), ia(:), ja(:), irw(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag class(psb_xch_idx_type), pointer :: xchg if (np < 8) then print*,'You need at least 8 processes to run this test.' return endif call psb_init(icontxt,np,MPI_COMM_WORLD) me = this_image() !Allocate vectors if (allocated(vg)) deallocate(vg) allocate(vg(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (allocated(val)) deallocate(val) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 8 processes !Each process has a line do i=1, nrows vg(i)=i-1 enddo if (me == 1) nz = 1 if (me == 2) nz = 2 if (me == 3) nz = 3 if ((me >= 4).and.(me <= 8)) nz = 2 if (me > 8) nz = 0 if (allocated(ia)) deallocate(ia) if (allocated(ja)) deallocate(ja) allocate(ia(nz),ja(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then ia(1)=1 ja(1)=6 endif if (me == 2) then ia(1)=2 ja(1)=1 ia(2)=2 ja(2)=7 endif if (me == 3) then ia(1)=3 ja(1)=1 ia(2)=3 ja(2)=2 ia(3)=3 ja(3)=8 endif if (me == 4) then ia(1)=4 ja(1)=2 ia(2)=4 ja(2)=3 endif if (me == 5) then ia(1)=5 ja(1)=3 ia(2)=5 ja(2)=4 endif if (me == 6) then ia(1)=6 ja(1)=4 ia(2)=6 ja(2)=5 endif if (me == 7) then ia(1)=7 ja(1)=5 ia(2)=7 ja(2)=6 endif if (me == 8) then ia(1)=8 ja(1)=6 ia(2)=8 ja(2)=7 endif do i=1,nrows val(i)=cmplx(me,me) enddo sync all call psb_cdall(icontxt,desc_a,info, vg=vg) if (info /=0) then print*,'an error in desc allocation', me, info stop endif call psb_cdins(nz=nz,ia=ia,ja=ja, desc_a=desc_a, info=info) if (info /=0) then print*,'an error in psb_cdins', me, info stop endif call psb_cdasb(desc_a, info) if (info /=0) then print*,'an error in psb_cdasb', me, info stop endif allocate(irw(nrows)) do i=1,nrows irw(i)=i enddo call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=irw, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) if (me == 1) nz = 2 if (me == 2) nz = 3 if (me == 3) nz = 4 if ((me >= 4).and.(me <= 8)) nz = 3 if (me > 8) nz = 1 if (allocated(check)) deallocate(check) allocate (check(nz)) if (me == 1) then check(1)=(2.0d0,2.0d0) check(2)=(12.0d0,12.0d0) endif if (me == 2) then check(1)=(4.0d0,4.0d0) check(2)=(2.0d0,2.0d0) check(3)=(14.0d0,14.0d0) endif if (me == 3) then check(1)=(6.0d0,6.0d0) check(2)=(2.0d0,2.0d0) check(3)=(4.0d0,4.0d0) check(4)=(16.0d0,16.0d0) endif if (me == 4) then check(1)=(8.0d0,8.0d0) check(2)=(4.0d0,4.0d0) check(3)=(6.0d0,6.0d0) endif if (me == 5) then check(1)=(10.0d0,10.0d0) check(2)=(6.0d0,6.0d0) check(3)=(8.0d0,8.0d0) endif if (me == 6) then check(1)=(12.0d0,12.0d0) check(2)=(8.0d0,8.0d0) check(3)=(10.0d0,10.0d0) endif if (me == 7) then check(1)=(14.0d0,14.0d0) check(2)=(10.0d0,10.0d0) check(3)=(12.0d0,12.0d0) endif if (me == 8) then check(1)=(16.0d0,16.0d0) check(2)=(12.0d0,12.0d0) check(3)=(14.0d0,14.0d0) endif if (me > 8) then check(1)=(0.0d0,0.0d0) endif ! END OF SETUP call psb_barrier(icontxt) !We can do something better here x%v%v = x%v%v + cmplx(me,me) if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) end subroutine prepare_test8imgs subroutine prepare_test8imgs_tran(desc_a,x,check,np,icontxt, info) implicit none type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt integer, intent(in) :: np integer :: info integer :: me, i=0, j,nz integer, parameter :: nrows = 8 integer :: mid, true integer, allocatable :: vg(:), ia(:), ja(:), irw(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag class(psb_xch_idx_type), pointer :: xchg if (np < 8) then print*,'You need at least 8 processes to run this test.' return endif call psb_init(icontxt,np,MPI_COMM_WORLD) me = this_image() !Allocate vectors if (allocated(vg)) deallocate(vg) allocate(vg(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (allocated(val)) deallocate(val) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 8 processes !Each process has a line do i=1, nrows vg(i)=i-1 enddo if (me == 1) nz = 1 if (me == 2) nz = 2 if (me == 3) nz = 3 if ((me >= 4).and.(me <= 8)) nz = 2 if (me > 8) nz = 0 if (allocated(ia)) deallocate(ia) if (allocated(ja)) deallocate(ja) allocate(ia(nz),ja(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then ia(1)=1 ja(1)=6 endif if (me == 2) then ia(1)=2 ja(1)=1 ia(2)=2 ja(2)=7 endif if (me == 3) then ia(1)=3 ja(1)=1 ia(2)=3 ja(2)=2 ia(3)=3 ja(3)=8 endif if (me == 4) then ia(1)=4 ja(1)=2 ia(2)=4 ja(2)=3 endif if (me == 5) then ia(1)=5 ja(1)=3 ia(2)=5 ja(2)=4 endif if (me == 6) then ia(1)=6 ja(1)=4 ia(2)=6 ja(2)=5 endif if (me == 7) then ia(1)=7 ja(1)=5 ia(2)=7 ja(2)=6 endif if (me == 8) then ia(1)=8 ja(1)=6 ia(2)=8 ja(2)=7 endif do i=1,nrows val(i)=cmplx(me,me) enddo sync all call psb_cdall(icontxt,desc_a,info, vg=vg) if (info /=0) then print*,'an error in desc allocation', me, info stop endif call psb_cdins(nz=nz,ia=ia,ja=ja, desc_a=desc_a, info=info) if (info /=0) then print*,'an error in psb_cdins', me, info stop endif call psb_cdasb(desc_a, info) if (info /=0) then print*,'an error in psb_cdasb', me, info stop endif allocate(irw(nrows)) do i=1,nrows irw(i)=i enddo call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=irw, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) if (me == 1) nz = 2 if (me == 2) nz = 3 if (me == 3) nz = 4 if ((me >= 4).and.(me <= 8)) nz = 3 if (me > 8) nz = 1 if (allocated(check)) deallocate(check) allocate (check(nz)) if (me == 1) then check(1)=(9.0d0,9.0d0) check(2)=(7.0d0,7.0d0) endif if (me == 2) then check(1)=(15.0d0,15.0d0) check(2)=(3.0d0,3.0d0) check(3)=(9.0d0,9.0d0) endif if (me == 3) then check(1)=(21.0d0,21.0d0) check(2)=(4.0d0,4.0d0) check(3)=(5.0d0,5.0d0) check(4)=(11.0d0,11.0d0) endif if (me == 4) then check(1)=(27.0d0,27.0d0) check(2)=(6.0d0,6.0d0) check(3)=(7.0d0,7.0d0) endif if (me == 5) then check(1)=(33.0d0,33.0d0) check(2)=(8.0d0,8.0d0) check(3)=(9.0d0,9.0d0) endif if (me == 6) then check(1)=(46.0d0,46.0d0) check(2)=(10.0d0,10.0d0) check(3)=(13.0d0,13.0d0) endif if (me == 7) then check(1)=(38.0d0,38.0d0) check(2)=(12.0d0,12.0d0) check(3)=(13.0d0,13.0d0) endif if (me == 8) then check(1)=(27.0d0,27.0d0) check(2)=(14.0d0,14.0d0) check(3)=(15.0d0,15.0d0) endif if (me > 8) then check(1)=0 endif ! END OF SETUP call psb_barrier(icontxt) !We can do something better here x%v%v = x%v%v + cmplx(me,me) if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) end subroutine prepare_test8imgs_tran subroutine prepare_test8imgs_b(desc_a,x,check,np,icontxt, info) implicit none type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt integer, intent(in) :: np integer, optional :: info integer :: me, i=0, j,nz, info_ integer, parameter :: nrows = 8 integer :: mid, true integer, allocatable :: vg(:), ia(:), ja(:), irw(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag class(psb_xch_idx_type), pointer :: xchg if (np < 8) then print*,'You need at least 8 processes to run this test.' return endif call psb_init(icontxt,np,MPI_COMM_WORLD) me = this_image() !Allocate vectors if (allocated(vg)) deallocate(vg) allocate(vg(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (allocated(val)) deallocate(val) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 8 processes !Each process has a line do i=1, nrows vg(i)=i-1 enddo if (me == 1) nz = 7 if ((me >= 2).and.(me <= 8)) nz = 1 if (me > 8) nz = 0 if (allocated(ia)) deallocate(ia) if (allocated(ja)) deallocate(ja) allocate(ia(nz),ja(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then ia(1)=1 ja(1)=2 ia(2)=1 ja(2)=3 ia(3)=1 ja(3)=4 ia(4)=1 ja(4)=5 ia(5)=1 ja(5)=6 ia(6)=1 ja(6)=7 ia(7)=1 ja(7)=8 endif if (me == 2) then ia(1)=2 ja(1)=1 endif if (me == 3) then ia(1)=3 ja(1)=1 endif if (me == 4) then ia(1)=4 ja(1)=1 endif if (me == 5) then ia(1)=5 ja(1)=1 endif if (me == 6) then ia(1)=6 ja(1)=1 endif if (me == 7) then ia(1)=7 ja(1)=1 endif if (me == 8) then ia(1)=8 ja(1)=1 endif do i=1,nrows val(i)=cmplx(me,me) enddo call psb_cdall(icontxt,desc_a,info, vg=vg) call psb_cdins(nz=nz,ia=ia,ja=ja, desc_a=desc_a, info=info) call psb_cdasb(desc_a, info) if (allocated(irw)) deallocate(irw) allocate(irw(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif do i=1,nrows irw(i)=i enddo call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=irw, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) if (me == 1) nz = 8 if ((me >= 2).and.(me <= 8)) nz = 2 if (me > 8) nz = 1 if (allocated(check)) deallocate(check) allocate (check(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then check(1)=(2.0d0,2.0d0) check(2)=(4.0d0,4.0d0) check(3)=(6.0d0,6.0d0) check(4)=(8.0d0,8.0d0) check(5)=(10.0d0,10.0d0) check(6)=(12.0d0,12.0d0) check(7)=(14.0d0,14.0d0) check(8)=(16.0d0,16.0d0) endif if (me == 2) then check(1)=(4.0d0,4.0d0) check(2)=(2.0d0,2.0d0) endif if (me == 3) then check(1)=(6.0d0,6.0d0) check(2)=(2.0d0,2.0d0) endif if (me == 4) then check(1)=(8.0d0,8.0d0) check(2)=(2.0d0,2.0d0) endif if (me == 5) then check(1)=(10.0d0,10.0d0) check(2)=(2.0d0,2.0d0) endif if (me == 6) then check(1)=(12.0d0,12.0d0) check(2)=(2.0d0,2.0d0) endif if (me == 7) then check(1)=(14.0d0,14.0d0) check(2)=(2.0d0,2.0d0) endif if (me == 8) then check(1)=(16.0d0,16.0d0) check(2)=(2.0d0,2.0d0) endif if (me > 8) then check(1)=0 endif ! END OF SETUP call psb_barrier(icontxt) !We can do something better here x%v%v = x%v%v + cmplx(me,me) if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) if (allocated(irw)) deallocate(irw) end subroutine prepare_test8imgs_b subroutine prepare_test8imgs_tran_b(desc_a,x,check,np,icontxt, info) implicit none type(psb_desc_type), intent(out):: desc_a type(psb_z_vect_type), intent(out) :: x complex(psb_dpk_), allocatable, intent(out) :: check(:) integer, intent(out) :: icontxt integer, intent(in) :: np integer, optional :: info integer :: me, i=0, j,nz, info_ integer, parameter :: nrows = 8 integer :: mid, true integer, allocatable :: vg(:), ia(:), ja(:), irw(:) complex(psb_dpk_), allocatable :: val(:) integer(psb_ipk_) :: iictxt, icomm, flag class(psb_xch_idx_type), pointer :: xchg if (np < 8) then print*,'You need at least 8 processes to run this test.' return endif call psb_init(icontxt,np,MPI_COMM_WORLD) me = this_image() !Allocate vectors if (allocated(vg)) deallocate(vg) allocate(vg(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (allocated(val)) deallocate(val) allocate(val(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif !Use only 8 processes !Each process has a line do i=1, nrows vg(i)=i-1 enddo if (me == 1) nz = 7 if ((me >= 2).and.(me <= 8)) nz = 1 if (me > 8) nz = 0 if (allocated(ia)) deallocate(ia) if (allocated(ja)) deallocate(ja) allocate(ia(nz),ja(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then ia(1)=1 ja(1)=2 ia(2)=1 ja(2)=3 ia(3)=1 ja(3)=4 ia(4)=1 ja(4)=5 ia(5)=1 ja(5)=6 ia(6)=1 ja(6)=7 ia(7)=1 ja(7)=8 endif if (me == 2) then ia(1)=2 ja(1)=1 endif if (me == 3) then ia(1)=3 ja(1)=1 endif if (me == 4) then ia(1)=4 ja(1)=1 endif if (me == 5) then ia(1)=5 ja(1)=1 endif if (me == 6) then ia(1)=6 ja(1)=1 endif if (me == 7) then ia(1)=7 ja(1)=1 endif if (me == 8) then ia(1)=8 ja(1)=1 endif do i=1,nrows val(i)=cmplx(me,me) enddo call psb_cdall(icontxt,desc_a,info, vg=vg) call psb_cdins(nz=nz,ia=ia,ja=ja, desc_a=desc_a, info=info) call psb_cdasb(desc_a, info) if (allocated(irw)) deallocate(irw) allocate(irw(nrows), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif do i=1,nrows irw(i)=i enddo call psb_geall(x,desc_a,info) call psb_geins(m=nrows, irw=irw, val=val,x=x, desc_a=desc_a, info=info) call psb_geasb(x,desc_a,info) if (me == 1) nz = 8 if ((me >= 2).and.(me <= 8)) nz = 2 if (me > 8) nz = 1 if (allocated(check)) deallocate(check) allocate (check(nz), STAT=info) if (info /=0) then print*,'ERROR while allocating some vectors' info = -1 stop endif if (me == 1) then check(1)=(44.0d0,44.0d0) check(2)=(3.0d0,3.0d0) check(3)=(4.0d0,4.0d0) check(4)=(5.0d0,5.0d0) check(5)=(6.0d0,6.0d0) check(6)=(7.0d0,7.0d0) check(7)=(8.0d0,8.0d0) check(8)=(9.0d0,9.0d0) endif if (me == 2) then check(1)=(7.0d0,7.0d0) check(2)=(3.0d0,3.0d0) endif if (me == 3) then check(1)=(10.0d0,10.0d0) check(2)=(4.0d0,4.0d0) endif if (me == 4) then check(1)=(13.0d0,13.0d0) check(2)=(5.0d0,5.0d0) endif if (me == 5) then check(1)=(16.0d0,16.0d0) check(2)=(6.0d0,6.0d0) endif if (me == 6) then check(1)=(19.0d0,19.0d0) check(2)=(7.0d0,7.0d0) endif if (me == 7) then check(1)=(22.0d0,22.0d0) check(2)=(8.0d0,8.0d0) endif if (me == 8) then check(1)=(25.0d0,25.0d0) check(2)=(9.0d0,9.0d0) endif if (me > 8) then check(1)=0 endif ! END OF SETUP call psb_barrier(icontxt) !We can do something better here x%v%v = x%v%v + cmplx(me,me) if (allocated(vg)) deallocate(vg) if (allocated(ia)) deallocate(ia) if (allocated(val)) deallocate(val) if (allocated(irw)) deallocate(irw) end subroutine prepare_test8imgs_tran_b @test(nimgs=[std]) subroutine test_psb_zhalo_2imgs_v(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test2imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_2imgs_v @test(nimgs=[std]) subroutine test_psb_zhalo_tran_2imgs_v(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test2imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_2imgs_v @test(nimgs=[std]) subroutine test_psb_zhalo_2imgs_vect(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test2imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_2imgs_vect @test(nimgs=[std]) subroutine test_psb_zhalo_tran_2imgs_vect(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test2imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_2imgs_vect @test(nimgs=[std]) subroutine test_psb_zhalo_2imgs_m(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test2imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif v = m(:,1) @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_2imgs_m @test(nimgs=[std]) subroutine test_psb_zhalo_tran_2imgs_m(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test2imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info, tran='T') v = m(:,1) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_2imgs_m @test(nimgs=[std]) subroutine test_psb_zhalo_4imgs_v(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test4imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) if (allocated(v)) deallocate(v) if (allocated(check)) deallocate(check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_4imgs_v @test(nimgs=[std]) subroutine test_psb_zhalo_tran_4imgs_v(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test4imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) if (allocated(v)) deallocate(v) if (allocated(check)) deallocate(check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_4imgs_v @test(nimgs=[std]) subroutine test_psb_zhalo_4imgs_vect(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test4imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_4imgs_vect @test(nimgs=[std]) subroutine test_psb_zhalo_tran_4imgs_vect(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test4imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_4imgs_vect @test(nimgs=[std]) subroutine test_psb_zhalo_4imgs_m(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test4imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif v = m(:,1) @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_4imgs_m @test(nimgs=[std]) subroutine test_psb_zhalo_tran_4imgs_m(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test4imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info, tran='T') v = m(:,1) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_4imgs_m @test(nimgs=[std]) subroutine test_psb_zhalo_8imgs_v(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) if (allocated(v)) deallocate(v) if (allocated(check)) deallocate(check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_8imgs_v @test(nimgs=[std]) subroutine test_psb_zhalo_tran_8imgs_v(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) if (allocated(v)) deallocate(v) if (allocated(check)) deallocate(check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_8imgs_v @test(nimgs=[std]) subroutine test_psb_zhalo_8imgs_vect(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_8imgs_vect @test(nimgs=[std]) subroutine test_psb_zhalo_tran_8imgs_vect(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_8imgs_vect @test(nimgs=[std]) subroutine test_psb_zhalo_8imgs_m(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif v = m(:,1) @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_8imgs_m @test(nimgs=[std]) subroutine test_psb_zhalo_tran_8imgs_m(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_tran(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info, tran='T') v = m(:,1) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_8imgs_m @test(nimgs=[std]) subroutine test_psb_zhalo_8imgs_v_b(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_b(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) if (allocated(v)) deallocate(v) if (allocated(check)) deallocate(check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_8imgs_v_b @test(nimgs=[std]) subroutine test_psb_zhalo_tran_8imgs_v_b(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_tran_b(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() call psb_halo(v, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) if (allocated(v)) deallocate(v) if (allocated(check)) deallocate(check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_8imgs_v_b @test(nimgs=[std]) subroutine test_psb_zhalo_8imgs_vect_b(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_b(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_8imgs_vect_b @test(nimgs=[std]) subroutine test_psb_zhalo_tran_8imgs_vect_b(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_tran_b(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP call psb_halo(x, desc_a, info, tran='T') @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X v = x%get_vect() if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_8imgs_vect_b @test(nimgs=[std]) subroutine test_psb_zhalo_8imgs_m_b(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_b(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif v = m(:,1) @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_8imgs_m_b @test(nimgs=[std]) subroutine test_psb_zhalo_tran_8imgs_m_b(this) implicit none Class(CafTestMethod), intent(inout) :: this integer :: me, np, info integer :: icontxt, true complex(psb_dpk_), allocatable :: v(:), m(:,:), check(:) type(psb_desc_type):: desc_a type(psb_z_vect_type) :: x me = this_image() np = this%getNumImages() call prepare_test8imgs_tran_b(desc_a,x,check, np, icontxt, info) @assertEqual(0,info, "ERROR in preparing the test") ! END OF SETUP v = x%get_vect() allocate(m(size(v),1)) m(:,1) = v call psb_halo(m, desc_a, info, tran='T') v = m(:,1) @assertEqual(0,info, "ERROR in psb_halo") !GETTING BACK X if ((me==1).or.(me==2)) then true = 1 else true=0 endif @assertEqual(true*check,true*v) deallocate(v,m,check) call psb_gefree(x, desc_a, info) call psb_cdfree(desc_a, info) call psb_exit(icontxt) end subroutine test_psb_zhalo_tran_8imgs_m_b end module test_psb_zhalo