Merge branch 'development' into cmake

cmake
Luca Pepè Sciarria 7 months ago
commit 4c27ffb760

@ -272,7 +272,7 @@ set(PSB_base_source_files
tools/psb_zsprn.f90 tools/psb_zsprn.f90
tools/psb_get_overlap.f90 tools/psb_get_overlap.f90
serial/psb_crwextd.f90 serial/psb_crwextd.f90
serial/psb_zspspmm.f90 serial/psb_zspspmm.F90
serial/psb_drwextd.f90 serial/psb_drwextd.f90
serial/psb_dnumbmm.f90 serial/psb_dnumbmm.f90
serial/psb_damax_s.f90 serial/psb_damax_s.f90
@ -343,14 +343,14 @@ set(PSB_base_source_files
serial/psb_dsymbmm.f90 serial/psb_dsymbmm.f90
serial/psb_samax_s.f90 serial/psb_samax_s.f90
serial/psb_lsame.f90 serial/psb_lsame.f90
serial/psb_dspspmm.f90 serial/psb_dspspmm.F90
serial/psb_ssymbmm.f90 serial/psb_ssymbmm.f90
serial/psb_cgeprt.f90 serial/psb_cgeprt.f90
serial/psb_sgeprt.f90 serial/psb_sgeprt.f90
# serial/psi_i2_serial_impl.F90 # serial/psi_i2_serial_impl.F90
serial/psi_e_serial_impl.F90 serial/psi_e_serial_impl.F90
serial/psb_zsymbmm.f90 serial/psb_zsymbmm.f90
serial/psb_cspspmm.f90 serial/psb_cspspmm.F90
serial/psb_aspxpby.f90 serial/psb_aspxpby.f90
serial/psi_s_serial_impl.F90 serial/psi_s_serial_impl.F90
serial/psb_zamax_s.f90 serial/psb_zamax_s.f90
@ -359,7 +359,7 @@ set(PSB_base_source_files
serial/psb_casum_s.f90 serial/psb_casum_s.f90
serial/psi_d_serial_impl.F90 serial/psi_d_serial_impl.F90
serial/psi_c_serial_impl.F90 serial/psi_c_serial_impl.F90
serial/psb_sspspmm.f90 serial/psb_sspspmm.F90
serial/psb_cnumbmm.f90 serial/psb_cnumbmm.f90
psblas/psb_damax.f90 psblas/psb_damax.f90
psblas/psb_dspmm.f90 psblas/psb_dspmm.f90

@ -193,7 +193,7 @@ subroutine psi_cswapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_cswapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_ctranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_ctranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -193,7 +193,7 @@ subroutine psi_dswapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_dswapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_dtranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_dtranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -193,7 +193,7 @@ subroutine psi_eswapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_eswapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_etranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_etranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_epk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -193,7 +193,7 @@ subroutine psi_i2swapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_i2swapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_i2tranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_i2tranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_i2pk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -193,7 +193,7 @@ subroutine psi_mswapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_mswapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_mtranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_mtranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf integer(psb_mpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -193,7 +193,7 @@ subroutine psi_sswapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_sswapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_stranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_stranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf real(psb_spk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -193,7 +193,7 @@ subroutine psi_zswapidxm(ctxt,icomm,flag,n,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -680,7 +680,7 @@ subroutine psi_zswapidxv(ctxt,icomm,flag,beta,y,idx, &
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -197,7 +197,7 @@ subroutine psi_ztranidxm(ctxt,icomm,flag,n,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name
@ -691,7 +691,7 @@ subroutine psi_ztranidxv(ctxt,icomm,flag,beta,y,idx,&
logical, parameter :: usersend=.false. logical, parameter :: usersend=.false.
complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf complex(psb_dpk_), pointer, dimension(:) :: sndbuf, rcvbuf
#if !defined(FLANG) #if !defined(PSB_CMP_FLANG)
volatile :: sndbuf, rcvbuf volatile :: sndbuf, rcvbuf
#endif #endif
character(len=20) :: name character(len=20) :: name

@ -44,10 +44,10 @@ module psb_c_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_chsort(x,ix,dir,flag) subroutine psb_chsort(x,ix,dir,flag,reord)
import import
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_chsort end subroutine psb_chsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_c_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_cisort(x,ix,dir,flag) subroutine psb_cisort(x,ix,dir,flag,reord)
import import
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_cisort end subroutine psb_cisort
end interface psb_isort end interface psb_isort

@ -55,10 +55,10 @@ module psb_c_msort_mod
interface psb_msort interface psb_msort
subroutine psb_cmsort(x,ix,dir,flag) subroutine psb_cmsort(x,ix,dir,flag,reord)
import import
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_cmsort end subroutine psb_cmsort
end interface psb_msort end interface psb_msort

@ -45,10 +45,10 @@ module psb_c_qsort_mod
interface psb_qsort interface psb_qsort
subroutine psb_cqsort(x,ix,dir,flag) subroutine psb_cqsort(x,ix,dir,flag,reord)
import import
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_cqsort end subroutine psb_cqsort
end interface psb_qsort end interface psb_qsort

@ -44,10 +44,10 @@ module psb_d_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_dhsort(x,ix,dir,flag) subroutine psb_dhsort(x,ix,dir,flag,reord)
import import
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_dhsort end subroutine psb_dhsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_d_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_disort(x,ix,dir,flag) subroutine psb_disort(x,ix,dir,flag,reord)
import import
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_disort end subroutine psb_disort
end interface psb_isort end interface psb_isort

@ -55,10 +55,10 @@ module psb_d_msort_mod
interface psb_msort interface psb_msort
subroutine psb_dmsort(x,ix,dir,flag) subroutine psb_dmsort(x,ix,dir,flag,reord)
import import
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_dmsort end subroutine psb_dmsort
end interface psb_msort end interface psb_msort

@ -64,10 +64,10 @@ module psb_d_qsort_mod
end interface psb_ssrch end interface psb_ssrch
interface psb_qsort interface psb_qsort
subroutine psb_dqsort(x,ix,dir,flag) subroutine psb_dqsort(x,ix,dir,flag,reord)
import import
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_dqsort end subroutine psb_dqsort
end interface psb_qsort end interface psb_qsort

@ -44,10 +44,10 @@ module psb_e_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_ehsort(x,ix,dir,flag) subroutine psb_ehsort(x,ix,dir,flag,reord)
import import
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
end subroutine psb_ehsort end subroutine psb_ehsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_e_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_eisort(x,ix,dir,flag) subroutine psb_eisort(x,ix,dir,flag,reord)
import import
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
end subroutine psb_eisort end subroutine psb_eisort
end interface psb_isort end interface psb_isort

@ -62,10 +62,10 @@ module psb_e_msort_mod
interface psb_msort interface psb_msort
subroutine psb_emsort(x,ix,dir,flag) subroutine psb_emsort(x,ix,dir,flag,reord)
import import
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
end subroutine psb_emsort end subroutine psb_emsort
end interface psb_msort end interface psb_msort

@ -64,10 +64,10 @@ module psb_e_qsort_mod
end interface psb_ssrch end interface psb_ssrch
interface psb_qsort interface psb_qsort
subroutine psb_eqsort(x,ix,dir,flag) subroutine psb_eqsort(x,ix,dir,flag,reord)
import import
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
end subroutine psb_eqsort end subroutine psb_eqsort
end interface psb_qsort end interface psb_qsort

@ -44,10 +44,10 @@ module psb_i2_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_i2hsort(x,ix,dir,flag) subroutine psb_i2hsort(x,ix,dir,flag,reord)
import import
integer(psb_i2pk_), intent(inout) :: x(:) integer(psb_i2pk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_i2hsort end subroutine psb_i2hsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_i2_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_i2isort(x,ix,dir,flag) subroutine psb_i2isort(x,ix,dir,flag,reord)
import import
integer(psb_i2pk_), intent(inout) :: x(:) integer(psb_i2pk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_i2isort end subroutine psb_i2isort
end interface psb_isort end interface psb_isort

@ -62,10 +62,10 @@ module psb_i2_msort_mod
interface psb_msort interface psb_msort
subroutine psb_i2msort(x,ix,dir,flag) subroutine psb_i2msort(x,ix,dir,flag,reord)
import import
integer(psb_i2pk_), intent(inout) :: x(:) integer(psb_i2pk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_i2msort end subroutine psb_i2msort
end interface psb_msort end interface psb_msort

@ -64,10 +64,10 @@ module psb_i2_qsort_mod
end interface psb_ssrch end interface psb_ssrch
interface psb_qsort interface psb_qsort
subroutine psb_i2qsort(x,ix,dir,flag) subroutine psb_i2qsort(x,ix,dir,flag,reord)
import import
integer(psb_i2pk_), intent(inout) :: x(:) integer(psb_i2pk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_i2qsort end subroutine psb_i2qsort
end interface psb_qsort end interface psb_qsort

@ -44,10 +44,10 @@ module psb_m_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_mhsort(x,ix,dir,flag) subroutine psb_mhsort(x,ix,dir,flag,reord)
import import
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_mhsort end subroutine psb_mhsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_m_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_misort(x,ix,dir,flag) subroutine psb_misort(x,ix,dir,flag,reord)
import import
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_misort end subroutine psb_misort
end interface psb_isort end interface psb_isort

@ -62,10 +62,10 @@ module psb_m_msort_mod
interface psb_msort interface psb_msort
subroutine psb_mmsort(x,ix,dir,flag) subroutine psb_mmsort(x,ix,dir,flag,reord)
import import
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_mmsort end subroutine psb_mmsort
end interface psb_msort end interface psb_msort

@ -64,10 +64,10 @@ module psb_m_qsort_mod
end interface psb_ssrch end interface psb_ssrch
interface psb_qsort interface psb_qsort
subroutine psb_mqsort(x,ix,dir,flag) subroutine psb_mqsort(x,ix,dir,flag,reord)
import import
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_mqsort end subroutine psb_mqsort
end interface psb_qsort end interface psb_qsort

@ -44,10 +44,10 @@ module psb_s_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_shsort(x,ix,dir,flag) subroutine psb_shsort(x,ix,dir,flag,reord)
import import
real(psb_spk_), intent(inout) :: x(:) real(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_shsort end subroutine psb_shsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_s_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_sisort(x,ix,dir,flag) subroutine psb_sisort(x,ix,dir,flag,reord)
import import
real(psb_spk_), intent(inout) :: x(:) real(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_sisort end subroutine psb_sisort
end interface psb_isort end interface psb_isort

@ -55,10 +55,10 @@ module psb_s_msort_mod
interface psb_msort interface psb_msort
subroutine psb_smsort(x,ix,dir,flag) subroutine psb_smsort(x,ix,dir,flag,reord)
import import
real(psb_spk_), intent(inout) :: x(:) real(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_smsort end subroutine psb_smsort
end interface psb_msort end interface psb_msort

@ -64,10 +64,10 @@ module psb_s_qsort_mod
end interface psb_ssrch end interface psb_ssrch
interface psb_qsort interface psb_qsort
subroutine psb_sqsort(x,ix,dir,flag) subroutine psb_sqsort(x,ix,dir,flag,reord)
import import
real(psb_spk_), intent(inout) :: x(:) real(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_sqsort end subroutine psb_sqsort
end interface psb_qsort end interface psb_qsort

@ -44,10 +44,10 @@ module psb_z_hsort_mod
use psb_const_mod use psb_const_mod
interface psb_hsort interface psb_hsort
subroutine psb_zhsort(x,ix,dir,flag) subroutine psb_zhsort(x,ix,dir,flag,reord)
import import
complex(psb_dpk_), intent(inout) :: x(:) complex(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_zhsort end subroutine psb_zhsort
end interface psb_hsort end interface psb_hsort

@ -44,10 +44,10 @@ module psb_z_isort_mod
use psb_const_mod use psb_const_mod
interface psb_isort interface psb_isort
subroutine psb_zisort(x,ix,dir,flag) subroutine psb_zisort(x,ix,dir,flag,reord)
import import
complex(psb_dpk_), intent(inout) :: x(:) complex(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_zisort end subroutine psb_zisort
end interface psb_isort end interface psb_isort

@ -55,10 +55,10 @@ module psb_z_msort_mod
interface psb_msort interface psb_msort
subroutine psb_zmsort(x,ix,dir,flag) subroutine psb_zmsort(x,ix,dir,flag,reord)
import import
complex(psb_dpk_), intent(inout) :: x(:) complex(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_zmsort end subroutine psb_zmsort
end interface psb_msort end interface psb_msort

@ -45,10 +45,10 @@ module psb_z_qsort_mod
interface psb_qsort interface psb_qsort
subroutine psb_zqsort(x,ix,dir,flag) subroutine psb_zqsort(x,ix,dir,flag,reord)
import import
complex(psb_dpk_), intent(inout) :: x(:) complex(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
end subroutine psb_zqsort end subroutine psb_zqsort
end interface psb_qsort end interface psb_qsort

@ -49,7 +49,9 @@ module mpi
integer(psb_mpk_), parameter :: mpi_integer4 = 10 integer(psb_mpk_), parameter :: mpi_integer4 = 10
integer(psb_mpk_), parameter :: mpi_comm_null = -1 integer(psb_mpk_), parameter :: mpi_comm_null = -1
integer(psb_mpk_), parameter :: mpi_comm_world = 1 integer(psb_mpk_), parameter :: mpi_comm_world = 1
integer(psb_mpk_), parameter :: mpi_address_kind = psb_epk_
!real(psb_dpk_), external :: mpi_wtime !real(psb_dpk_), external :: mpi_wtime
interface interface
@ -179,44 +181,53 @@ end module mpi
module psi_penv_mod module psi_penv_mod
use psb_const_mod use psb_const_mod
use iso_c_binding use iso_c_binding
#ifdef PSB_MPI_MOD
integer(psb_mpk_), parameter:: psb_int_tag = 543987 use mpi
integer(psb_mpk_), parameter:: psb_real_tag = psb_int_tag + 1 #endif
integer(psb_mpk_), parameter:: psb_double_tag = psb_real_tag + 1 #ifdef PSB_MPI_H
integer(psb_mpk_), parameter:: psb_complex_tag = psb_double_tag + 1 include 'mpif.h'
integer(psb_mpk_), parameter:: psb_dcomplex_tag = psb_complex_tag + 1 #endif
integer(psb_mpk_), parameter:: psb_logical_tag = psb_dcomplex_tag + 1
integer(psb_mpk_), parameter:: psb_char_tag = psb_logical_tag + 1 integer(psb_mpk_), parameter :: psb_apk_ = mpi_address_kind
integer(psb_mpk_), parameter:: psb_int8_tag = psb_char_tag + 1
integer(psb_mpk_), parameter:: psb_int2_tag = psb_int8_tag + 1 integer(psb_mpk_), parameter :: psb_tag_space = 200
integer(psb_mpk_), parameter:: psb_int4_tag = psb_int2_tag + 1 integer(psb_mpk_), parameter :: psb_tag_base = 512
integer(psb_mpk_), parameter:: psb_long_tag = psb_int4_tag + 1 integer(psb_mpk_), parameter :: psb_int_tag = psb_tag_base + 1
integer(psb_mpk_), parameter :: psb_real_tag = psb_int_tag + 1
integer(psb_mpk_), parameter:: psb_int_swap_tag = psb_int_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_double_tag = psb_real_tag + 1
integer(psb_mpk_), parameter:: psb_real_swap_tag = psb_real_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_complex_tag = psb_double_tag + 1
integer(psb_mpk_), parameter:: psb_double_swap_tag = psb_double_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_dcomplex_tag = psb_complex_tag + 1
integer(psb_mpk_), parameter:: psb_complex_swap_tag = psb_complex_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_logical_tag = psb_dcomplex_tag + 1
integer(psb_mpk_), parameter:: psb_dcomplex_swap_tag = psb_dcomplex_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_char_tag = psb_logical_tag + 1
integer(psb_mpk_), parameter:: psb_logical_swap_tag = psb_logical_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_int8_tag = psb_char_tag + 1
integer(psb_mpk_), parameter:: psb_char_swap_tag = psb_char_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_int2_tag = psb_int8_tag + 1
integer(psb_mpk_), parameter:: psb_int8_swap_tag = psb_int8_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_int4_tag = psb_int2_tag + 1
integer(psb_mpk_), parameter:: psb_int2_swap_tag = psb_int2_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_long_tag = psb_int4_tag + 1
integer(psb_mpk_), parameter:: psb_int4_swap_tag = psb_int4_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_max_simple_tag = psb_long_tag + 2
integer(psb_mpk_), parameter:: psb_long_swap_tag = psb_long_tag + psb_int_tag integer(psb_mpk_), parameter :: psb_int_swap_tag = psb_max_simple_tag + 1
integer(psb_mpk_), parameter :: psb_real_swap_tag = psb_int_swap_tag + 1
integer(psb_mpk_), parameter :: psb_double_swap_tag = psb_real_swap_tag + 1
integer(psb_mpk_), parameter :: psb_complex_swap_tag = psb_double_swap_tag + 1
integer(psb_mpk_), parameter :: psb_dcomplex_swap_tag = psb_complex_swap_tag + 1
integer(psb_mpk_), parameter :: psb_logical_swap_tag = psb_dcomplex_swap_tag + 1
integer(psb_mpk_), parameter :: psb_char_swap_tag = psb_logical_swap_tag + 1
integer(psb_mpk_), parameter :: psb_int8_swap_tag = psb_char_swap_tag + 1
integer(psb_mpk_), parameter :: psb_int2_swap_tag = psb_int8_swap_tag + 1
integer(psb_mpk_), parameter :: psb_int4_swap_tag = psb_int2_swap_tag + 1
integer(psb_mpk_), parameter :: psb_long_swap_tag = psb_int4_swap_tag + 1
integer(psb_mpk_), private, parameter:: psb_int_type = 987543 integer(psb_mpk_), private, parameter :: psb_int_type = 200
integer(psb_mpk_), private, parameter:: psb_real_type = psb_int_type + 1 integer(psb_mpk_), private, parameter :: psb_real_type = psb_int_type + 1
integer(psb_mpk_), private, parameter:: psb_double_type = psb_real_type + 1 integer(psb_mpk_), private, parameter :: psb_double_type = psb_real_type + 1
integer(psb_mpk_), private, parameter:: psb_complex_type = psb_double_type + 1 integer(psb_mpk_), private, parameter :: psb_complex_type = psb_double_type + 1
integer(psb_mpk_), private, parameter:: psb_dcomplex_type = psb_complex_type + 1 integer(psb_mpk_), private, parameter :: psb_dcomplex_type = psb_complex_type + 1
integer(psb_mpk_), private, parameter:: psb_logical_type = psb_dcomplex_type + 1 integer(psb_mpk_), private, parameter :: psb_logical_type = psb_dcomplex_type + 1
integer(psb_mpk_), private, parameter:: psb_char_type = psb_logical_type + 1 integer(psb_mpk_), private, parameter :: psb_char_type = psb_logical_type + 1
integer(psb_mpk_), private, parameter:: psb_int8_type = psb_char_type + 1 integer(psb_mpk_), private, parameter :: psb_int8_type = psb_char_type + 1
integer(psb_mpk_), private, parameter:: psb_int2_type = psb_int8_type + 1 integer(psb_mpk_), private, parameter :: psb_int2_type = psb_int8_type + 1
integer(psb_mpk_), private, parameter:: psb_int4_type = psb_int2_type + 1 integer(psb_mpk_), private, parameter :: psb_int4_type = psb_int2_type + 1
integer(psb_mpk_), private, parameter:: psb_long_type = psb_int4_type + 1 integer(psb_mpk_), private, parameter :: psb_long_type = psb_int4_type + 1
type psb_buffer_node type psb_buffer_node
integer(psb_mpk_) :: request integer(psb_mpk_) :: request
@ -304,7 +315,7 @@ module psi_penv_mod
#endif #endif
private :: psi_get_sizes, psi_register_mpi_extras private :: psi_get_sizes, psi_register_mpi_const
private :: psi_i2amx_op, psi_i2amn_op private :: psi_i2amx_op, psi_i2amn_op
private :: psi_iamx_op, psi_iamn_op private :: psi_iamx_op, psi_iamn_op
private :: psi_mamx_op, psi_mamn_op private :: psi_mamx_op, psi_mamn_op
@ -341,13 +352,7 @@ contains
end subroutine psb_init_queue end subroutine psb_init_queue
subroutine psb_wait_buffer(node, info) subroutine psb_wait_buffer(node, info)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_buffer_node), intent(inout) :: node type(psb_buffer_node), intent(inout) :: node
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_mpk_) :: status(mpi_status_size),minfo integer(psb_mpk_) :: status(mpi_status_size),minfo
@ -357,13 +362,7 @@ contains
end subroutine psb_wait_buffer end subroutine psb_wait_buffer
subroutine psb_test_buffer(node, flag, info) subroutine psb_test_buffer(node, flag, info)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_buffer_node), intent(inout) :: node type(psb_buffer_node), intent(inout) :: node
logical, intent(out) :: flag logical, intent(out) :: flag
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -476,13 +475,7 @@ contains
! !
! !!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!
subroutine psi_msnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_msnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
integer(psb_mpk_), allocatable, intent(inout) :: buffer(:) integer(psb_mpk_), allocatable, intent(inout) :: buffer(:)
@ -515,13 +508,7 @@ contains
subroutine psi_esnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_esnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
integer(psb_epk_), allocatable, intent(inout) :: buffer(:) integer(psb_epk_), allocatable, intent(inout) :: buffer(:)
@ -552,13 +539,7 @@ contains
end subroutine psi_esnd end subroutine psi_esnd
subroutine psi_i2snd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_i2snd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
integer(psb_i2pk_), allocatable, intent(inout) :: buffer(:) integer(psb_i2pk_), allocatable, intent(inout) :: buffer(:)
@ -589,13 +570,7 @@ contains
end subroutine psi_i2snd end subroutine psi_i2snd
subroutine psi_ssnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_ssnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
real(psb_spk_), allocatable, intent(inout) :: buffer(:) real(psb_spk_), allocatable, intent(inout) :: buffer(:)
@ -626,13 +601,7 @@ contains
end subroutine psi_ssnd end subroutine psi_ssnd
subroutine psi_dsnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_dsnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
real(psb_dpk_), allocatable, intent(inout) :: buffer(:) real(psb_dpk_), allocatable, intent(inout) :: buffer(:)
@ -663,13 +632,7 @@ contains
end subroutine psi_dsnd end subroutine psi_dsnd
subroutine psi_csnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_csnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
complex(psb_spk_), allocatable, intent(inout) :: buffer(:) complex(psb_spk_), allocatable, intent(inout) :: buffer(:)
@ -700,13 +663,7 @@ contains
end subroutine psi_csnd end subroutine psi_csnd
subroutine psi_zsnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_zsnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
complex(psb_dpk_), allocatable, intent(inout) :: buffer(:) complex(psb_dpk_), allocatable, intent(inout) :: buffer(:)
@ -738,13 +695,7 @@ contains
subroutine psi_logsnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_logsnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
logical, allocatable, intent(inout) :: buffer(:) logical, allocatable, intent(inout) :: buffer(:)
@ -776,13 +727,7 @@ contains
subroutine psi_hsnd(ctxt,tag,dest,buffer,mesg_queue) subroutine psi_hsnd(ctxt,tag,dest,buffer,mesg_queue)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: tag, dest integer(psb_mpk_) :: tag, dest
character(len=1), allocatable, intent(inout) :: buffer(:) character(len=1), allocatable, intent(inout) :: buffer(:)
@ -850,16 +795,11 @@ contains
end subroutine psi_get_sizes end subroutine psi_get_sizes
subroutine psi_register_mpi_extras(info) subroutine psi_register_mpi_const(comm,info)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H integer(psb_mpk_) :: comm,info
include 'mpif.h' integer(psb_mpk_) :: ierror
#endif logical :: flag
integer(psb_mpk_) :: info
info = 0 info = 0
#if 0 #if 0
if (info == 0) call mpi_type_create_f90_integer(psb_ipk_, psb_mpi_ipk_ ,info) if (info == 0) call mpi_type_create_f90_integer(psb_ipk_, psb_mpi_ipk_ ,info)
@ -896,8 +836,7 @@ contains
psb_mpi_c_dpk_ = mpi_double_complex psb_mpi_c_dpk_ = mpi_double_complex
#endif #endif
#if defined(PSB_SERIAL_MPI) #if ! defined(PSB_SERIAL_MPI)
#else
if (info == 0) call mpi_op_create(psi_i2amx_op,.true.,mpi_i2amx_op,info) if (info == 0) call mpi_op_create(psi_i2amx_op,.true.,mpi_i2amx_op,info)
if (info == 0) call mpi_op_create(psi_i2amn_op,.true.,mpi_i2amn_op,info) if (info == 0) call mpi_op_create(psi_i2amn_op,.true.,mpi_i2amn_op,info)
if (info == 0) call mpi_op_create(psi_mamx_op,.true.,mpi_mamx_op,info) if (info == 0) call mpi_op_create(psi_mamx_op,.true.,mpi_mamx_op,info)
@ -915,8 +854,7 @@ contains
if (info == 0) call mpi_op_create(psi_snrm2_op,.true.,mpi_snrm2_op,info) if (info == 0) call mpi_op_create(psi_snrm2_op,.true.,mpi_snrm2_op,info)
if (info == 0) call mpi_op_create(psi_dnrm2_op,.true.,mpi_dnrm2_op,info) if (info == 0) call mpi_op_create(psi_dnrm2_op,.true.,mpi_dnrm2_op,info)
#endif #endif
end subroutine psi_register_mpi_const
end subroutine psi_register_mpi_extras
#if (defined(PSB_IPK4) && defined(PSB_LPK8))||defined(PSB_IPK8) #if (defined(PSB_IPK4) && defined(PSB_LPK8))||defined(PSB_IPK8)
subroutine psb_info_epk(ctxt,iam,np) subroutine psb_info_epk(ctxt,iam,np)
@ -941,13 +879,7 @@ contains
use psb_mat_mod use psb_mat_mod
use psb_vect_mod use psb_vect_mod
! !$ use psb_rsb_mod ! !$ use psb_rsb_mod
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type), intent(out) :: ctxt type(psb_ctxt_type), intent(out) :: ctxt
type(psb_ctxt_type), intent(in), optional :: basectxt type(psb_ctxt_type), intent(in), optional :: basectxt
integer(psb_mpk_), intent(in), optional :: np, ids(:), extcomm integer(psb_mpk_), intent(in), optional :: np, ids(:), extcomm
@ -965,7 +897,7 @@ contains
ctxt%ctxt = nctxt ! allocate on assignment ctxt%ctxt = nctxt ! allocate on assignment
nctxt = nctxt + 1 nctxt = nctxt + 1
call psi_register_mpi_extras(info) call psi_register_mpi_const(nctxt,info)
call psi_get_sizes() call psi_get_sizes()
#else #else
@ -1054,7 +986,7 @@ contains
if (info == 0) then if (info == 0) then
ctxt%ctxt = icomm ! allocate on assignment ctxt%ctxt = icomm ! allocate on assignment
end if end if
call psi_register_mpi_extras(info) call psi_register_mpi_const(icomm,info)
call psi_get_sizes() call psi_get_sizes()
!if (ctxt == mpi_comm_null) return !if (ctxt == mpi_comm_null) return
if (.not.allocated(ctxt%ctxt)) return if (.not.allocated(ctxt%ctxt)) return
@ -1080,13 +1012,7 @@ contains
use psb_mat_mod use psb_mat_mod
use psb_vect_mod use psb_vect_mod
! !$ use psb_rsb_mod ! !$ use psb_rsb_mod
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type), intent(inout) :: ctxt type(psb_ctxt_type), intent(inout) :: ctxt
logical, intent(in), optional :: close logical, intent(in), optional :: close
logical :: close_ logical :: close_
@ -1154,13 +1080,7 @@ contains
subroutine psb_barrier_mpik(ctxt) subroutine psb_barrier_mpik(ctxt)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type), intent(in) :: ctxt type(psb_ctxt_type), intent(in) :: ctxt
integer(psb_mpk_) :: info integer(psb_mpk_) :: info
@ -1175,13 +1095,7 @@ contains
function psb_wtime() function psb_wtime()
use psb_const_mod use psb_const_mod
! use mpi_constants ! use mpi_constants
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
real(psb_dpk_) :: psb_wtime real(psb_dpk_) :: psb_wtime
psb_wtime = mpi_wtime() psb_wtime = mpi_wtime()
@ -1210,13 +1124,7 @@ contains
subroutine psb_info_mpik(ctxt,iam,np) subroutine psb_info_mpik(ctxt,iam,np)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type), intent(in) :: ctxt type(psb_ctxt_type), intent(in) :: ctxt
integer(psb_mpk_), intent(out) :: iam, np integer(psb_mpk_), intent(out) :: iam, np
@ -1269,13 +1177,7 @@ contains
function psb_m_get_mpi_comm(ctxt) result(comm) function psb_m_get_mpi_comm(ctxt) result(comm)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: comm integer(psb_mpk_) :: comm
comm = mpi_comm_null comm = mpi_comm_null
@ -1291,13 +1193,7 @@ contains
end function psb_m_get_mpi_rank end function psb_m_get_mpi_rank
subroutine psb_get_mpicomm(ctxt,comm) subroutine psb_get_mpicomm(ctxt,comm)
#ifdef PSB_MPI_MOD
use mpi
#endif
implicit none implicit none
#ifdef PSB_MPI_H
include 'mpif.h'
#endif
type(psb_ctxt_type) :: ctxt type(psb_ctxt_type) :: ctxt
integer(psb_mpk_) :: comm integer(psb_mpk_) :: comm
comm = mpi_comm_null comm = mpi_comm_null

@ -4,6 +4,11 @@
#define PSB_ERR_ERROR -1 #define PSB_ERR_ERROR -1
#define PSB_ERR_SUCCESS 0 #define PSB_ERR_SUCCESS 0
#define PSB_VERSION_MAJOR @PSBLASMAJOR@
#define PSB_VERSION_MINOR @PSBLASMINOR@
#define PSB_VERSION_PATCHLEVEL @PSBLASPATCH@
#define PSB_VERSION_STRING @PSBLASSTRING@
@CSERIALMPI@ @CSERIALMPI@
@PSB_IPKDEF@ @PSB_IPKDEF@

@ -35,7 +35,7 @@ module psb_const_mod
use iso_fortran_env use iso_fortran_env
! This is a 2-byte integer, just in case ! This is a 2-byte integer, just in case
integer, parameter :: psb_i2pk_ = int16 integer, parameter :: psb_i2pk_ = int16
! This is always a 4-byte integer, for MPI-related stuff ! This is always a 4-byte integer.
integer, parameter :: psb_mpk_ = int32 integer, parameter :: psb_mpk_ = int32
! This is always an 8-byte integer. ! This is always an 8-byte integer.
integer, parameter :: psb_epk_ = int64 integer, parameter :: psb_epk_ = int64
@ -51,7 +51,7 @@ module psb_const_mod
! This is a 2-byte integer, just in case ! This is a 2-byte integer, just in case
integer, parameter :: i2ndig=4 integer, parameter :: i2ndig=4
integer, parameter :: psb_i2pk_ = selected_int_kind(i2ndig) integer, parameter :: psb_i2pk_ = selected_int_kind(i2ndig)
! This is always a 4-byte integer, for MPI-related stuff ! This is always a 4-byte integer.
integer, parameter :: indig=8 integer, parameter :: indig=8
integer, parameter :: psb_mpk_ = selected_int_kind(indig) integer, parameter :: psb_mpk_ = selected_int_kind(indig)
! This is always an 8-byte integer. ! This is always an 8-byte integer.
@ -185,11 +185,12 @@ module psb_const_mod
! The up/down constant are defined in pairs having ! The up/down constant are defined in pairs having
! opposite values. We make use of this fact in the heapsort routine. ! opposite values. We make use of this fact in the heapsort routine.
! !
integer(psb_ipk_), parameter :: psb_sort_up_ = 1, psb_sort_down_ = -1 integer(psb_ipk_), parameter :: psb_sort_up_ = 1, psb_sort_down_ = -1
integer(psb_ipk_), parameter :: psb_lsort_up_ = 2, psb_lsort_down_ = -2 integer(psb_ipk_), parameter :: psb_lsort_up_ = 2, psb_lsort_down_ = -2
integer(psb_ipk_), parameter :: psb_asort_up_ = 3, psb_asort_down_ = -3 integer(psb_ipk_), parameter :: psb_asort_up_ = 3, psb_asort_down_ = -3
integer(psb_ipk_), parameter :: psb_alsort_up_ = 4, psb_alsort_down_ = -4 integer(psb_ipk_), parameter :: psb_alsort_up_ = 4, psb_alsort_down_ = -4
integer(psb_ipk_), parameter :: psb_sort_ovw_idx_ = 0, psb_sort_keep_idx_ = 1 integer(psb_ipk_), parameter :: psb_sort_ovw_idx_ = 0, psb_sort_keep_idx_ = 1
integer(psb_ipk_), parameter :: psb_sort_reord_x_ = 0, psb_sort_noreord_x_ = 1
integer(psb_ipk_), parameter :: psb_heap_resize = 200 integer(psb_ipk_), parameter :: psb_heap_resize = 200
integer(psb_ipk_), parameter :: psb_find_any_ = 0 integer(psb_ipk_), parameter :: psb_find_any_ = 0
integer(psb_ipk_), parameter :: psb_find_first_ge_ = 1 integer(psb_ipk_), parameter :: psb_find_first_ge_ = 1
@ -282,7 +283,7 @@ module psb_const_mod
integer(psb_ipk_), parameter, public :: psb_err_parm_differs_among_procs_=550 integer(psb_ipk_), parameter, public :: psb_err_parm_differs_among_procs_=550
integer(psb_ipk_), parameter, public :: psb_err_entry_out_of_bounds_=551 integer(psb_ipk_), parameter, public :: psb_err_entry_out_of_bounds_=551
integer(psb_ipk_), parameter, public :: psb_err_inconsistent_index_lists_=552 integer(psb_ipk_), parameter, public :: psb_err_inconsistent_index_lists_=552
integer(psb_ipk_), parameter, public :: psb_err_partfunc_toomuchprocs_=570 integer(psb_ipk_), parameter, public :: psb_err_partfunc_toomanyprocs_=570
integer(psb_ipk_), parameter, public :: psb_err_partfunc_toofewprocs_=575 integer(psb_ipk_), parameter, public :: psb_err_partfunc_toofewprocs_=575
integer(psb_ipk_), parameter, public :: psb_err_partfunc_wrong_pid_=580 integer(psb_ipk_), parameter, public :: psb_err_partfunc_wrong_pid_=580
integer(psb_ipk_), parameter, public :: psb_err_no_optional_arg_=581 integer(psb_ipk_), parameter, public :: psb_err_no_optional_arg_=581

@ -750,7 +750,7 @@ contains
achmsg(1) = tmpmsg achmsg(1) = tmpmsg
write(achmsg(2),'("Index lists are inconsistent: some indices are orphans")') write(achmsg(2),'("Index lists are inconsistent: some indices are orphans")')
case(psb_err_partfunc_toomuchprocs_) case(psb_err_partfunc_toomanyprocs_)
allocate(achmsg(4)) allocate(achmsg(4))
achmsg(1) = tmpmsg achmsg(1) = tmpmsg
write(achmsg(2),& write(achmsg(2),&

@ -912,6 +912,23 @@ module psb_c_csc_mat_mod
end subroutine psb_lc_csc_scals end subroutine psb_lc_csc_scals
end interface end interface
interface
subroutine psb_ccscspspmm(a,b,c,info)
import
implicit none
class(psb_c_csc_sparse_mat), intent(in) :: a,b
type(psb_c_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ccscspspmm
subroutine psb_lccscspspmm(a,b,c,info)
import
implicit none
class(psb_lc_csc_sparse_mat), intent(in) :: a,b
type(psb_lc_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lccscspspmm
end interface
contains contains
! == =================================== ! == ===================================

@ -1162,6 +1162,23 @@ module psb_c_csr_mat_mod
end subroutine psb_lc_csr_aclsum end subroutine psb_lc_csr_aclsum
end interface end interface
! Interfaces for SPSPMM
interface
subroutine psb_ccsrspspmm(a,b,c,info)
import
implicit none
class(psb_c_csr_sparse_mat), intent(in) :: a,b
type(psb_c_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ccsrspspmm
subroutine psb_lccsrspspmm(a,b,c,info)
import
implicit none
class(psb_lc_csr_sparse_mat), intent(in) :: a,b
type(psb_lc_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lccsrspspmm
end interface
contains contains

@ -78,6 +78,8 @@
! !
module psb_c_mat_mod module psb_c_mat_mod
use psb_c_vect_mod
use psb_i_vect_mod
use psb_c_base_mat_mod use psb_c_base_mat_mod
use psb_c_csr_mat_mod, only : psb_c_csr_sparse_mat, psb_lc_csr_sparse_mat,& use psb_c_csr_mat_mod, only : psb_c_csr_sparse_mat, psb_lc_csr_sparse_mat,&
& psb_c_ecsr_sparse_mat & psb_c_ecsr_sparse_mat
@ -661,9 +663,8 @@ module psb_c_mat_mod
interface interface
subroutine psb_c_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) subroutine psb_c_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info)
use psb_c_vect_mod, only : psb_c_vect_type import :: psb_ipk_, psb_lpk_, psb_cspmat_type, &
use psb_i_vect_mod, only : psb_i_vect_type & psb_c_vect_type, psb_i_vect_type
import :: psb_ipk_, psb_lpk_, psb_cspmat_type
class(psb_cspmat_type), intent(inout) :: a class(psb_cspmat_type), intent(inout) :: a
type(psb_c_vect_type), intent(inout) :: val type(psb_c_vect_type), intent(inout) :: val
type(psb_i_vect_type), intent(inout) :: ia, ja type(psb_i_vect_type), intent(inout) :: ia, ja

@ -60,24 +60,8 @@ module psb_c_serial_mod
type(psb_cspmat_type), intent(out) :: c type(psb_cspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_cspspmm end subroutine psb_cspspmm
subroutine psb_ccsrspspmm(a,b,c,info) end interface psb_spspmm
use psb_c_mat_mod, only : psb_c_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_c_csr_sparse_mat), intent(in) :: a,b
type(psb_c_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ccsrspspmm
subroutine psb_ccscspspmm(a,b,c,info)
use psb_c_mat_mod, only : psb_c_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_c_csc_sparse_mat), intent(in) :: a,b
type(psb_c_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ccscspspmm
end interface
interface psb_symbmm interface psb_symbmm
subroutine psb_csymbmm(a,b,c,info) subroutine psb_csymbmm(a,b,c,info)
use psb_c_mat_mod, only : psb_cspmat_type use psb_c_mat_mod, only : psb_cspmat_type
@ -114,6 +98,16 @@ module psb_c_serial_mod
end subroutine psb_cbase_numbmm end subroutine psb_cbase_numbmm
end interface psb_numbmm end interface psb_numbmm
interface psb_aplusat
subroutine psb_caplusat(ain,aout,info)
use psb_c_mat_mod, only : psb_cspmat_type
import :: psb_ipk_
implicit none
type(psb_cspmat_type) :: ain, aout
integer(psb_ipk_) :: info
end subroutine psb_caplusat
end interface
interface psb_rwextd interface psb_rwextd
subroutine psb_crwextd(nr,a,info,b,rowscale) subroutine psb_crwextd(nr,a,info,b,rowscale)
use psb_c_mat_mod, only : psb_cspmat_type use psb_c_mat_mod, only : psb_cspmat_type
@ -232,22 +226,6 @@ module psb_c_serial_mod
type(psb_lcspmat_type), intent(out) :: c type(psb_lcspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_lcspspmm end subroutine psb_lcspspmm
subroutine psb_lccsrspspmm(a,b,c,info)
use psb_c_mat_mod, only : psb_lc_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_lc_csr_sparse_mat), intent(in) :: a,b
type(psb_lc_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lccsrspspmm
subroutine psb_lccscspspmm(a,b,c,info)
use psb_c_mat_mod, only : psb_lc_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_lc_csc_sparse_mat), intent(in) :: a,b
type(psb_lc_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lccscspspmm
end interface psb_spspmm end interface psb_spspmm
interface psb_symbmm interface psb_symbmm

@ -912,6 +912,23 @@ module psb_d_csc_mat_mod
end subroutine psb_ld_csc_scals end subroutine psb_ld_csc_scals
end interface end interface
interface
subroutine psb_dcscspspmm(a,b,c,info)
import
implicit none
class(psb_d_csc_sparse_mat), intent(in) :: a,b
type(psb_d_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_dcscspspmm
subroutine psb_ldcscspspmm(a,b,c,info)
import
implicit none
class(psb_ld_csc_sparse_mat), intent(in) :: a,b
type(psb_ld_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ldcscspspmm
end interface
contains contains
! == =================================== ! == ===================================

@ -1162,6 +1162,23 @@ module psb_d_csr_mat_mod
end subroutine psb_ld_csr_aclsum end subroutine psb_ld_csr_aclsum
end interface end interface
! Interfaces for SPSPMM
interface
subroutine psb_dcsrspspmm(a,b,c,info)
import
implicit none
class(psb_d_csr_sparse_mat), intent(in) :: a,b
type(psb_d_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_dcsrspspmm
subroutine psb_ldcsrspspmm(a,b,c,info)
import
implicit none
class(psb_ld_csr_sparse_mat), intent(in) :: a,b
type(psb_ld_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ldcsrspspmm
end interface
contains contains

@ -78,6 +78,8 @@
! !
module psb_d_mat_mod module psb_d_mat_mod
use psb_d_vect_mod
use psb_i_vect_mod
use psb_d_base_mat_mod use psb_d_base_mat_mod
use psb_d_csr_mat_mod, only : psb_d_csr_sparse_mat, psb_ld_csr_sparse_mat,& use psb_d_csr_mat_mod, only : psb_d_csr_sparse_mat, psb_ld_csr_sparse_mat,&
& psb_d_ecsr_sparse_mat & psb_d_ecsr_sparse_mat
@ -661,9 +663,8 @@ module psb_d_mat_mod
interface interface
subroutine psb_d_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) subroutine psb_d_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info)
use psb_d_vect_mod, only : psb_d_vect_type import :: psb_ipk_, psb_lpk_, psb_dspmat_type, &
use psb_i_vect_mod, only : psb_i_vect_type & psb_d_vect_type, psb_i_vect_type
import :: psb_ipk_, psb_lpk_, psb_dspmat_type
class(psb_dspmat_type), intent(inout) :: a class(psb_dspmat_type), intent(inout) :: a
type(psb_d_vect_type), intent(inout) :: val type(psb_d_vect_type), intent(inout) :: val
type(psb_i_vect_type), intent(inout) :: ia, ja type(psb_i_vect_type), intent(inout) :: ia, ja

@ -60,24 +60,8 @@ module psb_d_serial_mod
type(psb_dspmat_type), intent(out) :: c type(psb_dspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_dspspmm end subroutine psb_dspspmm
subroutine psb_dcsrspspmm(a,b,c,info) end interface psb_spspmm
use psb_d_mat_mod, only : psb_d_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_d_csr_sparse_mat), intent(in) :: a,b
type(psb_d_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_dcsrspspmm
subroutine psb_dcscspspmm(a,b,c,info)
use psb_d_mat_mod, only : psb_d_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_d_csc_sparse_mat), intent(in) :: a,b
type(psb_d_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_dcscspspmm
end interface
interface psb_symbmm interface psb_symbmm
subroutine psb_dsymbmm(a,b,c,info) subroutine psb_dsymbmm(a,b,c,info)
use psb_d_mat_mod, only : psb_dspmat_type use psb_d_mat_mod, only : psb_dspmat_type
@ -114,6 +98,16 @@ module psb_d_serial_mod
end subroutine psb_dbase_numbmm end subroutine psb_dbase_numbmm
end interface psb_numbmm end interface psb_numbmm
interface psb_aplusat
subroutine psb_daplusat(ain,aout,info)
use psb_d_mat_mod, only : psb_dspmat_type
import :: psb_ipk_
implicit none
type(psb_dspmat_type) :: ain, aout
integer(psb_ipk_) :: info
end subroutine psb_daplusat
end interface
interface psb_rwextd interface psb_rwextd
subroutine psb_drwextd(nr,a,info,b,rowscale) subroutine psb_drwextd(nr,a,info,b,rowscale)
use psb_d_mat_mod, only : psb_dspmat_type use psb_d_mat_mod, only : psb_dspmat_type
@ -232,22 +226,6 @@ module psb_d_serial_mod
type(psb_ldspmat_type), intent(out) :: c type(psb_ldspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_ldspspmm end subroutine psb_ldspspmm
subroutine psb_ldcsrspspmm(a,b,c,info)
use psb_d_mat_mod, only : psb_ld_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_ld_csr_sparse_mat), intent(in) :: a,b
type(psb_ld_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ldcsrspspmm
subroutine psb_ldcscspspmm(a,b,c,info)
use psb_d_mat_mod, only : psb_ld_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_ld_csc_sparse_mat), intent(in) :: a,b
type(psb_ld_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_ldcscspspmm
end interface psb_spspmm end interface psb_spspmm
interface psb_symbmm interface psb_symbmm

@ -912,6 +912,23 @@ module psb_s_csc_mat_mod
end subroutine psb_ls_csc_scals end subroutine psb_ls_csc_scals
end interface end interface
interface
subroutine psb_scscspspmm(a,b,c,info)
import
implicit none
class(psb_s_csc_sparse_mat), intent(in) :: a,b
type(psb_s_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_scscspspmm
subroutine psb_lscscspspmm(a,b,c,info)
import
implicit none
class(psb_ls_csc_sparse_mat), intent(in) :: a,b
type(psb_ls_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lscscspspmm
end interface
contains contains
! == =================================== ! == ===================================

@ -1162,6 +1162,23 @@ module psb_s_csr_mat_mod
end subroutine psb_ls_csr_aclsum end subroutine psb_ls_csr_aclsum
end interface end interface
! Interfaces for SPSPMM
interface
subroutine psb_scsrspspmm(a,b,c,info)
import
implicit none
class(psb_s_csr_sparse_mat), intent(in) :: a,b
type(psb_s_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_scsrspspmm
subroutine psb_lscsrspspmm(a,b,c,info)
import
implicit none
class(psb_ls_csr_sparse_mat), intent(in) :: a,b
type(psb_ls_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lscsrspspmm
end interface
contains contains

@ -78,6 +78,8 @@
! !
module psb_s_mat_mod module psb_s_mat_mod
use psb_s_vect_mod
use psb_i_vect_mod
use psb_s_base_mat_mod use psb_s_base_mat_mod
use psb_s_csr_mat_mod, only : psb_s_csr_sparse_mat, psb_ls_csr_sparse_mat,& use psb_s_csr_mat_mod, only : psb_s_csr_sparse_mat, psb_ls_csr_sparse_mat,&
& psb_s_ecsr_sparse_mat & psb_s_ecsr_sparse_mat
@ -661,9 +663,8 @@ module psb_s_mat_mod
interface interface
subroutine psb_s_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) subroutine psb_s_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info)
use psb_s_vect_mod, only : psb_s_vect_type import :: psb_ipk_, psb_lpk_, psb_sspmat_type, &
use psb_i_vect_mod, only : psb_i_vect_type & psb_s_vect_type, psb_i_vect_type
import :: psb_ipk_, psb_lpk_, psb_sspmat_type
class(psb_sspmat_type), intent(inout) :: a class(psb_sspmat_type), intent(inout) :: a
type(psb_s_vect_type), intent(inout) :: val type(psb_s_vect_type), intent(inout) :: val
type(psb_i_vect_type), intent(inout) :: ia, ja type(psb_i_vect_type), intent(inout) :: ia, ja

@ -60,24 +60,8 @@ module psb_s_serial_mod
type(psb_sspmat_type), intent(out) :: c type(psb_sspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_sspspmm end subroutine psb_sspspmm
subroutine psb_scsrspspmm(a,b,c,info) end interface psb_spspmm
use psb_s_mat_mod, only : psb_s_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_s_csr_sparse_mat), intent(in) :: a,b
type(psb_s_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_scsrspspmm
subroutine psb_scscspspmm(a,b,c,info)
use psb_s_mat_mod, only : psb_s_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_s_csc_sparse_mat), intent(in) :: a,b
type(psb_s_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_scscspspmm
end interface
interface psb_symbmm interface psb_symbmm
subroutine psb_ssymbmm(a,b,c,info) subroutine psb_ssymbmm(a,b,c,info)
use psb_s_mat_mod, only : psb_sspmat_type use psb_s_mat_mod, only : psb_sspmat_type
@ -114,6 +98,16 @@ module psb_s_serial_mod
end subroutine psb_sbase_numbmm end subroutine psb_sbase_numbmm
end interface psb_numbmm end interface psb_numbmm
interface psb_aplusat
subroutine psb_saplusat(ain,aout,info)
use psb_s_mat_mod, only : psb_sspmat_type
import :: psb_ipk_
implicit none
type(psb_sspmat_type) :: ain, aout
integer(psb_ipk_) :: info
end subroutine psb_saplusat
end interface
interface psb_rwextd interface psb_rwextd
subroutine psb_srwextd(nr,a,info,b,rowscale) subroutine psb_srwextd(nr,a,info,b,rowscale)
use psb_s_mat_mod, only : psb_sspmat_type use psb_s_mat_mod, only : psb_sspmat_type
@ -232,22 +226,6 @@ module psb_s_serial_mod
type(psb_lsspmat_type), intent(out) :: c type(psb_lsspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_lsspspmm end subroutine psb_lsspspmm
subroutine psb_lscsrspspmm(a,b,c,info)
use psb_s_mat_mod, only : psb_ls_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_ls_csr_sparse_mat), intent(in) :: a,b
type(psb_ls_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lscsrspspmm
subroutine psb_lscscspspmm(a,b,c,info)
use psb_s_mat_mod, only : psb_ls_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_ls_csc_sparse_mat), intent(in) :: a,b
type(psb_ls_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lscscspspmm
end interface psb_spspmm end interface psb_spspmm
interface psb_symbmm interface psb_symbmm

@ -912,6 +912,23 @@ module psb_z_csc_mat_mod
end subroutine psb_lz_csc_scals end subroutine psb_lz_csc_scals
end interface end interface
interface
subroutine psb_zcscspspmm(a,b,c,info)
import
implicit none
class(psb_z_csc_sparse_mat), intent(in) :: a,b
type(psb_z_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_zcscspspmm
subroutine psb_lzcscspspmm(a,b,c,info)
import
implicit none
class(psb_lz_csc_sparse_mat), intent(in) :: a,b
type(psb_lz_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lzcscspspmm
end interface
contains contains
! == =================================== ! == ===================================

@ -1162,6 +1162,23 @@ module psb_z_csr_mat_mod
end subroutine psb_lz_csr_aclsum end subroutine psb_lz_csr_aclsum
end interface end interface
! Interfaces for SPSPMM
interface
subroutine psb_zcsrspspmm(a,b,c,info)
import
implicit none
class(psb_z_csr_sparse_mat), intent(in) :: a,b
type(psb_z_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_zcsrspspmm
subroutine psb_lzcsrspspmm(a,b,c,info)
import
implicit none
class(psb_lz_csr_sparse_mat), intent(in) :: a,b
type(psb_lz_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lzcsrspspmm
end interface
contains contains

@ -78,6 +78,8 @@
! !
module psb_z_mat_mod module psb_z_mat_mod
use psb_z_vect_mod
use psb_i_vect_mod
use psb_z_base_mat_mod use psb_z_base_mat_mod
use psb_z_csr_mat_mod, only : psb_z_csr_sparse_mat, psb_lz_csr_sparse_mat,& use psb_z_csr_mat_mod, only : psb_z_csr_sparse_mat, psb_lz_csr_sparse_mat,&
& psb_z_ecsr_sparse_mat & psb_z_ecsr_sparse_mat
@ -661,9 +663,8 @@ module psb_z_mat_mod
interface interface
subroutine psb_z_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info) subroutine psb_z_csput_v(nz,ia,ja,val,a,imin,imax,jmin,jmax,info)
use psb_z_vect_mod, only : psb_z_vect_type import :: psb_ipk_, psb_lpk_, psb_zspmat_type, &
use psb_i_vect_mod, only : psb_i_vect_type & psb_z_vect_type, psb_i_vect_type
import :: psb_ipk_, psb_lpk_, psb_zspmat_type
class(psb_zspmat_type), intent(inout) :: a class(psb_zspmat_type), intent(inout) :: a
type(psb_z_vect_type), intent(inout) :: val type(psb_z_vect_type), intent(inout) :: val
type(psb_i_vect_type), intent(inout) :: ia, ja type(psb_i_vect_type), intent(inout) :: ia, ja

@ -60,24 +60,8 @@ module psb_z_serial_mod
type(psb_zspmat_type), intent(out) :: c type(psb_zspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_zspspmm end subroutine psb_zspspmm
subroutine psb_zcsrspspmm(a,b,c,info) end interface psb_spspmm
use psb_z_mat_mod, only : psb_z_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_z_csr_sparse_mat), intent(in) :: a,b
type(psb_z_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_zcsrspspmm
subroutine psb_zcscspspmm(a,b,c,info)
use psb_z_mat_mod, only : psb_z_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_z_csc_sparse_mat), intent(in) :: a,b
type(psb_z_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_zcscspspmm
end interface
interface psb_symbmm interface psb_symbmm
subroutine psb_zsymbmm(a,b,c,info) subroutine psb_zsymbmm(a,b,c,info)
use psb_z_mat_mod, only : psb_zspmat_type use psb_z_mat_mod, only : psb_zspmat_type
@ -114,6 +98,16 @@ module psb_z_serial_mod
end subroutine psb_zbase_numbmm end subroutine psb_zbase_numbmm
end interface psb_numbmm end interface psb_numbmm
interface psb_aplusat
subroutine psb_zaplusat(ain,aout,info)
use psb_z_mat_mod, only : psb_zspmat_type
import :: psb_ipk_
implicit none
type(psb_zspmat_type) :: ain, aout
integer(psb_ipk_) :: info
end subroutine psb_zaplusat
end interface
interface psb_rwextd interface psb_rwextd
subroutine psb_zrwextd(nr,a,info,b,rowscale) subroutine psb_zrwextd(nr,a,info,b,rowscale)
use psb_z_mat_mod, only : psb_zspmat_type use psb_z_mat_mod, only : psb_zspmat_type
@ -232,22 +226,6 @@ module psb_z_serial_mod
type(psb_lzspmat_type), intent(out) :: c type(psb_lzspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine psb_lzspspmm end subroutine psb_lzspspmm
subroutine psb_lzcsrspspmm(a,b,c,info)
use psb_z_mat_mod, only : psb_lz_csr_sparse_mat
import :: psb_ipk_
implicit none
class(psb_lz_csr_sparse_mat), intent(in) :: a,b
type(psb_lz_csr_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lzcsrspspmm
subroutine psb_lzcscspspmm(a,b,c,info)
use psb_z_mat_mod, only : psb_lz_csc_sparse_mat
import :: psb_ipk_
implicit none
class(psb_lz_csc_sparse_mat), intent(in) :: a,b
type(psb_lz_csc_sparse_mat), intent(out) :: c
integer(psb_ipk_), intent(out) :: info
end subroutine psb_lzcscspspmm
end interface psb_spspmm end interface psb_spspmm
interface psb_symbmm interface psb_symbmm

@ -11,6 +11,7 @@ FOBJS = psb_lsame.o psi_m_serial_impl.o psi_e_serial_impl.o \
smmp.o lsmmp.o \ smmp.o lsmmp.o \
psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o\ psb_sgeprt.o psb_dgeprt.o psb_cgeprt.o psb_zgeprt.o\
psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o\ psb_spdot_srtd.o psb_aspxpby.o psb_spge_dot.o\
psb_saplusat.o psb_daplusat.o psb_caplusat.o psb_zaplusat.o \
psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o \ psb_samax_s.o psb_damax_s.o psb_camax_s.o psb_zamax_s.o \
psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o psb_sasum_s.o psb_dasum_s.o psb_casum_s.o psb_zasum_s.o

@ -2824,8 +2824,8 @@ subroutine psb_c_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_c_csc_print end subroutine psb_c_csc_print
subroutine psb_ccscspspmm(a,b,c,info) subroutine psb_ccscspspmm(a,b,c,info)
use psb_c_mat_mod use psb_c_csc_mat_mod, psb_protect_name => psb_ccscspspmm
use psb_serial_mod, psb_protect_name => psb_ccscspspmm use psb_serial_mod
implicit none implicit none
@ -4664,8 +4664,8 @@ subroutine psb_lc_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_lc_csc_print end subroutine psb_lc_csc_print
subroutine psb_lccscspspmm(a,b,c,info) subroutine psb_lccscspspmm(a,b,c,info)
use psb_c_mat_mod use psb_c_csc_mat_mod, psb_protect_name => psb_lccscspspmm
use psb_serial_mod, psb_protect_name => psb_lccscspspmm use psb_serial_mod
implicit none implicit none

@ -3657,8 +3657,8 @@ end subroutine psb_c_cp_csr_from_fmt
#if defined(PSB_OPENMP) #if defined(PSB_OPENMP)
subroutine psb_ccsrspspmm(a,b,c,info) subroutine psb_ccsrspspmm(a,b,c,info)
use psb_c_mat_mod use psb_c_csr_mat_mod, psb_protect_name => psb_ccsrspspmm
use psb_serial_mod, psb_protect_name => psb_ccsrspspmm use psb_serial_mod
implicit none implicit none
@ -4204,8 +4204,8 @@ end subroutine psb_ccsrspspmm
#else #else
subroutine psb_ccsrspspmm(a,b,c,info) subroutine psb_ccsrspspmm(a,b,c,info)
use psb_c_mat_mod use psb_c_csr_mat_mod, psb_protect_name => psb_ccsrspspmm
use psb_serial_mod, psb_protect_name => psb_ccsrspspmm use psb_serial_mod
implicit none implicit none
@ -4238,7 +4238,7 @@ subroutine psb_ccsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output. ! Estimate number of nonzeros on output.
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -4276,9 +4276,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0
@ -6580,8 +6580,8 @@ end subroutine psb_lc_cp_csr_from_fmt
!!$end subroutine psb_lc_csr_clean_zeros !!$end subroutine psb_lc_csr_clean_zeros
subroutine psb_lccsrspspmm(a,b,c,info) subroutine psb_lccsrspspmm(a,b,c,info)
use psb_c_mat_mod use psb_c_csr_mat_mod, psb_protect_name => psb_lccsrspspmm
use psb_serial_mod, psb_protect_name => psb_lccsrspspmm use psb_serial_mod
implicit none implicit none
@ -6613,7 +6613,7 @@ subroutine psb_lccsrspspmm(a,b,c,info)
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = 2*(nza+nzb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -6651,9 +6651,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0

@ -2824,8 +2824,8 @@ subroutine psb_d_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_d_csc_print end subroutine psb_d_csc_print
subroutine psb_dcscspspmm(a,b,c,info) subroutine psb_dcscspspmm(a,b,c,info)
use psb_d_mat_mod use psb_d_csc_mat_mod, psb_protect_name => psb_dcscspspmm
use psb_serial_mod, psb_protect_name => psb_dcscspspmm use psb_serial_mod
implicit none implicit none
@ -4664,8 +4664,8 @@ subroutine psb_ld_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_ld_csc_print end subroutine psb_ld_csc_print
subroutine psb_ldcscspspmm(a,b,c,info) subroutine psb_ldcscspspmm(a,b,c,info)
use psb_d_mat_mod use psb_d_csc_mat_mod, psb_protect_name => psb_ldcscspspmm
use psb_serial_mod, psb_protect_name => psb_ldcscspspmm use psb_serial_mod
implicit none implicit none

@ -3657,8 +3657,8 @@ end subroutine psb_d_cp_csr_from_fmt
#if defined(PSB_OPENMP) #if defined(PSB_OPENMP)
subroutine psb_dcsrspspmm(a,b,c,info) subroutine psb_dcsrspspmm(a,b,c,info)
use psb_d_mat_mod use psb_d_csr_mat_mod, psb_protect_name => psb_dcsrspspmm
use psb_serial_mod, psb_protect_name => psb_dcsrspspmm use psb_serial_mod
implicit none implicit none
@ -4204,8 +4204,8 @@ end subroutine psb_dcsrspspmm
#else #else
subroutine psb_dcsrspspmm(a,b,c,info) subroutine psb_dcsrspspmm(a,b,c,info)
use psb_d_mat_mod use psb_d_csr_mat_mod, psb_protect_name => psb_dcsrspspmm
use psb_serial_mod, psb_protect_name => psb_dcsrspspmm use psb_serial_mod
implicit none implicit none
@ -4238,7 +4238,7 @@ subroutine psb_dcsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output. ! Estimate number of nonzeros on output.
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -4276,9 +4276,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0
@ -6580,8 +6580,8 @@ end subroutine psb_ld_cp_csr_from_fmt
!!$end subroutine psb_ld_csr_clean_zeros !!$end subroutine psb_ld_csr_clean_zeros
subroutine psb_ldcsrspspmm(a,b,c,info) subroutine psb_ldcsrspspmm(a,b,c,info)
use psb_d_mat_mod use psb_d_csr_mat_mod, psb_protect_name => psb_ldcsrspspmm
use psb_serial_mod, psb_protect_name => psb_ldcsrspspmm use psb_serial_mod
implicit none implicit none
@ -6613,7 +6613,7 @@ subroutine psb_ldcsrspspmm(a,b,c,info)
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = 2*(nza+nzb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -6651,9 +6651,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0

@ -2824,8 +2824,8 @@ subroutine psb_s_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_s_csc_print end subroutine psb_s_csc_print
subroutine psb_scscspspmm(a,b,c,info) subroutine psb_scscspspmm(a,b,c,info)
use psb_s_mat_mod use psb_s_csc_mat_mod, psb_protect_name => psb_scscspspmm
use psb_serial_mod, psb_protect_name => psb_scscspspmm use psb_serial_mod
implicit none implicit none
@ -4664,8 +4664,8 @@ subroutine psb_ls_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_ls_csc_print end subroutine psb_ls_csc_print
subroutine psb_lscscspspmm(a,b,c,info) subroutine psb_lscscspspmm(a,b,c,info)
use psb_s_mat_mod use psb_s_csc_mat_mod, psb_protect_name => psb_lscscspspmm
use psb_serial_mod, psb_protect_name => psb_lscscspspmm use psb_serial_mod
implicit none implicit none

@ -3657,8 +3657,8 @@ end subroutine psb_s_cp_csr_from_fmt
#if defined(PSB_OPENMP) #if defined(PSB_OPENMP)
subroutine psb_scsrspspmm(a,b,c,info) subroutine psb_scsrspspmm(a,b,c,info)
use psb_s_mat_mod use psb_s_csr_mat_mod, psb_protect_name => psb_scsrspspmm
use psb_serial_mod, psb_protect_name => psb_scsrspspmm use psb_serial_mod
implicit none implicit none
@ -4204,8 +4204,8 @@ end subroutine psb_scsrspspmm
#else #else
subroutine psb_scsrspspmm(a,b,c,info) subroutine psb_scsrspspmm(a,b,c,info)
use psb_s_mat_mod use psb_s_csr_mat_mod, psb_protect_name => psb_scsrspspmm
use psb_serial_mod, psb_protect_name => psb_scsrspspmm use psb_serial_mod
implicit none implicit none
@ -4238,7 +4238,7 @@ subroutine psb_scsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output. ! Estimate number of nonzeros on output.
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -4276,9 +4276,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0
@ -6580,8 +6580,8 @@ end subroutine psb_ls_cp_csr_from_fmt
!!$end subroutine psb_ls_csr_clean_zeros !!$end subroutine psb_ls_csr_clean_zeros
subroutine psb_lscsrspspmm(a,b,c,info) subroutine psb_lscsrspspmm(a,b,c,info)
use psb_s_mat_mod use psb_s_csr_mat_mod, psb_protect_name => psb_lscsrspspmm
use psb_serial_mod, psb_protect_name => psb_lscsrspspmm use psb_serial_mod
implicit none implicit none
@ -6613,7 +6613,7 @@ subroutine psb_lscsrspspmm(a,b,c,info)
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = 2*(nza+nzb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -6651,9 +6651,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0

@ -2824,8 +2824,8 @@ subroutine psb_z_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_z_csc_print end subroutine psb_z_csc_print
subroutine psb_zcscspspmm(a,b,c,info) subroutine psb_zcscspspmm(a,b,c,info)
use psb_z_mat_mod use psb_z_csc_mat_mod, psb_protect_name => psb_zcscspspmm
use psb_serial_mod, psb_protect_name => psb_zcscspspmm use psb_serial_mod
implicit none implicit none
@ -4664,8 +4664,8 @@ subroutine psb_lz_csc_print(iout,a,iv,head,ivr,ivc)
end subroutine psb_lz_csc_print end subroutine psb_lz_csc_print
subroutine psb_lzcscspspmm(a,b,c,info) subroutine psb_lzcscspspmm(a,b,c,info)
use psb_z_mat_mod use psb_z_csc_mat_mod, psb_protect_name => psb_lzcscspspmm
use psb_serial_mod, psb_protect_name => psb_lzcscspspmm use psb_serial_mod
implicit none implicit none

@ -3657,8 +3657,8 @@ end subroutine psb_z_cp_csr_from_fmt
#if defined(PSB_OPENMP) #if defined(PSB_OPENMP)
subroutine psb_zcsrspspmm(a,b,c,info) subroutine psb_zcsrspspmm(a,b,c,info)
use psb_z_mat_mod use psb_z_csr_mat_mod, psb_protect_name => psb_zcsrspspmm
use psb_serial_mod, psb_protect_name => psb_zcsrspspmm use psb_serial_mod
implicit none implicit none
@ -4204,8 +4204,8 @@ end subroutine psb_zcsrspspmm
#else #else
subroutine psb_zcsrspspmm(a,b,c,info) subroutine psb_zcsrspspmm(a,b,c,info)
use psb_z_mat_mod use psb_z_csr_mat_mod, psb_protect_name => psb_zcsrspspmm
use psb_serial_mod, psb_protect_name => psb_zcsrspspmm use psb_serial_mod
implicit none implicit none
@ -4238,7 +4238,7 @@ subroutine psb_zcsrspspmm(a,b,c,info)
! Estimate number of nonzeros on output. ! Estimate number of nonzeros on output.
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = max(nint(0.5*(nza+nzb)),ma,mb,na,nb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -4276,9 +4276,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0
@ -6580,8 +6580,8 @@ end subroutine psb_lz_cp_csr_from_fmt
!!$end subroutine psb_lz_csr_clean_zeros !!$end subroutine psb_lz_csr_clean_zeros
subroutine psb_lzcsrspspmm(a,b,c,info) subroutine psb_lzcsrspspmm(a,b,c,info)
use psb_z_mat_mod use psb_z_csr_mat_mod, psb_protect_name => psb_lzcsrspspmm
use psb_serial_mod, psb_protect_name => psb_lzcsrspspmm use psb_serial_mod
implicit none implicit none
@ -6613,7 +6613,7 @@ subroutine psb_lzcsrspspmm(a,b,c,info)
nza = a%get_nzeros() nza = a%get_nzeros()
nzb = b%get_nzeros() nzb = b%get_nzeros()
nzc = 2*(nza+nzb) nzc = max(nint(0.25*(nza+nzb)),ma,nb)
call c%allocate(ma,nb,nzc) call c%allocate(ma,nb,nzc)
call csr_spspmm(a,b,c,info) call csr_spspmm(a,b,c,info)
@ -6651,9 +6651,9 @@ contains
nze = min(size(c%val),size(c%ja)) nze = min(size(c%val),size(c%ja))
isz = max(ma,na,mb,nb) isz = max(ma,na,mb,nb)
call psb_realloc(isz,row,info) call psb_realloc(nb,row,info)
if (info == 0) call psb_realloc(isz,idxs,info) if (info == 0) call psb_realloc(max(na,nb),idxs,info)
if (info == 0) call psb_realloc(isz,irow,info) if (info == 0) call psb_realloc(nb,irow,info)
if (info /= 0) return if (info /= 0) return
row = dzero row = dzero
irow = 0 irow = 0

@ -0,0 +1,50 @@
subroutine psb_caplusat(ain,aout,info)
use psb_c_mat_mod
implicit none
type(psb_cspmat_type), intent(inout) :: ain
type(psb_cspmat_type), intent(out) :: aout
integer(psb_ipk_) :: info
type(psb_c_coo_sparse_mat) :: acoo1, acoo2
integer(psb_ipk_) :: nr, nc, nz1, nz2
integer(psb_ipk_) :: err_act
character(len=20) :: name, ch_err
name='psb_caplusat'
info = psb_success_
call psb_erractionsave(err_act)
nr = ain%get_nrows()
nc = ain%get_ncols()
if (nr /= nc) then
info=psb_err_internal_error_
call psb_errpush(info,name)
goto 9999
end if
call ain%cp_to(acoo1)
call acoo1%cp_to_coo(acoo2,info)
nz1 = acoo1%get_nzeros()
nz2 = acoo2%get_nzeros()
call acoo1%reallocate(nz1+nz2)
acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2)
acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2)
acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2)
call acoo1%set_nrows(nr)
call acoo1%set_ncols(nr)
call acoo1%set_nzeros(nz1+nz2)
call aout%cp_from(acoo1)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_caplusat

@ -37,9 +37,9 @@
! !
subroutine psb_cspspmm(a,b,c,info) subroutine psb_cspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_c_csr_mat_mod
use psb_c_csc_mat_mod
use psb_c_serial_mod, psb_protect_name => psb_cspspmm use psb_c_serial_mod, psb_protect_name => psb_cspspmm
implicit none
type(psb_cspmat_type), intent(in) :: a,b type(psb_cspmat_type), intent(in) :: a,b
type(psb_cspmat_type), intent(out) :: c type(psb_cspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -48,6 +48,8 @@ subroutine psb_cspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -118,6 +120,8 @@ end subroutine psb_cspspmm
subroutine psb_lcspspmm(a,b,c,info) subroutine psb_lcspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_c_csr_mat_mod
use psb_c_csc_mat_mod
use psb_c_serial_mod, psb_protect_name => psb_lcspspmm use psb_c_serial_mod, psb_protect_name => psb_lcspspmm
implicit none implicit none
@ -129,6 +133,7 @@ subroutine psb_lcspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_

@ -85,6 +85,7 @@ end subroutine psb_csymbmm
subroutine psb_cbase_symbmm(a,b,c,info) subroutine psb_cbase_symbmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_sort_mod use psb_sort_mod
use psb_serial_mod, only : symbmm
implicit none implicit none
class(psb_c_base_sparse_mat), intent(in) :: a,b class(psb_c_base_sparse_mat), intent(in) :: a,b

@ -0,0 +1,50 @@
subroutine psb_daplusat(ain,aout,info)
use psb_d_mat_mod
implicit none
type(psb_dspmat_type), intent(inout) :: ain
type(psb_dspmat_type), intent(out) :: aout
integer(psb_ipk_) :: info
type(psb_d_coo_sparse_mat) :: acoo1, acoo2
integer(psb_ipk_) :: nr, nc, nz1, nz2
integer(psb_ipk_) :: err_act
character(len=20) :: name, ch_err
name='psb_daplusat'
info = psb_success_
call psb_erractionsave(err_act)
nr = ain%get_nrows()
nc = ain%get_ncols()
if (nr /= nc) then
info=psb_err_internal_error_
call psb_errpush(info,name)
goto 9999
end if
call ain%cp_to(acoo1)
call acoo1%cp_to_coo(acoo2,info)
nz1 = acoo1%get_nzeros()
nz2 = acoo2%get_nzeros()
call acoo1%reallocate(nz1+nz2)
acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2)
acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2)
acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2)
call acoo1%set_nrows(nr)
call acoo1%set_ncols(nr)
call acoo1%set_nzeros(nz1+nz2)
call aout%cp_from(acoo1)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_daplusat

@ -37,9 +37,9 @@
! !
subroutine psb_dspspmm(a,b,c,info) subroutine psb_dspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_d_csr_mat_mod
use psb_d_csc_mat_mod
use psb_d_serial_mod, psb_protect_name => psb_dspspmm use psb_d_serial_mod, psb_protect_name => psb_dspspmm
implicit none
type(psb_dspmat_type), intent(in) :: a,b type(psb_dspmat_type), intent(in) :: a,b
type(psb_dspmat_type), intent(out) :: c type(psb_dspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -48,6 +48,8 @@ subroutine psb_dspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -118,6 +120,8 @@ end subroutine psb_dspspmm
subroutine psb_ldspspmm(a,b,c,info) subroutine psb_ldspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_d_csr_mat_mod
use psb_d_csc_mat_mod
use psb_d_serial_mod, psb_protect_name => psb_ldspspmm use psb_d_serial_mod, psb_protect_name => psb_ldspspmm
implicit none implicit none
@ -129,6 +133,7 @@ subroutine psb_ldspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_

@ -85,6 +85,7 @@ end subroutine psb_dsymbmm
subroutine psb_dbase_symbmm(a,b,c,info) subroutine psb_dbase_symbmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_sort_mod use psb_sort_mod
use psb_serial_mod, only : symbmm
implicit none implicit none
class(psb_d_base_sparse_mat), intent(in) :: a,b class(psb_d_base_sparse_mat), intent(in) :: a,b

@ -0,0 +1,50 @@
subroutine psb_saplusat(ain,aout,info)
use psb_s_mat_mod
implicit none
type(psb_sspmat_type), intent(inout) :: ain
type(psb_sspmat_type), intent(out) :: aout
integer(psb_ipk_) :: info
type(psb_s_coo_sparse_mat) :: acoo1, acoo2
integer(psb_ipk_) :: nr, nc, nz1, nz2
integer(psb_ipk_) :: err_act
character(len=20) :: name, ch_err
name='psb_saplusat'
info = psb_success_
call psb_erractionsave(err_act)
nr = ain%get_nrows()
nc = ain%get_ncols()
if (nr /= nc) then
info=psb_err_internal_error_
call psb_errpush(info,name)
goto 9999
end if
call ain%cp_to(acoo1)
call acoo1%cp_to_coo(acoo2,info)
nz1 = acoo1%get_nzeros()
nz2 = acoo2%get_nzeros()
call acoo1%reallocate(nz1+nz2)
acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2)
acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2)
acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2)
call acoo1%set_nrows(nr)
call acoo1%set_ncols(nr)
call acoo1%set_nzeros(nz1+nz2)
call aout%cp_from(acoo1)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_saplusat

@ -37,9 +37,9 @@
! !
subroutine psb_sspspmm(a,b,c,info) subroutine psb_sspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_s_csr_mat_mod
use psb_s_csc_mat_mod
use psb_s_serial_mod, psb_protect_name => psb_sspspmm use psb_s_serial_mod, psb_protect_name => psb_sspspmm
implicit none
type(psb_sspmat_type), intent(in) :: a,b type(psb_sspmat_type), intent(in) :: a,b
type(psb_sspmat_type), intent(out) :: c type(psb_sspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -48,6 +48,8 @@ subroutine psb_sspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -118,6 +120,8 @@ end subroutine psb_sspspmm
subroutine psb_lsspspmm(a,b,c,info) subroutine psb_lsspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_s_csr_mat_mod
use psb_s_csc_mat_mod
use psb_s_serial_mod, psb_protect_name => psb_lsspspmm use psb_s_serial_mod, psb_protect_name => psb_lsspspmm
implicit none implicit none
@ -129,6 +133,7 @@ subroutine psb_lsspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_

@ -85,6 +85,7 @@ end subroutine psb_ssymbmm
subroutine psb_sbase_symbmm(a,b,c,info) subroutine psb_sbase_symbmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_sort_mod use psb_sort_mod
use psb_serial_mod, only : symbmm
implicit none implicit none
class(psb_s_base_sparse_mat), intent(in) :: a,b class(psb_s_base_sparse_mat), intent(in) :: a,b

@ -0,0 +1,50 @@
subroutine psb_zaplusat(ain,aout,info)
use psb_z_mat_mod
implicit none
type(psb_zspmat_type), intent(inout) :: ain
type(psb_zspmat_type), intent(out) :: aout
integer(psb_ipk_) :: info
type(psb_z_coo_sparse_mat) :: acoo1, acoo2
integer(psb_ipk_) :: nr, nc, nz1, nz2
integer(psb_ipk_) :: err_act
character(len=20) :: name, ch_err
name='psb_zaplusat'
info = psb_success_
call psb_erractionsave(err_act)
nr = ain%get_nrows()
nc = ain%get_ncols()
if (nr /= nc) then
info=psb_err_internal_error_
call psb_errpush(info,name)
goto 9999
end if
call ain%cp_to(acoo1)
call acoo1%cp_to_coo(acoo2,info)
nz1 = acoo1%get_nzeros()
nz2 = acoo2%get_nzeros()
call acoo1%reallocate(nz1+nz2)
acoo1%ia(nz1+1:nz1+nz2) = acoo2%ja(1:nz2)
acoo1%ja(nz1+1:nz1+nz2) = acoo2%ia(1:nz2)
acoo1%val(nz1+1:nz1+nz2) = acoo2%val(1:nz2)
call acoo1%set_nrows(nr)
call acoo1%set_ncols(nr)
call acoo1%set_nzeros(nz1+nz2)
call aout%cp_from(acoo1)
call psb_erractionrestore(err_act)
return
9999 call psb_error_handler(err_act)
return
end subroutine psb_zaplusat

@ -37,9 +37,9 @@
! !
subroutine psb_zspspmm(a,b,c,info) subroutine psb_zspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_z_csr_mat_mod
use psb_z_csc_mat_mod
use psb_z_serial_mod, psb_protect_name => psb_zspspmm use psb_z_serial_mod, psb_protect_name => psb_zspspmm
implicit none
type(psb_zspmat_type), intent(in) :: a,b type(psb_zspmat_type), intent(in) :: a,b
type(psb_zspmat_type), intent(out) :: c type(psb_zspmat_type), intent(out) :: c
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -48,6 +48,8 @@ subroutine psb_zspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -118,6 +120,8 @@ end subroutine psb_zspspmm
subroutine psb_lzspspmm(a,b,c,info) subroutine psb_lzspspmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_z_csr_mat_mod
use psb_z_csc_mat_mod
use psb_z_serial_mod, psb_protect_name => psb_lzspspmm use psb_z_serial_mod, psb_protect_name => psb_lzspspmm
implicit none implicit none
@ -129,6 +133,7 @@ subroutine psb_lzspspmm(a,b,c,info)
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=*), parameter :: name='psb_spspmm' character(len=*), parameter :: name='psb_spspmm'
logical :: done_spmm logical :: done_spmm
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_

@ -85,6 +85,7 @@ end subroutine psb_zsymbmm
subroutine psb_zbase_symbmm(a,b,c,info) subroutine psb_zbase_symbmm(a,b,c,info)
use psb_mat_mod use psb_mat_mod
use psb_sort_mod use psb_sort_mod
use psb_serial_mod, only : symbmm
implicit none implicit none
class(psb_z_base_sparse_mat), intent(in) :: a,b class(psb_z_base_sparse_mat), intent(in) :: a,b

@ -41,18 +41,19 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_chsort(x,ix,dir,flag) subroutine psb_chsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_chsort use psb_sort_mod, psb_protect_name => psb_chsort
use psb_error_mod use psb_error_mod
implicit none implicit none
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: flag_, n, i, err_act,info integer(psb_ipk_) :: flag_, err_act, info, reord_
integer(psb_ipk_) :: dir_, l integer(psb_ipk_) :: n, i, l, dir_
complex(psb_spk_) :: key complex(psb_spk_) :: key
integer(psb_ipk_) :: index integer(psb_ipk_) :: index
complex(psb_spk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -60,6 +61,13 @@ subroutine psb_chsort(x,ix,dir,flag)
name='psb_hsort' name='psb_hsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -113,24 +121,57 @@ subroutine psb_chsort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
l = 0 select case(reord_)
do i=1, n case (psb_sort_reord_x_)
key = x(i)
index = ix(i) l = 0
call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) do i=1, n
if (l /= i) then key = x(i)
write(psb_err_unit,*) 'Mismatch while heapifying ! ' index = ix(i)
end if call psi_idx_insert_heap(key,index,l,x,ix,dir_,info)
end do if (l /= i) then
do i=n, 2, -1 write(psb_err_unit,*) 'Mismatch while heapifying ! '
call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) end if
if (l /= i-1) then end do
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i do i=n, 2, -1
end if call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info)
x(i) = key if (l /= i-1) then
ix(i) = index write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end do end if
else if (.not.present(ix)) then x(i) = key
ix(i) = index
end do
case(psb_sort_noreord_x_)
tx = x
l = 0
do i=1, n
key = tx(i)
index = ix(i)
call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info)
if (l /= i) then
write(psb_err_unit,*) 'Mismatch while heapifying ! '
end if
end do
do i=n, 2, -1
call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info)
if (l /= i-1) then
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end if
tx(i) = key
ix(i) = index
end do
end select
else if (.not.present(ix)) then
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
l = 0 l = 0
do i=1, n do i=1, n
key = x(i) key = x(i)

@ -40,16 +40,17 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_cisort(x,ix,dir,flag) subroutine psb_cisort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_cisort use psb_sort_mod, psb_protect_name => psb_cisort
use psb_error_mod use psb_error_mod
implicit none implicit none
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act integer(psb_ipk_) :: dir_, flag_, err_act, reord_
integer(psb_ipk_) :: n, i integer(psb_ipk_) :: n, i
complex(psb_spk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -57,6 +58,12 @@ subroutine psb_cisort(x,ix,dir,flag)
name='psb_cisort' name='psb_cisort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -90,39 +97,73 @@ subroutine psb_cisort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
select case(reord_)
select case(dir_) case (psb_sort_reord_x_)
case (psb_lsort_up_) select case(dir_)
case (psb_lsort_up_)
call psi_clisrx_up(n,x,ix) call psi_clisrx_up(n,x,ix)
case (psb_lsort_down_) case (psb_lsort_down_)
call psi_clisrx_dw(n,x,ix) call psi_clisrx_dw(n,x,ix)
case (psb_alsort_up_) case (psb_alsort_up_)
call psi_calisrx_up(n,x,ix) call psi_calisrx_up(n,x,ix)
case (psb_alsort_down_) case (psb_alsort_down_)
call psi_calisrx_dw(n,x,ix) call psi_calisrx_dw(n,x,ix)
case (psb_asort_up_) case (psb_asort_up_)
call psi_caisrx_up(n,x,ix) call psi_caisrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_caisrx_dw(n,x,ix) call psi_caisrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_lsort_up_)
call psi_clisrx_up(n,tx,ix)
case (psb_lsort_down_)
call psi_clisrx_dw(n,tx,ix)
case (psb_alsort_up_)
call psi_calisrx_up(n,tx,ix)
case (psb_alsort_down_)
call psi_calisrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_caisrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_caisrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_lsort_up_) case (psb_lsort_up_)
call psi_clisr_up(n,x) call psi_clisr_up(n,x)
case (psb_lsort_down_) case (psb_lsort_down_)
call psi_clisr_dw(n,x) call psi_clisr_dw(n,x)
case (psb_alsort_up_) case (psb_alsort_up_)
call psi_calisr_up(n,x) call psi_calisr_up(n,x)
case (psb_alsort_down_) case (psb_alsort_down_)
call psi_calisr_dw(n,x) call psi_calisr_dw(n,x)
case (psb_asort_up_) case (psb_asort_up_)
call psi_caisr_up(n,x) call psi_caisr_up(n,x)
case (psb_asort_down_) case (psb_asort_down_)
call psi_caisr_dw(n,x) call psi_caisr_dw(n,x)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)

@ -77,16 +77,16 @@ subroutine psb_cmsort_u(x,nout,dir)
end subroutine psb_cmsort_u end subroutine psb_cmsort_u
subroutine psb_cmsort(x,ix,dir,flag) subroutine psb_cmsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_cmsort use psb_sort_mod, psb_protect_name => psb_cmsort
use psb_error_mod use psb_error_mod
use psb_ip_reord_mod use psb_ip_reord_mod
implicit none implicit none
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, n, err_act integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_
integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_), allocatable :: iaux(:)
integer(psb_ipk_) :: iret, info, i integer(psb_ipk_) :: iret, info, i
@ -96,6 +96,11 @@ subroutine psb_cmsort(x,ix,dir,flag)
name='psb_cmsort' name='psb_cmsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(dir)) then if (present(dir)) then
dir_ = dir dir_ = dir
else else
@ -163,11 +168,25 @@ subroutine psb_cmsort(x,ix,dir,flag)
! only provide linked pointers. ! only provide linked pointers.
! !
if (iret == 0 ) then if (iret == 0 ) then
if (present(ix)) then select case(reord_)
call psb_ip_reord(n,x,ix,iaux) case(psb_sort_reord_x_)
else if (present(ix)) then
call psb_ip_reord(n,x,iaux) call psb_ip_reord(n,x,ix,iaux)
end if else
call psb_ip_reord(n,x,iaux)
end if
case(psb_sort_noreord_x_)
if (present(ix)) then
call psb_ip_reord(n,ix,iaux)
else
call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix")
goto 9999
end if
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end if end if
return return

@ -41,22 +41,29 @@
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_cqsort(x,ix,dir,flag) subroutine psb_cqsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_cqsort use psb_sort_mod, psb_protect_name => psb_cqsort
use psb_error_mod use psb_error_mod
implicit none implicit none
complex(psb_spk_), intent(inout) :: x(:) complex(psb_spk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act, i integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_
integer(psb_ipk_) :: n integer(psb_ipk_) :: n
complex(psb_spk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
name='psb_cqsort' name='psb_cqsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -91,25 +98,57 @@ subroutine psb_cqsort(x,ix,dir,flag)
end do end do
end if end if
select case(dir_) select case(reord_)
case (psb_lsort_up_) case (psb_sort_reord_x_)
select case(dir_)
case (psb_lsort_up_)
call psi_clqsrx_up(n,x,ix) call psi_clqsrx_up(n,x,ix)
case (psb_lsort_down_) case (psb_lsort_down_)
call psi_clqsrx_dw(n,x,ix) call psi_clqsrx_dw(n,x,ix)
case (psb_alsort_up_) case (psb_alsort_up_)
call psi_calqsrx_up(n,x,ix) call psi_calqsrx_up(n,x,ix)
case (psb_alsort_down_) case (psb_alsort_down_)
call psi_calqsrx_dw(n,x,ix) call psi_calqsrx_dw(n,x,ix)
case (psb_asort_up_) case (psb_asort_up_)
call psi_caqsrx_up(n,x,ix) call psi_caqsrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_caqsrx_dw(n,x,ix) call psi_caqsrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_lsort_up_)
call psi_clqsrx_up(n,tx,ix)
case (psb_lsort_down_)
call psi_clqsrx_dw(n,tx,ix)
case (psb_alsort_up_)
call psi_calqsrx_up(n,tx,ix)
case (psb_alsort_down_)
call psi_calqsrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_caqsrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_caqsrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_lsort_up_) case (psb_lsort_up_)
call psi_clqsr_up(n,x) call psi_clqsr_up(n,x)

@ -41,18 +41,19 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_dhsort(x,ix,dir,flag) subroutine psb_dhsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_dhsort use psb_sort_mod, psb_protect_name => psb_dhsort
use psb_error_mod use psb_error_mod
implicit none implicit none
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: flag_, n, i, err_act,info integer(psb_ipk_) :: flag_, err_act, info, reord_
integer(psb_ipk_) :: dir_, l integer(psb_ipk_) :: n, i, l, dir_
real(psb_dpk_) :: key real(psb_dpk_) :: key
integer(psb_ipk_) :: index integer(psb_ipk_) :: index
real(psb_dpk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -60,6 +61,13 @@ subroutine psb_dhsort(x,ix,dir,flag)
name='psb_hsort' name='psb_hsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -113,24 +121,57 @@ subroutine psb_dhsort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
l = 0 select case(reord_)
do i=1, n case (psb_sort_reord_x_)
key = x(i)
index = ix(i) l = 0
call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) do i=1, n
if (l /= i) then key = x(i)
write(psb_err_unit,*) 'Mismatch while heapifying ! ' index = ix(i)
end if call psi_idx_insert_heap(key,index,l,x,ix,dir_,info)
end do if (l /= i) then
do i=n, 2, -1 write(psb_err_unit,*) 'Mismatch while heapifying ! '
call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) end if
if (l /= i-1) then end do
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i do i=n, 2, -1
end if call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info)
x(i) = key if (l /= i-1) then
ix(i) = index write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end do end if
else if (.not.present(ix)) then x(i) = key
ix(i) = index
end do
case(psb_sort_noreord_x_)
tx = x
l = 0
do i=1, n
key = tx(i)
index = ix(i)
call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info)
if (l /= i) then
write(psb_err_unit,*) 'Mismatch while heapifying ! '
end if
end do
do i=n, 2, -1
call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info)
if (l /= i-1) then
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end if
tx(i) = key
ix(i) = index
end do
end select
else if (.not.present(ix)) then
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
l = 0 l = 0
do i=1, n do i=1, n
key = x(i) key = x(i)

@ -40,16 +40,17 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_disort(x,ix,dir,flag) subroutine psb_disort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_disort use psb_sort_mod, psb_protect_name => psb_disort
use psb_error_mod use psb_error_mod
implicit none implicit none
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act integer(psb_ipk_) :: dir_, flag_, err_act, reord_
integer(psb_ipk_) :: n, i integer(psb_ipk_) :: n, i
real(psb_dpk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -57,6 +58,12 @@ subroutine psb_disort(x,ix,dir,flag)
name='psb_disort' name='psb_disort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -90,31 +97,61 @@ subroutine psb_disort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
select case(reord_)
select case(dir_) case (psb_sort_reord_x_)
case (psb_sort_up_) select case(dir_)
call psi_disrx_up(n,x,ix) case (psb_sort_up_)
case (psb_sort_down_) call psi_disrx_up(n,x,ix)
call psi_disrx_dw(n,x,ix) case (psb_sort_down_)
case (psb_asort_up_) call psi_disrx_dw(n,x,ix)
case (psb_asort_up_)
call psi_daisrx_up(n,x,ix) call psi_daisrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_daisrx_dw(n,x,ix) call psi_daisrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_sort_up_)
call psi_disrx_up(n,tx,ix)
case (psb_sort_down_)
call psi_disrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_daisrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_daisrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_sort_up_) case (psb_sort_up_)
call psi_disr_up(n,x) call psi_disr_up(n,x)
case (psb_sort_down_) case (psb_sort_down_)
call psi_disr_dw(n,x) call psi_disr_dw(n,x)
case (psb_asort_up_) case (psb_asort_up_)
call psi_daisr_up(n,x) call psi_daisr_up(n,x)
case (psb_asort_down_) case (psb_asort_down_)
call psi_daisr_dw(n,x) call psi_daisr_dw(n,x)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)

@ -76,16 +76,16 @@ subroutine psb_dmsort_u(x,nout,dir)
return return
end subroutine psb_dmsort_u end subroutine psb_dmsort_u
subroutine psb_dmsort(x,ix,dir,flag) subroutine psb_dmsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_dmsort use psb_sort_mod, psb_protect_name => psb_dmsort
use psb_error_mod use psb_error_mod
use psb_ip_reord_mod use psb_ip_reord_mod
implicit none implicit none
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, n, err_act integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_
integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_), allocatable :: iaux(:)
integer(psb_ipk_) :: iret, info, i integer(psb_ipk_) :: iret, info, i
@ -95,6 +95,11 @@ subroutine psb_dmsort(x,ix,dir,flag)
name='psb_dmsort' name='psb_dmsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(dir)) then if (present(dir)) then
dir_ = dir dir_ = dir
else else
@ -157,15 +162,28 @@ subroutine psb_dmsort(x,ix,dir,flag)
! Do the actual reordering, since the inner routines ! Do the actual reordering, since the inner routines
! only provide linked pointers. ! only provide linked pointers.
! !
if (iret == 0 ) then if (iret == 0 ) then
if (present(ix)) then select case(reord_)
call psb_ip_reord(n,x,ix,iaux) case(psb_sort_reord_x_)
else if (present(ix)) then
call psb_ip_reord(n,x,iaux) call psb_ip_reord(n,x,ix,iaux)
end if else
call psb_ip_reord(n,x,iaux)
end if
case(psb_sort_noreord_x_)
if (present(ix)) then
call psb_ip_reord(n,ix,iaux)
else
call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix")
goto 9999
end if
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end if end if
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)

@ -159,22 +159,29 @@ function psb_dssrch(key,n,v) result(ipos)
return return
end function psb_dssrch end function psb_dssrch
subroutine psb_dqsort(x,ix,dir,flag) subroutine psb_dqsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_dqsort use psb_sort_mod, psb_protect_name => psb_dqsort
use psb_error_mod use psb_error_mod
implicit none implicit none
real(psb_dpk_), intent(inout) :: x(:) real(psb_dpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act, i integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_
integer(psb_ipk_) :: n integer(psb_ipk_) :: n
real(psb_dpk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
name='psb_dqsort' name='psb_dqsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -209,21 +216,49 @@ subroutine psb_dqsort(x,ix,dir,flag)
end do end do
end if end if
select case(dir_) select case(reord_)
case (psb_sort_up_) case (psb_sort_reord_x_)
call psi_dqsrx_up(n,x,ix) select case(dir_)
case (psb_sort_down_) case (psb_sort_up_)
call psi_dqsrx_dw(n,x,ix) call psi_dqsrx_up(n,x,ix)
case (psb_asort_up_) case (psb_sort_down_)
call psi_dqsrx_dw(n,x,ix)
case (psb_asort_up_)
call psi_daqsrx_up(n,x,ix) call psi_daqsrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_daqsrx_dw(n,x,ix) call psi_daqsrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_sort_up_)
call psi_dqsrx_up(n,tx,ix)
case (psb_sort_down_)
call psi_dqsrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_daqsrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_daqsrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_sort_up_) case (psb_sort_up_)
call psi_dqsr_up(n,x) call psi_dqsr_up(n,x)

@ -41,18 +41,19 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_ehsort(x,ix,dir,flag) subroutine psb_ehsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_ehsort use psb_sort_mod, psb_protect_name => psb_ehsort
use psb_error_mod use psb_error_mod
implicit none implicit none
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: flag_, n, i, err_act,info integer(psb_ipk_) :: flag_, err_act, info, reord_
integer(psb_epk_) :: dir_, l integer(psb_epk_) :: n, i, l, dir_
integer(psb_epk_) :: key integer(psb_epk_) :: key
integer(psb_epk_) :: index integer(psb_epk_) :: index
integer(psb_epk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -60,6 +61,13 @@ subroutine psb_ehsort(x,ix,dir,flag)
name='psb_hsort' name='psb_hsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -113,24 +121,57 @@ subroutine psb_ehsort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
l = 0 select case(reord_)
do i=1, n case (psb_sort_reord_x_)
key = x(i)
index = ix(i) l = 0
call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) do i=1, n
if (l /= i) then key = x(i)
write(psb_err_unit,*) 'Mismatch while heapifying ! ' index = ix(i)
end if call psi_idx_insert_heap(key,index,l,x,ix,dir_,info)
end do if (l /= i) then
do i=n, 2, -1 write(psb_err_unit,*) 'Mismatch while heapifying ! '
call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) end if
if (l /= i-1) then end do
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i do i=n, 2, -1
end if call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info)
x(i) = key if (l /= i-1) then
ix(i) = index write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end do end if
else if (.not.present(ix)) then x(i) = key
ix(i) = index
end do
case(psb_sort_noreord_x_)
tx = x
l = 0
do i=1, n
key = tx(i)
index = ix(i)
call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info)
if (l /= i) then
write(psb_err_unit,*) 'Mismatch while heapifying ! '
end if
end do
do i=n, 2, -1
call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info)
if (l /= i-1) then
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end if
tx(i) = key
ix(i) = index
end do
end select
else if (.not.present(ix)) then
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
l = 0 l = 0
do i=1, n do i=1, n
key = x(i) key = x(i)

@ -40,16 +40,17 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_eisort(x,ix,dir,flag) subroutine psb_eisort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_eisort use psb_sort_mod, psb_protect_name => psb_eisort
use psb_error_mod use psb_error_mod
implicit none implicit none
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act integer(psb_ipk_) :: dir_, flag_, err_act, reord_
integer(psb_epk_) :: n, i integer(psb_epk_) :: n, i
integer(psb_epk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -57,6 +58,12 @@ subroutine psb_eisort(x,ix,dir,flag)
name='psb_eisort' name='psb_eisort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -90,31 +97,61 @@ subroutine psb_eisort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
select case(reord_)
select case(dir_) case (psb_sort_reord_x_)
case (psb_sort_up_) select case(dir_)
call psi_eisrx_up(n,x,ix) case (psb_sort_up_)
case (psb_sort_down_) call psi_eisrx_up(n,x,ix)
call psi_eisrx_dw(n,x,ix) case (psb_sort_down_)
case (psb_asort_up_) call psi_eisrx_dw(n,x,ix)
case (psb_asort_up_)
call psi_eaisrx_up(n,x,ix) call psi_eaisrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_eaisrx_dw(n,x,ix) call psi_eaisrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_sort_up_)
call psi_eisrx_up(n,tx,ix)
case (psb_sort_down_)
call psi_eisrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_eaisrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_eaisrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_sort_up_) case (psb_sort_up_)
call psi_eisr_up(n,x) call psi_eisr_up(n,x)
case (psb_sort_down_) case (psb_sort_down_)
call psi_eisr_dw(n,x) call psi_eisr_dw(n,x)
case (psb_asort_up_) case (psb_asort_up_)
call psi_eaisr_up(n,x) call psi_eaisr_up(n,x)
case (psb_asort_down_) case (psb_asort_down_)
call psi_eaisr_dw(n,x) call psi_eaisr_dw(n,x)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)

@ -131,16 +131,16 @@ subroutine psb_emsort_u(x,nout,dir)
return return
end subroutine psb_emsort_u end subroutine psb_emsort_u
subroutine psb_emsort(x,ix,dir,flag) subroutine psb_emsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_emsort use psb_sort_mod, psb_protect_name => psb_emsort
use psb_error_mod use psb_error_mod
use psb_ip_reord_mod use psb_ip_reord_mod
implicit none implicit none
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, n, err_act integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_
integer(psb_epk_), allocatable :: iaux(:) integer(psb_epk_), allocatable :: iaux(:)
integer(psb_ipk_) :: iret, info, i integer(psb_ipk_) :: iret, info, i
@ -150,6 +150,11 @@ subroutine psb_emsort(x,ix,dir,flag)
name='psb_emsort' name='psb_emsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(dir)) then if (present(dir)) then
dir_ = dir dir_ = dir
else else
@ -212,15 +217,28 @@ subroutine psb_emsort(x,ix,dir,flag)
! Do the actual reordering, since the inner routines ! Do the actual reordering, since the inner routines
! only provide linked pointers. ! only provide linked pointers.
! !
if (iret == 0 ) then if (iret == 0 ) then
if (present(ix)) then select case(reord_)
call psb_ip_reord(n,x,ix,iaux) case(psb_sort_reord_x_)
else if (present(ix)) then
call psb_ip_reord(n,x,iaux) call psb_ip_reord(n,x,ix,iaux)
end if else
call psb_ip_reord(n,x,iaux)
end if
case(psb_sort_noreord_x_)
if (present(ix)) then
call psb_ip_reord(n,ix,iaux)
else
call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix")
goto 9999
end if
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end if end if
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)

@ -159,22 +159,29 @@ function psb_essrch(key,n,v) result(ipos)
return return
end function psb_essrch end function psb_essrch
subroutine psb_eqsort(x,ix,dir,flag) subroutine psb_eqsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_eqsort use psb_sort_mod, psb_protect_name => psb_eqsort
use psb_error_mod use psb_error_mod
implicit none implicit none
integer(psb_epk_), intent(inout) :: x(:) integer(psb_epk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_epk_), optional, intent(inout) :: ix(:) integer(psb_epk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act, i integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_
integer(psb_epk_) :: n integer(psb_epk_) :: n
integer(psb_epk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
name='psb_eqsort' name='psb_eqsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -209,21 +216,49 @@ subroutine psb_eqsort(x,ix,dir,flag)
end do end do
end if end if
select case(dir_) select case(reord_)
case (psb_sort_up_) case (psb_sort_reord_x_)
call psi_eqsrx_up(n,x,ix) select case(dir_)
case (psb_sort_down_) case (psb_sort_up_)
call psi_eqsrx_dw(n,x,ix) call psi_eqsrx_up(n,x,ix)
case (psb_asort_up_) case (psb_sort_down_)
call psi_eqsrx_dw(n,x,ix)
case (psb_asort_up_)
call psi_eaqsrx_up(n,x,ix) call psi_eaqsrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_eaqsrx_dw(n,x,ix) call psi_eaqsrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_sort_up_)
call psi_eqsrx_up(n,tx,ix)
case (psb_sort_down_)
call psi_eqsrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_eaqsrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_eaqsrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_sort_up_) case (psb_sort_up_)
call psi_eqsr_up(n,x) call psi_eqsr_up(n,x)

@ -41,18 +41,19 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_mhsort(x,ix,dir,flag) subroutine psb_mhsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_mhsort use psb_sort_mod, psb_protect_name => psb_mhsort
use psb_error_mod use psb_error_mod
implicit none implicit none
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: flag_, n, i, err_act,info integer(psb_ipk_) :: flag_, err_act, info, reord_
integer(psb_ipk_) :: dir_, l integer(psb_ipk_) :: n, i, l, dir_
integer(psb_mpk_) :: key integer(psb_mpk_) :: key
integer(psb_ipk_) :: index integer(psb_ipk_) :: index
integer(psb_mpk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -60,6 +61,13 @@ subroutine psb_mhsort(x,ix,dir,flag)
name='psb_hsort' name='psb_hsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -113,24 +121,57 @@ subroutine psb_mhsort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
l = 0 select case(reord_)
do i=1, n case (psb_sort_reord_x_)
key = x(i)
index = ix(i) l = 0
call psi_idx_insert_heap(key,index,l,x,ix,dir_,info) do i=1, n
if (l /= i) then key = x(i)
write(psb_err_unit,*) 'Mismatch while heapifying ! ' index = ix(i)
end if call psi_idx_insert_heap(key,index,l,x,ix,dir_,info)
end do if (l /= i) then
do i=n, 2, -1 write(psb_err_unit,*) 'Mismatch while heapifying ! '
call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info) end if
if (l /= i-1) then end do
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i do i=n, 2, -1
end if call psi_idx_heap_get_first(key,index,l,x,ix,dir_,info)
x(i) = key if (l /= i-1) then
ix(i) = index write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end do end if
else if (.not.present(ix)) then x(i) = key
ix(i) = index
end do
case(psb_sort_noreord_x_)
tx = x
l = 0
do i=1, n
key = tx(i)
index = ix(i)
call psi_idx_insert_heap(key,index,l,tx,ix,dir_,info)
if (l /= i) then
write(psb_err_unit,*) 'Mismatch while heapifying ! '
end if
end do
do i=n, 2, -1
call psi_idx_heap_get_first(key,index,l,tx,ix,dir_,info)
if (l /= i-1) then
write(psb_err_unit,*) 'Mismatch while pulling out of heap ',l,i
end if
tx(i) = key
ix(i) = index
end do
end select
else if (.not.present(ix)) then
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
l = 0 l = 0
do i=1, n do i=1, n
key = x(i) key = x(i)

@ -40,16 +40,17 @@
! Data Structures and Algorithms ! Data Structures and Algorithms
! Addison-Wesley ! Addison-Wesley
! !
subroutine psb_misort(x,ix,dir,flag) subroutine psb_misort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_misort use psb_sort_mod, psb_protect_name => psb_misort
use psb_error_mod use psb_error_mod
implicit none implicit none
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act integer(psb_ipk_) :: dir_, flag_, err_act, reord_
integer(psb_ipk_) :: n, i integer(psb_ipk_) :: n, i
integer(psb_mpk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
@ -57,6 +58,12 @@ subroutine psb_misort(x,ix,dir,flag)
name='psb_misort' name='psb_misort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -90,31 +97,61 @@ subroutine psb_misort(x,ix,dir,flag)
ix(i) = i ix(i) = i
end do end do
end if end if
select case(reord_)
select case(dir_) case (psb_sort_reord_x_)
case (psb_sort_up_) select case(dir_)
call psi_misrx_up(n,x,ix) case (psb_sort_up_)
case (psb_sort_down_) call psi_misrx_up(n,x,ix)
call psi_misrx_dw(n,x,ix) case (psb_sort_down_)
case (psb_asort_up_) call psi_misrx_dw(n,x,ix)
case (psb_asort_up_)
call psi_maisrx_up(n,x,ix) call psi_maisrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_maisrx_dw(n,x,ix) call psi_maisrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_sort_up_)
call psi_misrx_up(n,tx,ix)
case (psb_sort_down_)
call psi_misrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_maisrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_maisrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_sort_up_) case (psb_sort_up_)
call psi_misr_up(n,x) call psi_misr_up(n,x)
case (psb_sort_down_) case (psb_sort_down_)
call psi_misr_dw(n,x) call psi_misr_dw(n,x)
case (psb_asort_up_) case (psb_asort_up_)
call psi_maisr_up(n,x) call psi_maisr_up(n,x)
case (psb_asort_down_) case (psb_asort_down_)
call psi_maisr_dw(n,x) call psi_maisr_dw(n,x)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)

@ -131,16 +131,16 @@ subroutine psb_mmsort_u(x,nout,dir)
return return
end subroutine psb_mmsort_u end subroutine psb_mmsort_u
subroutine psb_mmsort(x,ix,dir,flag) subroutine psb_mmsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_mmsort use psb_sort_mod, psb_protect_name => psb_mmsort
use psb_error_mod use psb_error_mod
use psb_ip_reord_mod use psb_ip_reord_mod
implicit none implicit none
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag, reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, n, err_act integer(psb_ipk_) :: dir_, flag_, n, err_act, reord_
integer(psb_ipk_), allocatable :: iaux(:) integer(psb_ipk_), allocatable :: iaux(:)
integer(psb_ipk_) :: iret, info, i integer(psb_ipk_) :: iret, info, i
@ -150,6 +150,11 @@ subroutine psb_mmsort(x,ix,dir,flag)
name='psb_mmsort' name='psb_mmsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(dir)) then if (present(dir)) then
dir_ = dir dir_ = dir
else else
@ -212,15 +217,28 @@ subroutine psb_mmsort(x,ix,dir,flag)
! Do the actual reordering, since the inner routines ! Do the actual reordering, since the inner routines
! only provide linked pointers. ! only provide linked pointers.
! !
if (iret == 0 ) then if (iret == 0 ) then
if (present(ix)) then select case(reord_)
call psb_ip_reord(n,x,ix,iaux) case(psb_sort_reord_x_)
else if (present(ix)) then
call psb_ip_reord(n,x,iaux) call psb_ip_reord(n,x,ix,iaux)
end if else
call psb_ip_reord(n,x,iaux)
end if
case(psb_sort_noreord_x_)
if (present(ix)) then
call psb_ip_reord(n,ix,iaux)
else
call psb_errpush(psb_err_no_optional_arg_,name,a_err="ix")
goto 9999
end if
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end if end if
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)

@ -159,22 +159,29 @@ function psb_mssrch(key,n,v) result(ipos)
return return
end function psb_mssrch end function psb_mssrch
subroutine psb_mqsort(x,ix,dir,flag) subroutine psb_mqsort(x,ix,dir,flag,reord)
use psb_sort_mod, psb_protect_name => psb_mqsort use psb_sort_mod, psb_protect_name => psb_mqsort
use psb_error_mod use psb_error_mod
implicit none implicit none
integer(psb_mpk_), intent(inout) :: x(:) integer(psb_mpk_), intent(inout) :: x(:)
integer(psb_ipk_), optional, intent(in) :: dir, flag integer(psb_ipk_), optional, intent(in) :: dir, flag,reord
integer(psb_ipk_), optional, intent(inout) :: ix(:) integer(psb_ipk_), optional, intent(inout) :: ix(:)
integer(psb_ipk_) :: dir_, flag_, err_act, i integer(psb_ipk_) :: dir_, flag_, err_act, i, reord_
integer(psb_ipk_) :: n integer(psb_ipk_) :: n
integer(psb_mpk_), allocatable :: tx(:)
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name character(len=20) :: name
name='psb_mqsort' name='psb_mqsort'
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
if (present(reord)) then
reord_ = reord
else
reord_= psb_sort_reord_x_
end if
if (present(flag)) then if (present(flag)) then
flag_ = flag flag_ = flag
else else
@ -209,21 +216,49 @@ subroutine psb_mqsort(x,ix,dir,flag)
end do end do
end if end if
select case(dir_) select case(reord_)
case (psb_sort_up_) case (psb_sort_reord_x_)
call psi_mqsrx_up(n,x,ix) select case(dir_)
case (psb_sort_down_) case (psb_sort_up_)
call psi_mqsrx_dw(n,x,ix) call psi_mqsrx_up(n,x,ix)
case (psb_asort_up_) case (psb_sort_down_)
call psi_mqsrx_dw(n,x,ix)
case (psb_asort_up_)
call psi_maqsrx_up(n,x,ix) call psi_maqsrx_up(n,x,ix)
case (psb_asort_down_) case (psb_asort_down_)
call psi_maqsrx_dw(n,x,ix) call psi_maqsrx_dw(n,x,ix)
case default case default
ierr(1) = 3; ierr(2) = dir_; ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
case(psb_sort_noreord_x_)
tx = x
select case(dir_)
case (psb_sort_up_)
call psi_mqsrx_up(n,tx,ix)
case (psb_sort_down_)
call psi_mqsrx_dw(n,tx,ix)
case (psb_asort_up_)
call psi_maqsrx_up(n,tx,ix)
case (psb_asort_down_)
call psi_maqsrx_dw(n,tx,ix)
case default
ierr(1) = 3; ierr(2) = dir_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999
end select
end select
else
select case(reord_)
case (psb_sort_reord_x_)
!OK
case default
ierr(1) = 5; ierr(2) = reord_;
call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr) call psb_errpush(psb_err_input_value_invalid_i_,name,i_err=ierr)
goto 9999 goto 9999
end select end select
else
select case(dir_) select case(dir_)
case (psb_sort_up_) case (psb_sort_up_)
call psi_mqsr_up(n,x) call psi_mqsr_up(n,x)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save