mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-24 23:01:48 +00:00
Modify clean_zeros and have it only at base%
This commit is contained in:
@@ -609,6 +609,7 @@ subroutine psb_c_coo_clean_zeros(a, info)
|
||||
end if
|
||||
end do
|
||||
call a%set_nzeros(j)
|
||||
call a%fix(info)
|
||||
call a%trim()
|
||||
end subroutine psb_c_coo_clean_zeros
|
||||
|
||||
|
||||
@@ -2403,36 +2403,36 @@ subroutine psb_c_mv_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_c_mv_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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= czero).or.(i == a%ia(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= czero).or.(i == a%ia(k))) 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_cp_csc_from_fmt(a,b,info)
|
||||
use psb_const_mod
|
||||
@@ -4305,36 +4305,36 @@ subroutine psb_lc_cp_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_lc_cp_csc_from_fmt
|
||||
|
||||
subroutine psb_lc_csc_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_c_csc_mat_mod, psb_protect_name => psb_lc_csc_clean_zeros
|
||||
implicit none
|
||||
class(psb_lc_csc_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nc
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= czero).or.(i == a%ia(k))) 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_lc_csc_clean_zeros
|
||||
!!$subroutine psb_lc_csc_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_c_csc_mat_mod, psb_protect_name => psb_lc_csc_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_lc_csc_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nc
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= czero).or.(i == a%ia(k))) 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_lc_csc_clean_zeros
|
||||
|
||||
|
||||
subroutine psb_lc_csc_mold(a,b,info)
|
||||
|
||||
@@ -3624,36 +3624,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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= czero).or.(i == a%ja(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= czero).or.(i == a%ja(k))) 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
|
||||
|
||||
#if defined(OPENMP)
|
||||
subroutine psb_ccsrspspmm(a,b,c,info)
|
||||
@@ -6544,36 +6544,36 @@ subroutine psb_lc_cp_csr_from_fmt(a,b,info)
|
||||
end subroutine psb_lc_cp_csr_from_fmt
|
||||
|
||||
|
||||
subroutine psb_lc_csr_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_c_csr_mat_mod, psb_protect_name => psb_lc_csr_clean_zeros
|
||||
implicit none
|
||||
class(psb_lc_csr_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nr
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= czero).or.(i == a%ja(k))) 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_lc_csr_clean_zeros
|
||||
!!$subroutine psb_lc_csr_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_c_csr_mat_mod, psb_protect_name => psb_lc_csr_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_lc_csr_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nr
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= czero).or.(i == a%ja(k))) 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_lc_csr_clean_zeros
|
||||
|
||||
subroutine psb_lccsrspspmm(a,b,c,info)
|
||||
use psb_c_mat_mod
|
||||
|
||||
@@ -609,6 +609,7 @@ subroutine psb_d_coo_clean_zeros(a, info)
|
||||
end if
|
||||
end do
|
||||
call a%set_nzeros(j)
|
||||
call a%fix(info)
|
||||
call a%trim()
|
||||
end subroutine psb_d_coo_clean_zeros
|
||||
|
||||
|
||||
@@ -2403,36 +2403,36 @@ subroutine psb_d_mv_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_d_mv_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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= dzero).or.(i == a%ia(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= dzero).or.(i == a%ia(k))) 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_cp_csc_from_fmt(a,b,info)
|
||||
use psb_const_mod
|
||||
@@ -4305,36 +4305,36 @@ subroutine psb_ld_cp_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_ld_cp_csc_from_fmt
|
||||
|
||||
subroutine psb_ld_csc_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_d_csc_mat_mod, psb_protect_name => psb_ld_csc_clean_zeros
|
||||
implicit none
|
||||
class(psb_ld_csc_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nc
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= dzero).or.(i == a%ia(k))) 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_ld_csc_clean_zeros
|
||||
!!$subroutine psb_ld_csc_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_d_csc_mat_mod, psb_protect_name => psb_ld_csc_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_ld_csc_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nc
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= dzero).or.(i == a%ia(k))) 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_ld_csc_clean_zeros
|
||||
|
||||
|
||||
subroutine psb_ld_csc_mold(a,b,info)
|
||||
|
||||
@@ -3624,36 +3624,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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= dzero).or.(i == a%ja(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= dzero).or.(i == a%ja(k))) 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
|
||||
|
||||
#if defined(OPENMP)
|
||||
subroutine psb_dcsrspspmm(a,b,c,info)
|
||||
@@ -6544,36 +6544,36 @@ subroutine psb_ld_cp_csr_from_fmt(a,b,info)
|
||||
end subroutine psb_ld_cp_csr_from_fmt
|
||||
|
||||
|
||||
subroutine psb_ld_csr_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_d_csr_mat_mod, psb_protect_name => psb_ld_csr_clean_zeros
|
||||
implicit none
|
||||
class(psb_ld_csr_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nr
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= dzero).or.(i == a%ja(k))) 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_ld_csr_clean_zeros
|
||||
!!$subroutine psb_ld_csr_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_d_csr_mat_mod, psb_protect_name => psb_ld_csr_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_ld_csr_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nr
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= dzero).or.(i == a%ja(k))) 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_ld_csr_clean_zeros
|
||||
|
||||
subroutine psb_ldcsrspspmm(a,b,c,info)
|
||||
use psb_d_mat_mod
|
||||
|
||||
@@ -609,6 +609,7 @@ subroutine psb_s_coo_clean_zeros(a, info)
|
||||
end if
|
||||
end do
|
||||
call a%set_nzeros(j)
|
||||
call a%fix(info)
|
||||
call a%trim()
|
||||
end subroutine psb_s_coo_clean_zeros
|
||||
|
||||
|
||||
@@ -2403,36 +2403,36 @@ subroutine psb_s_mv_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_s_mv_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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= szero).or.(i == a%ia(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= szero).or.(i == a%ia(k))) 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_cp_csc_from_fmt(a,b,info)
|
||||
use psb_const_mod
|
||||
@@ -4305,36 +4305,36 @@ subroutine psb_ls_cp_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_ls_cp_csc_from_fmt
|
||||
|
||||
subroutine psb_ls_csc_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_s_csc_mat_mod, psb_protect_name => psb_ls_csc_clean_zeros
|
||||
implicit none
|
||||
class(psb_ls_csc_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nc
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= szero).or.(i == a%ia(k))) 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_ls_csc_clean_zeros
|
||||
!!$subroutine psb_ls_csc_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_s_csc_mat_mod, psb_protect_name => psb_ls_csc_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_ls_csc_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nc
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= szero).or.(i == a%ia(k))) 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_ls_csc_clean_zeros
|
||||
|
||||
|
||||
subroutine psb_ls_csc_mold(a,b,info)
|
||||
|
||||
@@ -3624,36 +3624,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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= szero).or.(i == a%ja(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= szero).or.(i == a%ja(k))) 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
|
||||
|
||||
#if defined(OPENMP)
|
||||
subroutine psb_scsrspspmm(a,b,c,info)
|
||||
@@ -6544,36 +6544,36 @@ subroutine psb_ls_cp_csr_from_fmt(a,b,info)
|
||||
end subroutine psb_ls_cp_csr_from_fmt
|
||||
|
||||
|
||||
subroutine psb_ls_csr_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_s_csr_mat_mod, psb_protect_name => psb_ls_csr_clean_zeros
|
||||
implicit none
|
||||
class(psb_ls_csr_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nr
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= szero).or.(i == a%ja(k))) 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_ls_csr_clean_zeros
|
||||
!!$subroutine psb_ls_csr_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_s_csr_mat_mod, psb_protect_name => psb_ls_csr_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_ls_csr_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nr
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= szero).or.(i == a%ja(k))) 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_ls_csr_clean_zeros
|
||||
|
||||
subroutine psb_lscsrspspmm(a,b,c,info)
|
||||
use psb_s_mat_mod
|
||||
|
||||
@@ -609,6 +609,7 @@ subroutine psb_z_coo_clean_zeros(a, info)
|
||||
end if
|
||||
end do
|
||||
call a%set_nzeros(j)
|
||||
call a%fix(info)
|
||||
call a%trim()
|
||||
end subroutine psb_z_coo_clean_zeros
|
||||
|
||||
|
||||
@@ -2403,36 +2403,36 @@ subroutine psb_z_mv_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_z_mv_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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= zzero).or.(i == a%ia(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= zzero).or.(i == a%ia(k))) 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_cp_csc_from_fmt(a,b,info)
|
||||
use psb_const_mod
|
||||
@@ -4305,36 +4305,36 @@ subroutine psb_lz_cp_csc_from_fmt(a,b,info)
|
||||
|
||||
end subroutine psb_lz_cp_csc_from_fmt
|
||||
|
||||
subroutine psb_lz_csc_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_z_csc_mat_mod, psb_protect_name => psb_lz_csc_clean_zeros
|
||||
implicit none
|
||||
class(psb_lz_csc_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nc
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= zzero).or.(i == a%ia(k))) 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_lz_csc_clean_zeros
|
||||
!!$subroutine psb_lz_csc_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_z_csc_mat_mod, psb_protect_name => psb_lz_csc_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_lz_csc_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nc
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= zzero).or.(i == a%ia(k))) 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_lz_csc_clean_zeros
|
||||
|
||||
|
||||
subroutine psb_lz_csc_mold(a,b,info)
|
||||
|
||||
@@ -3624,36 +3624,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_), intent(out) :: 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= zzero).or.(i == a%ja(k))) 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_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_), intent(out) :: 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= zzero).or.(i == a%ja(k))) 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
|
||||
|
||||
#if defined(OPENMP)
|
||||
subroutine psb_zcsrspspmm(a,b,c,info)
|
||||
@@ -6544,36 +6544,36 @@ subroutine psb_lz_cp_csr_from_fmt(a,b,info)
|
||||
end subroutine psb_lz_cp_csr_from_fmt
|
||||
|
||||
|
||||
subroutine psb_lz_csr_clean_zeros(a, info)
|
||||
use psb_error_mod
|
||||
use psb_z_csr_mat_mod, psb_protect_name => psb_lz_csr_clean_zeros
|
||||
implicit none
|
||||
class(psb_lz_csr_sparse_mat), intent(inout) :: a
|
||||
integer(psb_ipk_), intent(out) :: info
|
||||
!
|
||||
integer(psb_lpk_) :: i, j, k, nr
|
||||
integer(psb_lpk_), 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
|
||||
! Always keep the diagonal, even if numerically zero
|
||||
if ((a%val(k) /= zzero).or.(i == a%ja(k))) 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_lz_csr_clean_zeros
|
||||
!!$subroutine psb_lz_csr_clean_zeros(a, info)
|
||||
!!$ use psb_error_mod
|
||||
!!$ use psb_z_csr_mat_mod, psb_protect_name => psb_lz_csr_clean_zeros
|
||||
!!$ implicit none
|
||||
!!$ class(psb_lz_csr_sparse_mat), intent(inout) :: a
|
||||
!!$ integer(psb_ipk_), intent(out) :: info
|
||||
!!$ !
|
||||
!!$ integer(psb_lpk_) :: i, j, k, nr
|
||||
!!$ integer(psb_lpk_), 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
|
||||
!!$ ! Always keep the diagonal, even if numerically zero
|
||||
!!$ if ((a%val(k) /= zzero).or.(i == a%ja(k))) 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_lz_csr_clean_zeros
|
||||
|
||||
subroutine psb_lzcsrspspmm(a,b,c,info)
|
||||
use psb_z_mat_mod
|
||||
|
||||
Reference in New Issue
Block a user