Minimize memory requirements in borderline cases

psblas-paraggr
Salvatore Filippone 6 years ago
parent 8eee384a40
commit 486c0338c5

@ -3416,21 +3416,26 @@ subroutine psb_c_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
dupl_ = dupl
allocate(iaux(max(nr,nc,nzin)+2),stat=info)
allocate(iaux(nzin+2),stat=info)
if (info /= psb_success_) then
info = psb_err_alloc_dealloc_
call psb_errpush(info,name)
goto 9999
end if
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(max(nr,nc,nzin)+2), stat=info)
use_buffers = (info == 0)
select case(idir_)
case(psb_row_major_)
! Row major order
if (nr <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
if (.not.( (ia(1) < 1).or.(ia(1)> nr)) ) then
iaux(:) = 0
@ -3752,6 +3757,14 @@ subroutine psb_c_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
case(psb_col_major_)
if (nc <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
iaux(:) = 0
if (.not.( (ja(1) < 1).or.(ja(1)> nc)) ) then

@ -3416,21 +3416,26 @@ subroutine psb_d_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
dupl_ = dupl
allocate(iaux(max(nr,nc,nzin)+2),stat=info)
allocate(iaux(nzin+2),stat=info)
if (info /= psb_success_) then
info = psb_err_alloc_dealloc_
call psb_errpush(info,name)
goto 9999
end if
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(max(nr,nc,nzin)+2), stat=info)
use_buffers = (info == 0)
select case(idir_)
case(psb_row_major_)
! Row major order
if (nr <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
if (.not.( (ia(1) < 1).or.(ia(1)> nr)) ) then
iaux(:) = 0
@ -3752,6 +3757,14 @@ subroutine psb_d_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
case(psb_col_major_)
if (nc <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
iaux(:) = 0
if (.not.( (ja(1) < 1).or.(ja(1)> nc)) ) then

@ -3416,21 +3416,26 @@ subroutine psb_s_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
dupl_ = dupl
allocate(iaux(max(nr,nc,nzin)+2),stat=info)
allocate(iaux(nzin+2),stat=info)
if (info /= psb_success_) then
info = psb_err_alloc_dealloc_
call psb_errpush(info,name)
goto 9999
end if
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(max(nr,nc,nzin)+2), stat=info)
use_buffers = (info == 0)
select case(idir_)
case(psb_row_major_)
! Row major order
if (nr <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
if (.not.( (ia(1) < 1).or.(ia(1)> nr)) ) then
iaux(:) = 0
@ -3752,6 +3757,14 @@ subroutine psb_s_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
case(psb_col_major_)
if (nc <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
iaux(:) = 0
if (.not.( (ja(1) < 1).or.(ja(1)> nc)) ) then

@ -3416,21 +3416,26 @@ subroutine psb_z_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
dupl_ = dupl
allocate(iaux(max(nr,nc,nzin)+2),stat=info)
allocate(iaux(nzin+2),stat=info)
if (info /= psb_success_) then
info = psb_err_alloc_dealloc_
call psb_errpush(info,name)
goto 9999
end if
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(max(nr,nc,nzin)+2), stat=info)
use_buffers = (info == 0)
select case(idir_)
case(psb_row_major_)
! Row major order
if (nr <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
if (.not.( (ia(1) < 1).or.(ia(1)> nr)) ) then
iaux(:) = 0
@ -3752,6 +3757,14 @@ subroutine psb_z_fix_coo_inner(nr,nc,nzin,dupl,ia,ja,val,nzout,info,idir)
case(psb_col_major_)
if (nc <= nzin) then
! Avoid strange situations with large indices
allocate(ias(nzin),jas(nzin),vs(nzin),ix2(nzin+2), stat=info)
use_buffers = (info == 0)
else
use_buffers = .false.
end if
if (use_buffers) then
iaux(:) = 0
if (.not.( (ja(1) < 1).or.(ja(1)> nc)) ) then

Loading…
Cancel
Save