|
|
|
@ -109,7 +109,6 @@ module psb_s_mat_mod
|
|
|
|
|
procedure, pass(a) :: s_cscnv_ip => psb_s_cscnv_ip
|
|
|
|
|
procedure, pass(a) :: s_cscnv_base => psb_s_cscnv_base
|
|
|
|
|
generic, public :: cscnv => s_cscnv, s_cscnv_ip, s_cscnv_base
|
|
|
|
|
procedure, pass(a) :: clone => psb_sspmat_type_clone
|
|
|
|
|
procedure, pass(a) :: reinit => psb_s_reinit
|
|
|
|
|
procedure, pass(a) :: print_i => psb_s_sparse_print
|
|
|
|
|
procedure, pass(a) :: print_n => psb_s_n_sparse_print
|
|
|
|
@ -130,8 +129,6 @@ module psb_s_mat_mod
|
|
|
|
|
procedure, pass(a) :: s_transc_2mat => psb_s_transc_2mat
|
|
|
|
|
generic, public :: transc => s_transc_1mat, s_transc_2mat
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
! Computational routines
|
|
|
|
|
procedure, pass(a) :: get_diag => psb_s_get_diag
|
|
|
|
|
procedure, pass(a) :: maxval => psb_s_maxval
|
|
|
|
@ -156,9 +153,9 @@ module psb_s_mat_mod
|
|
|
|
|
end type psb_sspmat_type
|
|
|
|
|
|
|
|
|
|
private :: psb_s_get_nrows, psb_s_get_ncols, psb_s_get_nzeros, psb_s_get_size, &
|
|
|
|
|
& psb_s_get_state, psb_s_get_dupl, psb_s_is_null, psb_s_is_bld, psb_s_is_upd, &
|
|
|
|
|
& psb_s_is_asb, psb_s_is_sorted, psb_s_is_upper, psb_s_is_lower, psb_s_is_triangle,&
|
|
|
|
|
& psb_s_get_nz_row
|
|
|
|
|
& psb_s_get_state, psb_s_get_dupl, psb_s_is_null, psb_s_is_bld, &
|
|
|
|
|
& psb_s_is_upd, psb_s_is_asb, psb_s_is_sorted, psb_s_is_upper, &
|
|
|
|
|
& psb_s_is_lower, psb_s_is_triangle, psb_s_get_nz_row
|
|
|
|
|
|
|
|
|
|
interface psb_sizeof
|
|
|
|
|
module procedure psb_s_sizeof
|
|
|
|
@ -186,7 +183,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer, intent(in) :: m
|
|
|
|
|
end subroutine psb_s_set_nrows
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_ncols(n,a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -194,7 +191,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer, intent(in) :: n
|
|
|
|
|
end subroutine psb_s_set_ncols
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_state(n,a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -202,7 +199,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer, intent(in) :: n
|
|
|
|
|
end subroutine psb_s_set_state
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_dupl(n,a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -210,35 +207,35 @@ module psb_s_mat_mod
|
|
|
|
|
integer, intent(in) :: n
|
|
|
|
|
end subroutine psb_s_set_dupl
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_null(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_set_null
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_bld(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_set_bld
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_upd(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_set_upd
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_asb(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_set_asb
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_sorted(a,val)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -246,7 +243,7 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: val
|
|
|
|
|
end subroutine psb_s_set_sorted
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_triangle(a,val)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -254,7 +251,7 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: val
|
|
|
|
|
end subroutine psb_s_set_triangle
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_unit(a,val)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -262,7 +259,7 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: val
|
|
|
|
|
end subroutine psb_s_set_unit
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_lower(a,val)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -270,7 +267,7 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: val
|
|
|
|
|
end subroutine psb_s_set_lower
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_set_upper(a,val)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -278,8 +275,7 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: val
|
|
|
|
|
end subroutine psb_s_set_upper
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_sparse_print(iout,a,iv,eirs,eics,head,ivr,ivc)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -303,7 +299,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer, intent(in), optional :: ivr(:), ivc(:)
|
|
|
|
|
end subroutine psb_s_n_sparse_print
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_get_neigh(a,idx,neigh,n,info,lev)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -315,7 +311,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer, optional, intent(in) :: lev
|
|
|
|
|
end subroutine psb_s_get_neigh
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_csall(nr,nc,a,info,nz)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -325,7 +321,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer, intent(in), optional :: nz
|
|
|
|
|
end subroutine psb_s_csall
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_reallocate_nz(nz,a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -333,36 +329,36 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_reallocate_nz
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_free(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_free
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_trim(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_trim
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_csput(nz,ia,ja,val,a,imin,imax,jmin,jmax,info,gtl)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: val(:)
|
|
|
|
|
real(psb_dpk_), intent(in) :: val(:)
|
|
|
|
|
integer, intent(in) :: nz, ia(:), ja(:), imin,imax,jmin,jmax
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
integer, intent(in), optional :: gtl(:)
|
|
|
|
|
end subroutine psb_s_csput
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_csgetptn(imin,imax,a,nz,ia,ja,info,&
|
|
|
|
|
& jmin,jmax,iren,append,nzin,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
& jmin,jmax,iren,append,nzin,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
integer, intent(in) :: imin,imax
|
|
|
|
|
integer, intent(out) :: nz
|
|
|
|
@ -374,16 +370,16 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: rscale,cscale
|
|
|
|
|
end subroutine psb_s_csgetptn
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_csgetrow(imin,imax,a,nz,ia,ja,val,info,&
|
|
|
|
|
& jmin,jmax,iren,append,nzin,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
integer, intent(in) :: imin,imax
|
|
|
|
|
integer, intent(out) :: nz
|
|
|
|
|
integer, allocatable, intent(inout) :: ia(:), ja(:)
|
|
|
|
|
real(psb_spk_), allocatable, intent(inout) :: val(:)
|
|
|
|
|
real(psb_dpk_), allocatable, intent(inout) :: val(:)
|
|
|
|
|
integer,intent(out) :: info
|
|
|
|
|
logical, intent(in), optional :: append
|
|
|
|
|
integer, intent(in), optional :: iren(:)
|
|
|
|
@ -391,11 +387,11 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: rscale,cscale
|
|
|
|
|
end subroutine psb_s_csgetrow
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_csgetblk(imin,imax,a,b,info,&
|
|
|
|
|
& jmin,jmax,iren,append,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
& jmin,jmax,iren,append,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: b
|
|
|
|
|
integer, intent(in) :: imin,imax
|
|
|
|
@ -406,11 +402,11 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: rscale,cscale
|
|
|
|
|
end subroutine psb_s_csgetblk
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_csclip(a,b,info,&
|
|
|
|
|
& imin,imax,jmin,jmax,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
& imin,imax,jmin,jmax,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: b
|
|
|
|
|
integer,intent(out) :: info
|
|
|
|
@ -418,11 +414,11 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: rscale,cscale
|
|
|
|
|
end subroutine psb_s_csclip
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_b_csclip(a,b,info,&
|
|
|
|
|
& imin,imax,jmin,jmax,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_coo_sparse_mat
|
|
|
|
|
& imin,imax,jmin,jmax,rscale,cscale)
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_coo_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
type(psb_s_coo_sparse_mat), intent(out) :: b
|
|
|
|
|
integer,intent(out) :: info
|
|
|
|
@ -430,10 +426,10 @@ module psb_s_mat_mod
|
|
|
|
|
logical, intent(in), optional :: rscale,cscale
|
|
|
|
|
end subroutine psb_s_b_csclip
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_cscnv(a,b,info,type,mold,upd,dupl)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: b
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
@ -442,11 +438,11 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(in), optional :: mold
|
|
|
|
|
end subroutine psb_s_cscnv
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_cscnv_ip(a,iinfo,type,mold,dupl)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
integer, intent(out) :: iinfo
|
|
|
|
|
integer,optional, intent(in) :: dupl
|
|
|
|
@ -454,18 +450,18 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(in), optional :: mold
|
|
|
|
|
end subroutine psb_s_cscnv_ip
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_cscnv_base(a,b,info,dupl)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(out) :: b
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
integer,optional, intent(in) :: dupl
|
|
|
|
|
end subroutine psb_s_cscnv_base
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_clip_d(a,b,info)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -474,7 +470,7 @@ module psb_s_mat_mod
|
|
|
|
|
integer,intent(out) :: info
|
|
|
|
|
end subroutine psb_s_clip_d
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_clip_d_ip(a,info)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -482,39 +478,39 @@ module psb_s_mat_mod
|
|
|
|
|
integer,intent(out) :: info
|
|
|
|
|
end subroutine psb_s_clip_d_ip
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_mv_from(a,b)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: a
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: a
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(inout) :: b
|
|
|
|
|
end subroutine psb_s_mv_from
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_cp_from(a,b)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: a
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(in) :: b
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: a
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(inout), allocatable :: b
|
|
|
|
|
end subroutine psb_s_cp_from
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_mv_to(a,b)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(out) :: b
|
|
|
|
|
end subroutine psb_s_mv_to
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_cp_to(a,b)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_, psb_s_base_sparse_mat
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
class(psb_s_base_sparse_mat), intent(out) :: b
|
|
|
|
|
end subroutine psb_s_cp_to
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface psb_move_alloc
|
|
|
|
|
subroutine psb_sspmat_type_move(a,b,info)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -522,8 +518,8 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: b
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_sspmat_type_move
|
|
|
|
|
end interface psb_move_alloc
|
|
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
interface psb_clone
|
|
|
|
|
subroutine psb_sspmat_type_clone(a,b,info)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -540,14 +536,14 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_s_base_sparse_mat), allocatable, intent(out) :: b
|
|
|
|
|
end subroutine psb_s_mold
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_transp_1mat(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_transp_1mat
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_transp_2mat(a,b)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -555,14 +551,14 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: b
|
|
|
|
|
end subroutine psb_s_transp_2mat
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_transc_1mat(a)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
end subroutine psb_s_transc_1mat
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_transc_2mat(a,b)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
@ -570,15 +566,16 @@ module psb_s_mat_mod
|
|
|
|
|
class(psb_sspmat_type), intent(out) :: b
|
|
|
|
|
end subroutine psb_s_transc_2mat
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_reinit(a,clear)
|
|
|
|
|
import :: psb_sspmat_type
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
logical, intent(in), optional :: clear
|
|
|
|
|
end subroutine psb_s_reinit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
! == ===================================
|
|
|
|
@ -596,57 +593,57 @@ module psb_s_mat_mod
|
|
|
|
|
|
|
|
|
|
interface psb_csmm
|
|
|
|
|
subroutine psb_s_csmm(alpha,a,x,beta,y,info,trans)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: alpha, beta, x(:,:)
|
|
|
|
|
real(psb_spk_), intent(inout) :: y(:,:)
|
|
|
|
|
real(psb_dpk_), intent(in) :: alpha, beta, x(:,:)
|
|
|
|
|
real(psb_dpk_), intent(inout) :: y(:,:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
character, optional, intent(in) :: trans
|
|
|
|
|
end subroutine psb_s_csmm
|
|
|
|
|
subroutine psb_s_csmv(alpha,a,x,beta,y,info,trans)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: alpha, beta, x(:)
|
|
|
|
|
real(psb_spk_), intent(inout) :: y(:)
|
|
|
|
|
real(psb_dpk_), intent(in) :: alpha, beta, x(:)
|
|
|
|
|
real(psb_dpk_), intent(inout) :: y(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
character, optional, intent(in) :: trans
|
|
|
|
|
end subroutine psb_s_csmv
|
|
|
|
|
subroutine psb_s_csmv_vect(alpha,a,x,beta,y,info,trans)
|
|
|
|
|
use psb_s_vect_mod, only : psb_s_vect_type
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: alpha, beta
|
|
|
|
|
real(psb_dpk_), intent(in) :: alpha, beta
|
|
|
|
|
type(psb_s_vect_type), intent(inout) :: x
|
|
|
|
|
type(psb_s_vect_type), intent(inout) :: y
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
character, optional, intent(in) :: trans
|
|
|
|
|
end subroutine psb_s_csmv_vect
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface psb_cssm
|
|
|
|
|
subroutine psb_s_cssm(alpha,a,x,beta,y,info,trans,scale,d)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: alpha, beta, x(:,:)
|
|
|
|
|
real(psb_spk_), intent(inout) :: y(:,:)
|
|
|
|
|
real(psb_dpk_), intent(in) :: alpha, beta, x(:,:)
|
|
|
|
|
real(psb_dpk_), intent(inout) :: y(:,:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
character, optional, intent(in) :: trans, scale
|
|
|
|
|
real(psb_spk_), intent(in), optional :: d(:)
|
|
|
|
|
real(psb_dpk_), intent(in), optional :: d(:)
|
|
|
|
|
end subroutine psb_s_cssm
|
|
|
|
|
subroutine psb_s_cssv(alpha,a,x,beta,y,info,trans,scale,d)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: alpha, beta, x(:)
|
|
|
|
|
real(psb_spk_), intent(inout) :: y(:)
|
|
|
|
|
real(psb_dpk_), intent(in) :: alpha, beta, x(:)
|
|
|
|
|
real(psb_dpk_), intent(inout) :: y(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
character, optional, intent(in) :: trans, scale
|
|
|
|
|
real(psb_spk_), intent(in), optional :: d(:)
|
|
|
|
|
real(psb_dpk_), intent(in), optional :: d(:)
|
|
|
|
|
end subroutine psb_s_cssv
|
|
|
|
|
subroutine psb_s_cssv_vect(alpha,a,x,beta,y,info,trans,scale,d)
|
|
|
|
|
use psb_s_vect_mod, only : psb_s_vect_type
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: alpha, beta
|
|
|
|
|
real(psb_dpk_), intent(in) :: alpha, beta
|
|
|
|
|
type(psb_s_vect_type), intent(inout) :: x
|
|
|
|
|
type(psb_s_vect_type), intent(inout) :: y
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
@ -654,87 +651,88 @@ module psb_s_mat_mod
|
|
|
|
|
type(psb_s_vect_type), optional, intent(inout) :: d
|
|
|
|
|
end subroutine psb_s_cssv_vect
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
function psb_s_maxval(a) result(res)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_) :: res
|
|
|
|
|
real(psb_dpk_) :: res
|
|
|
|
|
end function psb_s_maxval
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
function psb_s_csnmi(a) result(res)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_) :: res
|
|
|
|
|
real(psb_dpk_) :: res
|
|
|
|
|
end function psb_s_csnmi
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
function psb_s_csnm1(a) result(res)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_) :: res
|
|
|
|
|
real(psb_dpk_) :: res
|
|
|
|
|
end function psb_s_csnm1
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_rowsum(d,a,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
real(psb_dpk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_rowsum
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_arwsum(d,a,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
real(psb_dpk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_arwsum
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_colsum(d,a,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
real(psb_dpk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_colsum
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_aclsum(d,a,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
real(psb_dpk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_aclsum
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
subroutine psb_s_get_diag(a,d,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
real(psb_spk_), intent(out) :: d(:)
|
|
|
|
|
real(psb_dpk_), intent(out) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_get_diag
|
|
|
|
|
end interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface psb_scal
|
|
|
|
|
subroutine psb_s_scal(d,a,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: d(:)
|
|
|
|
|
real(psb_dpk_), intent(in) :: d(:)
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_scal
|
|
|
|
|
subroutine psb_s_scals(d,a,info)
|
|
|
|
|
import :: psb_sspmat_type, psb_spk_
|
|
|
|
|
import :: psb_sspmat_type, psb_dpk_
|
|
|
|
|
class(psb_sspmat_type), intent(inout) :: a
|
|
|
|
|
real(psb_spk_), intent(in) :: d
|
|
|
|
|
real(psb_dpk_), intent(in) :: d
|
|
|
|
|
integer, intent(out) :: info
|
|
|
|
|
end subroutine psb_s_scals
|
|
|
|
|
end interface
|
|
|
|
@ -755,21 +753,20 @@ contains
|
|
|
|
|
!
|
|
|
|
|
! == ===================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function psb_s_sizeof(a) result(res)
|
|
|
|
|
implicit none
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
|
integer(psb_long_int_k_) :: res
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
res = 0
|
|
|
|
|
if (allocated(a%a)) then
|
|
|
|
|
res = a%a%sizeof()
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end function psb_s_sizeof
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function psb_s_get_fmt(a) result(res)
|
|
|
|
|
implicit none
|
|
|
|
|
class(psb_sspmat_type), intent(in) :: a
|
|
|
|
@ -988,9 +985,10 @@ contains
|
|
|
|
|
integer :: res
|
|
|
|
|
|
|
|
|
|
res = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (allocated(a%a)) res = a%a%get_nz_row(idx)
|
|
|
|
|
|
|
|
|
|
end function psb_s_get_nz_row
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end module psb_s_mat_mod
|
|
|
|
|