base/serial/impl/psb_c_csc_impl.f90
 base/serial/impl/psb_c_csr_impl.f90
 base/serial/impl/psb_d_csc_impl.f90
 base/serial/impl/psb_d_csr_impl.f90
 base/serial/impl/psb_s_csc_impl.f90
 base/serial/impl/psb_s_csr_impl.f90
 base/serial/impl/psb_z_csc_impl.f90
 base/serial/impl/psb_z_csr_impl.f90

Fix computation of output space for getrow & friends.
psblas-3.2.0
Salvatore Filippone 11 years ago
parent 38ff4f56dd
commit 82d292c8f6

@ -1690,7 +1690,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1713,12 +1713,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lcl+1-icl))/a%get_ncols()) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -1884,7 +1885,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1908,11 +1909,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lrw+1-irw))/m) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -2029,7 +2029,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd,ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='csr_getptn' character(len=20) :: name='csr_getptn'
@ -2050,10 +2050,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -2206,7 +2209,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -2227,10 +2230,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -1690,7 +1690,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1713,12 +1713,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lcl+1-icl))/a%get_ncols()) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -1884,7 +1885,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1908,11 +1909,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lrw+1-irw))/m) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -2029,7 +2029,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd,ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='csr_getptn' character(len=20) :: name='csr_getptn'
@ -2050,10 +2050,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -2206,7 +2209,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -2227,10 +2230,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -1690,7 +1690,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1713,12 +1713,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lcl+1-icl))/a%get_ncols()) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -1884,7 +1885,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1908,11 +1909,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lrw+1-irw))/m) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -2029,7 +2029,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd,ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='csr_getptn' character(len=20) :: name='csr_getptn'
@ -2050,10 +2050,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -2206,7 +2209,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -2227,10 +2230,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -1690,7 +1690,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,m,isz, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1713,12 +1713,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lcl+1-icl))/a%get_ncols()) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -1884,7 +1885,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, icl, lcl,isz,m, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -1908,11 +1909,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%icp(lcl+1)-a%icp(icl)),& nzt = min((a%icp(lcl+1)-a%icp(icl)),&
& ((nza*(lrw+1-irw))/m) ) & ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

@ -2029,7 +2029,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd,ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='csr_getptn' character(len=20) :: name='csr_getptn'
@ -2050,10 +2050,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
@ -2206,7 +2209,7 @@ contains
logical, intent(in) :: append logical, intent(in) :: append
integer(psb_ipk_) :: info integer(psb_ipk_) :: info
integer(psb_ipk_), optional :: iren(:) integer(psb_ipk_), optional :: iren(:)
integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw integer(psb_ipk_) :: nzin_, nza, idx,i,j,k, nzt, irw, lrw, nrd, ncd
integer(psb_ipk_) :: debug_level, debug_unit integer(psb_ipk_) :: debug_level, debug_unit
character(len=20) :: name='coo_getrow' character(len=20) :: name='coo_getrow'
@ -2227,10 +2230,13 @@ contains
nzin_ = 0 nzin_ = 0
endif endif
nzt = a%irp(lrw+1)-a%irp(irw) nrd = max(1,a%get_nrows())
ncd = max(1,a%get_ncols())
nzt = min((a%irp(lrw+1)-a%irp(irw)),&
& ((nza+ncd-1)/ncd)*(lcl+1-icl),&
& ((nza+nrd-1)/nrd)*(lrw+1-irw))
nz = 0 nz = 0
call psb_ensure_size(nzin_+nzt,ia,info) call psb_ensure_size(nzin_+nzt,ia,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,ja,info)
if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info) if (info == psb_success_) call psb_ensure_size(nzin_+nzt,val,info)

Loading…
Cancel
Save