Fix tril/triu in COO for non-OMP paths.

master
sfilippone 2 years ago
parent ca82520b88
commit 08c1ab0cd1

@ -4013,25 +4013,24 @@ subroutine psb_c_coo_triu(a,u,info,&
nzuin = u%get_nzeros() ! At this point it should be 0 nzuin = u%get_nzeros() ! At this point it should be 0
call l%allocate(mb,nb,nz) call l%allocate(mb,nb,nz)
nzlin = l%get_nzeros() ! At this point it should be 0 nzlin = l%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop1: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
j = ja(k) j = ja(k)
if ((jmin_<=j).and.(j<=jmax_)) then if ((jmin_<=j).and.(j<=jmax_)) then
if ((ja(k)-i)<diag_) then if ((j-i)<diag_) then
nzlin = nzlin + 1 nzlin = nzlin + 1
l%ia(nzlin) = i l%ia(nzlin) = i
l%ja(nzlin) = ja(k) l%ja(nzlin) = ja(k)
l%val(nzlin) = val(k) l%val(nzlin) = val(k)
else else
nzuin = nzuin + 1 nzuin = nzuin + 1
u%ia(nzuin) = i u%ia(nzuin) = i
u%ja(nzuin) = ja(k) u%ja(nzuin) = ja(k)
u%val(nzuin) = val(k) u%val(nzuin) = val(k)
end if
end if end if
end do end if
end do end do loop1
end associate end associate
call u%set_nzeros(nzuin) call u%set_nzeros(nzuin)
call l%set_nzeros(nzlin) call l%set_nzeros(nzlin)
@ -4047,19 +4046,19 @@ subroutine psb_c_coo_triu(a,u,info,&
end if end if
else else
nzin = u%get_nzeros() ! At this point it should be 0 nzin = u%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop2: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
if ((jmin_<=j).and.(j<=jmax_)) then j = ja(k)
if ((ja(k)-i)>=diag_) then if ((jmin_<=j).and.(j<=jmax_)) then
nzin = nzin + 1 if ((j-i)>=diag_) then
u%ia(nzin) = i nzin = nzin + 1
u%ja(nzin) = ja(k) u%ia(nzin) = i
u%val(nzin) = val(k) u%ja(nzin) = ja(k)
end if u%val(nzin) = val(k)
end if end if
end do end if
end do end do loop2
end associate end associate
call u%set_nzeros(nzin) call u%set_nzeros(nzin)
end if end if

@ -4013,25 +4013,24 @@ subroutine psb_d_coo_triu(a,u,info,&
nzuin = u%get_nzeros() ! At this point it should be 0 nzuin = u%get_nzeros() ! At this point it should be 0
call l%allocate(mb,nb,nz) call l%allocate(mb,nb,nz)
nzlin = l%get_nzeros() ! At this point it should be 0 nzlin = l%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop1: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
j = ja(k) j = ja(k)
if ((jmin_<=j).and.(j<=jmax_)) then if ((jmin_<=j).and.(j<=jmax_)) then
if ((ja(k)-i)<diag_) then if ((j-i)<diag_) then
nzlin = nzlin + 1 nzlin = nzlin + 1
l%ia(nzlin) = i l%ia(nzlin) = i
l%ja(nzlin) = ja(k) l%ja(nzlin) = ja(k)
l%val(nzlin) = val(k) l%val(nzlin) = val(k)
else else
nzuin = nzuin + 1 nzuin = nzuin + 1
u%ia(nzuin) = i u%ia(nzuin) = i
u%ja(nzuin) = ja(k) u%ja(nzuin) = ja(k)
u%val(nzuin) = val(k) u%val(nzuin) = val(k)
end if
end if end if
end do end if
end do end do loop1
end associate end associate
call u%set_nzeros(nzuin) call u%set_nzeros(nzuin)
call l%set_nzeros(nzlin) call l%set_nzeros(nzlin)
@ -4047,19 +4046,19 @@ subroutine psb_d_coo_triu(a,u,info,&
end if end if
else else
nzin = u%get_nzeros() ! At this point it should be 0 nzin = u%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop2: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
if ((jmin_<=j).and.(j<=jmax_)) then j = ja(k)
if ((ja(k)-i)>=diag_) then if ((jmin_<=j).and.(j<=jmax_)) then
nzin = nzin + 1 if ((j-i)>=diag_) then
u%ia(nzin) = i nzin = nzin + 1
u%ja(nzin) = ja(k) u%ia(nzin) = i
u%val(nzin) = val(k) u%ja(nzin) = ja(k)
end if u%val(nzin) = val(k)
end if end if
end do end if
end do end do loop2
end associate end associate
call u%set_nzeros(nzin) call u%set_nzeros(nzin)
end if end if

@ -4013,25 +4013,24 @@ subroutine psb_s_coo_triu(a,u,info,&
nzuin = u%get_nzeros() ! At this point it should be 0 nzuin = u%get_nzeros() ! At this point it should be 0
call l%allocate(mb,nb,nz) call l%allocate(mb,nb,nz)
nzlin = l%get_nzeros() ! At this point it should be 0 nzlin = l%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop1: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
j = ja(k) j = ja(k)
if ((jmin_<=j).and.(j<=jmax_)) then if ((jmin_<=j).and.(j<=jmax_)) then
if ((ja(k)-i)<diag_) then if ((j-i)<diag_) then
nzlin = nzlin + 1 nzlin = nzlin + 1
l%ia(nzlin) = i l%ia(nzlin) = i
l%ja(nzlin) = ja(k) l%ja(nzlin) = ja(k)
l%val(nzlin) = val(k) l%val(nzlin) = val(k)
else else
nzuin = nzuin + 1 nzuin = nzuin + 1
u%ia(nzuin) = i u%ia(nzuin) = i
u%ja(nzuin) = ja(k) u%ja(nzuin) = ja(k)
u%val(nzuin) = val(k) u%val(nzuin) = val(k)
end if
end if end if
end do end if
end do end do loop1
end associate end associate
call u%set_nzeros(nzuin) call u%set_nzeros(nzuin)
call l%set_nzeros(nzlin) call l%set_nzeros(nzlin)
@ -4047,19 +4046,19 @@ subroutine psb_s_coo_triu(a,u,info,&
end if end if
else else
nzin = u%get_nzeros() ! At this point it should be 0 nzin = u%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop2: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
if ((jmin_<=j).and.(j<=jmax_)) then j = ja(k)
if ((ja(k)-i)>=diag_) then if ((jmin_<=j).and.(j<=jmax_)) then
nzin = nzin + 1 if ((j-i)>=diag_) then
u%ia(nzin) = i nzin = nzin + 1
u%ja(nzin) = ja(k) u%ia(nzin) = i
u%val(nzin) = val(k) u%ja(nzin) = ja(k)
end if u%val(nzin) = val(k)
end if end if
end do end if
end do end do loop2
end associate end associate
call u%set_nzeros(nzin) call u%set_nzeros(nzin)
end if end if

@ -4013,25 +4013,24 @@ subroutine psb_z_coo_triu(a,u,info,&
nzuin = u%get_nzeros() ! At this point it should be 0 nzuin = u%get_nzeros() ! At this point it should be 0
call l%allocate(mb,nb,nz) call l%allocate(mb,nb,nz)
nzlin = l%get_nzeros() ! At this point it should be 0 nzlin = l%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop1: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
j = ja(k) j = ja(k)
if ((jmin_<=j).and.(j<=jmax_)) then if ((jmin_<=j).and.(j<=jmax_)) then
if ((ja(k)-i)<diag_) then if ((j-i)<diag_) then
nzlin = nzlin + 1 nzlin = nzlin + 1
l%ia(nzlin) = i l%ia(nzlin) = i
l%ja(nzlin) = ja(k) l%ja(nzlin) = ja(k)
l%val(nzlin) = val(k) l%val(nzlin) = val(k)
else else
nzuin = nzuin + 1 nzuin = nzuin + 1
u%ia(nzuin) = i u%ia(nzuin) = i
u%ja(nzuin) = ja(k) u%ja(nzuin) = ja(k)
u%val(nzuin) = val(k) u%val(nzuin) = val(k)
end if
end if end if
end do end if
end do end do loop1
end associate end associate
call u%set_nzeros(nzuin) call u%set_nzeros(nzuin)
call l%set_nzeros(nzlin) call l%set_nzeros(nzlin)
@ -4047,19 +4046,19 @@ subroutine psb_z_coo_triu(a,u,info,&
end if end if
else else
nzin = u%get_nzeros() ! At this point it should be 0 nzin = u%get_nzeros() ! At this point it should be 0
associate(val =>a%val, ja => a%ja, irp=>a%irp) associate(val =>a%val, ja => a%ja, ia=>a%ia)
do i=imin_,imax_ loop2: do k=1,nz
do k=irp(i),irp(i+1)-1 i = ia(k)
if ((jmin_<=j).and.(j<=jmax_)) then j = ja(k)
if ((ja(k)-i)>=diag_) then if ((jmin_<=j).and.(j<=jmax_)) then
nzin = nzin + 1 if ((j-i)>=diag_) then
u%ia(nzin) = i nzin = nzin + 1
u%ja(nzin) = ja(k) u%ia(nzin) = i
u%val(nzin) = val(k) u%ja(nzin) = ja(k)
end if u%val(nzin) = val(k)
end if end if
end do end if
end do end do loop2
end associate end associate
call u%set_nzeros(nzin) call u%set_nzeros(nzin)
end if end if

Loading…
Cancel
Save