Merge branch 'psblas-3.6-maint' of https://github.com/sfilippone/psblas3 into psblas-3.6-maint

new-parstruct
Salvatore Filippone 6 years ago
commit 72f220779d

@ -87,6 +87,7 @@ module psb_c_csc_mat_mod
procedure, pass(a) :: mv_from_coo => psb_c_mv_csc_from_coo
procedure, pass(a) :: mv_to_fmt => psb_c_mv_csc_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_c_mv_csc_from_fmt
procedure, pass(a) :: clean_zeros => psb_c_csc_clean_zeros
procedure, pass(a) :: csput_a => psb_c_csc_csput_a
procedure, pass(a) :: get_diag => psb_c_csc_get_diag
procedure, pass(a) :: csgetptn => psb_c_csc_csgetptn
@ -256,6 +257,19 @@ module psb_c_csc_mat_mod
end subroutine psb_c_mv_csc_from_fmt
end interface
!
!>
!! \memberof psb_c_csc_sparse_mat
!! \see psb_c_base_mat_mod::psb_c_base_clean_zeros
!
interface
subroutine psb_c_csc_clean_zeros(a, info)
import :: psb_ipk_, psb_c_csc_sparse_mat
class(psb_c_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_c_csc_clean_zeros
end interface
!> \memberof psb_c_csc_sparse_mat
!! \see psb_c_base_mat_mod::psb_c_base_cp_from
interface

@ -90,6 +90,7 @@ module psb_c_csr_mat_mod
procedure, pass(a) :: mv_from_coo => psb_c_mv_csr_from_coo
procedure, pass(a) :: mv_to_fmt => psb_c_mv_csr_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_c_mv_csr_from_fmt
procedure, pass(a) :: clean_zeros => psb_c_csr_clean_zeros
procedure, pass(a) :: csput_a => psb_c_csr_csput_a
procedure, pass(a) :: get_diag => psb_c_csr_get_diag
procedure, pass(a) :: csgetptn => psb_c_csr_csgetptn
@ -259,6 +260,19 @@ module psb_c_csr_mat_mod
end subroutine psb_c_csr_triu
end interface
!
!>
!! \memberof psb_c_csr_sparse_mat
!! \see psb_c_base_mat_mod::psb_c_base_clean_zeros
!
interface
subroutine psb_c_csr_clean_zeros(a, info)
import :: psb_ipk_, psb_c_csr_sparse_mat
class(psb_c_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_c_csr_clean_zeros
end interface
!> \memberof psb_c_csr_sparse_mat
!! \see psb_c_base_mat_mod::psb_c_base_cp_to_coo

@ -87,6 +87,7 @@ module psb_d_csc_mat_mod
procedure, pass(a) :: mv_from_coo => psb_d_mv_csc_from_coo
procedure, pass(a) :: mv_to_fmt => psb_d_mv_csc_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_d_mv_csc_from_fmt
procedure, pass(a) :: clean_zeros => psb_d_csc_clean_zeros
procedure, pass(a) :: csput_a => psb_d_csc_csput_a
procedure, pass(a) :: get_diag => psb_d_csc_get_diag
procedure, pass(a) :: csgetptn => psb_d_csc_csgetptn
@ -256,6 +257,19 @@ module psb_d_csc_mat_mod
end subroutine psb_d_mv_csc_from_fmt
end interface
!
!>
!! \memberof psb_d_csc_sparse_mat
!! \see psb_d_base_mat_mod::psb_d_base_clean_zeros
!
interface
subroutine psb_d_csc_clean_zeros(a, info)
import :: psb_ipk_, psb_d_csc_sparse_mat
class(psb_d_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_d_csc_clean_zeros
end interface
!> \memberof psb_d_csc_sparse_mat
!! \see psb_d_base_mat_mod::psb_d_base_cp_from
interface

@ -90,6 +90,7 @@ module psb_d_csr_mat_mod
procedure, pass(a) :: mv_from_coo => psb_d_mv_csr_from_coo
procedure, pass(a) :: mv_to_fmt => psb_d_mv_csr_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_d_mv_csr_from_fmt
procedure, pass(a) :: clean_zeros => psb_d_csr_clean_zeros
procedure, pass(a) :: csput_a => psb_d_csr_csput_a
procedure, pass(a) :: get_diag => psb_d_csr_get_diag
procedure, pass(a) :: csgetptn => psb_d_csr_csgetptn
@ -259,6 +260,19 @@ module psb_d_csr_mat_mod
end subroutine psb_d_csr_triu
end interface
!
!>
!! \memberof psb_d_csr_sparse_mat
!! \see psb_d_base_mat_mod::psb_d_base_clean_zeros
!
interface
subroutine psb_d_csr_clean_zeros(a, info)
import :: psb_ipk_, psb_d_csr_sparse_mat
class(psb_d_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_d_csr_clean_zeros
end interface
!> \memberof psb_d_csr_sparse_mat
!! \see psb_d_base_mat_mod::psb_d_base_cp_to_coo

@ -87,6 +87,7 @@ module psb_s_csc_mat_mod
procedure, pass(a) :: mv_from_coo => psb_s_mv_csc_from_coo
procedure, pass(a) :: mv_to_fmt => psb_s_mv_csc_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_s_mv_csc_from_fmt
procedure, pass(a) :: clean_zeros => psb_s_csc_clean_zeros
procedure, pass(a) :: csput_a => psb_s_csc_csput_a
procedure, pass(a) :: get_diag => psb_s_csc_get_diag
procedure, pass(a) :: csgetptn => psb_s_csc_csgetptn
@ -256,6 +257,19 @@ module psb_s_csc_mat_mod
end subroutine psb_s_mv_csc_from_fmt
end interface
!
!>
!! \memberof psb_s_csc_sparse_mat
!! \see psb_s_base_mat_mod::psb_s_base_clean_zeros
!
interface
subroutine psb_s_csc_clean_zeros(a, info)
import :: psb_ipk_, psb_s_csc_sparse_mat
class(psb_s_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_s_csc_clean_zeros
end interface
!> \memberof psb_s_csc_sparse_mat
!! \see psb_s_base_mat_mod::psb_s_base_cp_from
interface

@ -90,6 +90,7 @@ module psb_s_csr_mat_mod
procedure, pass(a) :: mv_from_coo => psb_s_mv_csr_from_coo
procedure, pass(a) :: mv_to_fmt => psb_s_mv_csr_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_s_mv_csr_from_fmt
procedure, pass(a) :: clean_zeros => psb_s_csr_clean_zeros
procedure, pass(a) :: csput_a => psb_s_csr_csput_a
procedure, pass(a) :: get_diag => psb_s_csr_get_diag
procedure, pass(a) :: csgetptn => psb_s_csr_csgetptn
@ -259,6 +260,19 @@ module psb_s_csr_mat_mod
end subroutine psb_s_csr_triu
end interface
!
!>
!! \memberof psb_s_csr_sparse_mat
!! \see psb_s_base_mat_mod::psb_s_base_clean_zeros
!
interface
subroutine psb_s_csr_clean_zeros(a, info)
import :: psb_ipk_, psb_s_csr_sparse_mat
class(psb_s_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_s_csr_clean_zeros
end interface
!> \memberof psb_s_csr_sparse_mat
!! \see psb_s_base_mat_mod::psb_s_base_cp_to_coo

@ -87,6 +87,7 @@ module psb_z_csc_mat_mod
procedure, pass(a) :: mv_from_coo => psb_z_mv_csc_from_coo
procedure, pass(a) :: mv_to_fmt => psb_z_mv_csc_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_z_mv_csc_from_fmt
procedure, pass(a) :: clean_zeros => psb_z_csc_clean_zeros
procedure, pass(a) :: csput_a => psb_z_csc_csput_a
procedure, pass(a) :: get_diag => psb_z_csc_get_diag
procedure, pass(a) :: csgetptn => psb_z_csc_csgetptn
@ -256,6 +257,19 @@ module psb_z_csc_mat_mod
end subroutine psb_z_mv_csc_from_fmt
end interface
!
!>
!! \memberof psb_z_csc_sparse_mat
!! \see psb_z_base_mat_mod::psb_z_base_clean_zeros
!
interface
subroutine psb_z_csc_clean_zeros(a, info)
import :: psb_ipk_, psb_z_csc_sparse_mat
class(psb_z_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_z_csc_clean_zeros
end interface
!> \memberof psb_z_csc_sparse_mat
!! \see psb_z_base_mat_mod::psb_z_base_cp_from
interface

@ -90,6 +90,7 @@ module psb_z_csr_mat_mod
procedure, pass(a) :: mv_from_coo => psb_z_mv_csr_from_coo
procedure, pass(a) :: mv_to_fmt => psb_z_mv_csr_to_fmt
procedure, pass(a) :: mv_from_fmt => psb_z_mv_csr_from_fmt
procedure, pass(a) :: clean_zeros => psb_z_csr_clean_zeros
procedure, pass(a) :: csput_a => psb_z_csr_csput_a
procedure, pass(a) :: get_diag => psb_z_csr_get_diag
procedure, pass(a) :: csgetptn => psb_z_csr_csgetptn
@ -259,6 +260,19 @@ module psb_z_csr_mat_mod
end subroutine psb_z_csr_triu
end interface
!
!>
!! \memberof psb_z_csr_sparse_mat
!! \see psb_z_base_mat_mod::psb_z_base_clean_zeros
!
interface
subroutine psb_z_csr_clean_zeros(a, info)
import :: psb_ipk_, psb_z_csr_sparse_mat
class(psb_z_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_), intent(out) :: info
end subroutine psb_z_csr_clean_zeros
end interface
!> \memberof psb_z_csr_sparse_mat
!! \see psb_z_base_mat_mod::psb_z_base_cp_to_coo

@ -2489,6 +2489,37 @@ subroutine psb_c_cp_csc_from_fmt(a,b,info)
end subroutine psb_c_cp_csc_from_fmt
subroutine psb_c_csc_clean_zeros(a, info)
use psb_error_mod
use psb_c_csc_mat_mod, psb_protect_name => psb_c_csc_clean_zeros
implicit none
class(psb_c_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nc
integer(psb_ipk_), allocatable :: ilcp(:)
info = 0
call a%sync()
nc = a%get_ncols()
ilcp = a%icp(:)
a%icp(1) = 1
j = a%icp(1)
do i=1, nc
do k = ilcp(i), ilcp(i+1) -1
if (a%val(k) /= czero) then
a%val(j) = a%val(k)
a%ia(j) = a%ia(k)
j = j + 1
end if
end do
a%icp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_c_csc_clean_zeros
subroutine psb_c_csc_mold(a,b,info)
use psb_c_csc_mat_mod, psb_protect_name => psb_c_csc_mold
use psb_error_mod

@ -1304,7 +1304,7 @@ function psb_c_csr_csnmi(a) result(res)
if (a%is_dev()) call a%sync()
do i = 1, a%get_nrows()
acc = dzero
acc = szero
do j=a%irp(i),a%irp(i+1)-1
acc = acc + abs(a%val(j))
end do
@ -3321,6 +3321,36 @@ subroutine psb_c_cp_csr_from_fmt(a,b,info)
end select
end subroutine psb_c_cp_csr_from_fmt
subroutine psb_c_csr_clean_zeros(a, info)
use psb_error_mod
use psb_c_csr_mat_mod, psb_protect_name => psb_c_csr_clean_zeros
implicit none
class(psb_c_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nr
integer(psb_ipk_), allocatable :: ilrp(:)
info = 0
call a%sync()
nr = a%get_nrows()
ilrp = a%irp(:)
a%irp(1) = 1
j = a%irp(1)
do i=1, nr
do k = ilrp(i), ilrp(i+1) -1
if (a%val(k) /= czero) then
a%val(j) = a%val(k)
a%ja(j) = a%ja(k)
j = j + 1
end if
end do
a%irp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_c_csr_clean_zeros
subroutine psb_ccsrspspmm(a,b,c,info)
use psb_c_mat_mod
use psb_serial_mod, psb_protect_name => psb_ccsrspspmm

@ -2489,6 +2489,37 @@ subroutine psb_d_cp_csc_from_fmt(a,b,info)
end subroutine psb_d_cp_csc_from_fmt
subroutine psb_d_csc_clean_zeros(a, info)
use psb_error_mod
use psb_d_csc_mat_mod, psb_protect_name => psb_d_csc_clean_zeros
implicit none
class(psb_d_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nc
integer(psb_ipk_), allocatable :: ilcp(:)
info = 0
call a%sync()
nc = a%get_ncols()
ilcp = a%icp(:)
a%icp(1) = 1
j = a%icp(1)
do i=1, nc
do k = ilcp(i), ilcp(i+1) -1
if (a%val(k) /= dzero) then
a%val(j) = a%val(k)
a%ia(j) = a%ia(k)
j = j + 1
end if
end do
a%icp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_d_csc_clean_zeros
subroutine psb_d_csc_mold(a,b,info)
use psb_d_csc_mat_mod, psb_protect_name => psb_d_csc_mold
use psb_error_mod

@ -3321,6 +3321,36 @@ subroutine psb_d_cp_csr_from_fmt(a,b,info)
end select
end subroutine psb_d_cp_csr_from_fmt
subroutine psb_d_csr_clean_zeros(a, info)
use psb_error_mod
use psb_d_csr_mat_mod, psb_protect_name => psb_d_csr_clean_zeros
implicit none
class(psb_d_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nr
integer(psb_ipk_), allocatable :: ilrp(:)
info = 0
call a%sync()
nr = a%get_nrows()
ilrp = a%irp(:)
a%irp(1) = 1
j = a%irp(1)
do i=1, nr
do k = ilrp(i), ilrp(i+1) -1
if (a%val(k) /= dzero) then
a%val(j) = a%val(k)
a%ja(j) = a%ja(k)
j = j + 1
end if
end do
a%irp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_d_csr_clean_zeros
subroutine psb_dcsrspspmm(a,b,c,info)
use psb_d_mat_mod
use psb_serial_mod, psb_protect_name => psb_dcsrspspmm

@ -2489,6 +2489,37 @@ subroutine psb_s_cp_csc_from_fmt(a,b,info)
end subroutine psb_s_cp_csc_from_fmt
subroutine psb_s_csc_clean_zeros(a, info)
use psb_error_mod
use psb_s_csc_mat_mod, psb_protect_name => psb_s_csc_clean_zeros
implicit none
class(psb_s_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nc
integer(psb_ipk_), allocatable :: ilcp(:)
info = 0
call a%sync()
nc = a%get_ncols()
ilcp = a%icp(:)
a%icp(1) = 1
j = a%icp(1)
do i=1, nc
do k = ilcp(i), ilcp(i+1) -1
if (a%val(k) /= szero) then
a%val(j) = a%val(k)
a%ia(j) = a%ia(k)
j = j + 1
end if
end do
a%icp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_s_csc_clean_zeros
subroutine psb_s_csc_mold(a,b,info)
use psb_s_csc_mat_mod, psb_protect_name => psb_s_csc_mold
use psb_error_mod

@ -1304,7 +1304,7 @@ function psb_s_csr_csnmi(a) result(res)
if (a%is_dev()) call a%sync()
do i = 1, a%get_nrows()
acc = dzero
acc = szero
do j=a%irp(i),a%irp(i+1)-1
acc = acc + abs(a%val(j))
end do
@ -3321,6 +3321,36 @@ subroutine psb_s_cp_csr_from_fmt(a,b,info)
end select
end subroutine psb_s_cp_csr_from_fmt
subroutine psb_s_csr_clean_zeros(a, info)
use psb_error_mod
use psb_s_csr_mat_mod, psb_protect_name => psb_s_csr_clean_zeros
implicit none
class(psb_s_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nr
integer(psb_ipk_), allocatable :: ilrp(:)
info = 0
call a%sync()
nr = a%get_nrows()
ilrp = a%irp(:)
a%irp(1) = 1
j = a%irp(1)
do i=1, nr
do k = ilrp(i), ilrp(i+1) -1
if (a%val(k) /= szero) then
a%val(j) = a%val(k)
a%ja(j) = a%ja(k)
j = j + 1
end if
end do
a%irp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_s_csr_clean_zeros
subroutine psb_scsrspspmm(a,b,c,info)
use psb_s_mat_mod
use psb_serial_mod, psb_protect_name => psb_scsrspspmm

@ -2489,6 +2489,37 @@ subroutine psb_z_cp_csc_from_fmt(a,b,info)
end subroutine psb_z_cp_csc_from_fmt
subroutine psb_z_csc_clean_zeros(a, info)
use psb_error_mod
use psb_z_csc_mat_mod, psb_protect_name => psb_z_csc_clean_zeros
implicit none
class(psb_z_csc_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nc
integer(psb_ipk_), allocatable :: ilcp(:)
info = 0
call a%sync()
nc = a%get_ncols()
ilcp = a%icp(:)
a%icp(1) = 1
j = a%icp(1)
do i=1, nc
do k = ilcp(i), ilcp(i+1) -1
if (a%val(k) /= zzero) then
a%val(j) = a%val(k)
a%ia(j) = a%ia(k)
j = j + 1
end if
end do
a%icp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_z_csc_clean_zeros
subroutine psb_z_csc_mold(a,b,info)
use psb_z_csc_mat_mod, psb_protect_name => psb_z_csc_mold
use psb_error_mod

@ -3321,6 +3321,36 @@ subroutine psb_z_cp_csr_from_fmt(a,b,info)
end select
end subroutine psb_z_cp_csr_from_fmt
subroutine psb_z_csr_clean_zeros(a, info)
use psb_error_mod
use psb_z_csr_mat_mod, psb_protect_name => psb_z_csr_clean_zeros
implicit none
class(psb_z_csr_sparse_mat), intent(inout) :: a
integer(psb_ipk_) :: info
!
integer(psb_ipk_) :: i, j, k, nr
integer(psb_ipk_), allocatable :: ilrp(:)
info = 0
call a%sync()
nr = a%get_nrows()
ilrp = a%irp(:)
a%irp(1) = 1
j = a%irp(1)
do i=1, nr
do k = ilrp(i), ilrp(i+1) -1
if (a%val(k) /= zzero) then
a%val(j) = a%val(k)
a%ja(j) = a%ja(k)
j = j + 1
end if
end do
a%irp(i+1) = j
end do
call a%trim()
call a%set_host()
end subroutine psb_z_csr_clean_zeros
subroutine psb_zcsrspspmm(a,b,c,info)
use psb_z_mat_mod
use psb_serial_mod, psb_protect_name => psb_zcsrspspmm

@ -31,7 +31,8 @@
!
!
! Subroutine: psb_cd_renum_block
! Produces a clone of a descriptor.
! Produces a renumbered version of the input descriptor, with
! global indices in a BLOCK distribution.
!
! Arguments:
! desc_in - type(psb_desc_type). The communication descriptor to be cloned.
@ -120,9 +121,23 @@ subroutine psb_cd_renum_block(desc_in, desc_out, info)
reflidx(1:n_col) = [(i,i=1,n_col)]
gidx(1:n_row) = reflidx(1:n_row) + vnl(me)
call psb_halo(gidx,desc_in,info)
if (info == 0) call blck_map%gen_block_map_init(ictxt,vnl(me),info)
if (debug_level >= psb_debug_ext_) &
& write(debug_unit,*) me,' ',trim(name),': Done halo on gidx ',info
if (info == 0) call blck_map%gen_block_map_init(ictxt,n_row,info)
if (debug_level >= psb_debug_ext_) &
& write(debug_unit,*) me,' ',trim(name),': Done gen_block_map_init ',info,&
& blck_map%get_lr(),blck_map%get_lc(),vnl(me)
if (info == 0) call blck_map%g2l_ins(gidx,lidx,info,lidx=reflidx)
if (debug_level >= psb_debug_ext_) then
write(debug_unit,*) me,' ',trim(name),': Done g2l_ins ',info,size(gidx),size(lidx),size(reflidx)
write(debug_unit,*) me,' ',trim(name),': Done g2l_ins ',gidx(:),':',lidx(:),' :',reflidx(:)
end if
if (info == 0) call blck_map%asb(info)
if (debug_level >= psb_debug_ext_) &
& write(debug_unit,*) me,' ',trim(name),': Done asb ',info
if (info /= psb_success_) then
info = psb_err_from_subroutine_

@ -280,7 +280,7 @@ Subroutine psb_csphalo(a,desc_a,blk,info,rowcnv,colcnv,&
call psb_errpush(info,name,a_err='psb_sp_getrow')
goto 9999
end if
tot_elem=tot_elem+n_elem
tot_elem=tot_elem+ngtz
Enddo
ipx = ipx + 1
counter = counter+n_el_send+3
@ -317,7 +317,7 @@ Subroutine psb_csphalo(a,desc_a,blk,info,rowcnv,colcnv,&
#elif defined(SP_A2AV_MAT)
call c_coo_my_a2av(valsnd,iasnd,jasnd,sdsz,bsdindx,&
& acoo%val,acoo%ia,acoo%ja,rvsz,brvindx,ipdxv,ictxt,icomm,info)
#elif
#else
choke on me @!
#endif
if (info /= psb_success_) then

@ -280,7 +280,7 @@ Subroutine psb_dsphalo(a,desc_a,blk,info,rowcnv,colcnv,&
call psb_errpush(info,name,a_err='psb_sp_getrow')
goto 9999
end if
tot_elem=tot_elem+n_elem
tot_elem=tot_elem+ngtz
Enddo
ipx = ipx + 1
counter = counter+n_el_send+3
@ -317,7 +317,7 @@ Subroutine psb_dsphalo(a,desc_a,blk,info,rowcnv,colcnv,&
#elif defined(SP_A2AV_MAT)
call d_coo_my_a2av(valsnd,iasnd,jasnd,sdsz,bsdindx,&
& acoo%val,acoo%ia,acoo%ja,rvsz,brvindx,ipdxv,ictxt,icomm,info)
#elif
#else
choke on me @!
#endif
if (info /= psb_success_) then

@ -280,7 +280,7 @@ Subroutine psb_ssphalo(a,desc_a,blk,info,rowcnv,colcnv,&
call psb_errpush(info,name,a_err='psb_sp_getrow')
goto 9999
end if
tot_elem=tot_elem+n_elem
tot_elem=tot_elem+ngtz
Enddo
ipx = ipx + 1
counter = counter+n_el_send+3
@ -317,7 +317,7 @@ Subroutine psb_ssphalo(a,desc_a,blk,info,rowcnv,colcnv,&
#elif defined(SP_A2AV_MAT)
call s_coo_my_a2av(valsnd,iasnd,jasnd,sdsz,bsdindx,&
& acoo%val,acoo%ia,acoo%ja,rvsz,brvindx,ipdxv,ictxt,icomm,info)
#elif
#else
choke on me @!
#endif
if (info /= psb_success_) then

@ -280,7 +280,7 @@ Subroutine psb_zsphalo(a,desc_a,blk,info,rowcnv,colcnv,&
call psb_errpush(info,name,a_err='psb_sp_getrow')
goto 9999
end if
tot_elem=tot_elem+n_elem
tot_elem=tot_elem+ngtz
Enddo
ipx = ipx + 1
counter = counter+n_el_send+3
@ -317,7 +317,7 @@ Subroutine psb_zsphalo(a,desc_a,blk,info,rowcnv,colcnv,&
#elif defined(SP_A2AV_MAT)
call z_coo_my_a2av(valsnd,iasnd,jasnd,sdsz,bsdindx,&
& acoo%val,acoo%ia,acoo%ja,rvsz,brvindx,ipdxv,ictxt,icomm,info)
#elif
#else
choke on me @!
#endif
if (info /= psb_success_) then

@ -0,0 +1,180 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2018 (Released Feb 1, 2018) -->
<HTML>
<HEAD>
<TITLE>Bibliography</TITLE>
<META NAME="description" CONTENT="Bibliography">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2018">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="next" HREF="node135.html">
<LINK REL="previous" HREF="node132.html">
<LINK REL="up" HREF="userhtml.html">
<LINK REL="next" HREF="node135.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html1930"
HREF="node135.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html1926"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html1920"
HREF="node133.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html1928"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html1931"
HREF="node135.html">About this document ...</A>
<B> Up:</B> <A NAME="tex2html1927"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html1921"
HREF="node133.html">psb_krylov Krylov</A>
&nbsp; <B> <A NAME="tex2html1929"
HREF="node1.html">Contents</A></B>
<BR><BR></DIV>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION000130000000000000000">
Bibliography</A>
</H2><DL COMPACT><DD><P></P><DT><A NAME="DesPat:11">1</A>
<DD>
D.&nbsp;Barbieri, V.&nbsp;Cardellini, S.&nbsp;Filippone and D.&nbsp;Rouson
<EM>Design Patterns for Scientific Computations on Sparse Matrices</EM>,
HPSS 2011, Algorithms and Programming Tools for Next-Generation High-Performance Scientific Software, Bordeaux, Sep. 2011
<P>
<P></P><DT><A NAME="PARA04FOREST">2</A>
<DD>
G.&nbsp;Bella, S.&nbsp;Filippone, A.&nbsp;De Maio and M.&nbsp;Testa,
<EM>A Simulation Model for Forest Fires</EM>,
in J.&nbsp;Dongarra, K.&nbsp;Madsen, J.&nbsp;Wasniewski, editors,
Proceedings of PARA&nbsp;04 Workshop on State of the Art
in Scientific Computing, pp.&nbsp;546-553, Lecture Notes in Computer Science,
Springer, 2005.
<P></P><DT><A NAME="2007d">3</A>
<DD> A. Buttari, D. di Serafino, P. D'Ambra, S. Filippone,<BR>
2LEV-D2P4: a package of high-performance preconditioners,<BR>
Applicable Algebra in Engineering, Communications and Computing,
Volume 18, Number 3, May, 2007, pp. 223-239
<P></P><DT><A NAME="2007c">4</A>
<DD> P. D'Ambra, S. Filippone, D. Di Serafino<BR>
On the Development of PSBLAS-based Parallel Two-level Schwarz Preconditioners
<BR>
Applied Numerical Mathematics, Elsevier Science,
Volume 57, Issues 11-12, November-December 2007, Pages 1181-1196.
<P>
<P></P><DT><A NAME="BLAS2">5</A>
<DD>
Dongarra, J. J., DuCroz, J., Hammarling, S. and Hanson, R.,
An Extended Set of Fortran Basic Linear Algebra Subprograms,
ACM Trans. Math. Softw. vol.&nbsp;14, 1-17, 1988.
<P></P><DT><A NAME="BLAS3">6</A>
<DD>
Dongarra, J., DuCroz, J., Hammarling, S. and Duff, I.,
A Set of level 3 Basic Linear Algebra Subprograms,
ACM Trans. Math. Softw. vol.&nbsp;16, 1-17, 1990.
<P></P><DT><A NAME="BLACS">7</A>
<DD>
J.&nbsp;J.&nbsp;Dongarra and R.&nbsp;C.&nbsp;Whaley,
<EM>A User's Guide to the BLACS v.&nbsp;1.1</EM>,
Lapack Working Note 94, Tech. Rep. UT-CS-95-281, University of
Tennessee, March 1995 (updated May 1997).
<P></P><DT><A NAME="sblas97">8</A>
<DD>
I.&nbsp;Duff, M.&nbsp;Marrone, G.&nbsp;Radicati and C.&nbsp;Vittoli,
<EM>Level 3 Basic Linear Algebra Subprograms for Sparse Matrices:
a User Level Interface</EM>,
ACM Transactions on Mathematical Software, 23(3), pp.&nbsp;379-401, 1997.
<P></P><DT><A NAME="sblas02">9</A>
<DD>
I.&nbsp;Duff, M.&nbsp;Heroux and R.&nbsp;Pozo,
<EM>An Overview of the Sparse Basic Linear
Algebra Subprograms: the New Standard from the BLAS Technical Forum</EM>,
ACM Transactions on Mathematical Software, 28(2), pp.&nbsp;239-267, 2002.
<P></P><DT><A NAME="PSBLAS">10</A>
<DD>
S.&nbsp;Filippone and M.&nbsp;Colajanni,
<EM>PSBLAS: A Library for Parallel Linear Algebra
Computation on Sparse Matrices</EM>,
<BR>
ACM Transactions on Mathematical Software, 26(4), pp.&nbsp;527-550, 2000.
<P></P><DT><A NAME="Sparse03">11</A>
<DD>
S.&nbsp;Filippone and A.&nbsp;Buttari,
<EM>Object-Oriented Techniques for Sparse Matrix Computations in Fortran 2003</EM>,
<BR>
ACM Transactions on Mathematical Software, 38(4), 2012.
<P></P><DT><A NAME="KIVA3PSBLAS">12</A>
<DD>
S.&nbsp;Filippone, P.&nbsp;D'Ambra, M.&nbsp;Colajanni,
<EM>Using a Parallel Library of Sparse Linear Algebra in a Fluid Dynamics
Applications Code on Linux Clusters</EM>,
in G.&nbsp;Joubert, A.&nbsp;Murli, F.&nbsp;Peters, M.&nbsp;Vanneschi, editors,
Parallel Computing - Advances &amp; Current Issues,
pp.&nbsp;441-448, Imperial College Press, 2002.
<P></P><DT><A NAME="DesignPatterns">13</A>
<DD>
Gamma, E., Helm, R., Johnson, R., and Vlissides,
J. 1995.
<EM>Design Patterns: Elements of Reusable Object-Oriented Software</EM>.
Addison-Wesley.
<P>
<P></P><DT><A NAME="METIS">14</A>
<DD>
Karypis, G. and Kumar, V.,
<EM>METIS: Unstructured Graph Partitioning and Sparse Matrix
Ordering System</EM>.
Minneapolis, MN 55455: University of Minnesota, Department of
Computer Science, 1995.
Internet Address: <code>http://www.cs.umn.edu/~karypis</code>.
<P></P><DT><A NAME="BLAS1">15</A>
<DD>
Lawson, C., Hanson, R., Kincaid, D. and Krogh, F.,
Basic Linear Algebra Subprograms for Fortran usage,
ACM Trans. Math. Softw. vol.&nbsp;5, 38-329, 1979.
<P>
<P></P><DT><A NAME="machiels">16</A>
<DD>
Machiels, L. and Deville, M.
<EM>Fortran 90: An entry to object-oriented programming for the solution
of partial differential equations.</EM>
ACM Trans. Math. Softw. vol.&nbsp;23, 32-49.
<P></P><DT><A NAME="metcalf">17</A>
<DD>
Metcalf, M., Reid, J. and Cohen, M.
<EM>Fortran 95/2003 explained.</EM>
Oxford University Press, 2004.
<P></P><DT><A NAME="RouXiaXu:11">18</A>
<DD>
Rouson, D.W.I., Xia, J., Xu, X.: Scientific Software Design: The
Object-Oriented Way. Cambridge University Press (2011)
<P>
<P></P><DT><A NAME="MPI1">19</A>
<DD>
M.&nbsp;Snir, S.&nbsp;Otto, S.&nbsp;Huss-Lederman, D.&nbsp;Walker and J.&nbsp;Dongarra,
<EM>MPI: The Complete Reference. Volume 1 - The MPI Core</EM>, second edition,
MIT Press, 1998.
</DL>
<P>
<BR><HR>
</BODY>
</HTML>

@ -0,0 +1,67 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2018 (Released Feb 1, 2018) -->
<HTML>
<HEAD>
<TITLE>About this document ...</TITLE>
<META NAME="description" CONTENT="About this document ...">
<META NAME="keywords" CONTENT="userhtml">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2018">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="userhtml.css">
<LINK REL="previous" HREF="node134.html">
<LINK REL="up" HREF="userhtml.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png">
<A NAME="tex2html1936"
HREF="userhtml.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html1932"
HREF="node134.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html1938"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Up:</B> <A NAME="tex2html1937"
HREF="userhtml.html">userhtml</A>
<B> Previous:</B> <A NAME="tex2html1933"
HREF="node134.html">Bibliography</A>
&nbsp; <B> <A NAME="tex2html1939"
HREF="node1.html">Contents</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION000140000000000000000">
About this document ...</A>
</H1>
<P>
This document was generated using the
<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2018 (Released Feb 1, 2018)
<P>
Copyright &#169; 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
<BR>
Copyright &#169; 1997, 1998, 1999,
<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
Mathematics Department, Macquarie University, Sydney.
<P>
The command line arguments were: <BR>
<STRONG>latex2html</STRONG> <TT>-local_icons -noaddress -dir ../../html userhtml.tex</TT>
<P>
The translation was initiated on 2019-01-07
<BR><HR>
</BODY>
</HTML>

@ -50,7 +50,7 @@ int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg,
&ecut,(idxtype *)graphpart);
return(0);
#elif
#else
choke on me!
#endif
}

Loading…
Cancel
Save