diff --git a/base/modules/serial/psb_base_mat_mod.F90 b/base/modules/serial/psb_base_mat_mod.F90 index 2380fcb2..16f92846 100644 --- a/base/modules/serial/psb_base_mat_mod.F90 +++ b/base/modules/serial/psb_base_mat_mod.F90 @@ -388,14 +388,14 @@ module psb_base_mat_mod !! i.e. when lev=2 find neighours of neighbours, etc. ! interface - subroutine psb_base_get_neigh(a,idx,neigh,n,info,lev) + subroutine psb_base_get_neigh(a,idx,neigh,n,info,lev,nin) import :: psb_ipk_, psb_epk_, psb_base_sparse_mat class(psb_base_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: idx integer(psb_ipk_), intent(out) :: n integer(psb_ipk_), allocatable, intent(out) :: neigh(:) integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, intent(in) :: lev + integer(psb_ipk_), optional, intent(in) :: lev, nin end subroutine psb_base_get_neigh end interface diff --git a/base/modules/serial/psb_c_base_mat_mod.F90 b/base/modules/serial/psb_c_base_mat_mod.F90 index 33982e3a..6f1500fe 100644 --- a/base/modules/serial/psb_c_base_mat_mod.F90 +++ b/base/modules/serial/psb_c_base_mat_mod.F90 @@ -67,6 +67,7 @@ module psb_c_base_mat_mod procedure, pass(a) :: tril => psb_c_base_tril procedure, pass(a) :: triu => psb_c_base_triu procedure, pass(a) :: csclip => psb_c_base_csclip + procedure, pass(a) :: csmerge => psb_c_base_merge procedure, pass(a) :: cp_to_coo => psb_c_base_cp_to_coo procedure, pass(a) :: cp_from_coo => psb_c_base_cp_from_coo procedure, pass(a) :: cp_to_fmt => psb_c_base_cp_to_fmt @@ -626,6 +627,19 @@ module psb_c_base_mat_mod logical, intent(in), optional :: rscale,cscale end subroutine psb_c_base_csclip end interface + + interface + subroutine psb_c_base_merge(a,a2,acoo,n_rows,n_cols,info) + import :: psb_ipk_, psb_lpk_, psb_spk_, & + & psb_c_base_sparse_mat, psb_c_coo_sparse_mat + class(psb_c_base_sparse_mat), intent(inout) :: a,a2 + class(psb_c_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + end subroutine psb_c_base_merge + end interface + + ! !> Function tril: !! \memberof psb_c_base_sparse_mat @@ -1165,13 +1179,14 @@ module psb_c_base_mat_mod !! ! interface - subroutine psb_c_base_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_base_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_base_csmm end interface @@ -1193,13 +1208,14 @@ module psb_c_base_mat_mod !! ! interface - subroutine psb_c_base_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_base_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_base_csmv end interface @@ -1228,7 +1244,7 @@ module psb_c_base_mat_mod !! ! interface - subroutine psb_c_base_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_base_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -1236,6 +1252,7 @@ module psb_c_base_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_base_vect_mv end interface @@ -2219,13 +2236,14 @@ module psb_c_base_mat_mod !! \memberof psb_c_coo_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmv interface - subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_coo_csmv end interface @@ -2233,13 +2251,14 @@ module psb_c_base_mat_mod !! \memberof psb_c_coo_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmm interface - subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_coo_csmm end interface diff --git a/base/modules/serial/psb_c_csc_mat_mod.f90 b/base/modules/serial/psb_c_csc_mat_mod.f90 index bb06977b..bfb77a69 100644 --- a/base/modules/serial/psb_c_csc_mat_mod.f90 +++ b/base/modules/serial/psb_c_csc_mat_mod.f90 @@ -443,26 +443,28 @@ module psb_c_csc_mat_mod !> \memberof psb_c_csc_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmv interface - subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_csc_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_csc_csmv end interface !> \memberof psb_c_csc_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmm interface - subroutine psb_c_csc_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_csc_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_csc_csmm end interface diff --git a/base/modules/serial/psb_c_csr_mat_mod.f90 b/base/modules/serial/psb_c_csr_mat_mod.f90 index d09eca2b..2a186297 100644 --- a/base/modules/serial/psb_c_csr_mat_mod.f90 +++ b/base/modules/serial/psb_c_csr_mat_mod.f90 @@ -461,26 +461,28 @@ module psb_c_csr_mat_mod !> \memberof psb_c_csr_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmv interface - subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_csr_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_csr_csmv end interface !> \memberof psb_c_csr_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmm interface - subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_csr_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_csr_csmm end interface @@ -606,13 +608,14 @@ module psb_c_csr_mat_mod !> \memberof psb_c_ecsr_sparse_mat !! \see psb_c_base_mat_mod::psb_c_base_csmv interface - subroutine psb_c_ecsr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_c_ecsr_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_ecsr_csmv end interface diff --git a/base/modules/serial/psb_d_base_mat_mod.F90 b/base/modules/serial/psb_d_base_mat_mod.F90 index 5f4c76df..05ebda37 100644 --- a/base/modules/serial/psb_d_base_mat_mod.F90 +++ b/base/modules/serial/psb_d_base_mat_mod.F90 @@ -67,6 +67,7 @@ module psb_d_base_mat_mod procedure, pass(a) :: tril => psb_d_base_tril procedure, pass(a) :: triu => psb_d_base_triu procedure, pass(a) :: csclip => psb_d_base_csclip + procedure, pass(a) :: csmerge => psb_d_base_merge procedure, pass(a) :: cp_to_coo => psb_d_base_cp_to_coo procedure, pass(a) :: cp_from_coo => psb_d_base_cp_from_coo procedure, pass(a) :: cp_to_fmt => psb_d_base_cp_to_fmt @@ -626,6 +627,19 @@ module psb_d_base_mat_mod logical, intent(in), optional :: rscale,cscale end subroutine psb_d_base_csclip end interface + + interface + subroutine psb_d_base_merge(a,a2,acoo,n_rows,n_cols,info) + import :: psb_ipk_, psb_lpk_, psb_dpk_, & + & psb_d_base_sparse_mat, psb_d_coo_sparse_mat + class(psb_d_base_sparse_mat), intent(inout) :: a,a2 + class(psb_d_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + end subroutine psb_d_base_merge + end interface + + ! !> Function tril: !! \memberof psb_d_base_sparse_mat @@ -1165,13 +1179,14 @@ module psb_d_base_mat_mod !! ! interface - subroutine psb_d_base_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_base_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_base_csmm end interface @@ -1193,13 +1208,14 @@ module psb_d_base_mat_mod !! ! interface - subroutine psb_d_base_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_base_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_base_csmv end interface @@ -1228,7 +1244,7 @@ module psb_d_base_mat_mod !! ! interface - subroutine psb_d_base_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_base_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -1236,6 +1252,7 @@ module psb_d_base_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_base_vect_mv end interface @@ -2219,13 +2236,14 @@ module psb_d_base_mat_mod !! \memberof psb_d_coo_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmv interface - subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_coo_csmv end interface @@ -2233,13 +2251,14 @@ module psb_d_base_mat_mod !! \memberof psb_d_coo_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmm interface - subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_coo_csmm end interface diff --git a/base/modules/serial/psb_d_csc_mat_mod.f90 b/base/modules/serial/psb_d_csc_mat_mod.f90 index 60d91bf2..8246e0b9 100644 --- a/base/modules/serial/psb_d_csc_mat_mod.f90 +++ b/base/modules/serial/psb_d_csc_mat_mod.f90 @@ -443,26 +443,28 @@ module psb_d_csc_mat_mod !> \memberof psb_d_csc_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmv interface - subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_csc_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_csc_csmv end interface !> \memberof psb_d_csc_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmm interface - subroutine psb_d_csc_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_csc_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_csc_csmm end interface diff --git a/base/modules/serial/psb_d_csr_mat_mod.f90 b/base/modules/serial/psb_d_csr_mat_mod.f90 index 12d71755..3f0c1606 100644 --- a/base/modules/serial/psb_d_csr_mat_mod.f90 +++ b/base/modules/serial/psb_d_csr_mat_mod.f90 @@ -461,26 +461,28 @@ module psb_d_csr_mat_mod !> \memberof psb_d_csr_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmv interface - subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_csr_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_csr_csmv end interface !> \memberof psb_d_csr_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmm interface - subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_csr_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_csr_csmm end interface @@ -606,13 +608,14 @@ module psb_d_csr_mat_mod !> \memberof psb_d_ecsr_sparse_mat !! \see psb_d_base_mat_mod::psb_d_base_csmv interface - subroutine psb_d_ecsr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_d_ecsr_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_ecsr_csmv end interface diff --git a/base/modules/serial/psb_s_base_mat_mod.F90 b/base/modules/serial/psb_s_base_mat_mod.F90 index 92bda7d8..6ba4ae18 100644 --- a/base/modules/serial/psb_s_base_mat_mod.F90 +++ b/base/modules/serial/psb_s_base_mat_mod.F90 @@ -67,6 +67,7 @@ module psb_s_base_mat_mod procedure, pass(a) :: tril => psb_s_base_tril procedure, pass(a) :: triu => psb_s_base_triu procedure, pass(a) :: csclip => psb_s_base_csclip + procedure, pass(a) :: csmerge => psb_s_base_merge procedure, pass(a) :: cp_to_coo => psb_s_base_cp_to_coo procedure, pass(a) :: cp_from_coo => psb_s_base_cp_from_coo procedure, pass(a) :: cp_to_fmt => psb_s_base_cp_to_fmt @@ -626,6 +627,19 @@ module psb_s_base_mat_mod logical, intent(in), optional :: rscale,cscale end subroutine psb_s_base_csclip end interface + + interface + subroutine psb_s_base_merge(a,a2,acoo,n_rows,n_cols,info) + import :: psb_ipk_, psb_lpk_, psb_spk_, & + & psb_s_base_sparse_mat, psb_s_coo_sparse_mat + class(psb_s_base_sparse_mat), intent(inout) :: a,a2 + class(psb_s_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + end subroutine psb_s_base_merge + end interface + + ! !> Function tril: !! \memberof psb_s_base_sparse_mat @@ -1165,13 +1179,14 @@ module psb_s_base_mat_mod !! ! interface - subroutine psb_s_base_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_base_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_base_csmm end interface @@ -1193,13 +1208,14 @@ module psb_s_base_mat_mod !! ! interface - subroutine psb_s_base_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_base_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_base_csmv end interface @@ -1228,7 +1244,7 @@ module psb_s_base_mat_mod !! ! interface - subroutine psb_s_base_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_base_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -1236,6 +1252,7 @@ module psb_s_base_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_base_vect_mv end interface @@ -2219,13 +2236,14 @@ module psb_s_base_mat_mod !! \memberof psb_s_coo_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmv interface - subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_coo_csmv end interface @@ -2233,13 +2251,14 @@ module psb_s_base_mat_mod !! \memberof psb_s_coo_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmm interface - subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_coo_csmm end interface diff --git a/base/modules/serial/psb_s_csc_mat_mod.f90 b/base/modules/serial/psb_s_csc_mat_mod.f90 index ccd4f445..9f946544 100644 --- a/base/modules/serial/psb_s_csc_mat_mod.f90 +++ b/base/modules/serial/psb_s_csc_mat_mod.f90 @@ -443,26 +443,28 @@ module psb_s_csc_mat_mod !> \memberof psb_s_csc_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmv interface - subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_csc_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_csc_csmv end interface !> \memberof psb_s_csc_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmm interface - subroutine psb_s_csc_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_csc_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_csc_csmm end interface diff --git a/base/modules/serial/psb_s_csr_mat_mod.f90 b/base/modules/serial/psb_s_csr_mat_mod.f90 index 884ede38..83e3969f 100644 --- a/base/modules/serial/psb_s_csr_mat_mod.f90 +++ b/base/modules/serial/psb_s_csr_mat_mod.f90 @@ -461,26 +461,28 @@ module psb_s_csr_mat_mod !> \memberof psb_s_csr_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmv interface - subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_csr_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_csr_csmv end interface !> \memberof psb_s_csr_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmm interface - subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_csr_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_csr_csmm end interface @@ -606,13 +608,14 @@ module psb_s_csr_mat_mod !> \memberof psb_s_ecsr_sparse_mat !! \see psb_s_base_mat_mod::psb_s_base_csmv interface - subroutine psb_s_ecsr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_s_ecsr_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_ecsr_csmv end interface diff --git a/base/modules/serial/psb_z_base_mat_mod.F90 b/base/modules/serial/psb_z_base_mat_mod.F90 index 3e8196f4..6493e0f6 100644 --- a/base/modules/serial/psb_z_base_mat_mod.F90 +++ b/base/modules/serial/psb_z_base_mat_mod.F90 @@ -67,6 +67,7 @@ module psb_z_base_mat_mod procedure, pass(a) :: tril => psb_z_base_tril procedure, pass(a) :: triu => psb_z_base_triu procedure, pass(a) :: csclip => psb_z_base_csclip + procedure, pass(a) :: csmerge => psb_z_base_merge procedure, pass(a) :: cp_to_coo => psb_z_base_cp_to_coo procedure, pass(a) :: cp_from_coo => psb_z_base_cp_from_coo procedure, pass(a) :: cp_to_fmt => psb_z_base_cp_to_fmt @@ -626,6 +627,19 @@ module psb_z_base_mat_mod logical, intent(in), optional :: rscale,cscale end subroutine psb_z_base_csclip end interface + + interface + subroutine psb_z_base_merge(a,a2,acoo,n_rows,n_cols,info) + import :: psb_ipk_, psb_lpk_, psb_dpk_, & + & psb_z_base_sparse_mat, psb_z_coo_sparse_mat + class(psb_z_base_sparse_mat), intent(inout) :: a,a2 + class(psb_z_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + end subroutine psb_z_base_merge + end interface + + ! !> Function tril: !! \memberof psb_z_base_sparse_mat @@ -1165,13 +1179,14 @@ module psb_z_base_mat_mod !! ! interface - subroutine psb_z_base_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_base_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_base_csmm end interface @@ -1193,13 +1208,14 @@ module psb_z_base_mat_mod !! ! interface - subroutine psb_z_base_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_base_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_base_csmv end interface @@ -1228,7 +1244,7 @@ module psb_z_base_mat_mod !! ! interface - subroutine psb_z_base_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_base_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -1236,6 +1252,7 @@ module psb_z_base_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_base_vect_mv end interface @@ -2219,13 +2236,14 @@ module psb_z_base_mat_mod !! \memberof psb_z_coo_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmv interface - subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_coo_csmv end interface @@ -2233,13 +2251,14 @@ module psb_z_base_mat_mod !! \memberof psb_z_coo_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmm interface - subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_coo_csmm end interface diff --git a/base/modules/serial/psb_z_csc_mat_mod.f90 b/base/modules/serial/psb_z_csc_mat_mod.f90 index 222742eb..eeb23a21 100644 --- a/base/modules/serial/psb_z_csc_mat_mod.f90 +++ b/base/modules/serial/psb_z_csc_mat_mod.f90 @@ -443,26 +443,28 @@ module psb_z_csc_mat_mod !> \memberof psb_z_csc_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmv interface - subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_csc_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_csc_csmv end interface !> \memberof psb_z_csc_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmm interface - subroutine psb_z_csc_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_csc_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_csc_csmm end interface diff --git a/base/modules/serial/psb_z_csr_mat_mod.f90 b/base/modules/serial/psb_z_csr_mat_mod.f90 index c328fead..be5648ab 100644 --- a/base/modules/serial/psb_z_csr_mat_mod.f90 +++ b/base/modules/serial/psb_z_csr_mat_mod.f90 @@ -461,26 +461,28 @@ module psb_z_csr_mat_mod !> \memberof psb_z_csr_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmv interface - subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_csr_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_csr_csmv end interface !> \memberof psb_z_csr_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmm interface - subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_csr_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_csr_csmm end interface @@ -606,13 +608,14 @@ module psb_z_csr_mat_mod !> \memberof psb_z_ecsr_sparse_mat !! \see psb_z_base_mat_mod::psb_z_base_csmv interface - subroutine psb_z_ecsr_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) import class(psb_z_ecsr_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_ecsr_csmv end interface diff --git a/base/serial/impl/psb_base_mat_impl.f90 b/base/serial/impl/psb_base_mat_impl.f90 index 4ab03086..8f0d7e63 100644 --- a/base/serial/impl/psb_base_mat_impl.f90 +++ b/base/serial/impl/psb_base_mat_impl.f90 @@ -140,21 +140,21 @@ subroutine psb_base_csgetptn(imin,imax,a,nz,ia,ja,info,& call psb_error_handler(err_act) end subroutine psb_base_csgetptn -subroutine psb_base_get_neigh(a,idx,neigh,n,info,lev) +subroutine psb_base_get_neigh(a,idx,neigh,n,info,lev,nin) use psb_base_mat_mod, psb_protect_name => psb_base_get_neigh use psb_error_mod use psb_realloc_mod use psb_sort_mod implicit none class(psb_base_sparse_mat), intent(in) :: a - integer(psb_ipk_), intent(in) :: idx - integer(psb_ipk_), intent(out) :: n - integer(psb_ipk_), allocatable, intent(out) :: neigh(:) - integer(psb_ipk_), intent(out) :: info - integer(psb_ipk_), optional, intent(in) :: lev + integer(psb_ipk_), intent(in) :: idx + integer(psb_ipk_), intent(out) :: n + integer(psb_ipk_), allocatable, intent(inout) :: neigh(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: lev, nin integer(psb_ipk_) :: lev_, i, nl, ifl,ill,& - & n1, err_act, nn, nidx,ntl,ma + & n1, err_act, nn, nidx,ntl,ma,nin_ integer(psb_ipk_), allocatable :: ia(:), ja(:) character(len=20) :: name='get_neigh' logical, parameter :: debug=.false. @@ -166,19 +166,24 @@ subroutine psb_base_get_neigh(a,idx,neigh,n,info,lev) else lev_=1 end if + if(present(nin)) then + nin_ = nin + else + nin_ = 0 + end if ! Turns out we can write get_neigh at this ! level - n = 0 + n = 0 ma = a%get_nrows() call a%csget(idx,idx,n,ia,ja,info) - if (info == psb_success_) call psb_realloc(n,neigh,info) + if (info == psb_success_) call psb_realloc(nin_+n,neigh,info) if (info /= psb_success_) then call psb_errpush(psb_err_alloc_dealloc_,name) goto 9999 end if - neigh(1:n) = ja(1:n) - ifl = 1 - ill = n + neigh(nin_+1:nin_+n) = ja(nin_+1:nin_+n) + ifl = nin_+1 + ill = nin_+n do nl = 2, lev_ n1 = ill - ifl + 1 call psb_ensure_size(ill+n1*n1,neigh,info) diff --git a/base/serial/impl/psb_c_base_mat_impl.F90 b/base/serial/impl/psb_c_base_mat_impl.F90 index 17f2cdc8..1137bbdc 100644 --- a/base/serial/impl/psb_c_base_mat_impl.F90 +++ b/base/serial/impl/psb_c_base_mat_impl.F90 @@ -607,6 +607,51 @@ subroutine psb_c_base_csclip(a,b,info,& end subroutine psb_c_base_csclip +subroutine psb_c_base_merge(a,a2,acoo,n_rows,n_cols,info) + ! Output is always in COO format + use psb_error_mod + use psb_const_mod + use psb_c_base_mat_mod, psb_protect_name => psb_c_base_merge + implicit none + + class(psb_c_base_sparse_mat), intent(inout) :: a,a2 + class(psb_c_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + type(psb_c_coo_sparse_mat) :: acoo2 + integer(psb_ipk_) :: nz + logical, parameter :: use_ecsr=.true. + character(len=20) :: name, ch_err + integer(psb_ipk_) :: err_act + + info = psb_success_ + name = 'psb_split' + call psb_erractionsave(err_act) + + call a%cp_to_coo(acoo,info) + call acoo%set_bld() + call acoo%set_nrows(n_rows) + call acoo%set_ncols(n_cols) + call a2%cp_to_coo(acoo2,info) + nz=acoo2%get_nzeros() + call acoo%csput(nz,acoo2%ia,acoo2%ja,acoo2%val,ione,n_rows,ione,n_cols,info) + + if (psb_errstatus_fatal()) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='cscnv') + goto 9999 + endif + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + +end subroutine psb_c_base_merge + + ! ! Here we have the base implementation of tril and triu ! this is just based on the getrow. diff --git a/base/serial/impl/psb_c_coo_impl.F90 b/base/serial/impl/psb_c_coo_impl.F90 index 5c90e287..887ca9d3 100644 --- a/base/serial/impl/psb_c_coo_impl.F90 +++ b/base/serial/impl/psb_c_coo_impl.F90 @@ -1512,7 +1512,7 @@ contains end subroutine psb_c_coo_cssv -subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1524,9 +1524,10 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans - + integer(psb_ipk_), optional, intent(in) :: ivshft + character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ complex(psb_spk_) :: acc logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1550,6 +1551,12 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1633,7 +1640,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = czero endif - acc = acc + a%val(i) * x(a%ja(i)) + acc = acc + a%val(i) * x(ivshft_+a%ja(i)) i = i + 1 enddo end if @@ -1645,7 +1652,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + a%val(i)*x(jc) + y(ir) = y(ir) + a%val(i)*x(ivshft_+jc) enddo else if (alpha == -cone) then @@ -1653,7 +1660,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - a%val(i)*x(jc) + y(ir) = y(ir) - a%val(i)*x(ivshft_+jc) enddo else @@ -1661,7 +1668,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*a%val(i)*x(jc) + y(ir) = y(ir) + alpha*a%val(i)*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1673,7 +1680,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + conjg(a%val(i))*x(jc) + y(ir) = y(ir) + conjg(a%val(i))*x(ivshft_+jc) enddo else if (alpha == -cone) then @@ -1681,7 +1688,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - conjg(a%val(i))*x(jc) + y(ir) = y(ir) - conjg(a%val(i))*x(ivshft_+jc) enddo else @@ -1689,7 +1696,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*conjg(a%val(i))*x(jc) + y(ir) = y(ir) + alpha*conjg(a%val(i))*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1705,7 +1712,7 @@ subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_c_coo_csmv -subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1716,9 +1723,10 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc, ivshft_ complex(psb_spk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1743,6 +1751,12 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1834,7 +1848,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = czero endif - acc = acc + a%val(i) * x(a%ja(i),1:nc) + acc = acc + a%val(i) * x(ivshft_+a%ja(i),1:nc) i = i + 1 enddo end if @@ -1846,7 +1860,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(ivshft_+jc,1:nc) enddo else if (alpha == -cone) then @@ -1854,7 +1868,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(ivshft_+jc,1:nc) enddo else @@ -1862,7 +1876,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha @@ -1874,7 +1888,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + conjg(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + conjg(a%val(i))*x(ivshft_+jc,1:nc) enddo else if (alpha == -cone) then @@ -1882,7 +1896,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - conjg(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - conjg(a%val(i))*x(ivshft_+jc,1:nc) enddo else @@ -1890,7 +1904,7 @@ subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*conjg(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*conjg(a%val(i))*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha diff --git a/base/serial/impl/psb_c_csc_impl.F90 b/base/serial/impl/psb_c_csc_impl.F90 index 54332d06..ad59fcb1 100644 --- a/base/serial/impl/psb_c_csc_impl.F90 +++ b/base/serial/impl/psb_c_csc_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_c_csc_mat_mod, psb_protect_name => psb_c_csc_csmv @@ -53,9 +53,10 @@ subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ complex(psb_spk_) :: acc logical :: tra integer(psb_ipk_) :: err_act @@ -72,6 +73,12 @@ subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -320,7 +327,7 @@ subroutine psb_c_csc_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_c_csc_csmv -subroutine psb_c_csc_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_c_csc_mat_mod, psb_protect_name => psb_c_csc_csmm @@ -330,6 +337,7 @@ subroutine psb_c_csc_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc diff --git a/base/serial/impl/psb_c_csr_impl.F90 b/base/serial/impl/psb_c_csr_impl.F90 index 6c21f639..a9b30413 100644 --- a/base/serial/impl/psb_c_csr_impl.F90 +++ b/base/serial/impl/psb_c_csr_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_c_csr_mat_mod, psb_protect_name => psb_c_csr_csmv @@ -53,9 +53,10 @@ subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: m, n + integer(psb_ipk_) :: m, n, ivshft_ logical :: tra, ctra integer(psb_ipk_) :: err_act integer(psb_ipk_) :: ierr(5) @@ -72,6 +73,12 @@ subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -107,7 +114,7 @@ subroutine psb_c_csr_csmv(alpha,a,x,beta,y,info,trans) call psb_c_csr_csmv_inner(m,n,alpha,a%irp,a%ja,a%val,& & a%is_triangle(),a%is_unit(),& - & x,beta,y,tra,ctra) + & x(ivshft_+1:),beta,y,tra,ctra) call psb_erractionrestore(err_act) return @@ -416,7 +423,7 @@ contains end subroutine psb_c_csr_csmv -subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_c_csr_mat_mod, psb_protect_name => psb_c_csr_csmm @@ -426,9 +433,10 @@ subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: j,m,n, nc + integer(psb_ipk_) :: j,m,n, nc, ivshft_ complex(psb_spk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -446,6 +454,12 @@ subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -486,7 +500,7 @@ subroutine psb_c_csr_csmm(alpha,a,x,beta,y,info,trans) end if call psb_c_csr_csmm_inner(m,n,nc,alpha,a%irp,a%ja,a%val, & - & a%is_triangle(),a%is_unit(),x,size(x,1,kind=psb_ipk_), & + & a%is_triangle(),a%is_unit(),x(ivshft+1:,:),size(x,1,kind=psb_ipk_), & & beta,y,size(y,1,kind=psb_ipk_),tra,ctra,acc) @@ -4344,7 +4358,7 @@ subroutine psb_c_ecsr_mold(a,b,info) end subroutine psb_c_ecsr_mold -subroutine psb_c_ecsr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_c_csr_mat_mod, psb_protect_name => psb_c_ecsr_csmv @@ -4354,6 +4368,7 @@ subroutine psb_c_ecsr_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: m, n diff --git a/base/serial/impl/psb_d_base_mat_impl.F90 b/base/serial/impl/psb_d_base_mat_impl.F90 index 69112529..09732d5b 100644 --- a/base/serial/impl/psb_d_base_mat_impl.F90 +++ b/base/serial/impl/psb_d_base_mat_impl.F90 @@ -607,6 +607,51 @@ subroutine psb_d_base_csclip(a,b,info,& end subroutine psb_d_base_csclip +subroutine psb_d_base_merge(a,a2,acoo,n_rows,n_cols,info) + ! Output is always in COO format + use psb_error_mod + use psb_const_mod + use psb_d_base_mat_mod, psb_protect_name => psb_d_base_merge + implicit none + + class(psb_d_base_sparse_mat), intent(inout) :: a,a2 + class(psb_d_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + type(psb_d_coo_sparse_mat) :: acoo2 + integer(psb_ipk_) :: nz + logical, parameter :: use_ecsr=.true. + character(len=20) :: name, ch_err + integer(psb_ipk_) :: err_act + + info = psb_success_ + name = 'psb_split' + call psb_erractionsave(err_act) + + call a%cp_to_coo(acoo,info) + call acoo%set_bld() + call acoo%set_nrows(n_rows) + call acoo%set_ncols(n_cols) + call a2%cp_to_coo(acoo2,info) + nz=acoo2%get_nzeros() + call acoo%csput(nz,acoo2%ia,acoo2%ja,acoo2%val,ione,n_rows,ione,n_cols,info) + + if (psb_errstatus_fatal()) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='cscnv') + goto 9999 + endif + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + +end subroutine psb_d_base_merge + + ! ! Here we have the base implementation of tril and triu ! this is just based on the getrow. diff --git a/base/serial/impl/psb_d_coo_impl.F90 b/base/serial/impl/psb_d_coo_impl.F90 index f6a173d1..e7773c00 100644 --- a/base/serial/impl/psb_d_coo_impl.F90 +++ b/base/serial/impl/psb_d_coo_impl.F90 @@ -1512,7 +1512,7 @@ contains end subroutine psb_d_coo_cssv -subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1524,9 +1524,10 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans - + integer(psb_ipk_), optional, intent(in) :: ivshft + character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ real(psb_dpk_) :: acc logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1550,6 +1551,12 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1633,7 +1640,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = dzero endif - acc = acc + a%val(i) * x(a%ja(i)) + acc = acc + a%val(i) * x(ivshft_+a%ja(i)) i = i + 1 enddo end if @@ -1645,7 +1652,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + a%val(i)*x(jc) + y(ir) = y(ir) + a%val(i)*x(ivshft_+jc) enddo else if (alpha == -done) then @@ -1653,7 +1660,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - a%val(i)*x(jc) + y(ir) = y(ir) - a%val(i)*x(ivshft_+jc) enddo else @@ -1661,7 +1668,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*a%val(i)*x(jc) + y(ir) = y(ir) + alpha*a%val(i)*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1673,7 +1680,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + (a%val(i))*x(jc) + y(ir) = y(ir) + (a%val(i))*x(ivshft_+jc) enddo else if (alpha == -done) then @@ -1681,7 +1688,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - (a%val(i))*x(jc) + y(ir) = y(ir) - (a%val(i))*x(ivshft_+jc) enddo else @@ -1689,7 +1696,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*(a%val(i))*x(jc) + y(ir) = y(ir) + alpha*(a%val(i))*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1705,7 +1712,7 @@ subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_d_coo_csmv -subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1716,9 +1723,10 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc, ivshft_ real(psb_dpk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1743,6 +1751,12 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1834,7 +1848,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = dzero endif - acc = acc + a%val(i) * x(a%ja(i),1:nc) + acc = acc + a%val(i) * x(ivshft_+a%ja(i),1:nc) i = i + 1 enddo end if @@ -1846,7 +1860,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(ivshft_+jc,1:nc) enddo else if (alpha == -done) then @@ -1854,7 +1868,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(ivshft_+jc,1:nc) enddo else @@ -1862,7 +1876,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha @@ -1874,7 +1888,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + (a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + (a%val(i))*x(ivshft_+jc,1:nc) enddo else if (alpha == -done) then @@ -1882,7 +1896,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - (a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - (a%val(i))*x(ivshft_+jc,1:nc) enddo else @@ -1890,7 +1904,7 @@ subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*(a%val(i))*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha diff --git a/base/serial/impl/psb_d_csc_impl.F90 b/base/serial/impl/psb_d_csc_impl.F90 index 1761b051..32298d8f 100644 --- a/base/serial/impl/psb_d_csc_impl.F90 +++ b/base/serial/impl/psb_d_csc_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_d_csc_mat_mod, psb_protect_name => psb_d_csc_csmv @@ -53,9 +53,10 @@ subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ real(psb_dpk_) :: acc logical :: tra integer(psb_ipk_) :: err_act @@ -72,6 +73,12 @@ subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -320,7 +327,7 @@ subroutine psb_d_csc_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_d_csc_csmv -subroutine psb_d_csc_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_d_csc_mat_mod, psb_protect_name => psb_d_csc_csmm @@ -330,6 +337,7 @@ subroutine psb_d_csc_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc diff --git a/base/serial/impl/psb_d_csr_impl.F90 b/base/serial/impl/psb_d_csr_impl.F90 index 9f1d509c..79ea651a 100644 --- a/base/serial/impl/psb_d_csr_impl.F90 +++ b/base/serial/impl/psb_d_csr_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_d_csr_mat_mod, psb_protect_name => psb_d_csr_csmv @@ -53,9 +53,10 @@ subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: m, n + integer(psb_ipk_) :: m, n, ivshft_ logical :: tra, ctra integer(psb_ipk_) :: err_act integer(psb_ipk_) :: ierr(5) @@ -72,6 +73,12 @@ subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -107,7 +114,7 @@ subroutine psb_d_csr_csmv(alpha,a,x,beta,y,info,trans) call psb_d_csr_csmv_inner(m,n,alpha,a%irp,a%ja,a%val,& & a%is_triangle(),a%is_unit(),& - & x,beta,y,tra,ctra) + & x(ivshft_+1:),beta,y,tra,ctra) call psb_erractionrestore(err_act) return @@ -416,7 +423,7 @@ contains end subroutine psb_d_csr_csmv -subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_d_csr_mat_mod, psb_protect_name => psb_d_csr_csmm @@ -426,9 +433,10 @@ subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: j,m,n, nc + integer(psb_ipk_) :: j,m,n, nc, ivshft_ real(psb_dpk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -446,6 +454,12 @@ subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -486,7 +500,7 @@ subroutine psb_d_csr_csmm(alpha,a,x,beta,y,info,trans) end if call psb_d_csr_csmm_inner(m,n,nc,alpha,a%irp,a%ja,a%val, & - & a%is_triangle(),a%is_unit(),x,size(x,1,kind=psb_ipk_), & + & a%is_triangle(),a%is_unit(),x(ivshft+1:,:),size(x,1,kind=psb_ipk_), & & beta,y,size(y,1,kind=psb_ipk_),tra,ctra,acc) @@ -4344,7 +4358,7 @@ subroutine psb_d_ecsr_mold(a,b,info) end subroutine psb_d_ecsr_mold -subroutine psb_d_ecsr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_d_csr_mat_mod, psb_protect_name => psb_d_ecsr_csmv @@ -4354,6 +4368,7 @@ subroutine psb_d_ecsr_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: m, n diff --git a/base/serial/impl/psb_s_base_mat_impl.F90 b/base/serial/impl/psb_s_base_mat_impl.F90 index 4a99a684..bcad1fc6 100644 --- a/base/serial/impl/psb_s_base_mat_impl.F90 +++ b/base/serial/impl/psb_s_base_mat_impl.F90 @@ -607,6 +607,51 @@ subroutine psb_s_base_csclip(a,b,info,& end subroutine psb_s_base_csclip +subroutine psb_s_base_merge(a,a2,acoo,n_rows,n_cols,info) + ! Output is always in COO format + use psb_error_mod + use psb_const_mod + use psb_s_base_mat_mod, psb_protect_name => psb_s_base_merge + implicit none + + class(psb_s_base_sparse_mat), intent(inout) :: a,a2 + class(psb_s_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + type(psb_s_coo_sparse_mat) :: acoo2 + integer(psb_ipk_) :: nz + logical, parameter :: use_ecsr=.true. + character(len=20) :: name, ch_err + integer(psb_ipk_) :: err_act + + info = psb_success_ + name = 'psb_split' + call psb_erractionsave(err_act) + + call a%cp_to_coo(acoo,info) + call acoo%set_bld() + call acoo%set_nrows(n_rows) + call acoo%set_ncols(n_cols) + call a2%cp_to_coo(acoo2,info) + nz=acoo2%get_nzeros() + call acoo%csput(nz,acoo2%ia,acoo2%ja,acoo2%val,ione,n_rows,ione,n_cols,info) + + if (psb_errstatus_fatal()) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='cscnv') + goto 9999 + endif + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + +end subroutine psb_s_base_merge + + ! ! Here we have the base implementation of tril and triu ! this is just based on the getrow. diff --git a/base/serial/impl/psb_s_coo_impl.F90 b/base/serial/impl/psb_s_coo_impl.F90 index 4c12d8fc..8df2c1d8 100644 --- a/base/serial/impl/psb_s_coo_impl.F90 +++ b/base/serial/impl/psb_s_coo_impl.F90 @@ -1512,7 +1512,7 @@ contains end subroutine psb_s_coo_cssv -subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1524,9 +1524,10 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans - + integer(psb_ipk_), optional, intent(in) :: ivshft + character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ real(psb_spk_) :: acc logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1550,6 +1551,12 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1633,7 +1640,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = szero endif - acc = acc + a%val(i) * x(a%ja(i)) + acc = acc + a%val(i) * x(ivshft_+a%ja(i)) i = i + 1 enddo end if @@ -1645,7 +1652,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + a%val(i)*x(jc) + y(ir) = y(ir) + a%val(i)*x(ivshft_+jc) enddo else if (alpha == -sone) then @@ -1653,7 +1660,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - a%val(i)*x(jc) + y(ir) = y(ir) - a%val(i)*x(ivshft_+jc) enddo else @@ -1661,7 +1668,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*a%val(i)*x(jc) + y(ir) = y(ir) + alpha*a%val(i)*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1673,7 +1680,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + (a%val(i))*x(jc) + y(ir) = y(ir) + (a%val(i))*x(ivshft_+jc) enddo else if (alpha == -sone) then @@ -1681,7 +1688,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - (a%val(i))*x(jc) + y(ir) = y(ir) - (a%val(i))*x(ivshft_+jc) enddo else @@ -1689,7 +1696,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*(a%val(i))*x(jc) + y(ir) = y(ir) + alpha*(a%val(i))*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1705,7 +1712,7 @@ subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_s_coo_csmv -subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1716,9 +1723,10 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc, ivshft_ real(psb_spk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1743,6 +1751,12 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1834,7 +1848,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = szero endif - acc = acc + a%val(i) * x(a%ja(i),1:nc) + acc = acc + a%val(i) * x(ivshft_+a%ja(i),1:nc) i = i + 1 enddo end if @@ -1846,7 +1860,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(ivshft_+jc,1:nc) enddo else if (alpha == -sone) then @@ -1854,7 +1868,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(ivshft_+jc,1:nc) enddo else @@ -1862,7 +1876,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha @@ -1874,7 +1888,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + (a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + (a%val(i))*x(ivshft_+jc,1:nc) enddo else if (alpha == -sone) then @@ -1882,7 +1896,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - (a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - (a%val(i))*x(ivshft_+jc,1:nc) enddo else @@ -1890,7 +1904,7 @@ subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*(a%val(i))*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha diff --git a/base/serial/impl/psb_s_csc_impl.F90 b/base/serial/impl/psb_s_csc_impl.F90 index a66b7dc0..41c3e3db 100644 --- a/base/serial/impl/psb_s_csc_impl.F90 +++ b/base/serial/impl/psb_s_csc_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_s_csc_mat_mod, psb_protect_name => psb_s_csc_csmv @@ -53,9 +53,10 @@ subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ real(psb_spk_) :: acc logical :: tra integer(psb_ipk_) :: err_act @@ -72,6 +73,12 @@ subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -320,7 +327,7 @@ subroutine psb_s_csc_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_s_csc_csmv -subroutine psb_s_csc_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_s_csc_mat_mod, psb_protect_name => psb_s_csc_csmm @@ -330,6 +337,7 @@ subroutine psb_s_csc_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc diff --git a/base/serial/impl/psb_s_csr_impl.F90 b/base/serial/impl/psb_s_csr_impl.F90 index a4e1ab82..f12de45c 100644 --- a/base/serial/impl/psb_s_csr_impl.F90 +++ b/base/serial/impl/psb_s_csr_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_s_csr_mat_mod, psb_protect_name => psb_s_csr_csmv @@ -53,9 +53,10 @@ subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: m, n + integer(psb_ipk_) :: m, n, ivshft_ logical :: tra, ctra integer(psb_ipk_) :: err_act integer(psb_ipk_) :: ierr(5) @@ -72,6 +73,12 @@ subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -107,7 +114,7 @@ subroutine psb_s_csr_csmv(alpha,a,x,beta,y,info,trans) call psb_s_csr_csmv_inner(m,n,alpha,a%irp,a%ja,a%val,& & a%is_triangle(),a%is_unit(),& - & x,beta,y,tra,ctra) + & x(ivshft_+1:),beta,y,tra,ctra) call psb_erractionrestore(err_act) return @@ -416,7 +423,7 @@ contains end subroutine psb_s_csr_csmv -subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_s_csr_mat_mod, psb_protect_name => psb_s_csr_csmm @@ -426,9 +433,10 @@ subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: j,m,n, nc + integer(psb_ipk_) :: j,m,n, nc, ivshft_ real(psb_spk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -446,6 +454,12 @@ subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -486,7 +500,7 @@ subroutine psb_s_csr_csmm(alpha,a,x,beta,y,info,trans) end if call psb_s_csr_csmm_inner(m,n,nc,alpha,a%irp,a%ja,a%val, & - & a%is_triangle(),a%is_unit(),x,size(x,1,kind=psb_ipk_), & + & a%is_triangle(),a%is_unit(),x(ivshft+1:,:),size(x,1,kind=psb_ipk_), & & beta,y,size(y,1,kind=psb_ipk_),tra,ctra,acc) @@ -4344,7 +4358,7 @@ subroutine psb_s_ecsr_mold(a,b,info) end subroutine psb_s_ecsr_mold -subroutine psb_s_ecsr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_s_csr_mat_mod, psb_protect_name => psb_s_ecsr_csmv @@ -4354,6 +4368,7 @@ subroutine psb_s_ecsr_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: m, n diff --git a/base/serial/impl/psb_z_base_mat_impl.F90 b/base/serial/impl/psb_z_base_mat_impl.F90 index 404027c5..fc01a605 100644 --- a/base/serial/impl/psb_z_base_mat_impl.F90 +++ b/base/serial/impl/psb_z_base_mat_impl.F90 @@ -607,6 +607,51 @@ subroutine psb_z_base_csclip(a,b,info,& end subroutine psb_z_base_csclip +subroutine psb_z_base_merge(a,a2,acoo,n_rows,n_cols,info) + ! Output is always in COO format + use psb_error_mod + use psb_const_mod + use psb_z_base_mat_mod, psb_protect_name => psb_z_base_merge + implicit none + + class(psb_z_base_sparse_mat), intent(inout) :: a,a2 + class(psb_z_coo_sparse_mat), intent(out) :: acoo + integer(psb_ipk_), intent(in) :: n_rows, n_cols + integer(psb_ipk_), intent(out) :: info + type(psb_z_coo_sparse_mat) :: acoo2 + integer(psb_ipk_) :: nz + logical, parameter :: use_ecsr=.true. + character(len=20) :: name, ch_err + integer(psb_ipk_) :: err_act + + info = psb_success_ + name = 'psb_split' + call psb_erractionsave(err_act) + + call a%cp_to_coo(acoo,info) + call acoo%set_bld() + call acoo%set_nrows(n_rows) + call acoo%set_ncols(n_cols) + call a2%cp_to_coo(acoo2,info) + nz=acoo2%get_nzeros() + call acoo%csput(nz,acoo2%ia,acoo2%ja,acoo2%val,ione,n_rows,ione,n_cols,info) + + if (psb_errstatus_fatal()) then + info=psb_err_from_subroutine_ + call psb_errpush(info,name,a_err='cscnv') + goto 9999 + endif + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + +end subroutine psb_z_base_merge + + ! ! Here we have the base implementation of tril and triu ! this is just based on the getrow. diff --git a/base/serial/impl/psb_z_coo_impl.F90 b/base/serial/impl/psb_z_coo_impl.F90 index 44ee89b5..51cad616 100644 --- a/base/serial/impl/psb_z_coo_impl.F90 +++ b/base/serial/impl/psb_z_coo_impl.F90 @@ -1512,7 +1512,7 @@ contains end subroutine psb_z_coo_cssv -subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1524,9 +1524,10 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans - + integer(psb_ipk_), optional, intent(in) :: ivshft + character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ complex(psb_dpk_) :: acc logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1550,6 +1551,12 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1633,7 +1640,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = zzero endif - acc = acc + a%val(i) * x(a%ja(i)) + acc = acc + a%val(i) * x(ivshft_+a%ja(i)) i = i + 1 enddo end if @@ -1645,7 +1652,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + a%val(i)*x(jc) + y(ir) = y(ir) + a%val(i)*x(ivshft_+jc) enddo else if (alpha == -zone) then @@ -1653,7 +1660,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - a%val(i)*x(jc) + y(ir) = y(ir) - a%val(i)*x(ivshft_+jc) enddo else @@ -1661,7 +1668,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*a%val(i)*x(jc) + y(ir) = y(ir) + alpha*a%val(i)*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1673,7 +1680,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + conjg(a%val(i))*x(jc) + y(ir) = y(ir) + conjg(a%val(i))*x(ivshft_+jc) enddo else if (alpha == -zone) then @@ -1681,7 +1688,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) - conjg(a%val(i))*x(jc) + y(ir) = y(ir) - conjg(a%val(i))*x(ivshft_+jc) enddo else @@ -1689,7 +1696,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir) = y(ir) + alpha*conjg(a%val(i))*x(jc) + y(ir) = y(ir) + alpha*conjg(a%val(i))*x(ivshft_+jc) enddo end if !.....end testing on alpha @@ -1705,7 +1712,7 @@ subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_z_coo_csmv -subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_const_mod use psb_error_mod use psb_string_mod @@ -1716,9 +1723,10 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc, ivshft_ complex(psb_dpk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -1743,6 +1751,12 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + tra = (psb_toupper(trans_) == 'T') ctra = (psb_toupper(trans_) == 'C') @@ -1834,7 +1848,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) ir = a%ia(i) acc = zzero endif - acc = acc + a%val(i) * x(a%ja(i),1:nc) + acc = acc + a%val(i) * x(ivshft_+a%ja(i),1:nc) i = i + 1 enddo end if @@ -1846,7 +1860,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + a%val(i)*x(ivshft_+jc,1:nc) enddo else if (alpha == -zone) then @@ -1854,7 +1868,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - a%val(i)*x(ivshft_+jc,1:nc) enddo else @@ -1862,7 +1876,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*a%val(i)*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha @@ -1874,7 +1888,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + conjg(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + conjg(a%val(i))*x(ivshft_+jc,1:nc) enddo else if (alpha == -zone) then @@ -1882,7 +1896,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) - conjg(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) - conjg(a%val(i))*x(ivshft_+jc,1:nc) enddo else @@ -1890,7 +1904,7 @@ subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) do i=1,nnz ir = a%ja(i) jc = a%ia(i) - y(ir,1:nc) = y(ir,1:nc) + alpha*conjg(a%val(i))*x(jc,1:nc) + y(ir,1:nc) = y(ir,1:nc) + alpha*conjg(a%val(i))*x(ivshft_+jc,1:nc) enddo end if !.....end testing on alpha diff --git a/base/serial/impl/psb_z_csc_impl.F90 b/base/serial/impl/psb_z_csc_impl.F90 index e5516bd9..56681a33 100644 --- a/base/serial/impl/psb_z_csc_impl.F90 +++ b/base/serial/impl/psb_z_csc_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_z_csc_mat_mod, psb_protect_name => psb_z_csc_csmv @@ -53,9 +53,10 @@ subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc + integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, ivshft_ complex(psb_dpk_) :: acc logical :: tra integer(psb_ipk_) :: err_act @@ -72,6 +73,12 @@ subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -320,7 +327,7 @@ subroutine psb_z_csc_csmv(alpha,a,x,beta,y,info,trans) end subroutine psb_z_csc_csmv -subroutine psb_z_csc_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_csc_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_z_csc_mat_mod, psb_protect_name => psb_z_csc_csmm @@ -330,6 +337,7 @@ subroutine psb_z_csc_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nc diff --git a/base/serial/impl/psb_z_csr_impl.F90 b/base/serial/impl/psb_z_csr_impl.F90 index 28ac121e..a79e9b3c 100644 --- a/base/serial/impl/psb_z_csr_impl.F90 +++ b/base/serial/impl/psb_z_csr_impl.F90 @@ -43,7 +43,7 @@ ! ! == =================================== -subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_z_csr_mat_mod, psb_protect_name => psb_z_csr_csmv @@ -53,9 +53,10 @@ subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: m, n + integer(psb_ipk_) :: m, n, ivshft_ logical :: tra, ctra integer(psb_ipk_) :: err_act integer(psb_ipk_) :: ierr(5) @@ -72,6 +73,12 @@ subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -107,7 +114,7 @@ subroutine psb_z_csr_csmv(alpha,a,x,beta,y,info,trans) call psb_z_csr_csmv_inner(m,n,alpha,a%irp,a%ja,a%val,& & a%is_triangle(),a%is_unit(),& - & x,beta,y,tra,ctra) + & x(ivshft_+1:),beta,y,tra,ctra) call psb_erractionrestore(err_act) return @@ -416,7 +423,7 @@ contains end subroutine psb_z_csr_csmv -subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_z_csr_mat_mod, psb_protect_name => psb_z_csr_csmm @@ -426,9 +433,10 @@ subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ - integer(psb_ipk_) :: j,m,n, nc + integer(psb_ipk_) :: j,m,n, nc, ivshft_ complex(psb_dpk_), allocatable :: acc(:) logical :: tra, ctra integer(psb_ipk_) :: err_act @@ -446,6 +454,12 @@ subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans) trans_ = 'N' end if + if (present(ivshft)) then + ivshft_ = ivshft + else + ivshft_ = 0 + end if + if (.not.a%is_asb()) then info = psb_err_invalid_mat_state_ call psb_errpush(info,name) @@ -486,7 +500,7 @@ subroutine psb_z_csr_csmm(alpha,a,x,beta,y,info,trans) end if call psb_z_csr_csmm_inner(m,n,nc,alpha,a%irp,a%ja,a%val, & - & a%is_triangle(),a%is_unit(),x,size(x,1,kind=psb_ipk_), & + & a%is_triangle(),a%is_unit(),x(ivshft+1:,:),size(x,1,kind=psb_ipk_), & & beta,y,size(y,1,kind=psb_ipk_),tra,ctra,acc) @@ -4344,7 +4358,7 @@ subroutine psb_z_ecsr_mold(a,b,info) end subroutine psb_z_ecsr_mold -subroutine psb_z_ecsr_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_ecsr_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_error_mod use psb_string_mod use psb_z_csr_mat_mod, psb_protect_name => psb_z_ecsr_csmv @@ -4354,6 +4368,7 @@ subroutine psb_z_ecsr_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: m, n diff --git a/cuda/impl/psb_c_cuda_csrg_csmm.F90 b/cuda/impl/psb_c_cuda_csrg_csmm.F90 index b3012952..d11c3302 100644 --- a/cuda/impl/psb_c_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_csrg_csmm.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_c_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_c_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_c_cuda_csrg_csmv.F90 b/cuda/impl/psb_c_cuda_csrg_csmv.F90 index ae90cb7e..06b3f51f 100644 --- a/cuda/impl/psb_c_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_csmv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_c_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +41,7 @@ subroutine psb_c_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 index c58e7ec0..a196ffb8 100644 --- a/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_csrg_vect_mv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_c_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +43,7 @@ subroutine psb_c_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft complex(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra diff --git a/cuda/impl/psb_c_cuda_diag_csmv.F90 b/cuda/impl/psb_c_cuda_diag_csmv.F90 index c0940903..12243346 100644 --- a/cuda/impl/psb_c_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_c_cuda_diag_csmv.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_c_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,7 @@ subroutine psb_c_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_c_cuda_diag_vect_mv.F90 b/cuda/impl/psb_c_cuda_diag_vect_mv.F90 index fba22bc5..fe54f58a 100644 --- a/cuda/impl/psb_c_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_diag_vect_mv.F90 @@ -28,7 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,8 @@ subroutine psb_c_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_c_cuda_elg_csmm.F90 b/cuda/impl/psb_c_cuda_elg_csmm.F90 index f7ae9892..bbe26383 100644 --- a/cuda/impl/psb_c_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_elg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_c_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_c_cuda_elg_csmv.F90 b/cuda/impl/psb_c_cuda_elg_csmv.F90 index a23d4a60..7c3ef129 100644 --- a/cuda/impl/psb_c_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_elg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_c_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_c_cuda_elg_vect_mv.F90 b/cuda/impl/psb_c_cuda_elg_vect_mv.F90 index 9da6a34a..319580a5 100644 --- a/cuda/impl/psb_c_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_elg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -43,6 +43,8 @@ subroutine psb_c_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_c_cuda_hdiag_csmv.F90 b/cuda/impl/psb_c_cuda_hdiag_csmv.F90 index 36928062..1684f8e9 100644 --- a/cuda/impl/psb_c_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -41,6 +41,7 @@ subroutine psb_c_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 index 0c7ce856..48b82f42 100644 --- a/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hdiag_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -43,6 +43,8 @@ subroutine psb_c_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_c_cuda_hlg_csmm.F90 b/cuda/impl/psb_c_cuda_hlg_csmm.F90 index 88aa53a8..9f4f4118 100644 --- a/cuda/impl/psb_c_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_hlg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_c_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_c_cuda_hlg_csmv.F90 b/cuda/impl/psb_c_cuda_hlg_csmv.F90 index 18db6ad1..14032a21 100644 --- a/cuda/impl/psb_c_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_c_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 index 3789ef17..192a2133 100644 --- a/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hlg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_c_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -43,6 +43,8 @@ subroutine psb_c_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_c_cuda_hybg_csmm.F90 b/cuda/impl/psb_c_cuda_hybg_csmm.F90 index 227b7d5c..dc8b010d 100644 --- a/cuda/impl/psb_c_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_c_cuda_hybg_csmm.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_c_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_c_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_c_cuda_hybg_csmv.F90 b/cuda/impl/psb_c_cuda_hybg_csmv.F90 index e1084022..b5e50916 100644 --- a/cuda/impl/psb_c_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_csmv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_c_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_c_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 index 58ce0386..ad2eb4c5 100644 --- a/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_c_cuda_hybg_vect_mv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_c_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_c_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +45,8 @@ subroutine psb_c_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_d_cuda_csrg_csmm.F90 b/cuda/impl/psb_d_cuda_csrg_csmm.F90 index ddac1373..edecf28e 100644 --- a/cuda/impl/psb_d_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_csrg_csmm.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_d_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_d_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_d_cuda_csrg_csmv.F90 b/cuda/impl/psb_d_cuda_csrg_csmv.F90 index c1c889f8..157b2084 100644 --- a/cuda/impl/psb_d_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_csmv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_d_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +41,7 @@ subroutine psb_d_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 index 03fefbdd..79857e0a 100644 --- a/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_csrg_vect_mv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_d_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +43,7 @@ subroutine psb_d_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft real(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra diff --git a/cuda/impl/psb_d_cuda_diag_csmv.F90 b/cuda/impl/psb_d_cuda_diag_csmv.F90 index 0317a369..2ad3a985 100644 --- a/cuda/impl/psb_d_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_d_cuda_diag_csmv.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_d_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,7 @@ subroutine psb_d_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_d_cuda_diag_vect_mv.F90 b/cuda/impl/psb_d_cuda_diag_vect_mv.F90 index 3bc2372d..a635d04a 100644 --- a/cuda/impl/psb_d_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_diag_vect_mv.F90 @@ -28,7 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,8 @@ subroutine psb_d_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_d_cuda_elg_csmm.F90 b/cuda/impl/psb_d_cuda_elg_csmm.F90 index f77d72d8..6b954872 100644 --- a/cuda/impl/psb_d_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_elg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_d_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_d_cuda_elg_csmv.F90 b/cuda/impl/psb_d_cuda_elg_csmv.F90 index 351ad99d..e9d382a9 100644 --- a/cuda/impl/psb_d_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_elg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_d_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_d_cuda_elg_vect_mv.F90 b/cuda/impl/psb_d_cuda_elg_vect_mv.F90 index f0b83c2b..a86b5d59 100644 --- a/cuda/impl/psb_d_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_elg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -43,6 +43,8 @@ subroutine psb_d_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_d_cuda_hdiag_csmv.F90 b/cuda/impl/psb_d_cuda_hdiag_csmv.F90 index bf4dacc1..02f9c24f 100644 --- a/cuda/impl/psb_d_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -41,6 +41,7 @@ subroutine psb_d_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 index c18c80ac..a43e1343 100644 --- a/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hdiag_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -43,6 +43,8 @@ subroutine psb_d_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_d_cuda_hlg_csmm.F90 b/cuda/impl/psb_d_cuda_hlg_csmm.F90 index ee8424e6..435cad99 100644 --- a/cuda/impl/psb_d_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_hlg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_d_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_d_cuda_hlg_csmv.F90 b/cuda/impl/psb_d_cuda_hlg_csmv.F90 index 58892c1f..ee4dff9d 100644 --- a/cuda/impl/psb_d_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_d_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 index cccba74b..4582fdde 100644 --- a/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hlg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_d_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -43,6 +43,8 @@ subroutine psb_d_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_d_cuda_hybg_csmm.F90 b/cuda/impl/psb_d_cuda_hybg_csmm.F90 index d5b49829..0fd901c5 100644 --- a/cuda/impl/psb_d_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_d_cuda_hybg_csmm.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_d_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_d_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_d_cuda_hybg_csmv.F90 b/cuda/impl/psb_d_cuda_hybg_csmv.F90 index b29b889a..ced79c49 100644 --- a/cuda/impl/psb_d_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_csmv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_d_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_d_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 index f1119439..6c009729 100644 --- a/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_d_cuda_hybg_vect_mv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_d_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_d_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +45,8 @@ subroutine psb_d_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_s_cuda_csrg_csmm.F90 b/cuda/impl/psb_s_cuda_csrg_csmm.F90 index 453f5260..677dd532 100644 --- a/cuda/impl/psb_s_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_csrg_csmm.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_s_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_s_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_s_cuda_csrg_csmv.F90 b/cuda/impl/psb_s_cuda_csrg_csmv.F90 index a387fd34..93c628c3 100644 --- a/cuda/impl/psb_s_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_csmv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_s_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +41,7 @@ subroutine psb_s_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 index 52820436..7841a064 100644 --- a/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_csrg_vect_mv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_s_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +43,7 @@ subroutine psb_s_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft real(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra diff --git a/cuda/impl/psb_s_cuda_diag_csmv.F90 b/cuda/impl/psb_s_cuda_diag_csmv.F90 index 016b82bc..2df4b256 100644 --- a/cuda/impl/psb_s_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_s_cuda_diag_csmv.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_s_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,7 @@ subroutine psb_s_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_s_cuda_diag_vect_mv.F90 b/cuda/impl/psb_s_cuda_diag_vect_mv.F90 index d68e5193..5b5ffdd1 100644 --- a/cuda/impl/psb_s_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_diag_vect_mv.F90 @@ -28,7 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,8 @@ subroutine psb_s_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_s_cuda_elg_csmm.F90 b/cuda/impl/psb_s_cuda_elg_csmm.F90 index ff7b7848..3c9d18cc 100644 --- a/cuda/impl/psb_s_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_elg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_s_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_s_cuda_elg_csmv.F90 b/cuda/impl/psb_s_cuda_elg_csmv.F90 index caf106cb..020027dd 100644 --- a/cuda/impl/psb_s_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_elg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_s_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_s_cuda_elg_vect_mv.F90 b/cuda/impl/psb_s_cuda_elg_vect_mv.F90 index 6c898fda..79f9017b 100644 --- a/cuda/impl/psb_s_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_elg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -43,6 +43,8 @@ subroutine psb_s_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_s_cuda_hdiag_csmv.F90 b/cuda/impl/psb_s_cuda_hdiag_csmv.F90 index 3f34c2e7..33908030 100644 --- a/cuda/impl/psb_s_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -41,6 +41,7 @@ subroutine psb_s_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 index 03215047..bacb73a8 100644 --- a/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hdiag_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -43,6 +43,8 @@ subroutine psb_s_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_s_cuda_hlg_csmm.F90 b/cuda/impl/psb_s_cuda_hlg_csmm.F90 index 0dc28c7f..248d0c13 100644 --- a/cuda/impl/psb_s_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_hlg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_s_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_s_cuda_hlg_csmv.F90 b/cuda/impl/psb_s_cuda_hlg_csmv.F90 index c029c908..5a6094ad 100644 --- a/cuda/impl/psb_s_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_s_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 index 94696949..e35de925 100644 --- a/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hlg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_s_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -43,6 +43,8 @@ subroutine psb_s_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_s_cuda_hybg_csmm.F90 b/cuda/impl/psb_s_cuda_hybg_csmm.F90 index f321ce8b..180cfa8f 100644 --- a/cuda/impl/psb_s_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_s_cuda_hybg_csmm.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_s_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_s_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_s_cuda_hybg_csmv.F90 b/cuda/impl/psb_s_cuda_hybg_csmv.F90 index 5f1a8c90..d8ff7555 100644 --- a/cuda/impl/psb_s_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_csmv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_s_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_s_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 index 6273f31a..f1517529 100644 --- a/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_s_cuda_hybg_vect_mv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_s_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_s_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +45,8 @@ subroutine psb_s_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + real(psb_spk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_z_cuda_csrg_csmm.F90 b/cuda/impl/psb_z_cuda_csrg_csmm.F90 index 731b7417..9b6cfb6d 100644 --- a/cuda/impl/psb_z_cuda_csrg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_csrg_csmm.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_z_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_z_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_z_cuda_csrg_csmv.F90 b/cuda/impl/psb_z_cuda_csrg_csmv.F90 index f6b01e7e..b83d6754 100644 --- a/cuda/impl/psb_z_cuda_csrg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_csmv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_z_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +41,7 @@ subroutine psb_z_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 b/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 index 977d7ff9..31710911 100644 --- a/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_csrg_vect_mv.F90 @@ -28,9 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! - - -subroutine psb_z_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +43,7 @@ subroutine psb_z_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft complex(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra diff --git a/cuda/impl/psb_z_cuda_diag_csmv.F90 b/cuda/impl/psb_z_cuda_diag_csmv.F90 index fde7147e..d3c334d4 100644 --- a/cuda/impl/psb_z_cuda_diag_csmv.F90 +++ b/cuda/impl/psb_z_cuda_diag_csmv.F90 @@ -30,7 +30,7 @@ ! -subroutine psb_z_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,7 @@ subroutine psb_z_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_z_cuda_diag_vect_mv.F90 b/cuda/impl/psb_z_cuda_diag_vect_mv.F90 index c6d11f04..d0634ed1 100644 --- a/cuda/impl/psb_z_cuda_diag_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_diag_vect_mv.F90 @@ -28,7 +28,7 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use diagdev_mod @@ -42,6 +42,8 @@ subroutine psb_z_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_z_cuda_elg_csmm.F90 b/cuda/impl/psb_z_cuda_elg_csmm.F90 index 4414f0e6..b2449ae8 100644 --- a/cuda/impl/psb_z_cuda_elg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_elg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_z_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_z_cuda_elg_csmv.F90 b/cuda/impl/psb_z_cuda_elg_csmv.F90 index 060147b9..2d278521 100644 --- a/cuda/impl/psb_z_cuda_elg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_elg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -41,6 +41,7 @@ subroutine psb_z_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_z_cuda_elg_vect_mv.F90 b/cuda/impl/psb_z_cuda_elg_vect_mv.F90 index 1b1a0720..adc7a504 100644 --- a/cuda/impl/psb_z_cuda_elg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_elg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use elldev_mod @@ -43,6 +43,8 @@ subroutine psb_z_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_z_cuda_hdiag_csmv.F90 b/cuda/impl/psb_z_cuda_hdiag_csmv.F90 index 187655a8..c87c870e 100644 --- a/cuda/impl/psb_z_cuda_hdiag_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -41,6 +41,7 @@ subroutine psb_z_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 b/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 index aef5628c..a49ff6f5 100644 --- a/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hdiag_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hdiagdev_mod @@ -43,6 +43,8 @@ subroutine psb_z_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_z_cuda_hlg_csmm.F90 b/cuda/impl/psb_z_cuda_hlg_csmm.F90 index 8eb30ef9..925bc27e 100644 --- a/cuda/impl/psb_z_cuda_hlg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_hlg_csmm.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_z_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_z_cuda_hlg_csmv.F90 b/cuda/impl/psb_z_cuda_hlg_csmv.F90 index 1a807016..fe088d1b 100644 --- a/cuda/impl/psb_z_cuda_hlg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_csmv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -41,6 +41,7 @@ subroutine psb_z_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer, intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 b/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 index e2e93b85..492b65bd 100644 --- a/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hlg_vect_mv.F90 @@ -29,7 +29,7 @@ ! POSSIBILITY OF SUCH DAMAGE. ! -subroutine psb_z_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use hlldev_mod @@ -43,6 +43,8 @@ subroutine psb_z_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/impl/psb_z_cuda_hybg_csmm.F90 b/cuda/impl/psb_z_cuda_hybg_csmm.F90 index bcd1874a..5da20605 100644 --- a/cuda/impl/psb_z_cuda_hybg_csmm.F90 +++ b/cuda/impl/psb_z_cuda_hybg_csmm.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_z_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_z_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc, nxy diff --git a/cuda/impl/psb_z_cuda_hybg_csmv.F90 b/cuda/impl/psb_z_cuda_hybg_csmv.F90 index d7c5cab6..3a53ecd3 100644 --- a/cuda/impl/psb_z_cuda_hybg_csmv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_csmv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_z_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -43,6 +43,7 @@ subroutine psb_z_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft character :: trans_ integer(psb_ipk_) :: i,j,k,m,n, nnz, ir, jc diff --git a/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 b/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 index 0cb1db22..aadb4077 100644 --- a/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 +++ b/cuda/impl/psb_z_cuda_hybg_vect_mv.F90 @@ -30,7 +30,7 @@ ! #if CUDA_SHORT_VERSION <= 10 -subroutine psb_z_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) +subroutine psb_z_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) use psb_base_mod use cusparse_mod @@ -45,6 +45,8 @@ subroutine psb_z_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft + complex(psb_dpk_), allocatable :: rx(:), ry(:) logical :: tra character :: trans_ diff --git a/cuda/psb_c_cuda_csrg_mat_mod.F90 b/cuda/psb_c_cuda_csrg_mat_mod.F90 index 1fdeec4a..44f3d5b8 100644 --- a/cuda/psb_c_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_c_cuda_csrg_mat_mod.F90 @@ -100,7 +100,7 @@ module psb_c_cuda_csrg_mat_mod interface - subroutine psb_c_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_csrg_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_csrg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -108,6 +108,7 @@ module psb_c_cuda_csrg_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_csrg_vect_mv end interface @@ -191,23 +192,25 @@ module psb_c_cuda_csrg_mat_mod end interface interface - subroutine psb_c_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_csrg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_csrg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_csrg_csmv end interface interface - subroutine psb_c_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_csrg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_csrg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_csrg_csmm end interface diff --git a/cuda/psb_c_cuda_diag_mat_mod.F90 b/cuda/psb_c_cuda_diag_mat_mod.F90 index 93ffe498..e8f79b6e 100644 --- a/cuda/psb_c_cuda_diag_mat_mod.F90 +++ b/cuda/psb_c_cuda_diag_mat_mod.F90 @@ -74,7 +74,7 @@ module psb_c_cuda_diag_mat_mod interface - subroutine psb_c_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_diag_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_diag_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -82,6 +82,7 @@ module psb_c_cuda_diag_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_diag_vect_mv end interface @@ -169,23 +170,25 @@ module psb_c_cuda_diag_mat_mod end interface interface - subroutine psb_c_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_diag_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_diag_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_diag_csmv end interface interface - subroutine psb_c_cuda_diag_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_diag_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_diag_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_diag_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_diag_csmm end interface diff --git a/cuda/psb_c_cuda_dnsg_mat_mod.F90 b/cuda/psb_c_cuda_dnsg_mat_mod.F90 index b0ca8c46..1516da4b 100644 --- a/cuda/psb_c_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_c_cuda_dnsg_mat_mod.F90 @@ -75,7 +75,7 @@ module psb_c_cuda_dnsg_mat_mod interface - subroutine psb_c_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_dnsg_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_dnsg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -83,6 +83,7 @@ module psb_c_cuda_dnsg_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_dnsg_vect_mv end interface !!$ @@ -169,23 +170,25 @@ module psb_c_cuda_dnsg_mat_mod end interface !!$ interface -!!$ subroutine psb_c_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_c_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_c_cuda_dnsg_sparse_mat, psb_spk_, psb_ipk_ !!$ class(psb_c_cuda_dnsg_sparse_mat), intent(in) :: a !!$ complex(psb_spk_), intent(in) :: alpha, beta, x(:) !!$ complex(psb_spk_), intent(inout) :: y(:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_c_cuda_dnsg_csmv !!$ end interface !!$ interface -!!$ subroutine psb_c_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_c_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_c_cuda_dnsg_sparse_mat, psb_spk_, psb_ipk_ !!$ class(psb_c_cuda_dnsg_sparse_mat), intent(in) :: a !!$ complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) !!$ complex(psb_spk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_c_cuda_dnsg_csmm !!$ end interface !!$ diff --git a/cuda/psb_c_cuda_elg_mat_mod.F90 b/cuda/psb_c_cuda_elg_mat_mod.F90 index c9b48005..7fe4226a 100644 --- a/cuda/psb_c_cuda_elg_mat_mod.F90 +++ b/cuda/psb_c_cuda_elg_mat_mod.F90 @@ -92,7 +92,7 @@ module psb_c_cuda_elg_mat_mod interface - subroutine psb_c_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_elg_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_elg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -100,6 +100,7 @@ module psb_c_cuda_elg_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_elg_vect_mv end interface @@ -218,23 +219,25 @@ module psb_c_cuda_elg_mat_mod end interface interface - subroutine psb_c_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_elg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_elg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_elg_csmv end interface interface - subroutine psb_c_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_elg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_elg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_elg_csmm end interface diff --git a/cuda/psb_c_cuda_hdiag_mat_mod.F90 b/cuda/psb_c_cuda_hdiag_mat_mod.F90 index f06e501e..a266c685 100644 --- a/cuda/psb_c_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_c_cuda_hdiag_mat_mod.F90 @@ -68,7 +68,7 @@ module psb_c_cuda_hdiag_mat_mod interface - subroutine psb_c_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hdiag_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_hdiag_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -76,6 +76,7 @@ module psb_c_cuda_hdiag_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hdiag_vect_mv end interface @@ -162,24 +163,26 @@ module psb_c_cuda_hdiag_mat_mod !!$ end interface !!$ interface - subroutine psb_c_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hdiag_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_hdiag_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hdiag_csmv end interface !!$ interface -!!$ subroutine psb_c_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_c_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_c_cuda_hdiag_sparse_mat, psb_spk_, psb_ipk_ !!$ class(psb_c_cuda_hdiag_sparse_mat), intent(in) :: a !!$ complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) !!$ complex(psb_spk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_c_cuda_hdiag_csmm !!$ end interface !!$ diff --git a/cuda/psb_c_cuda_hlg_mat_mod.F90 b/cuda/psb_c_cuda_hlg_mat_mod.F90 index e98f2474..f3516da9 100644 --- a/cuda/psb_c_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_c_cuda_hlg_mat_mod.F90 @@ -88,7 +88,7 @@ module psb_c_cuda_hlg_mat_mod interface - subroutine psb_c_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hlg_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_hlg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -96,6 +96,7 @@ module psb_c_cuda_hlg_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hlg_vect_mv end interface @@ -191,22 +192,24 @@ module psb_c_cuda_hlg_mat_mod end interface interface - subroutine psb_c_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hlg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_hlg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hlg_csmv end interface interface - subroutine psb_c_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hlg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_hlg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: ivshft character, optional, intent(in) :: trans end subroutine psb_c_cuda_hlg_csmm end interface diff --git a/cuda/psb_c_cuda_hybg_mat_mod.F90 b/cuda/psb_c_cuda_hybg_mat_mod.F90 index 1c94bc0f..dbaeda4e 100644 --- a/cuda/psb_c_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_c_cuda_hybg_mat_mod.F90 @@ -87,7 +87,7 @@ module psb_c_cuda_hybg_mat_mod end interface interface - subroutine psb_c_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hybg_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ class(psb_c_cuda_hybg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta @@ -95,6 +95,7 @@ module psb_c_cuda_hybg_mat_mod class(psb_c_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hybg_vect_mv end interface @@ -170,23 +171,25 @@ module psb_c_cuda_hybg_mat_mod end interface interface - subroutine psb_c_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hybg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_hybg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hybg_csmv end interface interface - subroutine psb_c_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_cuda_hybg_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_cuda_hybg_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_cuda_hybg_csmm end interface diff --git a/cuda/psb_d_cuda_csrg_mat_mod.F90 b/cuda/psb_d_cuda_csrg_mat_mod.F90 index 101959bd..9633299d 100644 --- a/cuda/psb_d_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_d_cuda_csrg_mat_mod.F90 @@ -100,7 +100,7 @@ module psb_d_cuda_csrg_mat_mod interface - subroutine psb_d_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_csrg_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_csrg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -108,6 +108,7 @@ module psb_d_cuda_csrg_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_csrg_vect_mv end interface @@ -191,23 +192,25 @@ module psb_d_cuda_csrg_mat_mod end interface interface - subroutine psb_d_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_csrg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_csrg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_csrg_csmv end interface interface - subroutine psb_d_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_csrg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_csrg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_csrg_csmm end interface diff --git a/cuda/psb_d_cuda_diag_mat_mod.F90 b/cuda/psb_d_cuda_diag_mat_mod.F90 index 11e4e349..515ef70b 100644 --- a/cuda/psb_d_cuda_diag_mat_mod.F90 +++ b/cuda/psb_d_cuda_diag_mat_mod.F90 @@ -74,7 +74,7 @@ module psb_d_cuda_diag_mat_mod interface - subroutine psb_d_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_diag_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_diag_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -82,6 +82,7 @@ module psb_d_cuda_diag_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_diag_vect_mv end interface @@ -169,23 +170,25 @@ module psb_d_cuda_diag_mat_mod end interface interface - subroutine psb_d_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_diag_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_diag_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_diag_csmv end interface interface - subroutine psb_d_cuda_diag_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_diag_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_diag_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_diag_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_diag_csmm end interface diff --git a/cuda/psb_d_cuda_dnsg_mat_mod.F90 b/cuda/psb_d_cuda_dnsg_mat_mod.F90 index f11e7823..a7647159 100644 --- a/cuda/psb_d_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_d_cuda_dnsg_mat_mod.F90 @@ -75,7 +75,7 @@ module psb_d_cuda_dnsg_mat_mod interface - subroutine psb_d_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_dnsg_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_dnsg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -83,6 +83,7 @@ module psb_d_cuda_dnsg_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_dnsg_vect_mv end interface !!$ @@ -169,23 +170,25 @@ module psb_d_cuda_dnsg_mat_mod end interface !!$ interface -!!$ subroutine psb_d_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_d_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_d_cuda_dnsg_sparse_mat, psb_dpk_, psb_ipk_ !!$ class(psb_d_cuda_dnsg_sparse_mat), intent(in) :: a !!$ real(psb_dpk_), intent(in) :: alpha, beta, x(:) !!$ real(psb_dpk_), intent(inout) :: y(:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_d_cuda_dnsg_csmv !!$ end interface !!$ interface -!!$ subroutine psb_d_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_d_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_d_cuda_dnsg_sparse_mat, psb_dpk_, psb_ipk_ !!$ class(psb_d_cuda_dnsg_sparse_mat), intent(in) :: a !!$ real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) !!$ real(psb_dpk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_d_cuda_dnsg_csmm !!$ end interface !!$ diff --git a/cuda/psb_d_cuda_elg_mat_mod.F90 b/cuda/psb_d_cuda_elg_mat_mod.F90 index 1af80f2a..7c231577 100644 --- a/cuda/psb_d_cuda_elg_mat_mod.F90 +++ b/cuda/psb_d_cuda_elg_mat_mod.F90 @@ -92,7 +92,7 @@ module psb_d_cuda_elg_mat_mod interface - subroutine psb_d_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_elg_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_elg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -100,6 +100,7 @@ module psb_d_cuda_elg_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_elg_vect_mv end interface @@ -218,23 +219,25 @@ module psb_d_cuda_elg_mat_mod end interface interface - subroutine psb_d_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_elg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_elg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_elg_csmv end interface interface - subroutine psb_d_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_elg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_elg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_elg_csmm end interface diff --git a/cuda/psb_d_cuda_hdiag_mat_mod.F90 b/cuda/psb_d_cuda_hdiag_mat_mod.F90 index 46b63b43..54bca75f 100644 --- a/cuda/psb_d_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_d_cuda_hdiag_mat_mod.F90 @@ -68,7 +68,7 @@ module psb_d_cuda_hdiag_mat_mod interface - subroutine psb_d_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hdiag_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_hdiag_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -76,6 +76,7 @@ module psb_d_cuda_hdiag_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hdiag_vect_mv end interface @@ -162,24 +163,26 @@ module psb_d_cuda_hdiag_mat_mod !!$ end interface !!$ interface - subroutine psb_d_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hdiag_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_hdiag_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hdiag_csmv end interface !!$ interface -!!$ subroutine psb_d_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_d_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_d_cuda_hdiag_sparse_mat, psb_dpk_, psb_ipk_ !!$ class(psb_d_cuda_hdiag_sparse_mat), intent(in) :: a !!$ real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) !!$ real(psb_dpk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_d_cuda_hdiag_csmm !!$ end interface !!$ diff --git a/cuda/psb_d_cuda_hlg_mat_mod.F90 b/cuda/psb_d_cuda_hlg_mat_mod.F90 index 6627f824..8832c84b 100644 --- a/cuda/psb_d_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_d_cuda_hlg_mat_mod.F90 @@ -88,7 +88,7 @@ module psb_d_cuda_hlg_mat_mod interface - subroutine psb_d_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hlg_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_hlg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -96,6 +96,7 @@ module psb_d_cuda_hlg_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hlg_vect_mv end interface @@ -191,22 +192,24 @@ module psb_d_cuda_hlg_mat_mod end interface interface - subroutine psb_d_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hlg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_hlg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hlg_csmv end interface interface - subroutine psb_d_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hlg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_hlg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: ivshft character, optional, intent(in) :: trans end subroutine psb_d_cuda_hlg_csmm end interface diff --git a/cuda/psb_d_cuda_hybg_mat_mod.F90 b/cuda/psb_d_cuda_hybg_mat_mod.F90 index 065c0db3..9927d391 100644 --- a/cuda/psb_d_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_d_cuda_hybg_mat_mod.F90 @@ -87,7 +87,7 @@ module psb_d_cuda_hybg_mat_mod end interface interface - subroutine psb_d_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hybg_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ class(psb_d_cuda_hybg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta @@ -95,6 +95,7 @@ module psb_d_cuda_hybg_mat_mod class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hybg_vect_mv end interface @@ -170,23 +171,25 @@ module psb_d_cuda_hybg_mat_mod end interface interface - subroutine psb_d_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hybg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_hybg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hybg_csmv end interface interface - subroutine psb_d_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_cuda_hybg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_cuda_hybg_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_cuda_hybg_csmm end interface diff --git a/cuda/psb_i_cuda_csrg_mat_mod.F90 b/cuda/psb_i_cuda_csrg_mat_mod.F90 index 0867a8a5..b2baaf59 100644 --- a/cuda/psb_i_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_i_cuda_csrg_mat_mod.F90 @@ -100,7 +100,7 @@ module psb_i_cuda_csrg_mat_mod interface - subroutine psb_i_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_csrg_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_csrg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -108,6 +108,7 @@ module psb_i_cuda_csrg_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_csrg_vect_mv end interface @@ -191,23 +192,25 @@ module psb_i_cuda_csrg_mat_mod end interface interface - subroutine psb_i_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_csrg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_csrg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:) integer(psb_ipk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_csrg_csmv end interface interface - subroutine psb_i_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_csrg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_csrg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) integer(psb_ipk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_csrg_csmm end interface diff --git a/cuda/psb_i_cuda_diag_mat_mod.F90 b/cuda/psb_i_cuda_diag_mat_mod.F90 index 98090f06..8a4a6b53 100644 --- a/cuda/psb_i_cuda_diag_mat_mod.F90 +++ b/cuda/psb_i_cuda_diag_mat_mod.F90 @@ -74,7 +74,7 @@ module psb_i_cuda_diag_mat_mod interface - subroutine psb_i_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_diag_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_diag_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -82,6 +82,7 @@ module psb_i_cuda_diag_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_diag_vect_mv end interface @@ -169,23 +170,25 @@ module psb_i_cuda_diag_mat_mod end interface interface - subroutine psb_i_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_diag_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_diag_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:) integer(psb_ipk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_diag_csmv end interface interface - subroutine psb_i_cuda_diag_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_diag_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_diag_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_diag_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) integer(psb_ipk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_diag_csmm end interface diff --git a/cuda/psb_i_cuda_dnsg_mat_mod.F90 b/cuda/psb_i_cuda_dnsg_mat_mod.F90 index 6586d115..81e13a6d 100644 --- a/cuda/psb_i_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_i_cuda_dnsg_mat_mod.F90 @@ -75,7 +75,7 @@ module psb_i_cuda_dnsg_mat_mod interface - subroutine psb_i_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_dnsg_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_dnsg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -83,6 +83,7 @@ module psb_i_cuda_dnsg_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_dnsg_vect_mv end interface !!$ @@ -169,23 +170,25 @@ module psb_i_cuda_dnsg_mat_mod end interface !!$ interface -!!$ subroutine psb_i_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_i_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_i_cuda_dnsg_sparse_mat, psb_ipk_, psb_ipk_ !!$ class(psb_i_cuda_dnsg_sparse_mat), intent(in) :: a !!$ integer(psb_ipk_), intent(in) :: alpha, beta, x(:) !!$ integer(psb_ipk_), intent(inout) :: y(:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_i_cuda_dnsg_csmv !!$ end interface !!$ interface -!!$ subroutine psb_i_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_i_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_i_cuda_dnsg_sparse_mat, psb_ipk_, psb_ipk_ !!$ class(psb_i_cuda_dnsg_sparse_mat), intent(in) :: a !!$ integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) !!$ integer(psb_ipk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_i_cuda_dnsg_csmm !!$ end interface !!$ diff --git a/cuda/psb_i_cuda_elg_mat_mod.F90 b/cuda/psb_i_cuda_elg_mat_mod.F90 index 48311eea..71cfb5ee 100644 --- a/cuda/psb_i_cuda_elg_mat_mod.F90 +++ b/cuda/psb_i_cuda_elg_mat_mod.F90 @@ -92,7 +92,7 @@ module psb_i_cuda_elg_mat_mod interface - subroutine psb_i_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_elg_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_elg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -100,6 +100,7 @@ module psb_i_cuda_elg_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_elg_vect_mv end interface @@ -218,23 +219,25 @@ module psb_i_cuda_elg_mat_mod end interface interface - subroutine psb_i_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_elg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_elg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:) integer(psb_ipk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_elg_csmv end interface interface - subroutine psb_i_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_elg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_elg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) integer(psb_ipk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_elg_csmm end interface diff --git a/cuda/psb_i_cuda_hdiag_mat_mod.F90 b/cuda/psb_i_cuda_hdiag_mat_mod.F90 index 22277f3a..81e62d93 100644 --- a/cuda/psb_i_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_i_cuda_hdiag_mat_mod.F90 @@ -68,7 +68,7 @@ module psb_i_cuda_hdiag_mat_mod interface - subroutine psb_i_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hdiag_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_hdiag_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -76,6 +76,7 @@ module psb_i_cuda_hdiag_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hdiag_vect_mv end interface @@ -162,24 +163,26 @@ module psb_i_cuda_hdiag_mat_mod !!$ end interface !!$ interface - subroutine psb_i_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hdiag_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_hdiag_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:) integer(psb_ipk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hdiag_csmv end interface !!$ interface -!!$ subroutine psb_i_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_i_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_i_cuda_hdiag_sparse_mat, psb_ipk_, psb_ipk_ !!$ class(psb_i_cuda_hdiag_sparse_mat), intent(in) :: a !!$ integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) !!$ integer(psb_ipk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_i_cuda_hdiag_csmm !!$ end interface !!$ diff --git a/cuda/psb_i_cuda_hlg_mat_mod.F90 b/cuda/psb_i_cuda_hlg_mat_mod.F90 index b4e3046e..f69da25a 100644 --- a/cuda/psb_i_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_i_cuda_hlg_mat_mod.F90 @@ -88,7 +88,7 @@ module psb_i_cuda_hlg_mat_mod interface - subroutine psb_i_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hlg_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_hlg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -96,6 +96,7 @@ module psb_i_cuda_hlg_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hlg_vect_mv end interface @@ -191,22 +192,24 @@ module psb_i_cuda_hlg_mat_mod end interface interface - subroutine psb_i_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hlg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_hlg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:) integer(psb_ipk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hlg_csmv end interface interface - subroutine psb_i_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hlg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_hlg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) integer(psb_ipk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: ivshft character, optional, intent(in) :: trans end subroutine psb_i_cuda_hlg_csmm end interface diff --git a/cuda/psb_i_cuda_hybg_mat_mod.F90 b/cuda/psb_i_cuda_hybg_mat_mod.F90 index f6fc3110..e426b4eb 100644 --- a/cuda/psb_i_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_i_cuda_hybg_mat_mod.F90 @@ -87,7 +87,7 @@ module psb_i_cuda_hybg_mat_mod end interface interface - subroutine psb_i_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hybg_sparse_mat, psb_ipk_, psb_i_base_vect_type, psb_ipk_ class(psb_i_cuda_hybg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta @@ -95,6 +95,7 @@ module psb_i_cuda_hybg_mat_mod class(psb_i_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hybg_vect_mv end interface @@ -170,23 +171,25 @@ module psb_i_cuda_hybg_mat_mod end interface interface - subroutine psb_i_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hybg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_hybg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:) integer(psb_ipk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hybg_csmv end interface interface - subroutine psb_i_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_i_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_i_cuda_hybg_sparse_mat, psb_ipk_, psb_ipk_ class(psb_i_cuda_hybg_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: alpha, beta, x(:,:) integer(psb_ipk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_i_cuda_hybg_csmm end interface diff --git a/cuda/psb_s_cuda_csrg_mat_mod.F90 b/cuda/psb_s_cuda_csrg_mat_mod.F90 index bd654dbb..9aa7ed3e 100644 --- a/cuda/psb_s_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_s_cuda_csrg_mat_mod.F90 @@ -100,7 +100,7 @@ module psb_s_cuda_csrg_mat_mod interface - subroutine psb_s_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_csrg_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_csrg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -108,6 +108,7 @@ module psb_s_cuda_csrg_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_csrg_vect_mv end interface @@ -191,23 +192,25 @@ module psb_s_cuda_csrg_mat_mod end interface interface - subroutine psb_s_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_csrg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_csrg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_csrg_csmv end interface interface - subroutine psb_s_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_csrg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_csrg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_csrg_csmm end interface diff --git a/cuda/psb_s_cuda_diag_mat_mod.F90 b/cuda/psb_s_cuda_diag_mat_mod.F90 index b13a8502..620b4d24 100644 --- a/cuda/psb_s_cuda_diag_mat_mod.F90 +++ b/cuda/psb_s_cuda_diag_mat_mod.F90 @@ -74,7 +74,7 @@ module psb_s_cuda_diag_mat_mod interface - subroutine psb_s_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_diag_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_diag_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -82,6 +82,7 @@ module psb_s_cuda_diag_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_diag_vect_mv end interface @@ -169,23 +170,25 @@ module psb_s_cuda_diag_mat_mod end interface interface - subroutine psb_s_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_diag_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_diag_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_diag_csmv end interface interface - subroutine psb_s_cuda_diag_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_diag_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_diag_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_diag_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_diag_csmm end interface diff --git a/cuda/psb_s_cuda_dnsg_mat_mod.F90 b/cuda/psb_s_cuda_dnsg_mat_mod.F90 index 8193655e..a6deb8b9 100644 --- a/cuda/psb_s_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_s_cuda_dnsg_mat_mod.F90 @@ -75,7 +75,7 @@ module psb_s_cuda_dnsg_mat_mod interface - subroutine psb_s_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_dnsg_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_dnsg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -83,6 +83,7 @@ module psb_s_cuda_dnsg_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_dnsg_vect_mv end interface !!$ @@ -169,23 +170,25 @@ module psb_s_cuda_dnsg_mat_mod end interface !!$ interface -!!$ subroutine psb_s_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_s_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_s_cuda_dnsg_sparse_mat, psb_spk_, psb_ipk_ !!$ class(psb_s_cuda_dnsg_sparse_mat), intent(in) :: a !!$ real(psb_spk_), intent(in) :: alpha, beta, x(:) !!$ real(psb_spk_), intent(inout) :: y(:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_s_cuda_dnsg_csmv !!$ end interface !!$ interface -!!$ subroutine psb_s_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_s_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_s_cuda_dnsg_sparse_mat, psb_spk_, psb_ipk_ !!$ class(psb_s_cuda_dnsg_sparse_mat), intent(in) :: a !!$ real(psb_spk_), intent(in) :: alpha, beta, x(:,:) !!$ real(psb_spk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_s_cuda_dnsg_csmm !!$ end interface !!$ diff --git a/cuda/psb_s_cuda_elg_mat_mod.F90 b/cuda/psb_s_cuda_elg_mat_mod.F90 index 1aa9d36d..14cff6f2 100644 --- a/cuda/psb_s_cuda_elg_mat_mod.F90 +++ b/cuda/psb_s_cuda_elg_mat_mod.F90 @@ -92,7 +92,7 @@ module psb_s_cuda_elg_mat_mod interface - subroutine psb_s_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_elg_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_elg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -100,6 +100,7 @@ module psb_s_cuda_elg_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_elg_vect_mv end interface @@ -218,23 +219,25 @@ module psb_s_cuda_elg_mat_mod end interface interface - subroutine psb_s_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_elg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_elg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_elg_csmv end interface interface - subroutine psb_s_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_elg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_elg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_elg_csmm end interface diff --git a/cuda/psb_s_cuda_hdiag_mat_mod.F90 b/cuda/psb_s_cuda_hdiag_mat_mod.F90 index cac72c86..0c61c114 100644 --- a/cuda/psb_s_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_s_cuda_hdiag_mat_mod.F90 @@ -68,7 +68,7 @@ module psb_s_cuda_hdiag_mat_mod interface - subroutine psb_s_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hdiag_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_hdiag_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -76,6 +76,7 @@ module psb_s_cuda_hdiag_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hdiag_vect_mv end interface @@ -162,24 +163,26 @@ module psb_s_cuda_hdiag_mat_mod !!$ end interface !!$ interface - subroutine psb_s_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hdiag_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_hdiag_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hdiag_csmv end interface !!$ interface -!!$ subroutine psb_s_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_s_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_s_cuda_hdiag_sparse_mat, psb_spk_, psb_ipk_ !!$ class(psb_s_cuda_hdiag_sparse_mat), intent(in) :: a !!$ real(psb_spk_), intent(in) :: alpha, beta, x(:,:) !!$ real(psb_spk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_s_cuda_hdiag_csmm !!$ end interface !!$ diff --git a/cuda/psb_s_cuda_hlg_mat_mod.F90 b/cuda/psb_s_cuda_hlg_mat_mod.F90 index 4f7b4b6f..1ceb4b7e 100644 --- a/cuda/psb_s_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_s_cuda_hlg_mat_mod.F90 @@ -88,7 +88,7 @@ module psb_s_cuda_hlg_mat_mod interface - subroutine psb_s_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hlg_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_hlg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -96,6 +96,7 @@ module psb_s_cuda_hlg_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hlg_vect_mv end interface @@ -191,22 +192,24 @@ module psb_s_cuda_hlg_mat_mod end interface interface - subroutine psb_s_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hlg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_hlg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hlg_csmv end interface interface - subroutine psb_s_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hlg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_hlg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: ivshft character, optional, intent(in) :: trans end subroutine psb_s_cuda_hlg_csmm end interface diff --git a/cuda/psb_s_cuda_hybg_mat_mod.F90 b/cuda/psb_s_cuda_hybg_mat_mod.F90 index f1446b15..5f83978d 100644 --- a/cuda/psb_s_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_s_cuda_hybg_mat_mod.F90 @@ -87,7 +87,7 @@ module psb_s_cuda_hybg_mat_mod end interface interface - subroutine psb_s_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hybg_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ class(psb_s_cuda_hybg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta @@ -95,6 +95,7 @@ module psb_s_cuda_hybg_mat_mod class(psb_s_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hybg_vect_mv end interface @@ -170,23 +171,25 @@ module psb_s_cuda_hybg_mat_mod end interface interface - subroutine psb_s_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hybg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_hybg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hybg_csmv end interface interface - subroutine psb_s_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_cuda_hybg_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_cuda_hybg_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_cuda_hybg_csmm end interface diff --git a/cuda/psb_z_cuda_csrg_mat_mod.F90 b/cuda/psb_z_cuda_csrg_mat_mod.F90 index 389149aa..3737208b 100644 --- a/cuda/psb_z_cuda_csrg_mat_mod.F90 +++ b/cuda/psb_z_cuda_csrg_mat_mod.F90 @@ -100,7 +100,7 @@ module psb_z_cuda_csrg_mat_mod interface - subroutine psb_z_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_csrg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_csrg_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_csrg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -108,6 +108,7 @@ module psb_z_cuda_csrg_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_csrg_vect_mv end interface @@ -191,23 +192,25 @@ module psb_z_cuda_csrg_mat_mod end interface interface - subroutine psb_z_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_csrg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_csrg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_csrg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_csrg_csmv end interface interface - subroutine psb_z_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_csrg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_csrg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_csrg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_csrg_csmm end interface diff --git a/cuda/psb_z_cuda_diag_mat_mod.F90 b/cuda/psb_z_cuda_diag_mat_mod.F90 index 592d50b2..493321cf 100644 --- a/cuda/psb_z_cuda_diag_mat_mod.F90 +++ b/cuda/psb_z_cuda_diag_mat_mod.F90 @@ -74,7 +74,7 @@ module psb_z_cuda_diag_mat_mod interface - subroutine psb_z_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_diag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_diag_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_diag_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -82,6 +82,7 @@ module psb_z_cuda_diag_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_diag_vect_mv end interface @@ -169,23 +170,25 @@ module psb_z_cuda_diag_mat_mod end interface interface - subroutine psb_z_cuda_diag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_diag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_diag_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_diag_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_diag_csmv end interface interface - subroutine psb_z_cuda_diag_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_diag_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_diag_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_diag_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_diag_csmm end interface diff --git a/cuda/psb_z_cuda_dnsg_mat_mod.F90 b/cuda/psb_z_cuda_dnsg_mat_mod.F90 index 3669d6ac..e4f8f79b 100644 --- a/cuda/psb_z_cuda_dnsg_mat_mod.F90 +++ b/cuda/psb_z_cuda_dnsg_mat_mod.F90 @@ -75,7 +75,7 @@ module psb_z_cuda_dnsg_mat_mod interface - subroutine psb_z_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_dnsg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_dnsg_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_dnsg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -83,6 +83,7 @@ module psb_z_cuda_dnsg_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_dnsg_vect_mv end interface !!$ @@ -169,23 +170,25 @@ module psb_z_cuda_dnsg_mat_mod end interface !!$ interface -!!$ subroutine psb_z_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_z_cuda_dnsg_csmv(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_z_cuda_dnsg_sparse_mat, psb_dpk_, psb_ipk_ !!$ class(psb_z_cuda_dnsg_sparse_mat), intent(in) :: a !!$ complex(psb_dpk_), intent(in) :: alpha, beta, x(:) !!$ complex(psb_dpk_), intent(inout) :: y(:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_z_cuda_dnsg_csmv !!$ end interface !!$ interface -!!$ subroutine psb_z_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_z_cuda_dnsg_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_z_cuda_dnsg_sparse_mat, psb_dpk_, psb_ipk_ !!$ class(psb_z_cuda_dnsg_sparse_mat), intent(in) :: a !!$ complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) !!$ complex(psb_dpk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_z_cuda_dnsg_csmm !!$ end interface !!$ diff --git a/cuda/psb_z_cuda_elg_mat_mod.F90 b/cuda/psb_z_cuda_elg_mat_mod.F90 index bd36e4b6..9291de45 100644 --- a/cuda/psb_z_cuda_elg_mat_mod.F90 +++ b/cuda/psb_z_cuda_elg_mat_mod.F90 @@ -92,7 +92,7 @@ module psb_z_cuda_elg_mat_mod interface - subroutine psb_z_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_elg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_elg_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_elg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -100,6 +100,7 @@ module psb_z_cuda_elg_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_elg_vect_mv end interface @@ -218,23 +219,25 @@ module psb_z_cuda_elg_mat_mod end interface interface - subroutine psb_z_cuda_elg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_elg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_elg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_elg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_elg_csmv end interface interface - subroutine psb_z_cuda_elg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_elg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_elg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_elg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_elg_csmm end interface diff --git a/cuda/psb_z_cuda_hdiag_mat_mod.F90 b/cuda/psb_z_cuda_hdiag_mat_mod.F90 index 70897664..c4b11eff 100644 --- a/cuda/psb_z_cuda_hdiag_mat_mod.F90 +++ b/cuda/psb_z_cuda_hdiag_mat_mod.F90 @@ -68,7 +68,7 @@ module psb_z_cuda_hdiag_mat_mod interface - subroutine psb_z_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hdiag_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hdiag_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_hdiag_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -76,6 +76,7 @@ module psb_z_cuda_hdiag_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hdiag_vect_mv end interface @@ -162,24 +163,26 @@ module psb_z_cuda_hdiag_mat_mod !!$ end interface !!$ interface - subroutine psb_z_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hdiag_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hdiag_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_hdiag_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hdiag_csmv end interface !!$ interface -!!$ subroutine psb_z_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans) +!!$ subroutine psb_z_cuda_hdiag_csmm(alpha,a,x,beta,y,info,trans,ivshft) !!$ import :: psb_z_cuda_hdiag_sparse_mat, psb_dpk_, psb_ipk_ !!$ class(psb_z_cuda_hdiag_sparse_mat), intent(in) :: a !!$ complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) !!$ complex(psb_dpk_), intent(inout) :: y(:,:) !!$ integer(psb_ipk_), intent(out) :: info !!$ character, optional, intent(in) :: trans +!!$ integer(psb_ipk_), optional, intent(in) :: ivshft !!$ end subroutine psb_z_cuda_hdiag_csmm !!$ end interface !!$ diff --git a/cuda/psb_z_cuda_hlg_mat_mod.F90 b/cuda/psb_z_cuda_hlg_mat_mod.F90 index 2acf43f1..f66eee0a 100644 --- a/cuda/psb_z_cuda_hlg_mat_mod.F90 +++ b/cuda/psb_z_cuda_hlg_mat_mod.F90 @@ -88,7 +88,7 @@ module psb_z_cuda_hlg_mat_mod interface - subroutine psb_z_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hlg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hlg_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_hlg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -96,6 +96,7 @@ module psb_z_cuda_hlg_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hlg_vect_mv end interface @@ -191,22 +192,24 @@ module psb_z_cuda_hlg_mat_mod end interface interface - subroutine psb_z_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hlg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hlg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_hlg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hlg_csmv end interface interface - subroutine psb_z_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hlg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hlg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_hlg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_), optional, intent(in) :: ivshft character, optional, intent(in) :: trans end subroutine psb_z_cuda_hlg_csmm end interface diff --git a/cuda/psb_z_cuda_hybg_mat_mod.F90 b/cuda/psb_z_cuda_hybg_mat_mod.F90 index 96620300..b634ce94 100644 --- a/cuda/psb_z_cuda_hybg_mat_mod.F90 +++ b/cuda/psb_z_cuda_hybg_mat_mod.F90 @@ -87,7 +87,7 @@ module psb_z_cuda_hybg_mat_mod end interface interface - subroutine psb_z_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hybg_vect_mv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hybg_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ class(psb_z_cuda_hybg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta @@ -95,6 +95,7 @@ module psb_z_cuda_hybg_mat_mod class(psb_z_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hybg_vect_mv end interface @@ -170,23 +171,25 @@ module psb_z_cuda_hybg_mat_mod end interface interface - subroutine psb_z_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hybg_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hybg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_hybg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hybg_csmv end interface interface - subroutine psb_z_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_cuda_hybg_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_cuda_hybg_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_cuda_hybg_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_cuda_hybg_csmm end interface diff --git a/ext/psb_c_dia_mat_mod.f90 b/ext/psb_c_dia_mat_mod.f90 index 8311487b..80e917be 100644 --- a/ext/psb_c_dia_mat_mod.f90 +++ b/ext/psb_c_dia_mat_mod.f90 @@ -286,21 +286,23 @@ module psb_c_dia_mat_mod end interface interface - subroutine psb_c_dia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_dia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_dia_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_dia_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_dia_csmv - subroutine psb_c_dia_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_dia_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_dia_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_dia_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_dia_csmm end interface diff --git a/ext/psb_c_dns_mat_mod.f90 b/ext/psb_c_dns_mat_mod.f90 index 5e5a191d..a07e0a4f 100644 --- a/ext/psb_c_dns_mat_mod.f90 +++ b/ext/psb_c_dns_mat_mod.f90 @@ -284,13 +284,14 @@ module psb_c_dns_mat_mod !! ! interface - subroutine psb_c_dns_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_dns_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_dns_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_dns_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_dns_csmv end interface @@ -312,13 +313,14 @@ module psb_c_dns_mat_mod !! ! interface - subroutine psb_c_dns_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_dns_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_dns_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_dns_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_dns_csmm end interface diff --git a/ext/psb_c_ell_mat_mod.f90 b/ext/psb_c_ell_mat_mod.f90 index 6954946f..5102f244 100644 --- a/ext/psb_c_ell_mat_mod.f90 +++ b/ext/psb_c_ell_mat_mod.f90 @@ -305,21 +305,23 @@ module psb_c_ell_mat_mod end interface interface - subroutine psb_c_ell_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_ell_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_ell_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_ell_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_ell_csmv - subroutine psb_c_ell_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_ell_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_ell_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_ell_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_ell_csmm end interface diff --git a/ext/psb_c_hdia_mat_mod.f90 b/ext/psb_c_hdia_mat_mod.f90 index fbac05de..e627d085 100644 --- a/ext/psb_c_hdia_mat_mod.f90 +++ b/ext/psb_c_hdia_mat_mod.f90 @@ -296,13 +296,14 @@ module psb_c_hdia_mat_mod !!$ end interface interface - subroutine psb_c_hdia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_hdia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_hdia_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_hdia_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_hdia_csmv !!$ subroutine psb_c_hdia_csmm(alpha,a,x,beta,y,info,trans) !!$ import :: psb_c_hdia_sparse_mat, psb_spk_, psb_ipk_ diff --git a/ext/psb_c_hll_mat_mod.f90 b/ext/psb_c_hll_mat_mod.f90 index 966b60f5..b7b01fde 100644 --- a/ext/psb_c_hll_mat_mod.f90 +++ b/ext/psb_c_hll_mat_mod.f90 @@ -303,21 +303,23 @@ module psb_c_hll_mat_mod end interface interface - subroutine psb_c_hll_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_c_hll_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_hll_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_hll_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_hll_csmv - subroutine psb_c_hll_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_c_hll_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_c_hll_sparse_mat, psb_spk_, psb_ipk_ class(psb_c_hll_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_c_hll_csmm end interface diff --git a/ext/psb_d_dia_mat_mod.f90 b/ext/psb_d_dia_mat_mod.f90 index 7df615ac..879340a5 100644 --- a/ext/psb_d_dia_mat_mod.f90 +++ b/ext/psb_d_dia_mat_mod.f90 @@ -286,21 +286,23 @@ module psb_d_dia_mat_mod end interface interface - subroutine psb_d_dia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_dia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_dia_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_dia_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_dia_csmv - subroutine psb_d_dia_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_dia_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_dia_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_dia_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_dia_csmm end interface diff --git a/ext/psb_d_dns_mat_mod.f90 b/ext/psb_d_dns_mat_mod.f90 index f8c977bc..fe0b2237 100644 --- a/ext/psb_d_dns_mat_mod.f90 +++ b/ext/psb_d_dns_mat_mod.f90 @@ -284,13 +284,14 @@ module psb_d_dns_mat_mod !! ! interface - subroutine psb_d_dns_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_dns_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_dns_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_dns_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_dns_csmv end interface @@ -312,13 +313,14 @@ module psb_d_dns_mat_mod !! ! interface - subroutine psb_d_dns_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_dns_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_dns_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_dns_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_dns_csmm end interface diff --git a/ext/psb_d_ell_mat_mod.f90 b/ext/psb_d_ell_mat_mod.f90 index cc945baf..e03d0196 100644 --- a/ext/psb_d_ell_mat_mod.f90 +++ b/ext/psb_d_ell_mat_mod.f90 @@ -305,21 +305,23 @@ module psb_d_ell_mat_mod end interface interface - subroutine psb_d_ell_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_ell_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_ell_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_ell_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_ell_csmv - subroutine psb_d_ell_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_ell_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_ell_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_ell_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_ell_csmm end interface diff --git a/ext/psb_d_hdia_mat_mod.f90 b/ext/psb_d_hdia_mat_mod.f90 index 25bc6898..a9a80538 100644 --- a/ext/psb_d_hdia_mat_mod.f90 +++ b/ext/psb_d_hdia_mat_mod.f90 @@ -296,13 +296,14 @@ module psb_d_hdia_mat_mod !!$ end interface interface - subroutine psb_d_hdia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_hdia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_hdia_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_hdia_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_hdia_csmv !!$ subroutine psb_d_hdia_csmm(alpha,a,x,beta,y,info,trans) !!$ import :: psb_d_hdia_sparse_mat, psb_dpk_, psb_ipk_ diff --git a/ext/psb_d_hll_mat_mod.f90 b/ext/psb_d_hll_mat_mod.f90 index acc3b312..b782149d 100644 --- a/ext/psb_d_hll_mat_mod.f90 +++ b/ext/psb_d_hll_mat_mod.f90 @@ -303,21 +303,23 @@ module psb_d_hll_mat_mod end interface interface - subroutine psb_d_hll_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_d_hll_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_hll_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_hll_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_hll_csmv - subroutine psb_d_hll_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_d_hll_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_d_hll_sparse_mat, psb_dpk_, psb_ipk_ class(psb_d_hll_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_d_hll_csmm end interface diff --git a/ext/psb_s_dia_mat_mod.f90 b/ext/psb_s_dia_mat_mod.f90 index 3a11d959..f08145e7 100644 --- a/ext/psb_s_dia_mat_mod.f90 +++ b/ext/psb_s_dia_mat_mod.f90 @@ -286,21 +286,23 @@ module psb_s_dia_mat_mod end interface interface - subroutine psb_s_dia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_dia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_dia_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_dia_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_dia_csmv - subroutine psb_s_dia_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_dia_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_dia_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_dia_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_dia_csmm end interface diff --git a/ext/psb_s_dns_mat_mod.f90 b/ext/psb_s_dns_mat_mod.f90 index e9ea5f26..cfb8bc4f 100644 --- a/ext/psb_s_dns_mat_mod.f90 +++ b/ext/psb_s_dns_mat_mod.f90 @@ -284,13 +284,14 @@ module psb_s_dns_mat_mod !! ! interface - subroutine psb_s_dns_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_dns_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_dns_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_dns_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_dns_csmv end interface @@ -312,13 +313,14 @@ module psb_s_dns_mat_mod !! ! interface - subroutine psb_s_dns_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_dns_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_dns_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_dns_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_dns_csmm end interface diff --git a/ext/psb_s_ell_mat_mod.f90 b/ext/psb_s_ell_mat_mod.f90 index 9e3dd8b4..e732fba9 100644 --- a/ext/psb_s_ell_mat_mod.f90 +++ b/ext/psb_s_ell_mat_mod.f90 @@ -305,21 +305,23 @@ module psb_s_ell_mat_mod end interface interface - subroutine psb_s_ell_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_ell_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_ell_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_ell_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_ell_csmv - subroutine psb_s_ell_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_ell_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_ell_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_ell_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_ell_csmm end interface diff --git a/ext/psb_s_hdia_mat_mod.f90 b/ext/psb_s_hdia_mat_mod.f90 index b7b2b110..1a12d03d 100644 --- a/ext/psb_s_hdia_mat_mod.f90 +++ b/ext/psb_s_hdia_mat_mod.f90 @@ -296,13 +296,14 @@ module psb_s_hdia_mat_mod !!$ end interface interface - subroutine psb_s_hdia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_hdia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_hdia_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_hdia_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_hdia_csmv !!$ subroutine psb_s_hdia_csmm(alpha,a,x,beta,y,info,trans) !!$ import :: psb_s_hdia_sparse_mat, psb_spk_, psb_ipk_ diff --git a/ext/psb_s_hll_mat_mod.f90 b/ext/psb_s_hll_mat_mod.f90 index 735091c8..8cf2fb94 100644 --- a/ext/psb_s_hll_mat_mod.f90 +++ b/ext/psb_s_hll_mat_mod.f90 @@ -303,21 +303,23 @@ module psb_s_hll_mat_mod end interface interface - subroutine psb_s_hll_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_s_hll_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_hll_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_hll_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_hll_csmv - subroutine psb_s_hll_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_s_hll_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_s_hll_sparse_mat, psb_spk_, psb_ipk_ class(psb_s_hll_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_s_hll_csmm end interface diff --git a/ext/psb_z_dia_mat_mod.f90 b/ext/psb_z_dia_mat_mod.f90 index 76d071af..59077be8 100644 --- a/ext/psb_z_dia_mat_mod.f90 +++ b/ext/psb_z_dia_mat_mod.f90 @@ -286,21 +286,23 @@ module psb_z_dia_mat_mod end interface interface - subroutine psb_z_dia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_dia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_dia_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_dia_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_dia_csmv - subroutine psb_z_dia_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_dia_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_dia_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_dia_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_dia_csmm end interface diff --git a/ext/psb_z_dns_mat_mod.f90 b/ext/psb_z_dns_mat_mod.f90 index 6147057d..d9efedef 100644 --- a/ext/psb_z_dns_mat_mod.f90 +++ b/ext/psb_z_dns_mat_mod.f90 @@ -284,13 +284,14 @@ module psb_z_dns_mat_mod !! ! interface - subroutine psb_z_dns_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_dns_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_dns_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_dns_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_dns_csmv end interface @@ -312,13 +313,14 @@ module psb_z_dns_mat_mod !! ! interface - subroutine psb_z_dns_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_dns_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_dns_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_dns_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_dns_csmm end interface diff --git a/ext/psb_z_ell_mat_mod.f90 b/ext/psb_z_ell_mat_mod.f90 index 0e1f0e00..e6bfa39e 100644 --- a/ext/psb_z_ell_mat_mod.f90 +++ b/ext/psb_z_ell_mat_mod.f90 @@ -305,21 +305,23 @@ module psb_z_ell_mat_mod end interface interface - subroutine psb_z_ell_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_ell_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_ell_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_ell_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_ell_csmv - subroutine psb_z_ell_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_ell_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_ell_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_ell_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_ell_csmm end interface diff --git a/ext/psb_z_hdia_mat_mod.f90 b/ext/psb_z_hdia_mat_mod.f90 index e7c11321..8ce15646 100644 --- a/ext/psb_z_hdia_mat_mod.f90 +++ b/ext/psb_z_hdia_mat_mod.f90 @@ -296,13 +296,14 @@ module psb_z_hdia_mat_mod !!$ end interface interface - subroutine psb_z_hdia_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_hdia_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_hdia_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_hdia_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_hdia_csmv !!$ subroutine psb_z_hdia_csmm(alpha,a,x,beta,y,info,trans) !!$ import :: psb_z_hdia_sparse_mat, psb_dpk_, psb_ipk_ diff --git a/ext/psb_z_hll_mat_mod.f90 b/ext/psb_z_hll_mat_mod.f90 index 98eb403f..3ef27b02 100644 --- a/ext/psb_z_hll_mat_mod.f90 +++ b/ext/psb_z_hll_mat_mod.f90 @@ -303,21 +303,23 @@ module psb_z_hll_mat_mod end interface interface - subroutine psb_z_hll_csmv(alpha,a,x,beta,y,info,trans) + subroutine psb_z_hll_csmv(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_hll_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_hll_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_hll_csmv - subroutine psb_z_hll_csmm(alpha,a,x,beta,y,info,trans) + subroutine psb_z_hll_csmm(alpha,a,x,beta,y,info,trans,ivshft) import :: psb_z_hll_sparse_mat, psb_dpk_, psb_ipk_ class(psb_z_hll_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans + integer(psb_ipk_), optional, intent(in) :: ivshft end subroutine psb_z_hll_csmm end interface diff --git a/krylov/psb_dcg.F90 b/krylov/psb_dcg.F90 index caebb712..669573be 100644 --- a/krylov/psb_dcg.F90 +++ b/krylov/psb_dcg.F90 @@ -129,8 +129,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& logical :: do_cond character(len=20) :: name character(len=*), parameter :: methdname='CG' - logical, parameter :: do_timings=.true. - integer(psb_ipk_), save :: cg_vect=-1, cg_mv=-1, cg_prec=-1 info = psb_success_ name = 'psb_dcg' @@ -151,12 +149,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& call psb_errpush(info,name) goto 9999 endif - if ((do_timings).and.(cg_vect==-1)) & - & cg_vect = psb_get_timer_idx("CG: vector ops ") - if ((do_timings).and.(cg_mv==-1)) & - & cg_mv = psb_get_timer_idx("CG: MV product") - if ((do_timings).and.(cg_prec==-1)) & - & cg_prec = psb_get_timer_idx("CG: preconditioner") mglob = desc_a%get_global_rows() @@ -227,21 +219,17 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& ! = ! = r0 = b-Ax0 ! = - if (do_timings) call psb_tic(cg_vect) if (itx>= itmax_) exit restart + it = 0 call psb_geaxpby(done,b,dzero,r,desc_a,info) - if (do_timings) call psb_toc(cg_vect) - if (do_timings) call psb_tic(cg_mv) if (info == psb_success_) call psb_spmm(-done,a,x,done,r,desc_a,info,work=aux) if (info /= psb_success_) then info=psb_err_from_subroutine_non_ call psb_errpush(info,name) goto 9999 end if - if (do_timings) call psb_toc(cg_mv) - - if (do_timings) call psb_tic(cg_vect) + rho = dzero call psb_init_conv(methdname,istop_,itrace_,itmax_,a,x,b,eps,desc_a,stopdat,info) @@ -249,18 +237,13 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& call psb_errpush(psb_err_from_subroutine_non_,name) goto 9999 End If - if (do_timings) call psb_toc(cg_vect) - + iteration: do it = it + 1 itx = itx + 1 - if (do_timings) call psb_tic(cg_prec) - - call prec%apply(r,z,desc_a,info,work=aux) - if (do_timings) call psb_toc(cg_prec) - if (do_timings) call psb_tic(cg_vect) + call prec%apply(r,z,desc_a,info,work=aux) rho_old = rho rho = psb_gedot(r,z,desc_a,info) @@ -271,18 +254,13 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& if (debug_level >= psb_debug_ext_)& & write(debug_unit,*) me,' ',trim(name),& & ': CG Iteration breakdown rho' - if (do_timings) call psb_toc(cg_vect) exit iteration endif beta = rho/rho_old call psb_geaxpby(done,z,beta,p,desc_a,info) end if - if (do_timings) call psb_toc(cg_vect) - if (do_timings) call psb_tic(cg_mv) call psb_spmm(done,a,p,dzero,q,desc_a,info,work=aux) - if (do_timings) call psb_toc(cg_mv) - if (do_timings) call psb_tic(cg_vect) sigma = psb_gedot(p,q,desc_a,info) if (sigma == dzero) then if (debug_level >= psb_debug_ext_)& @@ -315,7 +293,6 @@ subroutine psb_dcg_vect(a,prec,b,x,eps,desc_a,info,& end do iteration end do restart - if (do_timings) call psb_toc(cg_vect) if (do_cond) then if (me == psb_root_) then #if defined(HAVE_LAPACK) diff --git a/test/pargen/runs/ppde.inp b/test/pargen/runs/ppde.inp index 470bcf58..ce612658 100644 --- a/test/pargen/runs/ppde.inp +++ b/test/pargen/runs/ppde.inp @@ -8,7 +8,7 @@ CSR Storage format for matrix A: CSR COO 0200 MAXIT 10 ITRACE 002 IRST restart for RGMRES and BiCGSTABL -INVK Block Solver ILU,ILUT,INVK,AINVT,AORTH +ILU Block Solver ILU,ILUT,INVK,AINVT,AORTH NONE If ILU : MILU or NONE othewise ignored NONE Scaling if ILUT: NONE, MAXVAL otherwise ignored 0 Level of fill for forward factorization