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)
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_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

@ -58,147 +58,149 @@ module psb_serial_mod
end subroutine psb_zcsrws
end interface
interface psb_cssm
subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : 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_scssm
subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d)
use psb_spmat_type, only : 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)
use psb_spmat_type, only : 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)
use psb_spmat_type, only : 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)
use psb_spmat_type, only : 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)
use psb_spmat_type, only : 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)
use psb_spmat_type, only : 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)
use psb_spmat_type, only : 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
!!$ interface psb_cssm
!!$ subroutine psb_scssm(alpha,t,b,beta,c,info,trans,unitd,d)
!!$ use psb_spmat_type, only : 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_scssm
!!$ subroutine psb_scssv(alpha,t,b,beta,c,info,trans,unitd,d)
!!$ use psb_spmat_type, only : 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)
!!$ use psb_spmat_type, only : 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)
!!$ use psb_spmat_type, only : 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)
!!$ use psb_spmat_type, only : 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)
!!$ use psb_spmat_type, only : 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)
!!$ use psb_spmat_type, only : 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)
!!$ use psb_spmat_type, only : 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
interface psb_csmm
subroutine psb_scsmv(alpha,a,b,beta,c,info,trans)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, 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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, 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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, 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)
use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
& psb_cspmat_type, psb_zspmat_type, psb_spk_, 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
!!$ interface psb_csmm
!!$ module procedure psb_scsmm, psb_scsmv, psb_dcsmm, psb_dcsmv,&
!!$ & psb_ccsmm, psb_ccsmv, psb_zcsmm, psb_zcsmv
!!$ subroutine psb_scsmv(alpha,a,b,beta,c,info,trans)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
!!$ 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
!!$ 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
!!$ 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, psb_dpk_
!!$ 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, 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)
!!$ use psb_spmat_type, only : psb_sspmat_type, psb_dspmat_type,&
!!$ & psb_cspmat_type, psb_zspmat_type, psb_spk_, 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
interface psb_cest
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, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pl(:), pr(:)
end type psb_base_spmat_type
type, extends(psb_base_spmat_type) :: psb_sspmat_type
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
type, extends(psb_base_spmat_type) :: psb_cspmat_type
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
type, extends(psb_base_spmat_type) :: psb_dspmat_type
real(psb_dpk_), allocatable :: aspk(:)
contains
procedure, pass(a) :: i_spmv => psb_dspmv_inner
procedure, pass(a) :: i_spmm => psb_dspmm_inner
generic, public :: spmm => i_spmv, i_spmm
procedure, pass(a) :: psb_dcsmm
procedure, pass(a) :: psb_dcsmv
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
type, extends(psb_base_spmat_type) :: psb_zspmat_type
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
interface psb_nullify_sp
@ -247,27 +271,145 @@ module psb_spmat_type
& psb_dspinfo, psb_zspinfo
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)
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
interface psb_cssm
subroutine psb_scssm(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_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!'
end subroutine psb_dspmm_inner
contains
integer function psb_get_ssp_nrows(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
! 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_)
if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_cspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& 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
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)
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_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then
@ -581,7 +581,7 @@ subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,&
end if
! 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
info = 4011
@ -628,7 +628,7 @@ subroutine psb_cspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = czero
! 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_) &
& 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
xp => x(iix:lldx,jjx:jjx+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
info = 4010
@ -528,7 +528,7 @@ subroutine psb_cspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve
xp => x(iix:lldx)
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
info = 4010

@ -250,7 +250,7 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk
! 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_)
if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_dspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& 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
if(info /= 0) then
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)
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_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info
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_)
end if
! Just for fun
call a%spmm(alpha,x,beta,y,info)
! local Matrix-vector product
call psb_csmm(alpha,a,x(iix:lldx),beta,y(iiy:lldy),info)
call a%csmm(alpha,x,beta,y,info)
if(info /= 0) then
info = 4011
@ -629,7 +626,7 @@ subroutine psb_dspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = dzero
! 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_) &
& 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
xp => x(iix:lldx,jjx:jjx+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
info = 4010
@ -529,7 +529,7 @@ subroutine psb_dspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve
xp => x(iix:lldx)
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
info = 4010

@ -250,7 +250,7 @@ subroutine psb_sspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk
! 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_)
if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_sspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& 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
if(info /= 0) then
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)
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_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then
@ -580,7 +580,7 @@ subroutine psb_sspmv(alpha,a,x,beta,y,desc_a,info,&
end if
! 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
info = 4011
@ -627,7 +627,7 @@ subroutine psb_sspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = szero
! 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_) &
& 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
xp => x(iix:lldx,jjx:jjx+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
info = 4010
@ -529,7 +529,7 @@ subroutine psb_sspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve
xp => x(iix:lldx)
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
info = 4010

@ -250,7 +250,7 @@ subroutine psb_zspmm(alpha,a,x,beta,y,desc_a,info,&
if(info /= 0) exit blk
! 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_)
if(info /= 0) exit blk
@ -265,7 +265,7 @@ subroutine psb_zspmm(alpha,a,x,beta,y,desc_a,info,&
if (doswap_)&
& call psi_swapdata(ior(psb_swap_send_,psb_swap_recv_),&
& 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
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)
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_) &
& write(debug_unit,*) me,' ',trim(name),' csmm ', info
if (info /= 0) then
@ -581,7 +581,7 @@ subroutine psb_zspmv(alpha,a,x,beta,y,desc_a,info,&
end if
! 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
info = 4011
@ -628,7 +628,7 @@ subroutine psb_zspmv(alpha,a,x,beta,y,desc_a,info,&
yp(nrow+1:ncol) = zzero
! 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_) &
& 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
xp => x(iix:lldx,jjx:jjx+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
info = 4010
@ -528,7 +528,7 @@ subroutine psb_zspsv(alpha,a,x,beta,y,desc_a,info,&
! Perform local triangular system solve
xp => x(iix:lldx)
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
info = 4010

@ -33,7 +33,7 @@
! Subroutine:
! Arguments:
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
implicit none

@ -34,7 +34,8 @@
! Arguments:
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
type(psb_cspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -33,7 +33,7 @@
! Subroutine:
! Arguments:
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
implicit none

@ -34,7 +34,8 @@
! Arguments:
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
type(psb_dspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -33,7 +33,7 @@
! Subroutine:
! Arguments:
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
implicit none

@ -34,7 +34,9 @@
! Arguments:
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
type(psb_sspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -33,7 +33,7 @@
! Subroutine:
! Arguments:
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
implicit none

@ -34,7 +34,8 @@
! Arguments:
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
type(psb_zspmat_type) :: a

@ -34,7 +34,7 @@
! Arguments:
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
implicit none

@ -34,7 +34,7 @@
! Arguments:
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
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
! and a matrix-vector product.
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
ictxt = psb_cd_get_context(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_)
! Ok, we just need to call a halo update and a matrix-vector product.
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
ictxt = psb_cd_get_context(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)
if (info == 0) tmp(1:nrt) = x(1:nrt)
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
write(0,*) 'Error in apply_map'
endif

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

Loading…
Cancel
Save