mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-18 11:52:11 +00:00
psblas3:
base/modules/psb_const_mod.f90 base/modules/psb_spmat_type.f03 base/newserial/psbn_base_mat_mod.f03 krylov/psb_dcgstab.F90 prec/psb_dilu_fct.f90 test/pargen/Makefile test/pargen/ppde.f90 test/pargen/runs/ppde.inp Preparing for switchover to psb_
This commit is contained in:
@@ -57,5 +57,49 @@ module psb_const_mod
|
||||
real(psb_dpk_), parameter :: epstol=1.d-32, psb_percent_=0.7
|
||||
real(psb_spk_), parameter :: s_epstol=1.e-16 ! How to choose this?
|
||||
character, parameter :: psb_all_='A', psb_topdef_=' '
|
||||
|
||||
!
|
||||
! Sparse matrix constants
|
||||
!
|
||||
|
||||
!
|
||||
!
|
||||
! Queries into spmat%info
|
||||
!
|
||||
integer, parameter :: psb_nztotreq_=1, psb_nzrowreq_=2
|
||||
integer, parameter :: psb_nzsizereq_=3
|
||||
!
|
||||
! Entries and values for spmat%info
|
||||
!
|
||||
integer, parameter :: psb_nnz_=1
|
||||
integer, parameter :: psb_del_bnd_=7, psb_srtd_=8
|
||||
integer, parameter :: psb_state_=9
|
||||
integer, parameter :: psb_upd_pnt_=10
|
||||
integer, parameter :: psb_dupl_=11, psb_upd_=12
|
||||
integer, parameter :: psb_ifasize_=16
|
||||
!
|
||||
integer, parameter :: psb_spmat_null_=0, psb_spmat_bld_=1
|
||||
integer, parameter :: psb_spmat_asb_=2, psb_spmat_upd_=4
|
||||
|
||||
integer, parameter :: psb_ireg_flgs_=10, psb_ip2_=0
|
||||
integer, parameter :: psb_iflag_=2, psb_ichk_=3
|
||||
integer, parameter :: psb_nnzt_=4, psb_zero_=5,psb_ipc_=6
|
||||
! Duplicate coefficients handling
|
||||
! These are usually set while calling spcnv as one of its
|
||||
! optional arugments.
|
||||
integer, parameter :: psb_dupl_ovwrt_ = 0
|
||||
integer, parameter :: psb_dupl_add_ = 1
|
||||
integer, parameter :: psb_dupl_err_ = 2
|
||||
integer, parameter :: psb_dupl_def_ = psb_dupl_ovwrt_
|
||||
! Matrix update mode
|
||||
integer, parameter :: psb_upd_srch_ = 98764
|
||||
integer, parameter :: psb_upd_perm_ = 98765
|
||||
integer, parameter :: psb_upd_dflt_ = psb_upd_srch_
|
||||
! Mark a COO matrix with sorted entries.
|
||||
integer, parameter :: psb_isrtdcoo_ = 98761
|
||||
integer, parameter :: psb_maxjdrows_=8, psb_minjdrows_=4
|
||||
integer, parameter :: psb_dbleint_=2
|
||||
character(len=5) :: psb_fidef_='CSR'
|
||||
|
||||
|
||||
end module psb_const_mod
|
||||
|
||||
@@ -39,21 +39,6 @@ module psb_spmat_type
|
||||
use psb_const_mod
|
||||
implicit none
|
||||
!
|
||||
!
|
||||
! Queries into spmat%info
|
||||
!
|
||||
integer, parameter :: psb_nztotreq_=1, psb_nzrowreq_=2
|
||||
integer, parameter :: psb_nzsizereq_=3
|
||||
!
|
||||
! Entries and values for spmat%info
|
||||
!
|
||||
integer, parameter :: psb_nnz_=1
|
||||
integer, parameter :: psb_del_bnd_=7, psb_srtd_=8
|
||||
integer, parameter :: psb_state_=9
|
||||
integer, parameter :: psb_upd_pnt_=10
|
||||
integer, parameter :: psb_dupl_=11, psb_upd_=12
|
||||
integer, parameter :: psb_ifasize_=16
|
||||
!
|
||||
! Types: psb_dspmat_type, psb_zspmat_type
|
||||
!
|
||||
!| type psb_dspmat_type
|
||||
@@ -95,30 +80,6 @@ module psb_spmat_type
|
||||
! in the second variant, the IN state applies to A and
|
||||
! the OUT state applies to B.
|
||||
!
|
||||
!
|
||||
integer, parameter :: psb_spmat_null_=0, psb_spmat_bld_=1
|
||||
integer, parameter :: psb_spmat_asb_=2, psb_spmat_upd_=4
|
||||
|
||||
integer, parameter :: psb_ireg_flgs_=10, psb_ip2_=0
|
||||
integer, parameter :: psb_iflag_=2, psb_ichk_=3
|
||||
integer, parameter :: psb_nnzt_=4, psb_zero_=5,psb_ipc_=6
|
||||
! Duplicate coefficients handling
|
||||
! These are usually set while calling spcnv as one of its
|
||||
! optional arugments.
|
||||
integer, parameter :: psb_dupl_ovwrt_ = 0
|
||||
integer, parameter :: psb_dupl_add_ = 1
|
||||
integer, parameter :: psb_dupl_err_ = 2
|
||||
integer, parameter :: psb_dupl_def_ = psb_dupl_ovwrt_
|
||||
! Matrix update mode
|
||||
integer, parameter :: psb_upd_srch_ = 98764
|
||||
integer, parameter :: psb_upd_perm_ = 98765
|
||||
integer, parameter :: psb_upd_dflt_ = psb_upd_srch_
|
||||
! Mark a COO matrix with sorted entries.
|
||||
integer, parameter :: psb_isrtdcoo_ = 98761
|
||||
integer, parameter :: psb_maxjdrows_=8, psb_minjdrows_=4
|
||||
integer, parameter :: psb_dbleint_=2
|
||||
character(len=5) :: psb_fidef_='CSR'
|
||||
|
||||
|
||||
type psb_base_spmat_type
|
||||
integer :: m, k
|
||||
|
||||
@@ -2,27 +2,26 @@ module psbn_base_mat_mod
|
||||
|
||||
use psb_const_mod
|
||||
|
||||
integer, parameter :: psbn_invalid_ = -1
|
||||
integer, parameter :: psbn_spmat_null_=0, psbn_spmat_bld_=1
|
||||
integer, parameter :: psbn_spmat_asb_=2, psbn_spmat_upd_=4
|
||||
|
||||
integer, parameter :: psbn_ireg_flgs_=10, psbn_ip2_=0
|
||||
integer, parameter :: psbn_iflag_=2, psbn_ichk_=3
|
||||
integer, parameter :: psbn_nnzt_=4, psbn_zero_=5,psbn_ipc_=6
|
||||
! Duplicate coefficients handling
|
||||
! These are usually set while calling spcnv as one of its
|
||||
! optional arugments.
|
||||
integer, parameter :: psbn_dupl_ovwrt_ = 0
|
||||
integer, parameter :: psbn_dupl_add_ = 1
|
||||
integer, parameter :: psbn_dupl_err_ = 2
|
||||
integer, parameter :: psbn_dupl_def_ = psbn_dupl_ovwrt_
|
||||
! Matrix update mode
|
||||
integer, parameter :: psbn_upd_srch_ = 98764
|
||||
integer, parameter :: psbn_upd_perm_ = 98765
|
||||
integer, parameter :: psbn_upd_dflt_ = psbn_upd_srch_
|
||||
integer, parameter :: psbn_maxjdrows_=8, psbn_minjdrows_=4
|
||||
integer, parameter :: psbn_dbleint_=2
|
||||
character(len=5) :: psbn_fidef_='CSR'
|
||||
!!$ integer, parameter :: psbn_invalid_ = -1
|
||||
!!$ integer, parameter :: psbn_spmat_null_=0, psbn_spmat_bld_=1
|
||||
!!$ integer, parameter :: psbn_spmat_asb_=2, psbn_spmat_upd_=4
|
||||
!!$
|
||||
!!$ integer, parameter :: psbn_ireg_flgs_=10, psbn_ip2_=0
|
||||
!!$ integer, parameter :: psbn_iflag_=2, psbn_ichk_=3
|
||||
!!$ integer, parameter :: psbn_nnzt_=4, psbn_zero_=5,psbn_ipc_=6
|
||||
!!$ ! Duplicate coefficients handling
|
||||
!!$ ! These are usually set while calling spcnv as one of its
|
||||
!!$ ! optional arugments.
|
||||
!!$ integer, parameter :: psbn_dupl_ovwrt_ = 0
|
||||
!!$ integer, parameter :: psbn_dupl_add_ = 1
|
||||
!!$ integer, parameter :: psbn_dupl_err_ = 2
|
||||
!!$ integer, parameter :: psbn_dupl_def_ = psbn_dupl_ovwrt_
|
||||
!!$ ! Matrix update mode
|
||||
!!$ integer, parameter :: psbn_upd_srch_ = 98764
|
||||
!!$ integer, parameter :: psbn_upd_perm_ = 98765
|
||||
!!$ integer, parameter :: psbn_upd_dflt_ = psbn_upd_srch_
|
||||
!!$ integer, parameter :: psbn_maxjdrows_=8, psbn_minjdrows_=4
|
||||
!!$ integer, parameter :: psbn_dbleint_=2
|
||||
|
||||
|
||||
type :: psbn_base_sparse_mat
|
||||
|
||||
@@ -123,7 +123,7 @@ Subroutine psb_dcgstab(a,prec,b,x,eps,desc_a,info,itmax,iter,err,itrace,istop)
|
||||
integer :: debug_level, debug_unit
|
||||
Logical, Parameter :: exchange=.True., noexchange=.False., debug1 = .False.
|
||||
Integer, Parameter :: irmax = 8
|
||||
Integer :: itx, isvch, ictxt, err_act
|
||||
Integer :: itx, isvch, ictxt, err_act, i
|
||||
Integer :: istop_
|
||||
Real(psb_dpk_) :: alpha, beta, rho, rho_old, sigma, omega, tau
|
||||
type(psb_itconv_type) :: stopdat
|
||||
|
||||
+59
-79
@@ -124,6 +124,8 @@ subroutine psb_dilu_fct(a,l,u,d,info,blck)
|
||||
contains
|
||||
subroutine psb_dilu_fctint(m,ma,a,mb,b,&
|
||||
& d,laspk,lia1,lia2,uaspk,uia1,uia2,l1,l2,info)
|
||||
use psbn_d_base_mat_mod
|
||||
|
||||
implicit none
|
||||
|
||||
type(psbn_d_sparse_mat) :: a
|
||||
@@ -134,24 +136,20 @@ contains
|
||||
|
||||
integer :: i,j,k,l,low1,low2,kk,jj,ll, irb, ktrw,err_act, nz
|
||||
real(psb_dpk_) :: dia,temp
|
||||
integer, parameter :: nrb=16
|
||||
type(psb_dspmat_type) :: trw
|
||||
integer, parameter :: nrb=60
|
||||
type(psbn_d_coo_sparse_mat) :: trw
|
||||
integer, allocatable :: irow(:), icol(:)
|
||||
real(psb_dpk_), allocatable :: val(:)
|
||||
|
||||
integer :: int_err(5)
|
||||
character(len=20) :: name, ch_err
|
||||
|
||||
|
||||
|
||||
name='psb_dilu_fctint'
|
||||
if(psb_get_errstatus() /= 0) return
|
||||
info=0
|
||||
call psb_erractionsave(err_act)
|
||||
call psb_nullify_sp(trw)
|
||||
trw%m=0
|
||||
trw%k=0
|
||||
|
||||
call psb_sp_all(trw,1,info)
|
||||
call trw%allocate(0,0,info)
|
||||
if(info /= 0) then
|
||||
info=4010
|
||||
ch_err='psb_sp_all'
|
||||
@@ -167,25 +165,38 @@ contains
|
||||
|
||||
do i = 1, ma
|
||||
d(i) = dzero
|
||||
|
||||
!
|
||||
!
|
||||
call a%csget(i,i,nz,irow,icol,val,info)
|
||||
do j=1, nz
|
||||
k = icol(j)
|
||||
! write(0,*)'KKKKK',k
|
||||
if ((mod(i,nrb) == 1).or.(nrb==1)) then
|
||||
irb = min(ma-i+1,nrb)
|
||||
call a%a%csget(i,i+irb-1,trw,info)
|
||||
if(info /= 0) then
|
||||
info=4010
|
||||
ch_err='a%csget'
|
||||
call psb_errpush(info,name,a_err=ch_err)
|
||||
goto 9999
|
||||
end if
|
||||
nz = trw%get_nzeros()
|
||||
ktrw=1
|
||||
end if
|
||||
|
||||
do
|
||||
if (ktrw > nz ) exit
|
||||
if (trw%ia(ktrw) > i) exit
|
||||
k = trw%ja(ktrw)
|
||||
if ((k < i).and.(k >= 1)) then
|
||||
l1 = l1 + 1
|
||||
laspk(l1) = val(j)
|
||||
laspk(l1) = trw%val(ktrw)
|
||||
lia1(l1) = k
|
||||
else if (k == i) then
|
||||
d(i) = val(j)
|
||||
d(i) = trw%val(ktrw)
|
||||
else if ((k > i).and.(k <= m)) then
|
||||
l2 = l2 + 1
|
||||
uaspk(l2) = val(j)
|
||||
uaspk(l2) = trw%val(ktrw)
|
||||
uia1(l2) = k
|
||||
end if
|
||||
end do
|
||||
ktrw = ktrw + 1
|
||||
enddo
|
||||
!!$
|
||||
|
||||
lia2(i+1) = l1 + 1
|
||||
@@ -273,61 +284,36 @@ contains
|
||||
do i = ma+1, m
|
||||
d(i) = dzero
|
||||
|
||||
|
||||
if (b%fida=='CSR') then
|
||||
|
||||
do j = b%ia2(i-ma), b%ia2(i-ma+1) - 1
|
||||
k = b%ia1(j)
|
||||
! if (me == 2) write(0,*)'ecco k=',k
|
||||
if ((k < i).and.(k >= 1)) then
|
||||
l1 = l1 + 1
|
||||
laspk(l1) = b%aspk(j)
|
||||
lia1(l1) = k
|
||||
! if(me == 2) write(0,*)'scrivo l'
|
||||
else if (k == i) then
|
||||
d(i) = b%aspk(j)
|
||||
else if ((k > i).and.(k <= m)) then
|
||||
l2 = l2 + 1
|
||||
uaspk(l2) = b%aspk(j)
|
||||
! write(0,*)'KKKKK',k
|
||||
uia1(l2) = k
|
||||
end if
|
||||
enddo
|
||||
|
||||
else
|
||||
|
||||
if ((mod((i-ma),nrb) == 1).or.(nrb==1)) then
|
||||
irb = min(m-i+1,nrb)
|
||||
call psb_sp_getblk(i-ma,b,trw,info,lrw=i-ma+irb-1)
|
||||
if(info /= 0) then
|
||||
info=4010
|
||||
ch_err='psb_sp_getblk'
|
||||
call psb_errpush(info,name,a_err=ch_err)
|
||||
goto 9999
|
||||
end if
|
||||
ktrw=1
|
||||
end if
|
||||
|
||||
do
|
||||
if (ktrw > trw%infoa(psb_nnz_)) exit
|
||||
if (trw%ia1(ktrw) > i) exit
|
||||
k = trw%ia2(ktrw)
|
||||
! write(0,*)'KKKKK',k
|
||||
if ((k < i).and.(k >= 1)) then
|
||||
l1 = l1 + 1
|
||||
laspk(l1) = trw%aspk(ktrw)
|
||||
lia1(l1) = k
|
||||
else if (k == i) then
|
||||
d(i) = trw%aspk(ktrw)
|
||||
else if ((k > i).and.(k <= m)) then
|
||||
l2 = l2 + 1
|
||||
uaspk(l2) = trw%aspk(ktrw)
|
||||
uia1(l2) = k
|
||||
end if
|
||||
ktrw = ktrw + 1
|
||||
enddo
|
||||
|
||||
endif
|
||||
!!$ if ((mod(i,nrb) == 1).or.(nrb==1)) then
|
||||
!!$ irb = min(ma-i+1,nrb)
|
||||
!!$ call b%csget(i-ma,i-ma+irb-1,trw,info)
|
||||
!!$ nz = trw%get_nzeros()
|
||||
!!$ if(info /= 0) then
|
||||
!!$ info=4010
|
||||
!!$ ch_err='a%csget'
|
||||
!!$ call psb_errpush(info,name,a_err=ch_err)
|
||||
!!$ goto 9999
|
||||
!!$ end if
|
||||
!!$ ktrw=1
|
||||
!!$ end if
|
||||
!!$
|
||||
!!$ do
|
||||
!!$ if (ktrw > nz ) exit
|
||||
!!$ if (trw%ia(ktrw) > i) exit
|
||||
!!$ k = trw%ja(ktrw)
|
||||
!!$ if ((k < i).and.(k >= 1)) then
|
||||
!!$ l1 = l1 + 1
|
||||
!!$ laspk(l1) = trw%val(ktrw)
|
||||
!!$ lia1(l1) = k
|
||||
!!$ else if (k == i) then
|
||||
!!$ d(i) = trw%val(ktrw)
|
||||
!!$ else if ((k > i).and.(k <= m)) then
|
||||
!!$ l2 = l2 + 1
|
||||
!!$ uaspk(l2) = trw%val(ktrw)
|
||||
!!$ uia1(l2) = k
|
||||
!!$ end if
|
||||
!!$ ktrw = ktrw + 1
|
||||
!!$ enddo
|
||||
|
||||
|
||||
lia2(i+1) = l1 + 1
|
||||
@@ -409,13 +395,7 @@ contains
|
||||
enddo
|
||||
enddo
|
||||
|
||||
call psb_sp_free(trw,info)
|
||||
if(info /= 0) then
|
||||
info=4010
|
||||
ch_err='psb_sp_free'
|
||||
call psb_errpush(info,name,a_err=ch_err)
|
||||
goto 9999
|
||||
end if
|
||||
call trw%free()
|
||||
|
||||
call psb_erractionrestore(err_act)
|
||||
return
|
||||
|
||||
@@ -16,10 +16,12 @@ EXEDIR=./runs
|
||||
|
||||
all: ppde spde
|
||||
|
||||
ppde: ppde.o
|
||||
$(F90LINK) ppde.o -o ppde $(PSBLAS_LIB) $(LDLIBS)
|
||||
ppde: ppde.o psbn_d_csc_impl.o psbn_d_csc_mat_mod.o
|
||||
$(F90LINK) ppde.o psbn_d_csc_impl.o psbn_d_csc_mat_mod.o -o ppde $(PSBLAS_LIB) $(LDLIBS)
|
||||
/bin/mv ppde $(EXEDIR)
|
||||
|
||||
psbn_d_csc_impl.o ppde.o: psbn_d_csc_mat_mod.o
|
||||
|
||||
spde: spde.o
|
||||
$(F90LINK) spde.o -o spde $(PSBLAS_LIB) $(LDLIBS)
|
||||
/bin/mv spde $(EXEDIR)
|
||||
|
||||
@@ -344,6 +344,7 @@ contains
|
||||
!
|
||||
use psb_base_mod
|
||||
use psbn_d_mat_mod
|
||||
use psbn_d_csc_mat_mod
|
||||
implicit none
|
||||
integer :: idim
|
||||
integer, parameter :: nb=20
|
||||
@@ -352,6 +353,9 @@ contains
|
||||
integer :: ictxt, info
|
||||
character :: afmt*5
|
||||
type(psbn_d_sparse_mat) :: a
|
||||
type(psbn_d_csc_sparse_mat) :: acsc
|
||||
type(psbn_d_coo_sparse_mat) :: acoo
|
||||
type(psbn_d_csr_sparse_mat) :: acsr
|
||||
real(psb_dpk_) :: zt(nb),glob_x,glob_y,glob_z
|
||||
integer :: m,n,nnz,glob_row,nlr,i,ii,ib,k
|
||||
integer :: x,y,z,ia,indx_owner
|
||||
@@ -589,7 +593,7 @@ contains
|
||||
t1 = psb_wtime()
|
||||
call psb_cdasb(desc_a,info)
|
||||
if (info == 0) &
|
||||
& call psb_spasb(a,desc_a,info,dupl=psb_dupl_err_,afmt=afmt)
|
||||
& call psb_spasb(a,desc_a,info,dupl=psb_dupl_err_,mold=acsr)
|
||||
call psb_barrier(ictxt)
|
||||
if(info /= 0) then
|
||||
info=4010
|
||||
@@ -608,7 +612,7 @@ contains
|
||||
tasb = psb_wtime()-t1
|
||||
call psb_barrier(ictxt)
|
||||
ttot = psb_wtime() - t0
|
||||
|
||||
!!$ call a%print(20+iam)
|
||||
call psb_amx(ictxt,talc)
|
||||
call psb_amx(ictxt,tgen)
|
||||
call psb_amx(ictxt,tasb)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
7 Number of entries below this
|
||||
BICGSTAB Iterative method BICGSTAB CGS BICG BICGSTABL RGMRES
|
||||
BJAC Preconditioner NONE DIAG BJAC
|
||||
COO Storage format for matrix A: CSR COO JAD
|
||||
CSR Storage format for matrix A: CSR COO JAD
|
||||
060 Domain size (acutal system is this**3)
|
||||
2 Stopping criterion
|
||||
0400 MAXIT
|
||||
|
||||
Reference in New Issue
Block a user