|
|
|
@ -23,7 +23,7 @@ subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data)
|
|
|
|
|
integer, pointer, dimension(:) :: bsdidx, brvidx,&
|
|
|
|
|
& sdsz, rvsz, prcid, ptp, rvhd, d_idx
|
|
|
|
|
integer :: int_err(5)
|
|
|
|
|
logical :: swap_mpi, swap_sync, swap_send, swap_recv
|
|
|
|
|
logical :: swap_mpi, swap_sync, swap_send, swap_recv, all
|
|
|
|
|
real(kind(1.d0)), pointer, dimension(:) :: sndbuf, rcvbuf
|
|
|
|
|
character(len=20) :: name, ch_err
|
|
|
|
|
|
|
|
|
@ -140,12 +140,14 @@ subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data)
|
|
|
|
|
if((idxr+idxs).lt.size(work)) then
|
|
|
|
|
sndbuf => work(1:idxs)
|
|
|
|
|
rcvbuf => work(idxs+1:idxs+idxr)
|
|
|
|
|
all=.false.
|
|
|
|
|
else
|
|
|
|
|
allocate(sndbuf(idxs),rcvbuf(idxr), stat=info)
|
|
|
|
|
if(info.ne.0) then
|
|
|
|
|
call psb_errpush(4000,name)
|
|
|
|
|
goto 9999
|
|
|
|
|
end if
|
|
|
|
|
all=.true.
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
! Case SWAP_MPI
|
|
|
|
@ -437,6 +439,15 @@ subroutine psi_dswapdatam(flag,n,beta,y,desc_a,work,info,data)
|
|
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
deallocate(sdsz,rvsz,bsdidx,&
|
|
|
|
|
& brvidx,rvhd,prcid,&
|
|
|
|
|
& ptp,stat=info)
|
|
|
|
|
if(all) deallocate(sndbuf,rcvbuf,stat=info)
|
|
|
|
|
if(info.ne.0) then
|
|
|
|
|
call psb_errpush(4000,name)
|
|
|
|
|
goto 9999
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
call psb_erractionrestore(err_act)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
@ -476,7 +487,7 @@ subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data)
|
|
|
|
|
& sdsz, rvsz, prcid, ptp, rvhd, d_idx
|
|
|
|
|
integer :: blacs_pnum, krecvid, ksendid
|
|
|
|
|
integer :: int_err(5)
|
|
|
|
|
logical :: swap_mpi, swap_sync, swap_send, swap_recv
|
|
|
|
|
logical :: swap_mpi, swap_sync, swap_send, swap_recv,all
|
|
|
|
|
real(kind(1.d0)), pointer, dimension(:) :: sndbuf, rcvbuf
|
|
|
|
|
character(len=20) :: name, ch_err
|
|
|
|
|
|
|
|
|
@ -595,12 +606,14 @@ subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data)
|
|
|
|
|
if((idxr+idxs).lt.size(work)) then
|
|
|
|
|
sndbuf => work(1:idxs)
|
|
|
|
|
rcvbuf => work(idxs+1:idxs+idxr)
|
|
|
|
|
all=.false.
|
|
|
|
|
else
|
|
|
|
|
allocate(sndbuf(idxs),rcvbuf(idxr), stat=info)
|
|
|
|
|
if(info.ne.0) then
|
|
|
|
|
call psb_errpush(4000,name)
|
|
|
|
|
goto 9999
|
|
|
|
|
end if
|
|
|
|
|
all=.true.
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
! Case SWAP_MPI
|
|
|
|
@ -891,6 +904,15 @@ subroutine psi_dswapdatav(flag,beta,y,desc_a,work,info,data)
|
|
|
|
|
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
deallocate(sdsz,rvsz,bsdidx,&
|
|
|
|
|
& brvidx,rvhd,prcid,&
|
|
|
|
|
& ptp,stat=info)
|
|
|
|
|
if(all) deallocate(sndbuf,rcvbuf,stat=info)
|
|
|
|
|
if(info.ne.0) then
|
|
|
|
|
call psb_errpush(4000,name)
|
|
|
|
|
goto 9999
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
call psb_erractionrestore(err_act)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|