From 4e40837aeba6cb83578e663f9a80c4648fbad0bd Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 29 May 2018 14:44:39 +0100 Subject: [PATCH] New strategy for LD: use new LBASE. --- base/modules/Makefile | 3 +- base/modules/psb_const_mod.F90 | 17 +- base/modules/serial/psb_c_base_mat_mod.f90 | 159 ++-- base/modules/serial/psb_d_base_mat_mod.f90 | 159 ++-- base/modules/serial/psb_lbase_mat_mod.f90 | 901 ++++++++++++++++++++ base/modules/serial/psb_ld_base_mat_mod.f90 | 199 +++-- base/modules/serial/psb_s_base_mat_mod.f90 | 159 ++-- base/modules/serial/psb_z_base_mat_mod.f90 | 159 ++-- cbind/test/pargen/runs/ppde.inp | 2 +- 9 files changed, 1328 insertions(+), 430 deletions(-) create mode 100644 base/modules/serial/psb_lbase_mat_mod.f90 diff --git a/base/modules/Makefile b/base/modules/Makefile index d67ecd684..722788424 100644 --- a/base/modules/Makefile +++ b/base/modules/Makefile @@ -97,7 +97,7 @@ UTIL_MODS = auxil/psb_string_mod.o desc/psb_desc_const_mod.o desc/psb_indx_map_m serial/psb_d_base_mat_mod.o serial/psb_d_csr_mat_mod.o serial/psb_d_csc_mat_mod.o serial/psb_d_mat_mod.o \ serial/psb_c_base_mat_mod.o serial/psb_c_csr_mat_mod.o serial/psb_c_csc_mat_mod.o serial/psb_c_mat_mod.o \ serial/psb_z_base_mat_mod.o serial/psb_z_csr_mat_mod.o serial/psb_z_csc_mat_mod.o serial/psb_z_mat_mod.o \ - serial/psb_ld_base_mat_mod.o + serial/psb_ld_base_mat_mod.o serial/psb_lbase_mat_mod.o @@ -194,6 +194,7 @@ auxil/psb_ip_reord_mod.o: auxil/psb_m_ip_reord_mod.o auxil/psb_e_ip_reord_mod.o auxil/psb_s_ip_reord_mod.o auxil/psb_d_ip_reord_mod.o \ auxil/psb_c_ip_reord_mod.o auxil/psb_z_ip_reord_mod.o +serial/psb_ld_base_mat_mod.o: serial/psb_lbase_mat_mod.o serial/psb_base_mat_mod.o: auxil/psi_serial_mod.o serial/psb_s_base_mat_mod.o serial/psb_d_base_mat_mod.o serial/psb_c_base_mat_mod.o serial/psb_z_base_mat_mod.o: serial/psb_base_mat_mod.o diff --git a/base/modules/psb_const_mod.F90 b/base/modules/psb_const_mod.F90 index d11e4ba0e..a1478b346 100644 --- a/base/modules/psb_const_mod.F90 +++ b/base/modules/psb_const_mod.F90 @@ -150,14 +150,15 @@ module psb_const_mod real(psb_dpk_), parameter :: d_epstol=1.1e-16_psb_dpk_ ! Unit roundoff. real(psb_spk_), parameter :: s_epstol=5.e-8_psb_spk_ ! Is this right? character, parameter :: psb_all_='A', psb_topdef_=' ' - logical, parameter :: psb_m_is_complex_ = .false. - logical, parameter :: psb_e_is_complex_ = .false. - logical, parameter :: psb_i_is_complex_ = .false. - logical, parameter :: psb_l_is_complex_ = .false. - logical, parameter :: psb_s_is_complex_ = .false. - logical, parameter :: psb_d_is_complex_ = .false. - logical, parameter :: psb_c_is_complex_ = .true. - logical, parameter :: psb_z_is_complex_ = .true. + logical, parameter :: psb_m_is_complex_ = .false. + logical, parameter :: psb_e_is_complex_ = .false. + logical, parameter :: psb_i_is_complex_ = .false. + logical, parameter :: psb_l_is_complex_ = .false. + logical, parameter :: psb_s_is_complex_ = .false. + logical, parameter :: psb_d_is_complex_ = .false. + logical, parameter :: psb_c_is_complex_ = .true. + logical, parameter :: psb_z_is_complex_ = .true. + logical, parameter :: psb_ld_is_complex_ = .false. ! ! Sort routines constants diff --git a/base/modules/serial/psb_c_base_mat_mod.f90 b/base/modules/serial/psb_c_base_mat_mod.f90 index 634b23674..a0c69db55 100644 --- a/base/modules/serial/psb_c_base_mat_mod.f90 +++ b/base/modules/serial/psb_c_base_mat_mod.f90 @@ -260,7 +260,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a complex(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz, ia(:), ja(:), imin,imax,jmin,jmax @@ -271,8 +271,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_base_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_, & - & psb_c_base_vect_type, psb_i_base_vect_type + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_base_vect_type), intent(inout) :: val class(psb_i_base_vect_type), intent(inout) :: ia, ja @@ -317,7 +316,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_base_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -356,7 +355,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_base_csgetblk(imin,imax,a,b,info,& & jmin,jmax,iren,append,rscale,cscale) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(in) :: imin,imax @@ -394,7 +393,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_base_csclip(a,b,info,& & imin,imax,jmin,jmax,rscale,cscale) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_coo_sparse_mat), intent(out) :: b integer(psb_ipk_),intent(out) :: info @@ -435,7 +434,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_base_tril(a,l,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,u) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_coo_sparse_mat), intent(out) :: l integer(psb_ipk_),intent(out) :: info @@ -479,7 +478,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_base_triu(a,u,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,l) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_coo_sparse_mat), intent(out) :: u integer(psb_ipk_),intent(out) :: info @@ -502,7 +501,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_get_diag(a,d,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -521,7 +520,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_mold(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_epk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -543,7 +542,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_clone(a,b, info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_epk_ + import implicit none class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), allocatable, intent(inout) :: b @@ -562,7 +561,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_make_nonunit(a) - import :: psb_c_base_sparse_mat + import implicit none class(psb_c_base_sparse_mat), intent(inout) :: a end subroutine psb_c_base_make_nonunit @@ -579,7 +578,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_cp_to_coo(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -596,7 +595,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_cp_from_coo(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -614,7 +613,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_cp_to_fmt(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_c_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -632,7 +631,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_cp_from_fmt(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -649,7 +648,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_mv_to_coo(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -666,7 +665,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_mv_from_coo(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -684,7 +683,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_mv_to_fmt(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -702,7 +701,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_mv_from_fmt(a,b,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -715,7 +714,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_clean_zeros(a, info) - import :: psb_ipk_, psb_c_base_sparse_mat + import class(psb_c_base_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_c_base_clean_zeros @@ -731,7 +730,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_transp_2mat(a,b) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_c_base_transp_2mat @@ -747,7 +746,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_transc_2mat(a,b) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_c_base_transc_2mat @@ -762,7 +761,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_transp_1mat(a) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a end subroutine psb_c_base_transp_1mat end interface @@ -776,7 +775,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_transc_1mat(a) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a end subroutine psb_c_base_transc_1mat end interface @@ -801,7 +800,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) @@ -829,7 +828,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) @@ -864,7 +863,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_vect_mv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta class(psb_c_base_vect_type), intent(inout) :: x @@ -896,7 +895,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_inner_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) @@ -931,7 +930,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_inner_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) @@ -966,7 +965,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_inner_vect_sv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_c_base_vect_type, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta class(psb_c_base_vect_type), intent(inout) :: x, y @@ -998,7 +997,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_cssm(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) @@ -1031,7 +1030,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) @@ -1065,7 +1064,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_vect_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_,psb_c_base_vect_type, psb_ipk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta class(psb_c_base_vect_type), intent(inout) :: x,y @@ -1085,7 +1084,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_scals(d,a,info) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a complex(psb_spk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info @@ -1103,7 +1102,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_scal(d,a,info,side) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(inout) :: a complex(psb_spk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1119,7 +1118,7 @@ module psb_c_base_mat_mod ! interface function psb_c_base_maxval(a) result(res) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_c_base_maxval @@ -1134,7 +1133,7 @@ module psb_c_base_mat_mod ! interface function psb_c_base_csnmi(a) result(res) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_c_base_csnmi @@ -1149,7 +1148,7 @@ module psb_c_base_mat_mod ! interface function psb_c_base_csnm1(a) result(res) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_c_base_csnm1 @@ -1165,7 +1164,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_rowsum(d,a) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(out) :: d(:) end subroutine psb_c_base_rowsum @@ -1179,7 +1178,7 @@ module psb_c_base_mat_mod !! interface subroutine psb_c_base_arwsum(d,a) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_c_base_arwsum @@ -1195,7 +1194,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_base_colsum(d,a) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a complex(psb_spk_), intent(out) :: d(:) end subroutine psb_c_base_colsum @@ -1209,7 +1208,7 @@ module psb_c_base_mat_mod !! interface subroutine psb_c_base_aclsum(d,a) - import :: psb_ipk_, psb_c_base_sparse_mat, psb_spk_ + import class(psb_c_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_c_base_aclsum @@ -1229,7 +1228,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_reallocate_nz(nz,a) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nz class(psb_c_coo_sparse_mat), intent(inout) :: a end subroutine psb_c_coo_reallocate_nz @@ -1242,7 +1241,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_reinit(a,clear) - import :: psb_ipk_, psb_c_coo_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a logical, intent(in), optional :: clear end subroutine psb_c_coo_reinit @@ -1254,7 +1253,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_trim(a) - import :: psb_ipk_, psb_c_coo_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a end subroutine psb_c_coo_trim end interface @@ -1265,7 +1264,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_clean_zeros(a,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_ipk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_c_coo_clean_zeros @@ -1278,7 +1277,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_allocate_mnnz(m,n,a,nz) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: m,n class(psb_c_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(in), optional :: nz @@ -1290,7 +1289,7 @@ module psb_c_base_mat_mod !| \see psb_base_mat_mod::psb_base_mold interface subroutine psb_c_coo_mold(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_c_base_sparse_mat, psb_epk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a class(psb_c_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -1312,7 +1311,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_print(iout,a,iv,head,ivr,ivc) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: iout class(psb_c_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in), optional :: iv(:) @@ -1333,7 +1332,7 @@ module psb_c_base_mat_mod ! interface function psb_c_coo_get_nz_row(idx,a) result(res) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_ipk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: idx integer(psb_ipk_) :: res @@ -1357,7 +1356,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir) - import :: psb_ipk_, psb_spk_, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nr,nc,nzin,dupl integer(psb_ipk_), intent(inout) :: ia(:), ja(:) complex(psb_spk_), intent(inout) :: val(:) @@ -1377,7 +1376,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_fix_coo(a,info,idir) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_ipk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: idir @@ -1389,7 +1388,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_cp_to_coo interface subroutine psb_c_cp_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat + import class(psb_c_coo_sparse_mat), intent(in) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1401,7 +1400,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_cp_from_coo interface subroutine psb_c_cp_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a class(psb_c_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1414,7 +1413,7 @@ module psb_c_base_mat_mod !! interface subroutine psb_c_cp_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_c_base_sparse_mat + import class(psb_c_coo_sparse_mat), intent(in) :: a class(psb_c_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1427,7 +1426,7 @@ module psb_c_base_mat_mod !! interface subroutine psb_c_cp_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_c_base_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1439,7 +1438,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_mv_to_coo interface subroutine psb_c_mv_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1451,7 +1450,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_mv_from_coo interface subroutine psb_c_mv_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a class(psb_c_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1463,7 +1462,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_mv_to_fmt interface subroutine psb_c_mv_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_c_base_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1475,7 +1474,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_mv_from_fmt interface subroutine psb_c_mv_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_c_base_sparse_mat + import class(psb_c_coo_sparse_mat), intent(inout) :: a class(psb_c_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1484,7 +1483,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_coo_cp_from(a,b) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a type(psb_c_coo_sparse_mat), intent(in) :: b end subroutine psb_c_coo_cp_from @@ -1492,7 +1491,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_coo_mv_from(a,b) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a type(psb_c_coo_sparse_mat), intent(inout) :: b end subroutine psb_c_coo_mv_from @@ -1517,7 +1516,7 @@ module psb_c_base_mat_mod ! interface subroutine psb_c_coo_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a complex(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz,ia(:), ja(:),& @@ -1533,7 +1532,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_coo_csgetptn(imin,imax,a,nz,ia,ja,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1552,7 +1551,7 @@ module psb_c_base_mat_mod interface subroutine psb_c_coo_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1571,7 +1570,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_cssv interface subroutine psb_c_coo_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) @@ -1584,7 +1583,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_cssm interface subroutine psb_c_coo_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) @@ -1598,7 +1597,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_csmv interface subroutine psb_c_coo_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:) complex(psb_spk_), intent(inout) :: y(:) @@ -1612,7 +1611,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_csmm interface subroutine psb_c_coo_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(in) :: alpha, beta, x(:,:) complex(psb_spk_), intent(inout) :: y(:,:) @@ -1627,7 +1626,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_maxval interface function psb_c_coo_maxval(a) result(res) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_c_coo_maxval @@ -1638,7 +1637,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_csnmi interface function psb_c_coo_csnmi(a) result(res) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_c_coo_csnmi @@ -1649,7 +1648,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_csnm1 interface function psb_c_coo_csnm1(a) result(res) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_c_coo_csnm1 @@ -1660,7 +1659,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_rowsum interface subroutine psb_c_coo_rowsum(d,a) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(out) :: d(:) end subroutine psb_c_coo_rowsum @@ -1670,7 +1669,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_arwsum interface subroutine psb_c_coo_arwsum(d,a) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_c_coo_arwsum @@ -1681,7 +1680,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_colsum interface subroutine psb_c_coo_colsum(d,a) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(out) :: d(:) end subroutine psb_c_coo_colsum @@ -1692,7 +1691,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_aclsum interface subroutine psb_c_coo_aclsum(d,a) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_c_coo_aclsum @@ -1703,7 +1702,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_get_diag interface subroutine psb_c_coo_get_diag(a,d,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(in) :: a complex(psb_spk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1715,7 +1714,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_scal interface subroutine psb_c_coo_scal(d,a,info,side) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a complex(psb_spk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1728,7 +1727,7 @@ module psb_c_base_mat_mod !! \see psb_c_base_mat_mod::psb_c_base_scals interface subroutine psb_c_coo_scals(d,a,info) - import :: psb_ipk_, psb_c_coo_sparse_mat, psb_spk_ + import class(psb_c_coo_sparse_mat), intent(inout) :: a complex(psb_spk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/serial/psb_d_base_mat_mod.f90 b/base/modules/serial/psb_d_base_mat_mod.f90 index d76c8bff1..e1a6da3db 100644 --- a/base/modules/serial/psb_d_base_mat_mod.f90 +++ b/base/modules/serial/psb_d_base_mat_mod.f90 @@ -260,7 +260,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz, ia(:), ja(:), imin,imax,jmin,jmax @@ -271,8 +271,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_base_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_, & - & psb_d_base_vect_type, psb_i_base_vect_type + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_base_vect_type), intent(inout) :: val class(psb_i_base_vect_type), intent(inout) :: ia, ja @@ -317,7 +316,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_base_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -356,7 +355,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_base_csgetblk(imin,imax,a,b,info,& & jmin,jmax,iren,append,rscale,cscale) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(in) :: imin,imax @@ -394,7 +393,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_base_csclip(a,b,info,& & imin,imax,jmin,jmax,rscale,cscale) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_coo_sparse_mat), intent(out) :: b integer(psb_ipk_),intent(out) :: info @@ -435,7 +434,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_base_tril(a,l,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,u) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_coo_sparse_mat), intent(out) :: l integer(psb_ipk_),intent(out) :: info @@ -479,7 +478,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_base_triu(a,u,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,l) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_coo_sparse_mat), intent(out) :: u integer(psb_ipk_),intent(out) :: info @@ -502,7 +501,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_get_diag(a,d,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -521,7 +520,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_mold(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_epk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -543,7 +542,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_clone(a,b, info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_epk_ + import implicit none class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), allocatable, intent(inout) :: b @@ -562,7 +561,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_make_nonunit(a) - import :: psb_d_base_sparse_mat + import implicit none class(psb_d_base_sparse_mat), intent(inout) :: a end subroutine psb_d_base_make_nonunit @@ -579,7 +578,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_cp_to_coo(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -596,7 +595,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_cp_from_coo(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -614,7 +613,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_cp_to_fmt(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_d_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -632,7 +631,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_cp_from_fmt(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -649,7 +648,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_mv_to_coo(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -666,7 +665,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_mv_from_coo(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -684,7 +683,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_mv_to_fmt(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -702,7 +701,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_mv_from_fmt(a,b,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -715,7 +714,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_clean_zeros(a, info) - import :: psb_ipk_, psb_d_base_sparse_mat + import class(psb_d_base_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_d_base_clean_zeros @@ -731,7 +730,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_transp_2mat(a,b) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_d_base_transp_2mat @@ -747,7 +746,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_transc_2mat(a,b) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_d_base_transc_2mat @@ -762,7 +761,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_transp_1mat(a) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a end subroutine psb_d_base_transp_1mat end interface @@ -776,7 +775,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_transc_1mat(a) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a end subroutine psb_d_base_transc_1mat end interface @@ -801,7 +800,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -829,7 +828,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -864,7 +863,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_vect_mv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta class(psb_d_base_vect_type), intent(inout) :: x @@ -896,7 +895,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_inner_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -931,7 +930,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_inner_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -966,7 +965,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_inner_vect_sv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_d_base_vect_type, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta class(psb_d_base_vect_type), intent(inout) :: x, y @@ -998,7 +997,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_cssm(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -1031,7 +1030,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -1065,7 +1064,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_vect_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_,psb_d_base_vect_type, psb_ipk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta class(psb_d_base_vect_type), intent(inout) :: x,y @@ -1085,7 +1084,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_scals(d,a,info) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info @@ -1103,7 +1102,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_scal(d,a,info,side) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1119,7 +1118,7 @@ module psb_d_base_mat_mod ! interface function psb_d_base_maxval(a) result(res) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_d_base_maxval @@ -1134,7 +1133,7 @@ module psb_d_base_mat_mod ! interface function psb_d_base_csnmi(a) result(res) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_d_base_csnmi @@ -1149,7 +1148,7 @@ module psb_d_base_mat_mod ! interface function psb_d_base_csnm1(a) result(res) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_d_base_csnm1 @@ -1165,7 +1164,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_rowsum(d,a) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_base_rowsum @@ -1179,7 +1178,7 @@ module psb_d_base_mat_mod !! interface subroutine psb_d_base_arwsum(d,a) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_base_arwsum @@ -1195,7 +1194,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_base_colsum(d,a) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_base_colsum @@ -1209,7 +1208,7 @@ module psb_d_base_mat_mod !! interface subroutine psb_d_base_aclsum(d,a) - import :: psb_ipk_, psb_d_base_sparse_mat, psb_dpk_ + import class(psb_d_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_base_aclsum @@ -1229,7 +1228,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_reallocate_nz(nz,a) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nz class(psb_d_coo_sparse_mat), intent(inout) :: a end subroutine psb_d_coo_reallocate_nz @@ -1242,7 +1241,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_reinit(a,clear) - import :: psb_ipk_, psb_d_coo_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a logical, intent(in), optional :: clear end subroutine psb_d_coo_reinit @@ -1254,7 +1253,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_trim(a) - import :: psb_ipk_, psb_d_coo_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a end subroutine psb_d_coo_trim end interface @@ -1265,7 +1264,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_clean_zeros(a,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_ipk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_d_coo_clean_zeros @@ -1278,7 +1277,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_allocate_mnnz(m,n,a,nz) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: m,n class(psb_d_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(in), optional :: nz @@ -1290,7 +1289,7 @@ module psb_d_base_mat_mod !| \see psb_base_mat_mod::psb_base_mold interface subroutine psb_d_coo_mold(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_d_base_sparse_mat, psb_epk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a class(psb_d_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -1312,7 +1311,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_print(iout,a,iv,head,ivr,ivc) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: iout class(psb_d_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in), optional :: iv(:) @@ -1333,7 +1332,7 @@ module psb_d_base_mat_mod ! interface function psb_d_coo_get_nz_row(idx,a) result(res) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_ipk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: idx integer(psb_ipk_) :: res @@ -1357,7 +1356,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir) - import :: psb_ipk_, psb_dpk_, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nr,nc,nzin,dupl integer(psb_ipk_), intent(inout) :: ia(:), ja(:) real(psb_dpk_), intent(inout) :: val(:) @@ -1377,7 +1376,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_fix_coo(a,info,idir) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_ipk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: idir @@ -1389,7 +1388,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_cp_to_coo interface subroutine psb_d_cp_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat + import class(psb_d_coo_sparse_mat), intent(in) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1401,7 +1400,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_cp_from_coo interface subroutine psb_d_cp_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a class(psb_d_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1414,7 +1413,7 @@ module psb_d_base_mat_mod !! interface subroutine psb_d_cp_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_d_base_sparse_mat + import class(psb_d_coo_sparse_mat), intent(in) :: a class(psb_d_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1427,7 +1426,7 @@ module psb_d_base_mat_mod !! interface subroutine psb_d_cp_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_d_base_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1439,7 +1438,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_mv_to_coo interface subroutine psb_d_mv_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1451,7 +1450,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_mv_from_coo interface subroutine psb_d_mv_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a class(psb_d_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1463,7 +1462,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_mv_to_fmt interface subroutine psb_d_mv_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_d_base_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1475,7 +1474,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_mv_from_fmt interface subroutine psb_d_mv_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_d_base_sparse_mat + import class(psb_d_coo_sparse_mat), intent(inout) :: a class(psb_d_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1484,7 +1483,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_coo_cp_from(a,b) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a type(psb_d_coo_sparse_mat), intent(in) :: b end subroutine psb_d_coo_cp_from @@ -1492,7 +1491,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_coo_mv_from(a,b) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a type(psb_d_coo_sparse_mat), intent(inout) :: b end subroutine psb_d_coo_mv_from @@ -1517,7 +1516,7 @@ module psb_d_base_mat_mod ! interface subroutine psb_d_coo_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz,ia(:), ja(:),& @@ -1533,7 +1532,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_coo_csgetptn(imin,imax,a,nz,ia,ja,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1552,7 +1551,7 @@ module psb_d_base_mat_mod interface subroutine psb_d_coo_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1571,7 +1570,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_cssv interface subroutine psb_d_coo_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -1584,7 +1583,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_cssm interface subroutine psb_d_coo_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -1598,7 +1597,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_csmv interface subroutine psb_d_coo_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -1612,7 +1611,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_csmm interface subroutine psb_d_coo_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -1627,7 +1626,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_maxval interface function psb_d_coo_maxval(a) result(res) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_d_coo_maxval @@ -1638,7 +1637,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_csnmi interface function psb_d_coo_csnmi(a) result(res) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_d_coo_csnmi @@ -1649,7 +1648,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_csnm1 interface function psb_d_coo_csnm1(a) result(res) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_d_coo_csnm1 @@ -1660,7 +1659,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_rowsum interface subroutine psb_d_coo_rowsum(d,a) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_coo_rowsum @@ -1670,7 +1669,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_arwsum interface subroutine psb_d_coo_arwsum(d,a) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_coo_arwsum @@ -1681,7 +1680,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_colsum interface subroutine psb_d_coo_colsum(d,a) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_coo_colsum @@ -1692,7 +1691,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_aclsum interface subroutine psb_d_coo_aclsum(d,a) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_d_coo_aclsum @@ -1703,7 +1702,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_get_diag interface subroutine psb_d_coo_get_diag(a,d,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1715,7 +1714,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_scal interface subroutine psb_d_coo_scal(d,a,info,side) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1728,7 +1727,7 @@ module psb_d_base_mat_mod !! \see psb_d_base_mat_mod::psb_d_base_scals interface subroutine psb_d_coo_scals(d,a,info) - import :: psb_ipk_, psb_d_coo_sparse_mat, psb_dpk_ + import class(psb_d_coo_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/serial/psb_lbase_mat_mod.f90 b/base/modules/serial/psb_lbase_mat_mod.f90 new file mode 100644 index 000000000..800079956 --- /dev/null +++ b/base/modules/serial/psb_lbase_mat_mod.f90 @@ -0,0 +1,901 @@ +! +! Parallel Sparse BLAS version 3.5 +! (C) Copyright 2006-2018 +! Salvatore Filippone +! Alfredo Buttari +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice, this list of conditions and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions, and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the PSBLAS group or the names of its contributors may +! not be used to endorse or promote products derived from this +! software without specific written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS +! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +! POSSIBILITY OF SUCH DAMAGE. +! +! +! +! package: psb_lbase_mat_mod +! +! This module contains the definition of the very basic object +! psb_lbase_sparse_mat holding some information common to all matrix +! type variants, such as number of rows and columns, whether the +! matrix is supposed to be triangular (upper or lower) and with a unit +! (i.e. assumed) diagonal, together with some state variables. This +! base class is in common among all variants of real/complex, +! short/long precision; as such, it only contains information that is +! inherently integer in nature. +! +! The methods associated to this class can be grouped into three sets: +! 1) Fully implemented methods: some methods such as get_nrows or +! set_nrows can be fully implemented at this level. +! 2) Partially implemented methods: Some methods have an +! implementation that is split between this level and the leaf +! level. For example, the matrix transposition can be partially +! done at this level (swapping of the rows and columns dimensions) +! but it has to be completed by a method defined at the leaf level +! (for actually transposing the row and column indices). +! 3) Other methods: There are a number of methods that are defined +! (i.e their interface is defined) but not implemented at this +! level. This methods will be overwritten at the leaf level with +! an actual implementation. If it is not the case, the method +! defined at this level will raise an error. These methods are +! defined in the serial/f03/psb_lbase_mat_impl.f03 file +! +! + +module psb_lbase_mat_mod + + use psb_const_mod + use psi_serial_mod + + ! + !> \namespace psb_lbase_mod \class psb_lbase_sparse_mat + !! The basic data about your matrix. + !! This class is extended twice, to provide the various + !! data variations S/D/C/Z and to implement the actual + !! storage formats. The grandchild classes are then + !! encapsulated to implement the STATE design pattern. + !! We have an ambiguity in that the inner class has a + !! "state" variable; we hope the context will make it clear. + !! + !! + !! The methods associated to this class can be grouped into three sets: + !! - Fully implemented methods: some methods such as get_nrows or + !! set_nrows can be fully implemented at this level. + !! - Partially implemented methods: Some methods have an + !! implementation that is split between this level and the leaf + !! level. For example, the matrix transposition can be partially + !! done at this level (swapping of the rows and columns dimensions) + !! but it has to be completed by a method defined at the leaf level + !! (for actually transposing the row and column indices). + !! - Other methods: There are a number of methods that are defined + !! (i.e their interface is defined) but not implemented at this + !! level. This methods will be overwritten at the leaf level with + !! an actual implementation. If it is not the case, the method + !! defined at this level will raise an error. These methods are + !! defined in the serial/impl/psb_lbase_mat_impl.f90 file + !! + ! + + type :: psb_lbase_sparse_mat + !> Row size + integer(psb_lpk_), private :: m + !> Col size + integer(psb_lpk_), private :: n + !> Matrix state: + !! null: pristine; + !! build: it's being filled with entries; + !! assembled: ready to use in computations; + !! update: accepts coefficients but only + !! in already existing entries. + !! The transitions among the states are detailed in + !! psb_T_mat_mod. + integer(psb_ipk_), private :: state + !> How to treat duplicate elements when + !! transitioning from the BUILD to the ASSEMBLED state. + !! While many formats would allow for duplicate + !! entries, it is much better to constrain the matrices + !! NOT to have duplicate entries, except while in the + !! BUILD state; in our overall design, only COO matrices + !! can ever be in the BUILD state, hence all other formats + !! cannot have duplicate entries. + integer(psb_ipk_), private :: duplicate + !> Is the matrix triangular? (must also be square) + logical, private :: triangle + !> Is the matrix upper or lower? (only if triangular) + logical, private :: upper + !> Is the matrix diagonal stored or assumed unitary? (only if triangular) + logical, private :: unitd + !> Are the coefficients sorted ? + logical, private :: sorted + logical, private :: repeatable_updates=.false. + + contains + + ! == = ================================= + ! + ! Getters + ! + ! + ! == = ================================= + procedure, pass(a) :: get_nrows => psb_lbase_get_nrows + procedure, pass(a) :: get_ncols => psb_lbase_get_ncols + procedure, pass(a) :: get_nzeros => psb_lbase_get_nzeros + procedure, pass(a) :: get_nz_row => psb_lbase_get_nz_row + procedure, pass(a) :: get_size => psb_lbase_get_size + procedure, pass(a) :: get_state => psb_lbase_get_state + procedure, pass(a) :: get_dupl => psb_lbase_get_dupl + procedure, nopass :: get_fmt => psb_lbase_get_fmt + procedure, nopass :: has_update => psb_lbase_has_update + procedure, pass(a) :: is_null => psb_lbase_is_null + procedure, pass(a) :: is_bld => psb_lbase_is_bld + procedure, pass(a) :: is_upd => psb_lbase_is_upd + procedure, pass(a) :: is_asb => psb_lbase_is_asb + procedure, pass(a) :: is_sorted => psb_lbase_is_sorted + procedure, pass(a) :: is_upper => psb_lbase_is_upper + procedure, pass(a) :: is_lower => psb_lbase_is_lower + procedure, pass(a) :: is_triangle => psb_lbase_is_triangle + procedure, pass(a) :: is_unit => psb_lbase_is_unit + procedure, pass(a) :: is_by_rows => psb_lbase_is_by_rows + procedure, pass(a) :: is_by_cols => psb_lbase_is_by_cols + procedure, pass(a) :: is_repeatable_updates => psb_lbase_is_repeatable_updates + + ! == = ================================= + ! + ! Setters + ! + ! == = ================================= + procedure, pass(a) :: set_nrows => psb_lbase_set_nrows + procedure, pass(a) :: set_ncols => psb_lbase_set_ncols + procedure, pass(a) :: set_dupl => psb_lbase_set_dupl + procedure, pass(a) :: set_state => psb_lbase_set_state + procedure, pass(a) :: set_null => psb_lbase_set_null + procedure, pass(a) :: set_bld => psb_lbase_set_bld + procedure, pass(a) :: set_upd => psb_lbase_set_upd + procedure, pass(a) :: set_asb => psb_lbase_set_asb + procedure, pass(a) :: set_sorted => psb_lbase_set_sorted + procedure, pass(a) :: set_upper => psb_lbase_set_upper + procedure, pass(a) :: set_lower => psb_lbase_set_lower + procedure, pass(a) :: set_triangle => psb_lbase_set_triangle + procedure, pass(a) :: set_unit => psb_lbase_set_unit + + procedure, pass(a) :: set_repeatable_updates => psb_lbase_set_repeatable_updates + + + ! == = ================================= + ! + ! Data management + ! + ! == = ================================= + procedure, pass(a) :: get_neigh => psb_lbase_get_neigh + procedure, pass(a) :: free => psb_lbase_free + procedure, pass(a) :: asb => psb_lbase_mat_asb + procedure, pass(a) :: trim => psb_lbase_trim + procedure, pass(a) :: reinit => psb_lbase_reinit + procedure, pass(a) :: allocate_mnnz => psb_lbase_allocate_mnnz + procedure, pass(a) :: reallocate_nz => psb_lbase_reallocate_nz + generic, public :: allocate => allocate_mnnz + generic, public :: reallocate => reallocate_nz + + + procedure, pass(a) :: csgetptn => psb_lbase_csgetptn + generic, public :: csget => csgetptn + procedure, pass(a) :: print => psb_lbase_sparse_print + procedure, pass(a) :: sizeof => psb_lbase_sizeof + procedure, pass(a) :: transp_1mat => psb_lbase_transp_1mat + procedure, pass(a) :: transp_2mat => psb_lbase_transp_2mat + generic, public :: transp => transp_1mat, transp_2mat + procedure, pass(a) :: transc_1mat => psb_lbase_transc_1mat + procedure, pass(a) :: transc_2mat => psb_lbase_transc_2mat + generic, public :: transc => transc_1mat, transc_2mat + + ! + ! Sync: centerpiece of handling of external storage. + ! Any derived class having extra storage upon sync + ! will guarantee that both fortran/host side and + ! external side contain the same data. The base + ! version is only a placeholder. + ! + procedure, pass(a) :: sync => psb_lbase_mat_sync + procedure, pass(a) :: is_host => psb_lbase_mat_is_host + procedure, pass(a) :: is_dev => psb_lbase_mat_is_dev + procedure, pass(a) :: is_sync => psb_lbase_mat_is_sync + procedure, pass(a) :: set_host => psb_lbase_mat_set_host + procedure, pass(a) :: set_dev => psb_lbase_mat_set_dev + procedure, pass(a) :: set_sync => psb_lbase_mat_set_sync + + end type psb_lbase_sparse_mat + + !> Function: psb_lbase_get_nz_row + !! \memberof psb_lbase_sparse_mat + !! Interface for the get_nz_row method. Equivalent to: + !! count(A(idx,:)/=0) + !! \param idx The line we are interested in. + ! + interface + function psb_lbase_get_nz_row(idx,a) result(res) + import :: psb_lpk_, psb_epk_, psb_lbase_sparse_mat + integer(psb_lpk_), intent(in) :: idx + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_) :: res + end function psb_lbase_get_nz_row + end interface + + ! + !> Function: psb_lbase_get_nzeros + !! \memberof psb_lbase_sparse_mat + !! Interface for the get_nzeros method. Equivalent to: + !! count(A(:,:)/=0) + ! + interface + function psb_lbase_get_nzeros(a) result(res) + import :: psb_lpk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_) :: res + end function psb_lbase_get_nzeros + end interface + + !> Function get_size + !! \memberof psb_lbase_sparse_mat + !! how many items can A hold with + !! its current space allocation? + !! (as opposed to how many are + !! currently occupied) + ! + interface + function psb_lbase_get_size(a) result(res) + import :: psb_lpk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_) :: res + end function psb_lbase_get_size + end interface + + ! + !> Function reinit: transition state from ASB to UPDATE + !! \memberof psb_lbase_sparse_mat + !! \param clear [true] explicitly zero out coefficients. + ! + interface + subroutine psb_lbase_reinit(a,clear) + import :: psb_ipk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: clear + end subroutine psb_lbase_reinit + end interface + + + ! + !> Function + !! \memberof psb_lbase_sparse_mat + !! print on file in Matrix Market format. + !! \param iout the output unit + !! \param iv(:) [none] renumber both row and column indices + !! \param head [none] a descriptive header for the matrix data + !! \param ivr(:) [none] renumbering for the rows + !! \param ivc(:) [none] renumbering for the cols + ! + interface + subroutine psb_lbase_sparse_print(iout,a,iv,head,ivr,ivc) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + integer(psb_ipk_), intent(in) :: iout + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_), intent(in), optional :: iv(:) + character(len=*), optional :: head + integer(psb_lpk_), intent(in), optional :: ivr(:), ivc(:) + end subroutine psb_lbase_sparse_print + end interface + + + ! + !> Function getptn: + !! \memberof psb_lbase_sparse_mat + !! \brief Get the pattern. + !! + !! + !! Return a list of NZ pairs + !! (IA(i),JA(i)) + !! each identifying the position of a nonzero in A + !! between row indices IMIN:IMAX; + !! IA,JA are reallocated as necessary. + !! \param imin the minimum row index we are interested in + !! \param imax the minimum row index we are interested in + !! \param nz the number of output coefficients + !! \param ia(:) the output row indices + !! \param ja(:) the output col indices + !! \param info return code + !! \param jmin [1] minimum col index + !! \param jmax [a\%get_ncols()] maximum col index + !! \param iren(:) [none] an array to return renumbered indices (iren(ia(:)),iren(ja(:)) + !! \param rscale [false] map [min(ia(:)):max(ia(:))] onto [1:max(ia(:))-min(ia(:))+1] + !! \param cscale [false] map [min(ja(:)):max(ja(:))] onto [1:max(ja(:))-min(ja(:))+1] + !! ( iren cannot be specified with rscale/cscale) + !! \param append [false] append to ia,ja + !! \param nzin [none] if append, then first new entry should go in entry nzin+1 + ! + + interface + subroutine psb_lbase_csgetptn(imin,imax,a,nz,ia,ja,info,& + & jmin,jmax,iren,append,nzin,rscale,cscale) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_), intent(in) :: imin,imax + integer(psb_lpk_), intent(out) :: nz + integer(psb_lpk_), allocatable, intent(inout) :: ia(:), ja(:) + integer(psb_ipk_),intent(out) :: info + logical, intent(in), optional :: append + integer(psb_lpk_), intent(in), optional :: iren(:) + integer(psb_lpk_), intent(in), optional :: jmin,jmax, nzin + logical, intent(in), optional :: rscale,cscale + end subroutine psb_lbase_csgetptn + end interface + + ! + !> Function get_neigh: + !! \memberof psb_lbase_sparse_mat + !! \brief Get the neighbours. + !! + !! + !! Return a list of N indices of neighbours of index idx, + !! i.e. the indices of the nonzeros in row idx of matrix A + !! \param idx the index we are interested in + !! \param neigh(:) the list of indices, reallocated as necessary + !! \param n the number of indices returned + !! \param info return code + !! \param lev [1] find neighbours recursively for LEV levels, + !! i.e. when lev=2 find neighours of neighbours, etc. + ! + interface + subroutine psb_lbase_get_neigh(a,idx,neigh,n,info,lev) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_), intent(in) :: idx + integer(psb_lpk_), intent(out) :: n + integer(psb_lpk_), allocatable, intent(out) :: neigh(:) + integer(psb_ipk_), intent(out) :: info + integer(psb_lpk_), optional, intent(in) :: lev + end subroutine psb_lbase_get_neigh + end interface + + ! + ! + !> Function allocate_mnnz + !! \memberof psb_lbase_sparse_mat + !! \brief Three-parameters version of allocate + !! + !! \param m number of rows + !! \param n number of cols + !! \param nz [estimated internally] number of nonzeros to allocate for + ! + interface + subroutine psb_lbase_allocate_mnnz(m,n,a,nz) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + integer(psb_lpk_), intent(in) :: m,n + class(psb_lbase_sparse_mat), intent(inout) :: a + integer(psb_lpk_), intent(in), optional :: nz + end subroutine psb_lbase_allocate_mnnz + end interface + + + ! + ! + !> Function reallocate_nz + !! \memberof psb_lbase_sparse_mat + !! \brief One--parameter version of (re)allocate + !! + !! \param nz number of nonzeros to allocate for + ! + interface + subroutine psb_lbase_reallocate_nz(nz,a) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + integer(psb_lpk_), intent(in) :: nz + class(psb_lbase_sparse_mat), intent(inout) :: a + end subroutine psb_lbase_reallocate_nz + end interface + + ! + !> Function free + !! \memberof psb_lbase_sparse_mat + !! \brief destructor + ! + interface + subroutine psb_lbase_free(a) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(inout) :: a + end subroutine psb_lbase_free + end interface + + ! + !> Function trim + !! \memberof psb_lbase_sparse_mat + !! \brief Memory trim + !! Make sure the memory allocation of the sparse matrix is as tight as + !! possible given the actual number of nonzeros it contains. + ! + interface + subroutine psb_lbase_trim(a) + import :: psb_ipk_, psb_lpk_, psb_epk_, psb_lbase_sparse_mat + class(psb_lbase_sparse_mat), intent(inout) :: a + end subroutine psb_lbase_trim + end interface + + +contains + + + ! + !> Function sizeof + !! \memberof psb_lbase_sparse_mat + !! \brief Memory occupation in byes + ! + function psb_lbase_sizeof(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_epk_) :: res + res = 8 + end function psb_lbase_sizeof + + ! + !> Function get_fmt + !! \memberof psb_lbase_sparse_mat + !! \brief return a short descriptive name (e.g. COO CSR etc.) + ! + function psb_lbase_get_fmt() result(res) + implicit none + character(len=5) :: res + res = 'NULL' + end function psb_lbase_get_fmt + ! + !> Function has_update + !! \memberof psb_lbase_sparse_mat + !! \brief Does the forma have the UPDATE functionality? + ! + function psb_lbase_has_update() result(res) + implicit none + logical :: res + res = .true. + end function psb_lbase_has_update + + ! + ! Standard getter functions: self-explaining. + ! + function psb_lbase_get_dupl(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_ipk_) :: res + res = a%duplicate + end function psb_lbase_get_dupl + + + function psb_lbase_get_state(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_ipk_) :: res + res = a%state + end function psb_lbase_get_state + + function psb_lbase_get_nrows(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_) :: res + res = a%m + end function psb_lbase_get_nrows + + function psb_lbase_get_ncols(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + integer(psb_lpk_) :: res + res = a%n + end function psb_lbase_get_ncols + + subroutine psb_lbase_set_nrows(m,a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + integer(psb_lpk_), intent(in) :: m + a%m = m + end subroutine psb_lbase_set_nrows + + subroutine psb_lbase_set_ncols(n,a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + integer(psb_lpk_), intent(in) :: n + a%n = n + end subroutine psb_lbase_set_ncols + + + subroutine psb_lbase_set_state(n,a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + integer(psb_lpk_), intent(in) :: n + a%state = n + end subroutine psb_lbase_set_state + + + subroutine psb_lbase_set_dupl(n,a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + integer(psb_ipk_), intent(in) :: n + a%duplicate = n + end subroutine psb_lbase_set_dupl + + subroutine psb_lbase_set_null(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + a%state = psb_spmat_null_ + end subroutine psb_lbase_set_null + + subroutine psb_lbase_set_bld(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + a%state = psb_spmat_bld_ + end subroutine psb_lbase_set_bld + + subroutine psb_lbase_set_upd(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + a%state = psb_spmat_upd_ + end subroutine psb_lbase_set_upd + + subroutine psb_lbase_set_asb(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + a%state = psb_spmat_asb_ + end subroutine psb_lbase_set_asb + + subroutine psb_lbase_set_sorted(a,val) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: val + + if (present(val)) then + a%sorted = val + else + a%sorted = .true. + end if + end subroutine psb_lbase_set_sorted + + subroutine psb_lbase_set_triangle(a,val) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: val + + if (present(val)) then + a%triangle = val + else + a%triangle = .true. + end if + end subroutine psb_lbase_set_triangle + + subroutine psb_lbase_set_unit(a,val) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: val + + if (present(val)) then + a%unitd = val + else + a%unitd = .true. + end if + end subroutine psb_lbase_set_unit + + subroutine psb_lbase_set_lower(a,val) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: val + + if (present(val)) then + a%upper = .not.val + else + a%upper = .false. + end if + end subroutine psb_lbase_set_lower + + subroutine psb_lbase_set_upper(a,val) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: val + + if (present(val)) then + a%upper = val + else + a%upper = .true. + end if + end subroutine psb_lbase_set_upper + + subroutine psb_lbase_set_repeatable_updates(a,val) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + logical, intent(in), optional :: val + + if (present(val)) then + a%repeatable_updates = val + else + a%repeatable_updates = .true. + end if + end subroutine psb_lbase_set_repeatable_updates + + function psb_lbase_is_triangle(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = a%triangle + end function psb_lbase_is_triangle + + function psb_lbase_is_unit(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = a%unitd + end function psb_lbase_is_unit + + function psb_lbase_is_upper(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = a%upper + end function psb_lbase_is_upper + + function psb_lbase_is_lower(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = .not.a%upper + end function psb_lbase_is_lower + + function psb_lbase_is_null(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = (a%state == psb_spmat_null_) + end function psb_lbase_is_null + + function psb_lbase_is_bld(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = (a%state == psb_spmat_bld_) + end function psb_lbase_is_bld + + function psb_lbase_is_upd(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = (a%state == psb_spmat_upd_) + end function psb_lbase_is_upd + + function psb_lbase_is_asb(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = (a%state == psb_spmat_asb_) + end function psb_lbase_is_asb + + function psb_lbase_is_sorted(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = a%sorted + end function psb_lbase_is_sorted + + + function psb_lbase_is_by_rows(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = .false. + end function psb_lbase_is_by_rows + + function psb_lbase_is_by_cols(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = .false. + end function psb_lbase_is_by_cols + + function psb_lbase_is_repeatable_updates(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + res = a%repeatable_updates + end function psb_lbase_is_repeatable_updates + + + ! + ! TRANSP: note sorted=.false. + ! better invoke a fix() too many than + ! regret it later... + ! + subroutine psb_lbase_transp_2mat(a,b) + implicit none + + class(psb_lbase_sparse_mat), intent(in) :: a + class(psb_lbase_sparse_mat), intent(out) :: b + + b%m = a%n + b%n = a%m + b%state = a%state + b%duplicate = a%duplicate + b%triangle = a%triangle + b%unitd = a%unitd + b%upper = .not.a%upper + b%sorted = .false. + b%repeatable_updates = .false. + + end subroutine psb_lbase_transp_2mat + + subroutine psb_lbase_transc_2mat(a,b) + implicit none + + class(psb_lbase_sparse_mat), intent(in) :: a + class(psb_lbase_sparse_mat), intent(out) :: b + + + b%m = a%n + b%n = a%m + b%state = a%state + b%duplicate = a%duplicate + b%triangle = a%triangle + b%unitd = a%unitd + b%upper = .not.a%upper + b%sorted = .false. + b%repeatable_updates = .false. + + end subroutine psb_lbase_transc_2mat + + subroutine psb_lbase_transp_1mat(a) + implicit none + + class(psb_lbase_sparse_mat), intent(inout) :: a + integer(psb_lpk_) :: itmp + + itmp = a%m + a%m = a%n + a%n = itmp + a%state = a%state + a%duplicate = a%duplicate + a%triangle = a%triangle + a%unitd = a%unitd + a%upper = .not.a%upper + a%sorted = .false. + a%repeatable_updates = .false. + + end subroutine psb_lbase_transp_1mat + + subroutine psb_lbase_transc_1mat(a) + implicit none + + class(psb_lbase_sparse_mat), intent(inout) :: a + + call a%transp() + end subroutine psb_lbase_transc_1mat + + + + ! + !> Function base_asb: + !! \memberof psb_lbase_sparse_mat + !! \brief Sync: base version calls sync and the set_asb. + !! + ! + subroutine psb_lbase_mat_asb(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + call a%sync() + call a%set_asb() + end subroutine psb_lbase_mat_asb + ! + ! The base version of SYNC & friends does nothing, it's just + ! a placeholder. + ! + ! + !> Function base_sync: + !! \memberof psb_lbase_sparse_mat + !! \brief Sync: base version is a no-op. + !! + ! + subroutine psb_lbase_mat_sync(a) + implicit none + class(psb_lbase_sparse_mat), target, intent(in) :: a + + end subroutine psb_lbase_mat_sync + + ! + !> Function base_set_host: + !! \memberof psb_lbase_sparse_mat + !! \brief Set_host: base version is a no-op. + !! + ! + subroutine psb_lbase_mat_set_host(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + end subroutine psb_lbase_mat_set_host + + ! + !> Function base_set_dev: + !! \memberof psb_lbase_sparse_mat + !! \brief Set_dev: base version is a no-op. + !! + ! + subroutine psb_lbase_mat_set_dev(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + end subroutine psb_lbase_mat_set_dev + + ! + !> Function base_set_sync: + !! \memberof psb_lbase_sparse_mat + !! \brief Set_sync: base version is a no-op. + !! + ! + subroutine psb_lbase_mat_set_sync(a) + implicit none + class(psb_lbase_sparse_mat), intent(inout) :: a + + end subroutine psb_lbase_mat_set_sync + + ! + !> Function base_is_dev: + !! \memberof psb_lbase_sparse_mat + !! \brief Is matrix on eaternal device . + !! + ! + function psb_lbase_mat_is_dev(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + + res = .false. + end function psb_lbase_mat_is_dev + + ! + !> Function base_is_host + !! \memberof psb_lbase_sparse_mat + !! \brief Is matrix on standard memory . + !! + ! + function psb_lbase_mat_is_host(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + + res = .true. + end function psb_lbase_mat_is_host + + ! + !> Function base_is_sync + !! \memberof psb_lbase_sparse_mat + !! \brief Is matrix on sync . + !! + ! + function psb_lbase_mat_is_sync(a) result(res) + implicit none + class(psb_lbase_sparse_mat), intent(in) :: a + logical :: res + + res = .true. + end function psb_lbase_mat_is_sync + +end module psb_lbase_mat_mod + diff --git a/base/modules/serial/psb_ld_base_mat_mod.f90 b/base/modules/serial/psb_ld_base_mat_mod.f90 index 3fdeab51d..d2d69bd3e 100644 --- a/base/modules/serial/psb_ld_base_mat_mod.f90 +++ b/base/modules/serial/psb_ld_base_mat_mod.f90 @@ -33,13 +33,13 @@ ! module psb_ld_base_mat_mod - use psb_base_mat_mod - use psb_ld_base_vect_mod + use psb_lbase_mat_mod + use psb_d_base_vect_mod !> \namespace psb_base_mod \class psb_ld_base_sparse_mat - !! \extends psb_base_mat_mod::psb_base_sparse_mat - !! The psb_ld_base_sparse_mat type, extending psb_base_sparse_mat, + !! \extends psb_lbase_mat_mod::psb_lbase_sparse_mat + !! The psb_ld_base_sparse_mat type, extending psb_lbase_sparse_mat, !! defines a middle level real(psb_dpk_) sparse matrix object. !! This class object itself does not have any additional members !! with respect to those of the base class. Most methods cannot be fully @@ -52,7 +52,7 @@ module psb_ld_base_mat_mod !! not yet supporting ALLOCATE( ...,MOLD=...); it's otherwise silly to !! duplicate "by hand" what is specified in the language (in this case F2008) !! - type, extends(psb_base_sparse_mat) :: psb_ld_base_sparse_mat + type, extends(psb_lbase_sparse_mat) :: psb_ld_base_sparse_mat contains ! ! Data management methods: defined here, but (mostly) not implemented. @@ -260,7 +260,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: val(:) integer(psb_lpk_), intent(in) :: nz, ia(:), ja(:), imin,imax,jmin,jmax @@ -271,10 +271,9 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_base_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_, & - & psb_ld_base_vect_type, psb_i_base_vect_type + import class(psb_ld_base_sparse_mat), intent(inout) :: a - class(psb_ld_base_vect_type), intent(inout) :: val + class(psb_d_base_vect_type), intent(inout) :: val class(psb_i_base_vect_type), intent(inout) :: ia, ja integer(psb_lpk_), intent(in) :: nz, imin, imax,jmin,jmax integer(psb_ipk_), intent(out) :: info @@ -317,7 +316,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_base_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a integer(psb_lpk_), intent(in) :: imin,imax integer(psb_lpk_), intent(out) :: nz @@ -356,7 +355,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_base_csgetblk(imin,imax,a,b,info,& & jmin,jmax,iren,append,rscale,cscale) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_lpk_), intent(in) :: imin,imax @@ -394,7 +393,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_base_csclip(a,b,info,& & imin,imax,jmin,jmax,rscale,cscale) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_coo_sparse_mat), intent(out) :: b integer(psb_ipk_),intent(out) :: info @@ -435,7 +434,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_base_tril(a,l,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,u) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_coo_sparse_mat), intent(out) :: l integer(psb_ipk_),intent(out) :: info @@ -479,7 +478,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_base_triu(a,u,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,l) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_coo_sparse_mat), intent(out) :: u integer(psb_ipk_),intent(out) :: info @@ -502,7 +501,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_get_diag(a,d,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -521,7 +520,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_mold(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_epk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -543,7 +542,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_clone(a,b, info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_epk_ + import implicit none class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), allocatable, intent(inout) :: b @@ -562,7 +561,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_make_nonunit(a) - import :: psb_ld_base_sparse_mat + import implicit none class(psb_ld_base_sparse_mat), intent(inout) :: a end subroutine psb_ld_base_make_nonunit @@ -579,7 +578,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_cp_to_coo(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -596,7 +595,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_cp_from_coo(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -614,7 +613,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_cp_to_fmt(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a class(psb_ld_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -632,7 +631,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_cp_from_fmt(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -649,7 +648,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_mv_to_coo(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -666,7 +665,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_mv_from_coo(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -684,7 +683,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_mv_to_fmt(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -702,7 +701,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_mv_from_fmt(a,b,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -715,7 +714,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_clean_zeros(a, info) - import :: psb_ipk_, psb_ld_base_sparse_mat + import class(psb_ld_base_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_ld_base_clean_zeros @@ -731,9 +730,9 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_transp_2mat(a,b) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a - class(psb_base_sparse_mat), intent(out) :: b + class(psb_lbase_sparse_mat), intent(out) :: b end subroutine psb_ld_base_transp_2mat end interface @@ -747,9 +746,9 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_transc_2mat(a,b) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a - class(psb_base_sparse_mat), intent(out) :: b + class(psb_lbase_sparse_mat), intent(out) :: b end subroutine psb_ld_base_transc_2mat end interface @@ -762,7 +761,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_transp_1mat(a) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a end subroutine psb_ld_base_transp_1mat end interface @@ -776,7 +775,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_transc_1mat(a) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a end subroutine psb_ld_base_transc_1mat end interface @@ -801,7 +800,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -829,7 +828,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -864,11 +863,11 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_vect_mv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_ld_base_vect_type, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta - class(psb_ld_base_vect_type), intent(inout) :: x - class(psb_ld_base_vect_type), intent(inout) :: y + class(psb_d_base_vect_type), intent(inout) :: x + class(psb_d_base_vect_type), intent(inout) :: y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans end subroutine psb_ld_base_vect_mv @@ -896,7 +895,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_inner_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -931,7 +930,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_inner_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -966,10 +965,10 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_inner_vect_sv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_ld_base_vect_type, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta - class(psb_ld_base_vect_type), intent(inout) :: x, y + class(psb_d_base_vect_type), intent(inout) :: x, y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans end subroutine psb_ld_base_inner_vect_sv @@ -998,7 +997,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_cssm(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -1031,7 +1030,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -1065,13 +1064,13 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_vect_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_,psb_ld_base_vect_type, psb_lpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta - class(psb_ld_base_vect_type), intent(inout) :: x,y + class(psb_d_base_vect_type), intent(inout) :: x,y integer(psb_ipk_), intent(out) :: info character, optional, intent(in) :: trans, scale - class(psb_ld_base_vect_type), optional, intent(inout) :: d + class(psb_d_base_vect_type), optional, intent(inout) :: d end subroutine psb_ld_base_vect_cssv end interface @@ -1085,7 +1084,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_scals(d,a,info) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info @@ -1103,7 +1102,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_scal(d,a,info,side) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1119,7 +1118,7 @@ module psb_ld_base_mat_mod ! interface function psb_ld_base_maxval(a) result(res) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_ld_base_maxval @@ -1134,7 +1133,7 @@ module psb_ld_base_mat_mod ! interface function psb_ld_base_csnmi(a) result(res) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_ld_base_csnmi @@ -1149,7 +1148,7 @@ module psb_ld_base_mat_mod ! interface function psb_ld_base_csnm1(a) result(res) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_ld_base_csnm1 @@ -1165,7 +1164,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_rowsum(d,a) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_base_rowsum @@ -1179,7 +1178,7 @@ module psb_ld_base_mat_mod !! interface subroutine psb_ld_base_arwsum(d,a) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_base_arwsum @@ -1195,7 +1194,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_base_colsum(d,a) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_base_colsum @@ -1209,7 +1208,7 @@ module psb_ld_base_mat_mod !! interface subroutine psb_ld_base_aclsum(d,a) - import :: psb_ipk_, psb_ld_base_sparse_mat, psb_dpk_ + import class(psb_ld_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_base_aclsum @@ -1225,11 +1224,11 @@ module psb_ld_base_mat_mod ! !> !! \memberof psb_ld_coo_sparse_mat - !! \see psb_base_mat_mod::psb_base_reallocate_nz + !! \see psb_lbase_mat_mod::psb_base_reallocate_nz ! interface subroutine psb_ld_coo_reallocate_nz(nz,a) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_lpk_ + import integer(psb_ipk_), intent(in) :: nz class(psb_ld_coo_sparse_mat), intent(inout) :: a end subroutine psb_ld_coo_reallocate_nz @@ -1238,11 +1237,11 @@ module psb_ld_base_mat_mod ! !> !! \memberof psb_ld_coo_sparse_mat - !! \see psb_base_mat_mod::psb_base_reinit + !! \see psb_lbase_mat_mod::psb_base_reinit ! interface subroutine psb_ld_coo_reinit(a,clear) - import :: psb_ipk_, psb_ld_coo_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a logical, intent(in), optional :: clear end subroutine psb_ld_coo_reinit @@ -1250,11 +1249,11 @@ module psb_ld_base_mat_mod ! !> !! \memberof psb_ld_coo_sparse_mat - !! \see psb_base_mat_mod::psb_base_trim + !! \see psb_lbase_mat_mod::psb_base_trim ! interface subroutine psb_ld_coo_trim(a) - import :: psb_ipk_, psb_ld_coo_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a end subroutine psb_ld_coo_trim end interface @@ -1265,7 +1264,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_coo_clean_zeros(a,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_lpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_ld_coo_clean_zeros @@ -1274,11 +1273,11 @@ module psb_ld_base_mat_mod ! !> !! \memberof psb_ld_coo_sparse_mat - !! \see psb_base_mat_mod::psb_base_allocate_mnnz + !! \see psb_lbase_mat_mod::psb_base_allocate_mnnz ! interface subroutine psb_ld_coo_allocate_mnnz(m,n,a,nz) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_lpk_ + import integer(psb_lpk_), intent(in) :: m,n class(psb_ld_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(in), optional :: nz @@ -1287,10 +1286,10 @@ module psb_ld_base_mat_mod !> \memberof psb_ld_coo_sparse_mat - !| \see psb_base_mat_mod::psb_base_mold + !| \see psb_lbase_mat_mod::psb_base_mold interface subroutine psb_ld_coo_mold(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_ld_base_sparse_mat, psb_epk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a class(psb_ld_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -1312,7 +1311,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_coo_print(iout,a,iv,head,ivr,ivc) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_lpk_ + import integer(psb_ipk_), intent(in) :: iout class(psb_ld_coo_sparse_mat), intent(in) :: a integer(psb_lpk_), intent(in), optional :: iv(:) @@ -1333,7 +1332,7 @@ module psb_ld_base_mat_mod ! interface function psb_ld_coo_get_nz_row(idx,a) result(res) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_lpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: idx integer(psb_lpk_) :: res @@ -1357,7 +1356,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir) - import :: psb_ipk_, psb_dpk_, psb_lpk_ + import integer(psb_ipk_), intent(in) :: nr,nc,nzin,dupl integer(psb_lpk_), intent(inout) :: ia(:), ja(:) real(psb_dpk_), intent(inout) :: val(:) @@ -1377,7 +1376,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_fix_coo(a,info,idir) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_lpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: idir @@ -1389,7 +1388,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_cp_to_coo interface subroutine psb_ld_cp_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(in) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1401,7 +1400,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_cp_from_coo interface subroutine psb_ld_cp_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a class(psb_ld_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1414,7 +1413,7 @@ module psb_ld_base_mat_mod !! interface subroutine psb_ld_cp_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_ld_base_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(in) :: a class(psb_ld_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1427,7 +1426,7 @@ module psb_ld_base_mat_mod !! interface subroutine psb_ld_cp_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_ld_base_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1439,7 +1438,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_mv_to_coo interface subroutine psb_ld_mv_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1451,7 +1450,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_mv_from_coo interface subroutine psb_ld_mv_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a class(psb_ld_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1463,7 +1462,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_mv_to_fmt interface subroutine psb_ld_mv_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_ld_base_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1475,7 +1474,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_mv_from_fmt interface subroutine psb_ld_mv_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_ld_base_sparse_mat + import class(psb_ld_coo_sparse_mat), intent(inout) :: a class(psb_ld_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1484,7 +1483,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_coo_cp_from(a,b) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a type(psb_ld_coo_sparse_mat), intent(in) :: b end subroutine psb_ld_coo_cp_from @@ -1492,7 +1491,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_coo_mv_from(a,b) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a type(psb_ld_coo_sparse_mat), intent(inout) :: b end subroutine psb_ld_coo_mv_from @@ -1517,7 +1516,7 @@ module psb_ld_base_mat_mod ! interface subroutine psb_ld_coo_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: val(:) integer(psb_lpk_), intent(in) :: nz,ia(:), ja(:),& @@ -1529,11 +1528,11 @@ module psb_ld_base_mat_mod !> !! \memberof psb_ld_coo_sparse_mat - !! \see psb_base_mat_mod::psb_base_csgetptn + !! \see psb_lbase_mat_mod::psb_base_csgetptn interface subroutine psb_ld_coo_csgetptn(imin,imax,a,nz,ia,ja,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a integer(psb_lpk_), intent(in) :: imin,imax integer(psb_lpk_), intent(out) :: nz @@ -1552,7 +1551,7 @@ module psb_ld_base_mat_mod interface subroutine psb_ld_coo_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_, psb_lpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a integer(psb_lpk_), intent(in) :: imin,imax integer(psb_lpk_), intent(out) :: nz @@ -1571,7 +1570,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_cssv interface subroutine psb_ld_coo_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -1584,7 +1583,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_cssm interface subroutine psb_ld_coo_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -1598,7 +1597,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_csmv interface subroutine psb_ld_coo_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:) real(psb_dpk_), intent(inout) :: y(:) @@ -1612,7 +1611,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_csmm interface subroutine psb_ld_coo_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(in) :: alpha, beta, x(:,:) real(psb_dpk_), intent(inout) :: y(:,:) @@ -1627,7 +1626,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_maxval interface function psb_ld_coo_maxval(a) result(res) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_ld_coo_maxval @@ -1638,7 +1637,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_csnmi interface function psb_ld_coo_csnmi(a) result(res) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_ld_coo_csnmi @@ -1649,7 +1648,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_csnm1 interface function psb_ld_coo_csnm1(a) result(res) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_ld_coo_csnm1 @@ -1660,7 +1659,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_rowsum interface subroutine psb_ld_coo_rowsum(d,a) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_coo_rowsum @@ -1670,7 +1669,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_arwsum interface subroutine psb_ld_coo_arwsum(d,a) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_coo_arwsum @@ -1681,7 +1680,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_colsum interface subroutine psb_ld_coo_colsum(d,a) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_coo_colsum @@ -1692,7 +1691,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_aclsum interface subroutine psb_ld_coo_aclsum(d,a) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_ld_coo_aclsum @@ -1703,7 +1702,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_get_diag interface subroutine psb_ld_coo_get_diag(a,d,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1715,7 +1714,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_scal interface subroutine psb_ld_coo_scal(d,a,info,side) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1728,7 +1727,7 @@ module psb_ld_base_mat_mod !! \see psb_ld_base_mat_mod::psb_ld_base_scals interface subroutine psb_ld_coo_scals(d,a,info) - import :: psb_ipk_, psb_ld_coo_sparse_mat, psb_dpk_ + import class(psb_ld_coo_sparse_mat), intent(inout) :: a real(psb_dpk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info @@ -1937,7 +1936,7 @@ contains integer(psb_lpk_), allocatable :: itemp(:) integer(psb_ipk_) :: info - call a%psb_ld_base_sparse_mat%psb_base_sparse_mat%transp() + call a%psb_ld_base_sparse_mat%psb_lbase_sparse_mat%transp() call move_alloc(a%ia,itemp) call move_alloc(a%ja,a%ia) call move_alloc(itemp,a%ja) diff --git a/base/modules/serial/psb_s_base_mat_mod.f90 b/base/modules/serial/psb_s_base_mat_mod.f90 index 08a28a82e..63eb5d255 100644 --- a/base/modules/serial/psb_s_base_mat_mod.f90 +++ b/base/modules/serial/psb_s_base_mat_mod.f90 @@ -260,7 +260,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a real(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz, ia(:), ja(:), imin,imax,jmin,jmax @@ -271,8 +271,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_base_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_, & - & psb_s_base_vect_type, psb_i_base_vect_type + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_base_vect_type), intent(inout) :: val class(psb_i_base_vect_type), intent(inout) :: ia, ja @@ -317,7 +316,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_base_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -356,7 +355,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_base_csgetblk(imin,imax,a,b,info,& & jmin,jmax,iren,append,rscale,cscale) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(in) :: imin,imax @@ -394,7 +393,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_base_csclip(a,b,info,& & imin,imax,jmin,jmax,rscale,cscale) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_coo_sparse_mat), intent(out) :: b integer(psb_ipk_),intent(out) :: info @@ -435,7 +434,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_base_tril(a,l,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,u) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_coo_sparse_mat), intent(out) :: l integer(psb_ipk_),intent(out) :: info @@ -479,7 +478,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_base_triu(a,u,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,l) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_coo_sparse_mat), intent(out) :: u integer(psb_ipk_),intent(out) :: info @@ -502,7 +501,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_get_diag(a,d,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -521,7 +520,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_mold(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_epk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -543,7 +542,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_clone(a,b, info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_epk_ + import implicit none class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), allocatable, intent(inout) :: b @@ -562,7 +561,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_make_nonunit(a) - import :: psb_s_base_sparse_mat + import implicit none class(psb_s_base_sparse_mat), intent(inout) :: a end subroutine psb_s_base_make_nonunit @@ -579,7 +578,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_cp_to_coo(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -596,7 +595,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_cp_from_coo(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -614,7 +613,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_cp_to_fmt(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_s_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -632,7 +631,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_cp_from_fmt(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -649,7 +648,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_mv_to_coo(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -666,7 +665,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_mv_from_coo(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -684,7 +683,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_mv_to_fmt(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -702,7 +701,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_mv_from_fmt(a,b,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -715,7 +714,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_clean_zeros(a, info) - import :: psb_ipk_, psb_s_base_sparse_mat + import class(psb_s_base_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_s_base_clean_zeros @@ -731,7 +730,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_transp_2mat(a,b) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_s_base_transp_2mat @@ -747,7 +746,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_transc_2mat(a,b) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_s_base_transc_2mat @@ -762,7 +761,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_transp_1mat(a) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a end subroutine psb_s_base_transp_1mat end interface @@ -776,7 +775,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_transc_1mat(a) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a end subroutine psb_s_base_transc_1mat end interface @@ -801,7 +800,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) @@ -829,7 +828,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) @@ -864,7 +863,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_vect_mv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta class(psb_s_base_vect_type), intent(inout) :: x @@ -896,7 +895,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_inner_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) @@ -931,7 +930,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_inner_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) @@ -966,7 +965,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_inner_vect_sv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_s_base_vect_type, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta class(psb_s_base_vect_type), intent(inout) :: x, y @@ -998,7 +997,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_cssm(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) @@ -1031,7 +1030,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) @@ -1065,7 +1064,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_vect_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_,psb_s_base_vect_type, psb_ipk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta class(psb_s_base_vect_type), intent(inout) :: x,y @@ -1085,7 +1084,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_scals(d,a,info) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a real(psb_spk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info @@ -1103,7 +1102,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_scal(d,a,info,side) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(inout) :: a real(psb_spk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1119,7 +1118,7 @@ module psb_s_base_mat_mod ! interface function psb_s_base_maxval(a) result(res) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_s_base_maxval @@ -1134,7 +1133,7 @@ module psb_s_base_mat_mod ! interface function psb_s_base_csnmi(a) result(res) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_s_base_csnmi @@ -1149,7 +1148,7 @@ module psb_s_base_mat_mod ! interface function psb_s_base_csnm1(a) result(res) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_s_base_csnm1 @@ -1165,7 +1164,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_rowsum(d,a) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_base_rowsum @@ -1179,7 +1178,7 @@ module psb_s_base_mat_mod !! interface subroutine psb_s_base_arwsum(d,a) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_base_arwsum @@ -1195,7 +1194,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_base_colsum(d,a) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_base_colsum @@ -1209,7 +1208,7 @@ module psb_s_base_mat_mod !! interface subroutine psb_s_base_aclsum(d,a) - import :: psb_ipk_, psb_s_base_sparse_mat, psb_spk_ + import class(psb_s_base_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_base_aclsum @@ -1229,7 +1228,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_reallocate_nz(nz,a) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nz class(psb_s_coo_sparse_mat), intent(inout) :: a end subroutine psb_s_coo_reallocate_nz @@ -1242,7 +1241,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_reinit(a,clear) - import :: psb_ipk_, psb_s_coo_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a logical, intent(in), optional :: clear end subroutine psb_s_coo_reinit @@ -1254,7 +1253,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_trim(a) - import :: psb_ipk_, psb_s_coo_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a end subroutine psb_s_coo_trim end interface @@ -1265,7 +1264,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_clean_zeros(a,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_ipk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_s_coo_clean_zeros @@ -1278,7 +1277,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_allocate_mnnz(m,n,a,nz) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: m,n class(psb_s_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(in), optional :: nz @@ -1290,7 +1289,7 @@ module psb_s_base_mat_mod !| \see psb_base_mat_mod::psb_base_mold interface subroutine psb_s_coo_mold(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_s_base_sparse_mat, psb_epk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a class(psb_s_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -1312,7 +1311,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_print(iout,a,iv,head,ivr,ivc) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: iout class(psb_s_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in), optional :: iv(:) @@ -1333,7 +1332,7 @@ module psb_s_base_mat_mod ! interface function psb_s_coo_get_nz_row(idx,a) result(res) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_ipk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: idx integer(psb_ipk_) :: res @@ -1357,7 +1356,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir) - import :: psb_ipk_, psb_spk_, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nr,nc,nzin,dupl integer(psb_ipk_), intent(inout) :: ia(:), ja(:) real(psb_spk_), intent(inout) :: val(:) @@ -1377,7 +1376,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_fix_coo(a,info,idir) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_ipk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: idir @@ -1389,7 +1388,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_cp_to_coo interface subroutine psb_s_cp_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat + import class(psb_s_coo_sparse_mat), intent(in) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1401,7 +1400,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_cp_from_coo interface subroutine psb_s_cp_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a class(psb_s_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1414,7 +1413,7 @@ module psb_s_base_mat_mod !! interface subroutine psb_s_cp_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_s_base_sparse_mat + import class(psb_s_coo_sparse_mat), intent(in) :: a class(psb_s_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1427,7 +1426,7 @@ module psb_s_base_mat_mod !! interface subroutine psb_s_cp_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_s_base_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1439,7 +1438,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_mv_to_coo interface subroutine psb_s_mv_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1451,7 +1450,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_mv_from_coo interface subroutine psb_s_mv_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a class(psb_s_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1463,7 +1462,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_mv_to_fmt interface subroutine psb_s_mv_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_s_base_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1475,7 +1474,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_mv_from_fmt interface subroutine psb_s_mv_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_s_base_sparse_mat + import class(psb_s_coo_sparse_mat), intent(inout) :: a class(psb_s_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1484,7 +1483,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_coo_cp_from(a,b) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a type(psb_s_coo_sparse_mat), intent(in) :: b end subroutine psb_s_coo_cp_from @@ -1492,7 +1491,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_coo_mv_from(a,b) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a type(psb_s_coo_sparse_mat), intent(inout) :: b end subroutine psb_s_coo_mv_from @@ -1517,7 +1516,7 @@ module psb_s_base_mat_mod ! interface subroutine psb_s_coo_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a real(psb_spk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz,ia(:), ja(:),& @@ -1533,7 +1532,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_coo_csgetptn(imin,imax,a,nz,ia,ja,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1552,7 +1551,7 @@ module psb_s_base_mat_mod interface subroutine psb_s_coo_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_, psb_ipk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1571,7 +1570,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_cssv interface subroutine psb_s_coo_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) @@ -1584,7 +1583,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_cssm interface subroutine psb_s_coo_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) @@ -1598,7 +1597,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_csmv interface subroutine psb_s_coo_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:) real(psb_spk_), intent(inout) :: y(:) @@ -1612,7 +1611,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_csmm interface subroutine psb_s_coo_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(in) :: alpha, beta, x(:,:) real(psb_spk_), intent(inout) :: y(:,:) @@ -1627,7 +1626,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_maxval interface function psb_s_coo_maxval(a) result(res) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_s_coo_maxval @@ -1638,7 +1637,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_csnmi interface function psb_s_coo_csnmi(a) result(res) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_s_coo_csnmi @@ -1649,7 +1648,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_csnm1 interface function psb_s_coo_csnm1(a) result(res) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_) :: res end function psb_s_coo_csnm1 @@ -1660,7 +1659,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_rowsum interface subroutine psb_s_coo_rowsum(d,a) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_coo_rowsum @@ -1670,7 +1669,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_arwsum interface subroutine psb_s_coo_arwsum(d,a) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_coo_arwsum @@ -1681,7 +1680,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_colsum interface subroutine psb_s_coo_colsum(d,a) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_coo_colsum @@ -1692,7 +1691,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_aclsum interface subroutine psb_s_coo_aclsum(d,a) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) end subroutine psb_s_coo_aclsum @@ -1703,7 +1702,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_get_diag interface subroutine psb_s_coo_get_diag(a,d,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(in) :: a real(psb_spk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1715,7 +1714,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_scal interface subroutine psb_s_coo_scal(d,a,info,side) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a real(psb_spk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1728,7 +1727,7 @@ module psb_s_base_mat_mod !! \see psb_s_base_mat_mod::psb_s_base_scals interface subroutine psb_s_coo_scals(d,a,info) - import :: psb_ipk_, psb_s_coo_sparse_mat, psb_spk_ + import class(psb_s_coo_sparse_mat), intent(inout) :: a real(psb_spk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info diff --git a/base/modules/serial/psb_z_base_mat_mod.f90 b/base/modules/serial/psb_z_base_mat_mod.f90 index 6c78c8838..db934099f 100644 --- a/base/modules/serial/psb_z_base_mat_mod.f90 +++ b/base/modules/serial/psb_z_base_mat_mod.f90 @@ -260,7 +260,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a complex(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz, ia(:), ja(:), imin,imax,jmin,jmax @@ -271,8 +271,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_base_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_, & - & psb_z_base_vect_type, psb_i_base_vect_type + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_base_vect_type), intent(inout) :: val class(psb_i_base_vect_type), intent(inout) :: ia, ja @@ -317,7 +316,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_base_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -356,7 +355,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_base_csgetblk(imin,imax,a,b,info,& & jmin,jmax,iren,append,rscale,cscale) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(in) :: imin,imax @@ -394,7 +393,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_base_csclip(a,b,info,& & imin,imax,jmin,jmax,rscale,cscale) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_coo_sparse_mat), intent(out) :: b integer(psb_ipk_),intent(out) :: info @@ -435,7 +434,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_base_tril(a,l,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,u) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_coo_sparse_mat), intent(out) :: l integer(psb_ipk_),intent(out) :: info @@ -479,7 +478,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_base_triu(a,u,info,diag,imin,imax,& & jmin,jmax,rscale,cscale,l) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_coo_sparse_mat), intent(out) :: u integer(psb_ipk_),intent(out) :: info @@ -502,7 +501,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_get_diag(a,d,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -521,7 +520,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_mold(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_epk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -543,7 +542,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_clone(a,b, info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_epk_ + import implicit none class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), allocatable, intent(inout) :: b @@ -562,7 +561,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_make_nonunit(a) - import :: psb_z_base_sparse_mat + import implicit none class(psb_z_base_sparse_mat), intent(inout) :: a end subroutine psb_z_base_make_nonunit @@ -579,7 +578,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_cp_to_coo(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -596,7 +595,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_cp_from_coo(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -614,7 +613,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_cp_to_fmt(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_z_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -632,7 +631,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_cp_from_fmt(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -649,7 +648,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_mv_to_coo(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -666,7 +665,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_mv_from_coo(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -684,7 +683,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_mv_to_fmt(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -702,7 +701,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_mv_from_fmt(a,b,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -715,7 +714,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_clean_zeros(a, info) - import :: psb_ipk_, psb_z_base_sparse_mat + import class(psb_z_base_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_z_base_clean_zeros @@ -731,7 +730,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_transp_2mat(a,b) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_z_base_transp_2mat @@ -747,7 +746,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_transc_2mat(a,b) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a class(psb_base_sparse_mat), intent(out) :: b end subroutine psb_z_base_transc_2mat @@ -762,7 +761,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_transp_1mat(a) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a end subroutine psb_z_base_transp_1mat end interface @@ -776,7 +775,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_transc_1mat(a) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a end subroutine psb_z_base_transc_1mat end interface @@ -801,7 +800,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) @@ -829,7 +828,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) @@ -864,7 +863,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_vect_mv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta class(psb_z_base_vect_type), intent(inout) :: x @@ -896,7 +895,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_inner_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) @@ -931,7 +930,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_inner_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) @@ -966,7 +965,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_inner_vect_sv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_z_base_vect_type, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta class(psb_z_base_vect_type), intent(inout) :: x, y @@ -998,7 +997,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_cssm(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) @@ -1031,7 +1030,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) @@ -1065,7 +1064,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_vect_cssv(alpha,a,x,beta,y,info,trans,scale,d) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_,psb_z_base_vect_type, psb_ipk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta class(psb_z_base_vect_type), intent(inout) :: x,y @@ -1085,7 +1084,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_scals(d,a,info) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a complex(psb_dpk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info @@ -1103,7 +1102,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_scal(d,a,info,side) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(inout) :: a complex(psb_dpk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1119,7 +1118,7 @@ module psb_z_base_mat_mod ! interface function psb_z_base_maxval(a) result(res) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_z_base_maxval @@ -1134,7 +1133,7 @@ module psb_z_base_mat_mod ! interface function psb_z_base_csnmi(a) result(res) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_z_base_csnmi @@ -1149,7 +1148,7 @@ module psb_z_base_mat_mod ! interface function psb_z_base_csnm1(a) result(res) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_z_base_csnm1 @@ -1165,7 +1164,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_rowsum(d,a) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_base_rowsum @@ -1179,7 +1178,7 @@ module psb_z_base_mat_mod !! interface subroutine psb_z_base_arwsum(d,a) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_base_arwsum @@ -1195,7 +1194,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_base_colsum(d,a) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_base_colsum @@ -1209,7 +1208,7 @@ module psb_z_base_mat_mod !! interface subroutine psb_z_base_aclsum(d,a) - import :: psb_ipk_, psb_z_base_sparse_mat, psb_dpk_ + import class(psb_z_base_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_base_aclsum @@ -1229,7 +1228,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_reallocate_nz(nz,a) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nz class(psb_z_coo_sparse_mat), intent(inout) :: a end subroutine psb_z_coo_reallocate_nz @@ -1242,7 +1241,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_reinit(a,clear) - import :: psb_ipk_, psb_z_coo_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a logical, intent(in), optional :: clear end subroutine psb_z_coo_reinit @@ -1254,7 +1253,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_trim(a) - import :: psb_ipk_, psb_z_coo_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a end subroutine psb_z_coo_trim end interface @@ -1265,7 +1264,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_clean_zeros(a,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_ipk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info end subroutine psb_z_coo_clean_zeros @@ -1278,7 +1277,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_allocate_mnnz(m,n,a,nz) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: m,n class(psb_z_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(in), optional :: nz @@ -1290,7 +1289,7 @@ module psb_z_base_mat_mod !| \see psb_base_mat_mod::psb_base_mold interface subroutine psb_z_coo_mold(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_z_base_sparse_mat, psb_epk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a class(psb_z_base_sparse_mat), intent(inout), allocatable :: b integer(psb_ipk_), intent(out) :: info @@ -1312,7 +1311,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_print(iout,a,iv,head,ivr,ivc) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_ipk_ + import integer(psb_ipk_), intent(in) :: iout class(psb_z_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in), optional :: iv(:) @@ -1333,7 +1332,7 @@ module psb_z_base_mat_mod ! interface function psb_z_coo_get_nz_row(idx,a) result(res) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_ipk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: idx integer(psb_ipk_) :: res @@ -1357,7 +1356,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir) - import :: psb_ipk_, psb_dpk_, psb_ipk_ + import integer(psb_ipk_), intent(in) :: nr,nc,nzin,dupl integer(psb_ipk_), intent(inout) :: ia(:), ja(:) complex(psb_dpk_), intent(inout) :: val(:) @@ -1377,7 +1376,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_fix_coo(a,info,idir) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_ipk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(in), optional :: idir @@ -1389,7 +1388,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_cp_to_coo interface subroutine psb_z_cp_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat + import class(psb_z_coo_sparse_mat), intent(in) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1401,7 +1400,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_cp_from_coo interface subroutine psb_z_cp_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a class(psb_z_coo_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1414,7 +1413,7 @@ module psb_z_base_mat_mod !! interface subroutine psb_z_cp_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_z_base_sparse_mat + import class(psb_z_coo_sparse_mat), intent(in) :: a class(psb_z_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1427,7 +1426,7 @@ module psb_z_base_mat_mod !! interface subroutine psb_z_cp_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_z_base_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), intent(in) :: b integer(psb_ipk_), intent(out) :: info @@ -1439,7 +1438,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_mv_to_coo interface subroutine psb_z_mv_coo_to_coo(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1451,7 +1450,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_mv_from_coo interface subroutine psb_z_mv_coo_from_coo(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a class(psb_z_coo_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1463,7 +1462,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_mv_to_fmt interface subroutine psb_z_mv_coo_to_fmt(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_z_base_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1475,7 +1474,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_mv_from_fmt interface subroutine psb_z_mv_coo_from_fmt(a,b,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_z_base_sparse_mat + import class(psb_z_coo_sparse_mat), intent(inout) :: a class(psb_z_base_sparse_mat), intent(inout) :: b integer(psb_ipk_), intent(out) :: info @@ -1484,7 +1483,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_coo_cp_from(a,b) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a type(psb_z_coo_sparse_mat), intent(in) :: b end subroutine psb_z_coo_cp_from @@ -1492,7 +1491,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_coo_mv_from(a,b) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a type(psb_z_coo_sparse_mat), intent(inout) :: b end subroutine psb_z_coo_mv_from @@ -1517,7 +1516,7 @@ module psb_z_base_mat_mod ! interface subroutine psb_z_coo_csput_a(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a complex(psb_dpk_), intent(in) :: val(:) integer(psb_ipk_), intent(in) :: nz,ia(:), ja(:),& @@ -1533,7 +1532,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_coo_csgetptn(imin,imax,a,nz,ia,ja,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1552,7 +1551,7 @@ module psb_z_base_mat_mod interface subroutine psb_z_coo_csgetrow(imin,imax,a,nz,ia,ja,val,info,& & jmin,jmax,iren,append,nzin,rscale,cscale) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_, psb_ipk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a integer(psb_ipk_), intent(in) :: imin,imax integer(psb_ipk_), intent(out) :: nz @@ -1571,7 +1570,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_cssv interface subroutine psb_z_coo_cssv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) @@ -1584,7 +1583,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_cssm interface subroutine psb_z_coo_cssm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) @@ -1598,7 +1597,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_csmv interface subroutine psb_z_coo_csmv(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:) complex(psb_dpk_), intent(inout) :: y(:) @@ -1612,7 +1611,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_csmm interface subroutine psb_z_coo_csmm(alpha,a,x,beta,y,info,trans) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(in) :: alpha, beta, x(:,:) complex(psb_dpk_), intent(inout) :: y(:,:) @@ -1627,7 +1626,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_maxval interface function psb_z_coo_maxval(a) result(res) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_z_coo_maxval @@ -1638,7 +1637,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_csnmi interface function psb_z_coo_csnmi(a) result(res) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_z_coo_csnmi @@ -1649,7 +1648,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_csnm1 interface function psb_z_coo_csnm1(a) result(res) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a real(psb_dpk_) :: res end function psb_z_coo_csnm1 @@ -1660,7 +1659,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_rowsum interface subroutine psb_z_coo_rowsum(d,a) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_coo_rowsum @@ -1670,7 +1669,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_arwsum interface subroutine psb_z_coo_arwsum(d,a) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_coo_arwsum @@ -1681,7 +1680,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_colsum interface subroutine psb_z_coo_colsum(d,a) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_coo_colsum @@ -1692,7 +1691,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_aclsum interface subroutine psb_z_coo_aclsum(d,a) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a real(psb_dpk_), intent(out) :: d(:) end subroutine psb_z_coo_aclsum @@ -1703,7 +1702,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_get_diag interface subroutine psb_z_coo_get_diag(a,d,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(in) :: a complex(psb_dpk_), intent(out) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1715,7 +1714,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_scal interface subroutine psb_z_coo_scal(d,a,info,side) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a complex(psb_dpk_), intent(in) :: d(:) integer(psb_ipk_), intent(out) :: info @@ -1728,7 +1727,7 @@ module psb_z_base_mat_mod !! \see psb_z_base_mat_mod::psb_z_base_scals interface subroutine psb_z_coo_scals(d,a,info) - import :: psb_ipk_, psb_z_coo_sparse_mat, psb_dpk_ + import class(psb_z_coo_sparse_mat), intent(inout) :: a complex(psb_dpk_), intent(in) :: d integer(psb_ipk_), intent(out) :: info diff --git a/cbind/test/pargen/runs/ppde.inp b/cbind/test/pargen/runs/ppde.inp index 225e6e7fc..e01625917 100644 --- a/cbind/test/pargen/runs/ppde.inp +++ b/cbind/test/pargen/runs/ppde.inp @@ -2,7 +2,7 @@ BICGSTAB Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES BJAC Preconditioner NONE DIAG BJAC CSR A Storage format CSR COO -40 Domain size (acutal system is this**3) +100 Domain size (acutal system is this**3) 1 Stopping criterion 80 MAXIT 01 ITRACE