base/modules/psb_c_base_vect_mod.f90
 base/modules/psb_c_vect_mod.F90
 base/modules/psb_d_base_vect_mod.f90
 base/modules/psb_d_vect_mod.F90
 base/modules/psb_i_base_vect_mod.f90
 base/modules/psb_i_vect_mod.F90
 base/modules/psb_s_base_vect_mod.f90
 base/modules/psb_s_vect_mod.F90
 base/modules/psb_z_base_vect_mod.f90
 base/modules/psb_z_vect_mod.F90
 base/modules/psi_c_mod.f90
 base/modules/psi_d_mod.f90
 base/modules/psi_i_mod.f90
 base/modules/psi_s_mod.f90
 base/modules/psi_z_mod.f90

Encapsulated multivectors. Defined interfaces to swapdata & swaptran.
psblas-3.4-maint
Salvatore Filippone 10 years ago
parent 1917e2212a
commit 24aaaaec93

@ -1453,7 +1453,7 @@ module psb_c_base_multivect_mod
interface psb_c_base_multivect
module procedure constructor, size_const
end interface
end interface psb_c_base_multivect
contains
@ -1643,8 +1643,8 @@ contains
case default
info = 321
! !$ call psb_errpush(info,name)
! !$ goto 9999
! !$ call psb_errpush(info,name)
! !$ goto 9999
end select
end if
if (info /= 0) then
@ -1977,7 +1977,7 @@ contains
do j=1,nc
res(j) = cdotc(n,x%v(:,j),1,y%v(:,j),1)
end do
class default
class default
res = y%dot(n,x%v)
end select
@ -2044,7 +2044,7 @@ contains
select type(xx => x)
type is (psb_c_base_multivect_type)
call psb_geaxpby(m,nc,alpha,x%v,beta,y%v,info)
class default
class default
call y%axpby(m,alpha,x%v,beta,info,n=n)
end select
@ -2421,7 +2421,6 @@ contains
end subroutine c_base_mlv_absval2
!
! Gather: Y = beta * Y + alpha * X(IDX(:))
!
@ -2533,5 +2532,6 @@ contains
call y%sct(n,idx%v(i:),x,beta)
end subroutine c_base_mlv_sctb_x
end module psb_c_base_multivect_mod

@ -802,6 +802,8 @@ module psb_c_multivect_mod
use psb_c_base_multivect_mod
use psb_const_mod
use psb_i_vect_mod
!private
@ -829,11 +831,13 @@ module psb_c_multivect_mod
procedure, pass(x) :: set_vect => c_vect_set_vect
generic, public :: set => set_vect, set_scal
procedure, pass(x) :: clone => c_vect_clone
!!$ procedure, pass(x) :: gthab => c_vect_gthab
!!$ procedure, pass(x) :: gthzv => c_vect_gthzv
!!$ generic, public :: gth => gthab, gthzv
!!$ procedure, pass(y) :: sctb => c_vect_sctb
!!$ generic, public :: sct => sctb
procedure, pass(x) :: gthab => c_vect_gthab
procedure, pass(x) :: gthzv => c_vect_gthzv
procedure, pass(x) :: gthzv_x => c_vect_gthzv_x
generic, public :: gth => gthab, gthzv
procedure, pass(y) :: sctb => c_vect_sctb
procedure, pass(y) :: sctb_x => c_vect_sctb_x
generic, public :: sct => sctb, sctb_x
!!$ procedure, pass(x) :: dot_v => c_vect_dot_v
!!$ procedure, pass(x) :: dot_a => c_vect_dot_a
!!$ generic, public :: dot => dot_v, dot_a
@ -1129,38 +1133,62 @@ contains
end subroutine c_vect_sync
!!$ subroutine c_vect_gthab(n,idx,alpha,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ complex(psb_spk_) :: alpha, beta, y(:)
!!$ class(psb_c_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,alpha,beta,y)
!!$
!!$ end subroutine c_vect_gthab
!!$
!!$ subroutine c_vect_gthzv(n,idx,x,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ complex(psb_spk_) :: y(:)
!!$ class(psb_c_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,y)
!!$
!!$ end subroutine c_vect_gthzv
!!$
!!$ subroutine c_vect_sctb(n,idx,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ complex(psb_spk_) :: beta, x(:)
!!$ class(psb_c_multivect_type) :: y
!!$
!!$ if (allocated(y%v)) &
!!$ & call y%v%sct(n,idx,x,beta)
!!$
!!$ end subroutine c_vect_sctb
subroutine c_vect_gthab(n,idx,alpha,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
complex(psb_spk_) :: alpha, beta, y(:)
class(psb_c_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,alpha,beta,y)
end subroutine c_vect_gthab
subroutine c_vect_gthzv(n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
complex(psb_spk_) :: y(:)
class(psb_c_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,y)
end subroutine c_vect_gthzv
subroutine c_vect_gthzv_x(i,n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: i,n
class(psb_i_base_vect_type) :: idx
complex(psb_spk_) :: y(:)
class(psb_c_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(i,n,idx,y)
end subroutine c_vect_gthzv_x
subroutine c_vect_sctb(n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
complex(psb_spk_) :: beta, x(:)
class(psb_c_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(n,idx,x,beta)
end subroutine c_vect_sctb
subroutine c_vect_sctb_x(i,n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: i, n
class(psb_i_base_vect_type) :: idx
complex(psb_spk_) :: beta, x(:)
class(psb_c_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(i,n,idx,x,beta)
end subroutine c_vect_sctb_x
subroutine c_vect_free(x, info)
use psi_serial_mod

@ -1453,7 +1453,7 @@ module psb_d_base_multivect_mod
interface psb_d_base_multivect
module procedure constructor, size_const
end interface
end interface psb_d_base_multivect
contains
@ -1643,8 +1643,8 @@ contains
case default
info = 321
! !$ call psb_errpush(info,name)
! !$ goto 9999
! !$ call psb_errpush(info,name)
! !$ goto 9999
end select
end if
if (info /= 0) then
@ -1977,7 +1977,7 @@ contains
do j=1,nc
res(j) = ddot(n,x%v(:,j),1,y%v(:,j),1)
end do
class default
class default
res = y%dot(n,x%v)
end select
@ -2044,7 +2044,7 @@ contains
select type(xx => x)
type is (psb_d_base_multivect_type)
call psb_geaxpby(m,nc,alpha,x%v,beta,y%v,info)
class default
class default
call y%axpby(m,alpha,x%v,beta,info,n=n)
end select
@ -2421,7 +2421,6 @@ contains
end subroutine d_base_mlv_absval2
!
! Gather: Y = beta * Y + alpha * X(IDX(:))
!
@ -2533,5 +2532,6 @@ contains
call y%sct(n,idx%v(i:),x,beta)
end subroutine d_base_mlv_sctb_x
end module psb_d_base_multivect_mod

@ -802,6 +802,8 @@ module psb_d_multivect_mod
use psb_d_base_multivect_mod
use psb_const_mod
use psb_i_vect_mod
!private
@ -829,11 +831,13 @@ module psb_d_multivect_mod
procedure, pass(x) :: set_vect => d_vect_set_vect
generic, public :: set => set_vect, set_scal
procedure, pass(x) :: clone => d_vect_clone
!!$ procedure, pass(x) :: gthab => d_vect_gthab
!!$ procedure, pass(x) :: gthzv => d_vect_gthzv
!!$ generic, public :: gth => gthab, gthzv
!!$ procedure, pass(y) :: sctb => d_vect_sctb
!!$ generic, public :: sct => sctb
procedure, pass(x) :: gthab => d_vect_gthab
procedure, pass(x) :: gthzv => d_vect_gthzv
procedure, pass(x) :: gthzv_x => d_vect_gthzv_x
generic, public :: gth => gthab, gthzv
procedure, pass(y) :: sctb => d_vect_sctb
procedure, pass(y) :: sctb_x => d_vect_sctb_x
generic, public :: sct => sctb, sctb_x
!!$ procedure, pass(x) :: dot_v => d_vect_dot_v
!!$ procedure, pass(x) :: dot_a => d_vect_dot_a
!!$ generic, public :: dot => dot_v, dot_a
@ -1129,38 +1133,62 @@ contains
end subroutine d_vect_sync
!!$ subroutine d_vect_gthab(n,idx,alpha,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ real(psb_dpk_) :: alpha, beta, y(:)
!!$ class(psb_d_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,alpha,beta,y)
!!$
!!$ end subroutine d_vect_gthab
!!$
!!$ subroutine d_vect_gthzv(n,idx,x,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ real(psb_dpk_) :: y(:)
!!$ class(psb_d_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,y)
!!$
!!$ end subroutine d_vect_gthzv
!!$
!!$ subroutine d_vect_sctb(n,idx,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ real(psb_dpk_) :: beta, x(:)
!!$ class(psb_d_multivect_type) :: y
!!$
!!$ if (allocated(y%v)) &
!!$ & call y%v%sct(n,idx,x,beta)
!!$
!!$ end subroutine d_vect_sctb
subroutine d_vect_gthab(n,idx,alpha,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
real(psb_dpk_) :: alpha, beta, y(:)
class(psb_d_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,alpha,beta,y)
end subroutine d_vect_gthab
subroutine d_vect_gthzv(n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
real(psb_dpk_) :: y(:)
class(psb_d_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,y)
end subroutine d_vect_gthzv
subroutine d_vect_gthzv_x(i,n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: i,n
class(psb_i_base_vect_type) :: idx
real(psb_dpk_) :: y(:)
class(psb_d_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(i,n,idx,y)
end subroutine d_vect_gthzv_x
subroutine d_vect_sctb(n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
real(psb_dpk_) :: beta, x(:)
class(psb_d_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(n,idx,x,beta)
end subroutine d_vect_sctb
subroutine d_vect_sctb_x(i,n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: i, n
class(psb_i_base_vect_type) :: idx
real(psb_dpk_) :: beta, x(:)
class(psb_d_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(i,n,idx,x,beta)
end subroutine d_vect_sctb_x
subroutine d_vect_free(x, info)
use psi_serial_mod

@ -946,11 +946,22 @@ module psb_i_base_multivect_mod
procedure, pass(x) :: set_vect => i_base_mlv_set_vect
generic, public :: set => set_vect, set_scal
!!$ !
!!$ ! Gather/scatter. These are needed for MPI interfacing.
!!$ ! May have to be reworked.
!!$ !
procedure, pass(x) :: gthab => i_base_mlv_gthab
procedure, pass(x) :: gthzv => i_base_mlv_gthzv
procedure, pass(x) :: gthzv_x => i_base_mlv_gthzv_x
generic, public :: gth => gthab, gthzv, gthzv_x
procedure, pass(y) :: sctb => i_base_mlv_sctb
procedure, pass(y) :: sctb_x => i_base_mlv_sctb_x
generic, public :: sct => sctb, sctb_x
end type psb_i_base_multivect_type
interface psb_i_base_multivect
module procedure constructor, size_const
end interface
end interface psb_i_base_multivect
contains
@ -1140,8 +1151,8 @@ contains
case default
info = 321
! !$ call psb_errpush(info,name)
! !$ goto 9999
! !$ call psb_errpush(info,name)
! !$ goto 9999
end select
end if
if (info /= 0) then
@ -1439,5 +1450,117 @@ contains
end subroutine i_base_mlv_set_vect
!
! Gather: Y = beta * Y + alpha * X(IDX(:))
!
!
!> Function base_mlv_gthab
!! \memberof psb_i_base_multivect_type
!! \brief gather into an array
!! Y = beta * Y + alpha * X(IDX(:))
!! \param n how many entries to consider
!! \param idx(:) indices
!! \param alpha
!! \param beta
subroutine i_base_mlv_gthab(n,idx,alpha,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
integer(psb_ipk_) :: alpha, beta, y(:)
class(psb_i_base_multivect_type) :: x
integer(psb_ipk_) :: nc
if (x%is_dev()) call x%sync()
if (.not.allocated(x%v)) then
return
end if
nc = psb_size(x%v,2)
call psi_gth(n,nc,idx,alpha,x%v,beta,y)
end subroutine i_base_mlv_gthab
!
! shortcut alpha=1 beta=0
!
!> Function base_mlv_gthzv
!! \memberof psb_i_base_multivect_type
!! \brief gather into an array special alpha=1 beta=0
!! Y = X(IDX(:))
!! \param n how many entries to consider
!! \param idx(:) indices
subroutine i_base_mlv_gthzv_x(i,n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: i,n
class(psb_i_base_vect_type) :: idx
integer(psb_ipk_) :: y(:)
class(psb_i_base_multivect_type) :: x
if (x%is_dev()) call x%sync()
call x%gth(n,idx%v(i:),y)
end subroutine i_base_mlv_gthzv_x
!
! shortcut alpha=1 beta=0
!
!> Function base_mlv_gthzv
!! \memberof psb_i_base_multivect_type
!! \brief gather into an array special alpha=1 beta=0
!! Y = X(IDX(:))
!! \param n how many entries to consider
!! \param idx(:) indices
subroutine i_base_mlv_gthzv(n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
integer(psb_ipk_) :: y(:)
class(psb_i_base_multivect_type) :: x
integer(psb_ipk_) :: nc
if (x%is_dev()) call x%sync()
if (.not.allocated(x%v)) then
return
end if
nc = psb_size(x%v,2)
call psi_gth(n,nc,idx,x%v,y)
end subroutine i_base_mlv_gthzv
!
! Scatter:
! Y(IDX(:),:) = beta*Y(IDX(:),:) + X(:)
!
!
!> Function base_mlv_sctb
!! \memberof psb_i_base_multivect_type
!! \brief scatter into a class(base_mlv_vect)
!! Y(IDX(:)) = beta * Y(IDX(:)) + X(:)
!! \param n how many entries to consider
!! \param idx(:) indices
!! \param beta
!! \param x(:)
subroutine i_base_mlv_sctb(n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
integer(psb_ipk_) :: beta, x(:)
class(psb_i_base_multivect_type) :: y
integer(psb_ipk_) :: nc
if (y%is_dev()) call y%sync()
nc = psb_size(y%v,2)
call psi_sct(n,nc,idx,x,beta,y%v)
call y%set_host()
end subroutine i_base_mlv_sctb
subroutine i_base_mlv_sctb_x(i,n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: i, n
class(psb_i_base_vect_type) :: idx
integer( psb_ipk_) :: beta, x(:)
class(psb_i_base_multivect_type) :: y
call y%sct(n,idx%v(i:),x,beta)
end subroutine i_base_mlv_sctb_x
end module psb_i_base_multivect_mod

@ -549,6 +549,8 @@ module psb_i_multivect_mod
use psb_i_base_multivect_mod
use psb_const_mod
use psb_i_vect_mod
!private
@ -576,11 +578,13 @@ module psb_i_multivect_mod
procedure, pass(x) :: set_vect => i_vect_set_vect
generic, public :: set => set_vect, set_scal
procedure, pass(x) :: clone => i_vect_clone
!!$ procedure, pass(x) :: gthab => i_vect_gthab
!!$ procedure, pass(x) :: gthzv => i_vect_gthzv
!!$ generic, public :: gth => gthab, gthzv
!!$ procedure, pass(y) :: sctb => i_vect_sctb
!!$ generic, public :: sct => sctb
procedure, pass(x) :: gthab => i_vect_gthab
procedure, pass(x) :: gthzv => i_vect_gthzv
procedure, pass(x) :: gthzv_x => i_vect_gthzv_x
generic, public :: gth => gthab, gthzv
procedure, pass(y) :: sctb => i_vect_sctb
procedure, pass(y) :: sctb_x => i_vect_sctb_x
generic, public :: sct => sctb, sctb_x
end type psb_i_multivect_type
public :: psb_i_multivect, psb_i_multivect_type,&
@ -858,38 +862,62 @@ contains
end subroutine i_vect_sync
!!$ subroutine i_vect_gthab(n,idx,alpha,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ integer(psb_ipk_) :: alpha, beta, y(:)
!!$ class(psb_i_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,alpha,beta,y)
!!$
!!$ end subroutine i_vect_gthab
!!$
!!$ subroutine i_vect_gthzv(n,idx,x,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ integer(psb_ipk_) :: y(:)
!!$ class(psb_i_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,y)
!!$
!!$ end subroutine i_vect_gthzv
!!$
!!$ subroutine i_vect_sctb(n,idx,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ integer(psb_ipk_) :: beta, x(:)
!!$ class(psb_i_multivect_type) :: y
!!$
!!$ if (allocated(y%v)) &
!!$ & call y%v%sct(n,idx,x,beta)
!!$
!!$ end subroutine i_vect_sctb
subroutine i_vect_gthab(n,idx,alpha,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
integer(psb_ipk_) :: alpha, beta, y(:)
class(psb_i_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,alpha,beta,y)
end subroutine i_vect_gthab
subroutine i_vect_gthzv(n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
integer(psb_ipk_) :: y(:)
class(psb_i_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,y)
end subroutine i_vect_gthzv
subroutine i_vect_gthzv_x(i,n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: i,n
class(psb_i_base_vect_type) :: idx
integer(psb_ipk_) :: y(:)
class(psb_i_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(i,n,idx,y)
end subroutine i_vect_gthzv_x
subroutine i_vect_sctb(n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
integer(psb_ipk_) :: beta, x(:)
class(psb_i_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(n,idx,x,beta)
end subroutine i_vect_sctb
subroutine i_vect_sctb_x(i,n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: i, n
class(psb_i_base_vect_type) :: idx
integer(psb_ipk_) :: beta, x(:)
class(psb_i_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(i,n,idx,x,beta)
end subroutine i_vect_sctb_x
subroutine i_vect_free(x, info)
use psi_serial_mod

@ -1453,7 +1453,7 @@ module psb_s_base_multivect_mod
interface psb_s_base_multivect
module procedure constructor, size_const
end interface
end interface psb_s_base_multivect
contains
@ -1643,8 +1643,8 @@ contains
case default
info = 321
! !$ call psb_errpush(info,name)
! !$ goto 9999
! !$ call psb_errpush(info,name)
! !$ goto 9999
end select
end if
if (info /= 0) then
@ -1977,7 +1977,7 @@ contains
do j=1,nc
res(j) = sdot(n,x%v(:,j),1,y%v(:,j),1)
end do
class default
class default
res = y%dot(n,x%v)
end select
@ -2044,7 +2044,7 @@ contains
select type(xx => x)
type is (psb_s_base_multivect_type)
call psb_geaxpby(m,nc,alpha,x%v,beta,y%v,info)
class default
class default
call y%axpby(m,alpha,x%v,beta,info,n=n)
end select
@ -2421,7 +2421,6 @@ contains
end subroutine s_base_mlv_absval2
!
! Gather: Y = beta * Y + alpha * X(IDX(:))
!
@ -2533,5 +2532,6 @@ contains
call y%sct(n,idx%v(i:),x,beta)
end subroutine s_base_mlv_sctb_x
end module psb_s_base_multivect_mod

@ -802,6 +802,8 @@ module psb_s_multivect_mod
use psb_s_base_multivect_mod
use psb_const_mod
use psb_i_vect_mod
!private
@ -829,11 +831,13 @@ module psb_s_multivect_mod
procedure, pass(x) :: set_vect => s_vect_set_vect
generic, public :: set => set_vect, set_scal
procedure, pass(x) :: clone => s_vect_clone
!!$ procedure, pass(x) :: gthab => s_vect_gthab
!!$ procedure, pass(x) :: gthzv => s_vect_gthzv
!!$ generic, public :: gth => gthab, gthzv
!!$ procedure, pass(y) :: sctb => s_vect_sctb
!!$ generic, public :: sct => sctb
procedure, pass(x) :: gthab => s_vect_gthab
procedure, pass(x) :: gthzv => s_vect_gthzv
procedure, pass(x) :: gthzv_x => s_vect_gthzv_x
generic, public :: gth => gthab, gthzv
procedure, pass(y) :: sctb => s_vect_sctb
procedure, pass(y) :: sctb_x => s_vect_sctb_x
generic, public :: sct => sctb, sctb_x
!!$ procedure, pass(x) :: dot_v => s_vect_dot_v
!!$ procedure, pass(x) :: dot_a => s_vect_dot_a
!!$ generic, public :: dot => dot_v, dot_a
@ -1129,38 +1133,62 @@ contains
end subroutine s_vect_sync
!!$ subroutine s_vect_gthab(n,idx,alpha,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ real(psb_spk_) :: alpha, beta, y(:)
!!$ class(psb_s_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,alpha,beta,y)
!!$
!!$ end subroutine s_vect_gthab
!!$
!!$ subroutine s_vect_gthzv(n,idx,x,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ real(psb_spk_) :: y(:)
!!$ class(psb_s_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,y)
!!$
!!$ end subroutine s_vect_gthzv
!!$
!!$ subroutine s_vect_sctb(n,idx,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ real(psb_spk_) :: beta, x(:)
!!$ class(psb_s_multivect_type) :: y
!!$
!!$ if (allocated(y%v)) &
!!$ & call y%v%sct(n,idx,x,beta)
!!$
!!$ end subroutine s_vect_sctb
subroutine s_vect_gthab(n,idx,alpha,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
real(psb_spk_) :: alpha, beta, y(:)
class(psb_s_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,alpha,beta,y)
end subroutine s_vect_gthab
subroutine s_vect_gthzv(n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
real(psb_spk_) :: y(:)
class(psb_s_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,y)
end subroutine s_vect_gthzv
subroutine s_vect_gthzv_x(i,n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: i,n
class(psb_i_base_vect_type) :: idx
real(psb_spk_) :: y(:)
class(psb_s_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(i,n,idx,y)
end subroutine s_vect_gthzv_x
subroutine s_vect_sctb(n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
real(psb_spk_) :: beta, x(:)
class(psb_s_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(n,idx,x,beta)
end subroutine s_vect_sctb
subroutine s_vect_sctb_x(i,n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: i, n
class(psb_i_base_vect_type) :: idx
real(psb_spk_) :: beta, x(:)
class(psb_s_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(i,n,idx,x,beta)
end subroutine s_vect_sctb_x
subroutine s_vect_free(x, info)
use psi_serial_mod

@ -1453,7 +1453,7 @@ module psb_z_base_multivect_mod
interface psb_z_base_multivect
module procedure constructor, size_const
end interface
end interface psb_z_base_multivect
contains
@ -1643,8 +1643,8 @@ contains
case default
info = 321
! !$ call psb_errpush(info,name)
! !$ goto 9999
! !$ call psb_errpush(info,name)
! !$ goto 9999
end select
end if
if (info /= 0) then
@ -1977,7 +1977,7 @@ contains
do j=1,nc
res(j) = zdotc(n,x%v(:,j),1,y%v(:,j),1)
end do
class default
class default
res = y%dot(n,x%v)
end select
@ -2044,7 +2044,7 @@ contains
select type(xx => x)
type is (psb_z_base_multivect_type)
call psb_geaxpby(m,nc,alpha,x%v,beta,y%v,info)
class default
class default
call y%axpby(m,alpha,x%v,beta,info,n=n)
end select
@ -2421,7 +2421,6 @@ contains
end subroutine z_base_mlv_absval2
!
! Gather: Y = beta * Y + alpha * X(IDX(:))
!
@ -2533,5 +2532,6 @@ contains
call y%sct(n,idx%v(i:),x,beta)
end subroutine z_base_mlv_sctb_x
end module psb_z_base_multivect_mod

@ -802,6 +802,8 @@ module psb_z_multivect_mod
use psb_z_base_multivect_mod
use psb_const_mod
use psb_i_vect_mod
!private
@ -829,11 +831,13 @@ module psb_z_multivect_mod
procedure, pass(x) :: set_vect => z_vect_set_vect
generic, public :: set => set_vect, set_scal
procedure, pass(x) :: clone => z_vect_clone
!!$ procedure, pass(x) :: gthab => z_vect_gthab
!!$ procedure, pass(x) :: gthzv => z_vect_gthzv
!!$ generic, public :: gth => gthab, gthzv
!!$ procedure, pass(y) :: sctb => z_vect_sctb
!!$ generic, public :: sct => sctb
procedure, pass(x) :: gthab => z_vect_gthab
procedure, pass(x) :: gthzv => z_vect_gthzv
procedure, pass(x) :: gthzv_x => z_vect_gthzv_x
generic, public :: gth => gthab, gthzv
procedure, pass(y) :: sctb => z_vect_sctb
procedure, pass(y) :: sctb_x => z_vect_sctb_x
generic, public :: sct => sctb, sctb_x
!!$ procedure, pass(x) :: dot_v => z_vect_dot_v
!!$ procedure, pass(x) :: dot_a => z_vect_dot_a
!!$ generic, public :: dot => dot_v, dot_a
@ -1129,38 +1133,62 @@ contains
end subroutine z_vect_sync
!!$ subroutine z_vect_gthab(n,idx,alpha,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ complex(psb_dpk_) :: alpha, beta, y(:)
!!$ class(psb_z_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,alpha,beta,y)
!!$
!!$ end subroutine z_vect_gthab
!!$
!!$ subroutine z_vect_gthzv(n,idx,x,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ complex(psb_dpk_) :: y(:)
!!$ class(psb_z_multivect_type) :: x
!!$
!!$ if (allocated(x%v)) &
!!$ & call x%v%gth(n,idx,y)
!!$
!!$ end subroutine z_vect_gthzv
!!$
!!$ subroutine z_vect_sctb(n,idx,x,beta,y)
!!$ use psi_serial_mod
!!$ integer(psb_ipk_) :: n, idx(:)
!!$ complex(psb_dpk_) :: beta, x(:)
!!$ class(psb_z_multivect_type) :: y
!!$
!!$ if (allocated(y%v)) &
!!$ & call y%v%sct(n,idx,x,beta)
!!$
!!$ end subroutine z_vect_sctb
subroutine z_vect_gthab(n,idx,alpha,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
complex(psb_dpk_) :: alpha, beta, y(:)
class(psb_z_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,alpha,beta,y)
end subroutine z_vect_gthab
subroutine z_vect_gthzv(n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
complex(psb_dpk_) :: y(:)
class(psb_z_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(n,idx,y)
end subroutine z_vect_gthzv
subroutine z_vect_gthzv_x(i,n,idx,x,y)
use psi_serial_mod
integer(psb_ipk_) :: i,n
class(psb_i_base_vect_type) :: idx
complex(psb_dpk_) :: y(:)
class(psb_z_multivect_type) :: x
if (allocated(x%v)) &
& call x%v%gth(i,n,idx,y)
end subroutine z_vect_gthzv_x
subroutine z_vect_sctb(n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: n, idx(:)
complex(psb_dpk_) :: beta, x(:)
class(psb_z_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(n,idx,x,beta)
end subroutine z_vect_sctb
subroutine z_vect_sctb_x(i,n,idx,x,beta,y)
use psi_serial_mod
integer(psb_ipk_) :: i, n
class(psb_i_base_vect_type) :: idx
complex(psb_dpk_) :: beta, x(:)
class(psb_z_multivect_type) :: y
if (allocated(y%v)) &
& call y%v%sct(i,n,idx,x,beta)
end subroutine z_vect_sctb_x
subroutine z_vect_free(x, info)
use psi_serial_mod

@ -31,7 +31,8 @@
!!$
module psi_c_mod
use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_spk_, psb_i_base_vect_type
use psb_c_vect_mod, only : psb_c_base_vect_type
use psb_c_base_vect_mod, only : psb_c_base_vect_type
use psb_c_base_multivect_mod, only : psb_c_base_multivect_type
interface psi_swapdata
@ -63,6 +64,16 @@ module psi_c_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_cswapdata_vect
subroutine psi_cswapdata_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_c_base_multivect_type) :: y
complex(psb_spk_) :: beta
complex(psb_spk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_cswapdata_multivect
subroutine psi_cswapidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -92,6 +103,17 @@ module psi_c_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_cswap_vidx_vect
subroutine psi_cswap_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_c_base_multivect_type) :: y
complex(psb_spk_) :: beta
complex(psb_spk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_cswap_vidx_multivect
end interface
@ -124,6 +146,16 @@ module psi_c_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_cswaptran_vect
subroutine psi_cswaptran_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_c_base_multivect_type) :: y
complex(psb_spk_) :: beta
complex(psb_spk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_cswaptran_multivect
subroutine psi_ctranidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -153,6 +185,17 @@ module psi_c_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_ctran_vidx_vect
subroutine psi_ctran_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_c_base_multivect_type) :: y
complex(psb_spk_) :: beta
complex(psb_spk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_ctran_vidx_multivect
end interface
interface psi_ovrl_upd

@ -31,7 +31,8 @@
!!$
module psi_d_mod
use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_dpk_, psb_i_base_vect_type
use psb_d_vect_mod, only : psb_d_base_vect_type
use psb_d_base_vect_mod, only : psb_d_base_vect_type
use psb_d_base_multivect_mod, only : psb_d_base_multivect_type
interface psi_swapdata
@ -63,6 +64,16 @@ module psi_d_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_dswapdata_vect
subroutine psi_dswapdata_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_d_base_multivect_type) :: y
real(psb_dpk_) :: beta
real(psb_dpk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_dswapdata_multivect
subroutine psi_dswapidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -92,6 +103,17 @@ module psi_d_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_dswap_vidx_vect
subroutine psi_dswap_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_d_base_multivect_type) :: y
real(psb_dpk_) :: beta
real(psb_dpk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_dswap_vidx_multivect
end interface
@ -124,6 +146,16 @@ module psi_d_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_dswaptran_vect
subroutine psi_dswaptran_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_d_base_multivect_type) :: y
real(psb_dpk_) :: beta
real(psb_dpk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_dswaptran_multivect
subroutine psi_dtranidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -153,6 +185,17 @@ module psi_d_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_dtran_vidx_vect
subroutine psi_dtran_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_d_base_multivect_type) :: y
real(psb_dpk_) :: beta
real(psb_dpk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_dtran_vidx_multivect
end interface
interface psi_ovrl_upd

@ -31,7 +31,8 @@
!!$
module psi_i_mod
use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_mpik_
use psb_i_vect_mod, only : psb_i_base_vect_type
use psb_i_base_vect_mod, only : psb_i_base_vect_type
use psb_i_base_multivect_mod, only : psb_i_base_multivect_type
interface
subroutine psi_compute_size(desc_data,&
@ -223,6 +224,16 @@ module psi_i_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_iswapdata_vect
subroutine psi_iswapdata_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_i_base_multivect_type) :: y
integer(psb_ipk_) :: beta
integer(psb_ipk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_iswapdata_multivect
subroutine psi_iswapidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -252,6 +263,17 @@ module psi_i_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_iswap_vidx_vect
subroutine psi_iswap_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_i_base_multivect_type) :: y
integer(psb_ipk_) :: beta
integer(psb_ipk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_iswap_vidx_multivect
end interface
@ -284,6 +306,16 @@ module psi_i_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_iswaptran_vect
subroutine psi_iswaptran_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_i_base_multivect_type) :: y
integer(psb_ipk_) :: beta
integer(psb_ipk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_iswaptran_multivect
subroutine psi_itranidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -313,6 +345,17 @@ module psi_i_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_itran_vidx_vect
subroutine psi_itran_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_i_base_multivect_type) :: y
integer(psb_ipk_) :: beta
integer(psb_ipk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_itran_vidx_multivect
end interface
interface psi_ovrl_upd

@ -31,7 +31,8 @@
!!$
module psi_s_mod
use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_spk_, psb_i_base_vect_type
use psb_s_vect_mod, only : psb_s_base_vect_type
use psb_s_base_vect_mod, only : psb_s_base_vect_type
use psb_s_base_multivect_mod, only : psb_s_base_multivect_type
interface psi_swapdata
@ -63,6 +64,16 @@ module psi_s_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_sswapdata_vect
subroutine psi_sswapdata_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_s_base_multivect_type) :: y
real(psb_spk_) :: beta
real(psb_spk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_sswapdata_multivect
subroutine psi_sswapidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -92,6 +103,17 @@ module psi_s_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_sswap_vidx_vect
subroutine psi_sswap_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_s_base_multivect_type) :: y
real(psb_spk_) :: beta
real(psb_spk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_sswap_vidx_multivect
end interface
@ -124,6 +146,16 @@ module psi_s_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_sswaptran_vect
subroutine psi_sswaptran_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_s_base_multivect_type) :: y
real(psb_spk_) :: beta
real(psb_spk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_sswaptran_multivect
subroutine psi_stranidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -153,6 +185,17 @@ module psi_s_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_stran_vidx_vect
subroutine psi_stran_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_s_base_multivect_type) :: y
real(psb_spk_) :: beta
real(psb_spk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_stran_vidx_multivect
end interface
interface psi_ovrl_upd

@ -31,7 +31,8 @@
!!$
module psi_z_mod
use psb_desc_mod, only : psb_desc_type, psb_ipk_, psb_dpk_, psb_i_base_vect_type
use psb_z_vect_mod, only : psb_z_base_vect_type
use psb_z_base_vect_mod, only : psb_z_base_vect_type
use psb_z_base_multivect_mod, only : psb_z_base_multivect_type
interface psi_swapdata
@ -63,6 +64,16 @@ module psi_z_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_zswapdata_vect
subroutine psi_zswapdata_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_z_base_multivect_type) :: y
complex(psb_dpk_) :: beta
complex(psb_dpk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_zswapdata_multivect
subroutine psi_zswapidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -92,6 +103,17 @@ module psi_z_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_zswap_vidx_vect
subroutine psi_zswap_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_z_base_multivect_type) :: y
complex(psb_dpk_) :: beta
complex(psb_dpk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_zswap_vidx_multivect
end interface
@ -124,6 +146,16 @@ module psi_z_mod
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_zswaptran_vect
subroutine psi_zswaptran_multivect(flag,beta,y,desc_a,work,info,data)
import
integer(psb_ipk_), intent(in) :: flag
integer(psb_ipk_), intent(out) :: info
class(psb_z_base_multivect_type) :: y
complex(psb_dpk_) :: beta
complex(psb_dpk_),target :: work(:)
type(psb_desc_type), target :: desc_a
integer(psb_ipk_), optional :: data
end subroutine psi_zswaptran_multivect
subroutine psi_ztranidxm(ictxt,icomm,flag,n,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
@ -153,6 +185,17 @@ module psi_z_mod
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_ztran_vidx_vect
subroutine psi_ztran_vidx_multivect(iictxt,iicomm,flag,beta,y,idx,&
& totxch,totsnd,totrcv,work,info)
import
integer(psb_ipk_), intent(in) :: iictxt,iicomm,flag
integer(psb_ipk_), intent(out) :: info
class(psb_z_base_multivect_type) :: y
complex(psb_dpk_) :: beta
complex(psb_dpk_), target :: work(:)
class(psb_i_base_vect_type), intent(inout) :: idx
integer(psb_ipk_), intent(in) :: totxch,totsnd, totrcv
end subroutine psi_ztran_vidx_multivect
end interface
interface psi_ovrl_upd

Loading…
Cancel
Save