|
|
@ -525,7 +525,7 @@ contains
|
|
|
|
real(psb_spk_), intent(inout) :: nrmi,row(:)
|
|
|
|
real(psb_spk_), intent(inout) :: nrmi,row(:)
|
|
|
|
real(psb_spk_), intent(in) :: weight
|
|
|
|
real(psb_spk_), intent(in) :: weight
|
|
|
|
type(psb_int_heap), intent(inout) :: heap
|
|
|
|
type(psb_int_heap), intent(inout) :: heap
|
|
|
|
|
|
|
|
|
|
|
|
integer :: k,j,irb,kin,nz
|
|
|
|
integer :: k,j,irb,kin,nz
|
|
|
|
integer, parameter :: nrb=40
|
|
|
|
integer, parameter :: nrb=40
|
|
|
|
real(psb_spk_) :: dmaxup
|
|
|
|
real(psb_spk_) :: dmaxup
|
|
|
@ -555,26 +555,26 @@ contains
|
|
|
|
jmaxup = 0
|
|
|
|
jmaxup = 0
|
|
|
|
dmaxup = szero
|
|
|
|
dmaxup = szero
|
|
|
|
nrmi = szero
|
|
|
|
nrmi = szero
|
|
|
|
|
|
|
|
|
|
|
|
select type (aa=> a%a)
|
|
|
|
select type (aa=> a%a)
|
|
|
|
type is (psb_s_csr_sparse_mat)
|
|
|
|
type is (psb_s_csr_sparse_mat)
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Take a fast shortcut if the matrix is stored in CSR format
|
|
|
|
! Take a fast shortcut if the matrix is stored in CSR format
|
|
|
|
!
|
|
|
|
!
|
|
|
|
|
|
|
|
|
|
|
|
do j = aa%irp(i), aa%irp(i+1) - 1
|
|
|
|
do j = aa%irp(i), aa%irp(i+1) - 1
|
|
|
|
k = aa%ja(j)
|
|
|
|
k = aa%ja(j)
|
|
|
|
if ((jmin<=k).and.(k<=jmax)) then
|
|
|
|
if ((jmin<=k).and.(k<=jmax)) then
|
|
|
|
row(k) = aa%val(j)*weight
|
|
|
|
row(k) = aa%val(j)*weight
|
|
|
|
call psb_insert_heap(k,heap,info)
|
|
|
|
call psb_insert_heap(k,heap,info)
|
|
|
|
if (info /= psb_success_) exit
|
|
|
|
if (info /= psb_success_) exit
|
|
|
|
end if
|
|
|
|
if (k<jd) nlw = nlw + 1
|
|
|
|
if (k<jd) nlw = nlw + 1
|
|
|
|
if (k>jd) then
|
|
|
|
if (k>jd) then
|
|
|
|
nup = nup + 1
|
|
|
|
nup = nup + 1
|
|
|
|
if (abs(row(k))>dmaxup) then
|
|
|
|
if (abs(row(k))>dmaxup) then
|
|
|
|
jmaxup = k
|
|
|
|
jmaxup = k
|
|
|
|
dmaxup = abs(row(k))
|
|
|
|
dmaxup = abs(row(k))
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end do
|
|
|
|
end do
|
|
|
@ -583,13 +583,13 @@ contains
|
|
|
|
call psb_errpush(info,name,a_err='psb_insert_heap')
|
|
|
|
call psb_errpush(info,name,a_err='psb_insert_heap')
|
|
|
|
goto 9999
|
|
|
|
goto 9999
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
|
|
nz = aa%irp(i+1) - aa%irp(i)
|
|
|
|
nz = aa%irp(i+1) - aa%irp(i)
|
|
|
|
nrmi = weight*dnrm2(nz,aa%val(aa%irp(i)),ione)
|
|
|
|
nrmi = weight*dnrm2(nz,aa%val(aa%irp(i)),ione)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class default
|
|
|
|
class default
|
|
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
!
|
|
|
|
! Otherwise use psb_sp_getblk, slower but able (in principle) of
|
|
|
|
! Otherwise use psb_sp_getblk, slower but able (in principle) of
|
|
|
|
! handling any format. In this case, a block of rows is extracted
|
|
|
|
! handling any format. In this case, a block of rows is extracted
|
|
|
@ -597,7 +597,7 @@ contains
|
|
|
|
! rows are copied one by one into the array row, through successive
|
|
|
|
! rows are copied one by one into the array row, through successive
|
|
|
|
! calls to ilut_copyin.
|
|
|
|
! calls to ilut_copyin.
|
|
|
|
!
|
|
|
|
!
|
|
|
|
|
|
|
|
|
|
|
|
if ((mod(i,nrb) == 1).or.(nrb == 1)) then
|
|
|
|
if ((mod(i,nrb) == 1).or.(nrb == 1)) then
|
|
|
|
irb = min(m-i+1,nrb)
|
|
|
|
irb = min(m-i+1,nrb)
|
|
|
|
call aa%csget(i,i+irb-1,trw,info)
|
|
|
|
call aa%csget(i,i+irb-1,trw,info)
|
|
|
@ -619,14 +619,13 @@ contains
|
|
|
|
row(k) = trw%val(ktrw)*weight
|
|
|
|
row(k) = trw%val(ktrw)*weight
|
|
|
|
call psb_insert_heap(k,heap,info)
|
|
|
|
call psb_insert_heap(k,heap,info)
|
|
|
|
if (info /= psb_success_) exit
|
|
|
|
if (info /= psb_success_) exit
|
|
|
|
|
|
|
|
if (k<jd) nlw = nlw + 1
|
|
|
|
end if
|
|
|
|
if (k>jd) then
|
|
|
|
if (k<jd) nlw = nlw + 1
|
|
|
|
nup = nup + 1
|
|
|
|
if (k>jd) then
|
|
|
|
if (abs(row(k))>dmaxup) then
|
|
|
|
nup = nup + 1
|
|
|
|
jmaxup = k
|
|
|
|
if (abs(row(k))>dmaxup) then
|
|
|
|
dmaxup = abs(row(k))
|
|
|
|
jmaxup = k
|
|
|
|
end if
|
|
|
|
dmaxup = abs(row(k))
|
|
|
|
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
ktrw = ktrw + 1
|
|
|
|
ktrw = ktrw + 1
|
|
|
|