psblas-typext

Modified the spmat_types to contain type-bound procedures for CSMM and
CSSM. 
Modified the PSBLAS and psb_map accordingly.
psblas3-type-indexed
Salvatore Filippone 17 years ago
parent 78031d8651
commit e42460b161

@ -23,7 +23,7 @@ lib: mpfobjs $(MODULES) $(OBJS) $(LIBMOD)
/bin/cp -p *$(.mod) $(LIBDIR) /bin/cp -p *$(.mod) $(LIBDIR)
psb_realloc_mod.o : psb_error_mod.o psb_realloc_mod.o : psb_error_mod.o
psb_spmat_type.o : psb_realloc_mod.o psb_error_mod.o psb_const_mod.o psb_string_mod.o psb_spmat_type.o : psb_realloc_mod.o psb_error_mod.o psb_const_mod.o psb_string_mod.o psb_sort_mod.o
psb_error_mod.o: psb_const_mod.o psb_error_mod.o: psb_const_mod.o
psb_penv_mod.o: psb_const_mod.o psb_error_mod.o psb_realloc_mod.o psb_blacs_mod.o psb_penv_mod.o: psb_const_mod.o psb_error_mod.o psb_realloc_mod.o psb_blacs_mod.o
psb_blacs_mod.o: psb_const_mod.o psb_blacs_mod.o: psb_const_mod.o

@ -58,147 +58,149 @@ module psb_serial_mod
end subroutine psb_zcsrws end subroutine psb_zcsrws
end interface end interface
interface psb_cssm !!$ interface psb_cssm
subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_sspmat_type) :: t !!$ type(psb_sspmat_type) :: t
real(psb_spk_) :: alpha, beta, b(:,:), c(:,:) !!$ real(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
real(psb_spk_), optional, target :: d(:) !!$ real(psb_spk_), optional, target :: d(:)
end subroutine psb_scssm !!$ end subroutine psb_scssm
subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_sspmat_type) :: t !!$ type(psb_sspmat_type) :: t
real(psb_spk_) :: alpha, beta, b(:), c(:) !!$ real(psb_spk_) :: alpha, beta, b(:), c(:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
real(psb_spk_), optional, target :: d(:) !!$ real(psb_spk_), optional, target :: d(:)
end subroutine psb_scssv !!$ end subroutine psb_scssv
subroutine psb_dcssm(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_dcssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_dspmat_type) :: t !!$ type(psb_dspmat_type) :: t
real(psb_dpk_) :: alpha, beta, b(:,:), c(:,:) !!$ real(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
real(psb_dpk_), optional, target :: d(:) !!$ real(psb_dpk_), optional, target :: d(:)
end subroutine psb_dcssm !!$ end subroutine psb_dcssm
subroutine psb_dcssv(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_dcssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_dspmat_type) :: t !!$ type(psb_dspmat_type) :: t
real(psb_dpk_) :: alpha, beta, b(:), c(:) !!$ real(psb_dpk_) :: alpha, beta, b(:), c(:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
real(psb_dpk_), optional, target :: d(:) !!$ real(psb_dpk_), optional, target :: d(:)
end subroutine psb_dcssv !!$ end subroutine psb_dcssv
subroutine psb_ccssm(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_ccssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_cspmat_type) :: t !!$ type(psb_cspmat_type) :: t
complex(psb_spk_) :: alpha, beta, b(:,:), c(:,:) !!$ complex(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
complex(psb_spk_), optional, target :: d(:) !!$ complex(psb_spk_), optional, target :: d(:)
end subroutine psb_ccssm !!$ end subroutine psb_ccssm
subroutine psb_ccssv(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_ccssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_cspmat_type) :: t !!$ type(psb_cspmat_type) :: t
complex(psb_spk_) :: alpha, beta, b(:), c(:) !!$ complex(psb_spk_) :: alpha, beta, b(:), c(:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
complex(psb_spk_), optional, target :: d(:) !!$ complex(psb_spk_), optional, target :: d(:)
end subroutine psb_ccssv !!$ end subroutine psb_ccssv
subroutine psb_zcssm(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_zcssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_zspmat_type) :: t !!$ type(psb_zspmat_type) :: t
complex(psb_dpk_) :: alpha, beta, b(:,:), c(:,:) !!$ complex(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
complex(psb_dpk_), optional, target :: d(:) !!$ complex(psb_dpk_), optional, target :: d(:)
end subroutine psb_zcssm !!$ end subroutine psb_zcssm
subroutine psb_zcssv(alpha,t,b,beta,c,info,trans,unitd,d) !!$ subroutine psb_zcssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_zspmat_type) :: t !!$ type(psb_zspmat_type) :: t
complex(psb_dpk_) :: alpha, beta, b(:), c(:) !!$ complex(psb_dpk_) :: alpha, beta, b(:), c(:)
integer :: info !!$ integer :: info
character, optional :: trans, unitd !!$ character, optional :: trans, unitd
complex(psb_dpk_), optional, target :: d(:) !!$ complex(psb_dpk_), optional, target :: d(:)
end subroutine psb_zcssv !!$ end subroutine psb_zcssv
end interface !!$ end interface
interface psb_csmm !!$ interface psb_csmm
subroutine psb_scsmv(alpha,a,b,beta,c,info,trans) !!$ module procedure psb_scsmm, psb_scsmv, psb_dcsmm, psb_dcsmv,&
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ & psb_ccsmm, psb_ccsmv, psb_zcsmm, psb_zcsmv
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_scsmv(alpha,a,b,beta,c,info,trans)
type(psb_sspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
real(psb_spk_) :: alpha, beta, b(:), c(:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_sspmat_type) :: a
character, optional :: trans !!$ real(psb_spk_) :: alpha, beta, b(:), c(:)
end subroutine psb_scsmv !!$ integer :: info
subroutine psb_scsmm(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_scsmv
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_scsmm(alpha,a,b,beta,c,info,trans)
type(psb_sspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
real(psb_spk_) :: alpha, beta, b(:,:), c(:,:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_sspmat_type) :: a
character, optional :: trans !!$ real(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
end subroutine psb_scsmm !!$ integer :: info
subroutine psb_dcsmv(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_scsmm
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_dcsmv(alpha,a,b,beta,c,info,trans)
type(psb_dspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
real(psb_dpk_) :: alpha, beta, b(:), c(:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_dspmat_type) :: a
character, optional :: trans !!$ real(psb_dpk_) :: alpha, beta, b(:), c(:)
end subroutine psb_dcsmv !!$ integer :: info
subroutine psb_dcsmm(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_dcsmv
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_dcsmm(alpha,a,b,beta,c,info,trans)
type(psb_dspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
real(psb_dpk_) :: alpha, beta, b(:,:), c(:,:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_dspmat_type) :: a
character, optional :: trans !!$ real(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
end subroutine psb_dcsmm !!$ integer :: info
subroutine psb_ccsmv(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_dcsmm
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_ccsmv(alpha,a,b,beta,c,info,trans)
type(psb_cspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
complex(psb_spk_) :: alpha, beta, b(:), c(:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_cspmat_type) :: a
character, optional :: trans !!$ complex(psb_spk_) :: alpha, beta, b(:), c(:)
end subroutine psb_ccsmv !!$ integer :: info
subroutine psb_ccsmm(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_ccsmv
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_ccsmm(alpha,a,b,beta,c,info,trans)
type(psb_cspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
complex(psb_spk_) :: alpha, beta, b(:,:), c(:,:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_cspmat_type) :: a
character, optional :: trans !!$ complex(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
end subroutine psb_ccsmm !!$ integer :: info
subroutine psb_zcsmv(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_ccsmm
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_zcsmv(alpha,a,b,beta,c,info,trans)
type(psb_zspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
complex(psb_dpk_) :: alpha, beta, b(:), c(:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_zspmat_type) :: a
character, optional :: trans !!$ complex(psb_dpk_) :: alpha, beta, b(:), c(:)
end subroutine psb_zcsmv !!$ integer :: info
subroutine psb_zcsmm(alpha,a,b,beta,c,info,trans) !!$ character, optional :: trans
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,& !!$ end subroutine psb_zcsmv
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_ !!$ subroutine psb_zcsmm(alpha,a,b,beta,c,info,trans)
type(psb_zspmat_type) :: a !!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
complex(psb_dpk_) :: alpha, beta, b(:,:), c(:,:) !!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer :: info !!$ type(psb_zspmat_type) :: a
character, optional :: trans !!$ complex(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
end subroutine psb_zcsmm !!$ integer :: info
end interface !!$ character, optional :: trans
!!$ end subroutine psb_zcsmm
!!$ end interface
interface psb_cest interface psb_cest
subroutine psb_cest(afmt, m,n,nnz, lia1, lia2, lar, iup, info) subroutine psb_cest(afmt, m,n,nnz, lia1, lia2, lar, iup, info)

@ -127,28 +127,52 @@ module psb_spmat_type
integer :: infoa(psb_ifasize_) integer :: infoa(psb_ifasize_)
integer, allocatable :: ia1(:), ia2(:) integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pl(:), pr(:) integer, allocatable :: pl(:), pr(:)
end type psb_base_spmat_type end type psb_base_spmat_type
type, extends(psb_base_spmat_type) :: psb_sspmat_type type, extends(psb_base_spmat_type) :: psb_sspmat_type
real(psb_spk_), allocatable :: aspk(:) real(psb_spk_), allocatable :: aspk(:)
contains
procedure, pass(a) :: psb_scsmm
procedure, pass(a) :: psb_scsmv
generic, public :: csmm => psb_scsmm, psb_scsmv
procedure, pass(t) :: psb_scssm
procedure, pass(t) :: psb_scssv
generic, public :: cssm => psb_scssm, psb_scssv
end type psb_sspmat_type end type psb_sspmat_type
type, extends(psb_base_spmat_type) :: psb_cspmat_type type, extends(psb_base_spmat_type) :: psb_cspmat_type
complex(psb_spk_), allocatable :: aspk(:) complex(psb_spk_), allocatable :: aspk(:)
contains
procedure, pass(a) :: psb_ccsmm
procedure, pass(a) :: psb_ccsmv
generic, public :: csmm => psb_ccsmm, psb_ccsmv
procedure, pass(t) :: psb_ccssm
procedure, pass(t) :: psb_ccssv
generic, public :: cssm => psb_ccssm, psb_ccssv
end type psb_cspmat_type end type psb_cspmat_type
type, extends(psb_base_spmat_type) :: psb_dspmat_type type, extends(psb_base_spmat_type) :: psb_dspmat_type
real(psb_dpk_), allocatable :: aspk(:) real(psb_dpk_), allocatable :: aspk(:)
contains contains
procedure, pass(a) :: i_spmv => psb_dspmv_inner procedure, pass(a) :: psb_dcsmm
procedure, pass(a) :: i_spmm => psb_dspmm_inner procedure, pass(a) :: psb_dcsmv
generic, public :: spmm => i_spmv, i_spmm generic, public :: csmm => psb_dcsmm, psb_dcsmv
procedure, pass(t) :: psb_dcssm
procedure, pass(t) :: psb_dcssv
generic, public :: cssm => psb_dcssm, psb_dcssv
end type psb_dspmat_type end type psb_dspmat_type
type, extends(psb_base_spmat_type) :: psb_zspmat_type type, extends(psb_base_spmat_type) :: psb_zspmat_type
complex(psb_dpk_), allocatable :: aspk(:) complex(psb_dpk_), allocatable :: aspk(:)
contains
procedure, pass(a) :: psb_zcsmm
procedure, pass(a) :: psb_zcsmv
generic, public :: csmm => psb_zcsmm, psb_zcsmv
procedure, pass(t) :: psb_zcssm
procedure, pass(t) :: psb_zcssv
generic, public :: cssm => psb_zcssm, psb_zcssv
end type psb_zspmat_type end type psb_zspmat_type
interface psb_nullify_sp interface psb_nullify_sp
@ -247,27 +271,145 @@ module psb_spmat_type
& psb_dspinfo, psb_zspinfo & psb_dspinfo, psb_zspinfo
end interface end interface
private psb_dspmm_inner, psb_dspmv_inner
contains interface psb_csmm
subroutine psb_scsmv(alpha,a,b,beta,c,info,trans)
import :: psb_sspmat_type, psb_spk_
type(psb_sspmat_type) :: a
real(psb_spk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans
end subroutine psb_scsmv
subroutine psb_scsmm(alpha,a,b,beta,c,info,trans)
import :: psb_sspmat_type, psb_spk_
type(psb_sspmat_type) :: a
real(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans
end subroutine psb_scsmm
subroutine psb_dcsmv(alpha,a,b,beta,c,info,trans)
import :: psb_dspmat_type, psb_dpk_
type(psb_dspmat_type) :: a
real(psb_dpk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans
end subroutine psb_dcsmv
subroutine psb_dcsmm(alpha,a,b,beta,c,info,trans)
import :: psb_dspmat_type, psb_dpk_
type(psb_dspmat_type) :: a
real(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans
end subroutine psb_dcsmm
subroutine psb_ccsmv(alpha,a,b,beta,c,info,trans)
import :: psb_cspmat_type, psb_spk_
type(psb_cspmat_type) :: a
complex(psb_spk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans
end subroutine psb_ccsmv
subroutine psb_ccsmm(alpha,a,b,beta,c,info,trans)
import :: psb_cspmat_type, psb_spk_
type(psb_cspmat_type) :: a
complex(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans
end subroutine psb_ccsmm
subroutine psb_zcsmv(alpha,a,b,beta,c,info,trans)
import :: psb_zspmat_type, psb_dpk_
type(psb_zspmat_type) :: a
complex(psb_dpk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans
end subroutine psb_zcsmv
subroutine psb_zcsmm(alpha,a,b,beta,c,info,trans)
import :: psb_zspmat_type, psb_dpk_
type(psb_zspmat_type) :: a
complex(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans
end subroutine psb_zcsmm
end interface
subroutine psb_dspmv_inner(alpha,a,x,beta,y,info) interface psb_cssm
type(psb_dspmat_type), intent(in) :: a subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d)
real(psb_dpk_), intent(in) :: alpha,beta,x(:) import :: psb_sspmat_type, psb_dspmat_type,&
real(psb_dpk_), intent(inout) :: y(:) & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
integer, intent(out) :: info type(psb_sspmat_type) :: t
real(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans, unitd
real(psb_spk_), optional, target :: d(:)
end subroutine psb_scssm
subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_sspmat_type) :: t
real(psb_spk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans, unitd
real(psb_spk_), optional, target :: d(:)
end subroutine psb_scssv
subroutine psb_dcssm(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_dspmat_type) :: t
real(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans, unitd
real(psb_dpk_), optional, target :: d(:)
end subroutine psb_dcssm
subroutine psb_dcssv(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_dspmat_type) :: t
real(psb_dpk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans, unitd
real(psb_dpk_), optional, target :: d(:)
end subroutine psb_dcssv
subroutine psb_ccssm(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_cspmat_type) :: t
complex(psb_spk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans, unitd
complex(psb_spk_), optional, target :: d(:)
end subroutine psb_ccssm
subroutine psb_ccssv(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_cspmat_type) :: t
complex(psb_spk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans, unitd
complex(psb_spk_), optional, target :: d(:)
end subroutine psb_ccssv
subroutine psb_zcssm(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_zspmat_type) :: t
complex(psb_dpk_) :: alpha, beta, b(:,:), c(:,:)
integer :: info
character, optional :: trans, unitd
complex(psb_dpk_), optional, target :: d(:)
end subroutine psb_zcssm
subroutine psb_zcssv(alpha,t,b,beta,c,info,trans,unitd,d)
import :: psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
type(psb_zspmat_type) :: t
complex(psb_dpk_) :: alpha, beta, b(:), c(:)
integer :: info
character, optional :: trans, unitd
complex(psb_dpk_), optional, target :: d(:)
end subroutine psb_zcssv
end interface
write(0,*) 'Inner spmv was invoked!'
end subroutine psb_dspmv_inner
subroutine psb_dspmm_inner(alpha,a,x,beta,y,info)
type(psb_dspmat_type), intent(in) :: a
real(psb_dpk_), intent(in) :: alpha,beta,x(:,:)
real(psb_dpk_), intent(inout) :: y(:,:)
integer, intent(out) :: info
write(0,*) 'Inner spmm was invoked!' contains
end subroutine psb_dspmm_inner
integer function psb_get_ssp_nrows(a) integer function psb_get_ssp_nrows(a)
type(psb_sspmat_type), intent(in) :: a type(psb_sspmat_type), intent(in) :: a

@ -250,7 +250,7 @@ subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk if(info /= 0) exit blk
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(:,jjx+i-1:jjx+i+ib-1),& call a%csmm(alpha,x(:,jjx+i-1:jjx+i+ib-1),&
& beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_) & beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_)
if(info /= 0) exit blk if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)& if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& ib1,czero,x(:,1:ik),desc_a,iwork,info) & ib1,czero,x(:,1:ik),desc_a,iwork,info)
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info)
end if end if
if(info /= 0) then if(info /= 0) then
@ -311,7 +311,7 @@ subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,&
if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info) if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info)
y(nrow+1:ncol,1:ik) = czero y(nrow+1:ncol,1:ik) = czero
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then if (info /= 0) then
@ -581,7 +581,7 @@ subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,&
end if end if
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(iix:lldx),beta,y(iiy:lldy),info) call a%csmm(alpha,x(iix:lldx),beta,y(iiy:lldy),info)
if(info /= 0) then if(info /= 0) then
info = 4011 info = 4011
@ -628,7 +628,7 @@ subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = czero yp(nrow+1:ncol) = czero
! local Matrix-vector product ! local Matrix-vector product
if (info == 0) call psb_csmm(alpha,a,x,beta,yp,info,trans=trans_) if (info == 0) call a%csmm(alpha,x,beta,yp,info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info

@ -258,7 +258,7 @@ subroutine psb_cspsm(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx,jjx:jjx+ik-1) xp => x(iix:lldx,jjx:jjx+ik-1)
yp => y(iiy:lldy,jjy:jjy+ik-1) yp => y(iiy:lldy,jjy:jjy+ik-1)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010
@ -528,7 +528,7 @@ subroutine psb_cspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx) xp => x(iix:lldx)
yp => y(iiy:lldy) yp => y(iiy:lldy)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010

@ -250,7 +250,7 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk if(info /= 0) exit blk
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(:,jjx+i-1:jjx+i+ib-1),& call a%csmm(alpha,x(:,jjx+i-1:jjx+i+ib-1),&
& beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_) & beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_)
if(info /= 0) exit blk if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)& if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& ib1,dzero,x(:,1:ik),desc_a,iwork,info) & ib1,dzero,x(:,1:ik),desc_a,iwork,info)
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info)
end if end if
if(info /= 0) then if(info /= 0) then
info = 4011 info = 4011
@ -310,7 +310,7 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,&
if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info) if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info)
y(nrow+1:ncol,1:ik) = dzero y(nrow+1:ncol,1:ik) = dzero
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then if (info /= 0) then
@ -579,10 +579,7 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,&
& dzero,x,desc_a,iwork,info,data=psb_comm_halo_) & dzero,x,desc_a,iwork,info,data=psb_comm_halo_)
end if end if
! Just for fun ! Just for fun
call a%spmm(alpha,x,beta,y,info) call a%csmm(alpha,x,beta,y,info)
! local Matrix-vector product
call psb_csmm(alpha,a,x(iix:lldx),beta,y(iiy:lldy),info)
if(info /= 0) then if(info /= 0) then
info = 4011 info = 4011
@ -629,7 +626,7 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = dzero yp(nrow+1:ncol) = dzero
! local Matrix-vector product ! local Matrix-vector product
if (info == 0) call psb_csmm(alpha,a,x,beta,yp,info,trans=trans_) if (info == 0) call a%csmm(alpha,x,beta,y,info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info

@ -259,7 +259,7 @@ subroutine psb_dspsm(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx,jjx:jjx+ik-1) xp => x(iix:lldx,jjx:jjx+ik-1)
yp => y(iiy:lldy,jjy:jjy+ik-1) yp => y(iiy:lldy,jjy:jjy+ik-1)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010
@ -529,7 +529,7 @@ subroutine psb_dspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx) xp => x(iix:lldx)
yp => y(iiy:lldy) yp => y(iiy:lldy)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010

@ -250,7 +250,7 @@ subroutine psb_sspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk if(info /= 0) exit blk
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(:,jjx+i-1:jjx+i+ib-1),& call a%csmm(alpha,x(:,jjx+i-1:jjx+i+ib-1),&
& beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_) & beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_)
if(info /= 0) exit blk if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_sspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)& if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& ib1,szero,x(:,1:ik),desc_a,iwork,info) & ib1,szero,x(:,1:ik),desc_a,iwork,info)
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info)
end if end if
if(info /= 0) then if(info /= 0) then
info = 4011 info = 4011
@ -310,7 +310,7 @@ subroutine psb_sspmm(alpha,a,x,beta,y,desc_a,info,&
if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info) if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info)
y(nrow+1:ncol,1:ik) = szero y(nrow+1:ncol,1:ik) = szero
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then if (info /= 0) then
@ -580,7 +580,7 @@ subroutine psb_sspmv(alpha,a,x,beta,y,desc_a,info,&
end if end if
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(iix:lldx),beta,y(iiy:lldy),info) call a%csmm(alpha,x(iix:lldx),beta,y(iiy:lldy),info)
if(info /= 0) then if(info /= 0) then
info = 4011 info = 4011
@ -627,7 +627,7 @@ subroutine psb_sspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = szero yp(nrow+1:ncol) = szero
! local Matrix-vector product ! local Matrix-vector product
if (info == 0) call psb_csmm(alpha,a,x,beta,yp,info,trans=trans_) if (info == 0) call a%csmm(alpha,x,beta,yp,info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info

@ -259,7 +259,7 @@ subroutine psb_sspsm(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx,jjx:jjx+ik-1) xp => x(iix:lldx,jjx:jjx+ik-1)
yp => y(iiy:lldy,jjy:jjy+ik-1) yp => y(iiy:lldy,jjy:jjy+ik-1)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010
@ -529,7 +529,7 @@ subroutine psb_sspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx) xp => x(iix:lldx)
yp => y(iiy:lldy) yp => y(iiy:lldy)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010

@ -250,7 +250,7 @@ subroutine psb_zspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk if(info /= 0) exit blk
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(:,jjx+i-1:jjx+i+ib-1),& call a%csmm(alpha,x(:,jjx+i-1:jjx+i+ib-1),&
& beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_) & beta,y(:,jjy+i-1:jjy+i+ib-1),info,trans=trans_)
if(info /= 0) exit blk if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_zspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)& if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),& & call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& ib1,zzero,x(:,1:ik),desc_a,iwork,info) & ib1,zzero,x(:,1:ik),desc_a,iwork,info)
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info)
end if end if
if(info /= 0) then if(info /= 0) then
@ -311,7 +311,7 @@ subroutine psb_zspmm(alpha,a,x,beta,y,desc_a,info,&
if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info) if (info == 0) call psi_ovrl_upd(x,desc_a,psb_avg_,info)
y(nrow+1:ncol,1:ik) = zzero y(nrow+1:ncol,1:ik) = zzero
if (info == 0) call psb_csmm(alpha,a,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_) if (info == 0) call a%csmm(alpha,x(:,1:ik),beta,y(:,1:ik),info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then if (info /= 0) then
@ -581,7 +581,7 @@ subroutine psb_zspmv(alpha,a,x,beta,y,desc_a,info,&
end if end if
! local Matrix-vector product ! local Matrix-vector product
call psb_csmm(alpha,a,x(iix:lldx),beta,y(iiy:lldy),info) call a%csmm(alpha,x(iix:lldx),beta,y(iiy:lldy),info)
if(info /= 0) then if(info /= 0) then
info = 4011 info = 4011
@ -628,7 +628,7 @@ subroutine psb_zspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = zzero yp(nrow+1:ncol) = zzero
! local Matrix-vector product ! local Matrix-vector product
if (info == 0) call psb_csmm(alpha,a,x,beta,yp,info,trans=trans_) if (info == 0) call a%csmm(alpha,x,beta,yp,info,trans=trans_)
if (debug_level >= psb_debug_comp_) & if (debug_level >= psb_debug_comp_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info & write(debug_unit,*) me,' ',trim(name),' csmm ', info

@ -258,7 +258,7 @@ subroutine psb_zspsm(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx,jjx:jjx+ik-1) xp => x(iix:lldx,jjx:jjx+ik-1)
yp => y(iiy:lldy,jjy:jjy+ik-1) yp => y(iiy:lldy,jjy:jjy+ik-1)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010
@ -528,7 +528,7 @@ subroutine psb_zspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve ! Perform local triangular system solve
xp => x(iix:lldx) xp => x(iix:lldx)
yp => y(iiy:lldy) yp => y(iiy:lldy)
call psb_cssm(alpha,a,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans) call a%cssm(alpha,xp,beta,yp,info,unitd=lunitd,d=id,trans=itrans)
if(info /= 0) then if(info /= 0) then
info = 4010 info = 4010

@ -33,7 +33,7 @@
! Subroutine: ! Subroutine:
! Arguments: ! Arguments:
subroutine psb_ccsmm(alpha,a,b,beta,c,info,trans) subroutine psb_ccsmm(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_ccsmm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,8 @@
! Arguments: ! Arguments:
subroutine psb_ccsmv(alpha,a,b,beta,c,info,trans) subroutine psb_ccsmv(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_ccsmv
use psb_error_mod
implicit none implicit none
type(psb_cspmat_type) :: a type(psb_cspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_ccssm(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_ccssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_ccssm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_ccssv(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_ccssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_ccssv
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -33,7 +33,7 @@
! Subroutine: ! Subroutine:
! Arguments: ! Arguments:
subroutine psb_dcsmm(alpha,a,b,beta,c,info,trans) subroutine psb_dcsmm(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_dcsmm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,8 @@
! Arguments: ! Arguments:
subroutine psb_dcsmv(alpha,a,b,beta,c,info,trans) subroutine psb_dcsmv(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_dcsmv
use psb_error_mod
implicit none implicit none
type(psb_dspmat_type) :: a type(psb_dspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_dcssm(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_dcssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_dcssm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_dcssv(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_dcssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_dcssv
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -33,7 +33,7 @@
! Subroutine: ! Subroutine:
! Arguments: ! Arguments:
subroutine psb_scsmm(alpha,a,b,beta,c,info,trans) subroutine psb_scsmm(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_scsmm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,9 @@
! Arguments: ! Arguments:
subroutine psb_scsmv(alpha,a,b,beta,c,info,trans) subroutine psb_scsmv(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_scsmv
use psb_error_mod
implicit none implicit none
type(psb_sspmat_type) :: a type(psb_sspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_scssm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_scssv
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -33,7 +33,7 @@
! Subroutine: ! Subroutine:
! Arguments: ! Arguments:
subroutine psb_zcsmm(alpha,a,b,beta,c,info,trans) subroutine psb_zcsmm(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_zcsmm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,8 @@
! Arguments: ! Arguments:
subroutine psb_zcsmv(alpha,a,b,beta,c,info,trans) subroutine psb_zcsmv(alpha,a,b,beta,c,info,trans)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_zcsmv
use psb_error_mod
implicit none implicit none
type(psb_zspmat_type) :: a type(psb_zspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_zcssm(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_zcssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_zcssm
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -34,7 +34,7 @@
! Arguments: ! Arguments:
subroutine psb_zcssv(alpha,t,b,beta,c,info,trans,unitd,d) subroutine psb_zcssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type use psb_spmat_type, psb_protect_name => psb_zcssv
use psb_error_mod use psb_error_mod
implicit none implicit none

@ -219,7 +219,8 @@ subroutine psb_d_forward_map(alpha,x,beta,y,desc,info,work)
! Ok, we just need to call a halo update on the base desc ! Ok, we just need to call a halo update on the base desc
! and a matrix-vector product. ! and a matrix-vector product.
call psb_halo(x,desc%desc_1,info,work=work) call psb_halo(x,desc%desc_1,info,work=work)
if (info == 0) call psb_csmm(alpha,desc%dmap%map_fw,x,beta,y,info) if (info == 0) call desc%dmap%map_fw%spmm(alpha,x,beta,y,info)
!!$ if (info == 0) call psb_csmm(alpha,desc%dmap%map_fw,x,beta,y,info)
if ((info == 0) .and. psb_is_repl_desc(desc%desc_2)) then if ((info == 0) .and. psb_is_repl_desc(desc%desc_2)) then
ictxt = psb_cd_get_context(desc%desc_2) ictxt = psb_cd_get_context(desc%desc_2)
nr = psb_cd_get_global_rows(desc%desc_2) nr = psb_cd_get_global_rows(desc%desc_2)
@ -294,7 +295,8 @@ subroutine psb_d_backward_map(alpha,x,beta,y,desc,info,work)
case(psb_map_aggr_) case(psb_map_aggr_)
! Ok, we just need to call a halo update and a matrix-vector product. ! Ok, we just need to call a halo update and a matrix-vector product.
call psb_halo(x,desc%desc_2,info,work=work) call psb_halo(x,desc%desc_2,info,work=work)
if (info == 0) call psb_csmm(alpha,desc%dmap%map_bk,x,beta,y,info) !!$ if (info == 0) call psb_csmm(alpha,desc%dmap%map_bk,x,beta,y,info)
if (info == 0) call desc%dmap%map_bk%spmm(alpha,x,beta,y,info)
if ((info == 0) .and. psb_is_repl_desc(desc%desc_1)) then if ((info == 0) .and. psb_is_repl_desc(desc%desc_1)) then
ictxt = psb_cd_get_context(desc%desc_1) ictxt = psb_cd_get_context(desc%desc_1)
nr = psb_cd_get_global_rows(desc%desc_1) nr = psb_cd_get_global_rows(desc%desc_1)
@ -660,7 +662,8 @@ subroutine psb_d_apply_linmap(alpha,x,beta,y,a_map,cd_xt,descin,descout)
allocate(tmp(nct),stat=info) allocate(tmp(nct),stat=info)
if (info == 0) tmp(1:nrt) = x(1:nrt) if (info == 0) tmp(1:nrt) = x(1:nrt)
if (info == 0) call psb_halo(tmp,cd_xt,info) if (info == 0) call psb_halo(tmp,cd_xt,info)
if (info == 0) call psb_csmm(alpha,a_map,tmp,beta,y,info) if (info == 0) call a_map%spmm(alpha,tmp,beta,y,info)
!!$ if (info == 0) call psb_csmm(alpha,a_map,tmp,beta,y,info)
if (info /= 0) then if (info /= 0) then
write(0,*) 'Error in apply_map' write(0,*) 'Error in apply_map'
endif endif

@ -4,7 +4,7 @@ BJAC Preconditioner NONE DIAG BJAC
CSR Storage format for matrix A: CSR COO JAD CSR Storage format for matrix A: CSR COO JAD
080 Domain size (acutal system is this**3) 080 Domain size (acutal system is this**3)
1 Stopping criterion 1 Stopping criterion
20 MAXIT 200 MAXIT
-1 ITRACE -1 ITRACE
20 IRST restart for RGMRES and BiCGSTABL 20 IRST restart for RGMRES and BiCGSTABL

Loading…
Cancel
Save