|
|
|
|
@ -548,7 +548,7 @@ program psb_d_pde2d
|
|
|
|
|
integer(psb_ipk_) :: ictxt, iam, np
|
|
|
|
|
|
|
|
|
|
! solver parameters
|
|
|
|
|
integer(psb_ipk_) :: iter, itmax,itrace, istopc, irst
|
|
|
|
|
integer(psb_ipk_) :: iter, itmax,itrace, istopc, irst, ipart
|
|
|
|
|
integer(psb_epk_) :: amatsize, precsize, descsize, d2size
|
|
|
|
|
real(psb_dpk_) :: err, eps
|
|
|
|
|
|
|
|
|
|
@ -581,14 +581,14 @@ program psb_d_pde2d
|
|
|
|
|
!
|
|
|
|
|
! get parameters
|
|
|
|
|
!
|
|
|
|
|
call get_parms(ictxt,kmethd,ptype,afmt,idim,istopc,itmax,itrace,irst)
|
|
|
|
|
call get_parms(ictxt,kmethd,ptype,afmt,idim,istopc,itmax,itrace,irst,ipart)
|
|
|
|
|
|
|
|
|
|
!
|
|
|
|
|
! allocate and fill in the coefficient matrix, rhs and initial guess
|
|
|
|
|
!
|
|
|
|
|
call psb_barrier(ictxt)
|
|
|
|
|
t1 = psb_wtime()
|
|
|
|
|
call psb_gen_pde2d(ictxt,idim,a,bv,xxv,desc_a,afmt,info)
|
|
|
|
|
call psb_gen_pde2d(ictxt,idim,a,bv,xxv,desc_a,afmt,info,partition=ipart)
|
|
|
|
|
call psb_barrier(ictxt)
|
|
|
|
|
t2 = psb_wtime() - t1
|
|
|
|
|
if(info /= psb_success_) then
|
|
|
|
|
@ -691,10 +691,10 @@ contains
|
|
|
|
|
!
|
|
|
|
|
! get iteration parameters from standard input
|
|
|
|
|
!
|
|
|
|
|
subroutine get_parms(ictxt,kmethd,ptype,afmt,idim,istopc,itmax,itrace,irst)
|
|
|
|
|
subroutine get_parms(ictxt,kmethd,ptype,afmt,idim,istopc,itmax,itrace,irst,ipart)
|
|
|
|
|
integer(psb_ipk_) :: ictxt
|
|
|
|
|
character(len=*) :: kmethd, ptype, afmt
|
|
|
|
|
integer(psb_ipk_) :: idim, istopc,itmax,itrace,irst
|
|
|
|
|
integer(psb_ipk_) :: idim, istopc,itmax,itrace,irst,ipart
|
|
|
|
|
integer(psb_ipk_) :: np, iam
|
|
|
|
|
integer(psb_ipk_) :: ip, inp_unit
|
|
|
|
|
character(len=1024) :: filename
|
|
|
|
|
@ -724,21 +724,26 @@ contains
|
|
|
|
|
|
|
|
|
|
read(inp_unit,*) idim
|
|
|
|
|
if (ip >= 4) then
|
|
|
|
|
read(inp_unit,*) ipart
|
|
|
|
|
else
|
|
|
|
|
ipart = 3
|
|
|
|
|
endif
|
|
|
|
|
if (ip >= 5) then
|
|
|
|
|
read(inp_unit,*) istopc
|
|
|
|
|
else
|
|
|
|
|
istopc=1
|
|
|
|
|
endif
|
|
|
|
|
if (ip >= 5) then
|
|
|
|
|
if (ip >= 6) then
|
|
|
|
|
read(inp_unit,*) itmax
|
|
|
|
|
else
|
|
|
|
|
itmax=500
|
|
|
|
|
endif
|
|
|
|
|
if (ip >= 6) then
|
|
|
|
|
if (ip >= 7) then
|
|
|
|
|
read(inp_unit,*) itrace
|
|
|
|
|
else
|
|
|
|
|
itrace=-1
|
|
|
|
|
endif
|
|
|
|
|
if (ip >= 7) then
|
|
|
|
|
if (ip >= 8) then
|
|
|
|
|
read(inp_unit,*) irst
|
|
|
|
|
else
|
|
|
|
|
irst=1
|
|
|
|
|
@ -746,8 +751,16 @@ contains
|
|
|
|
|
|
|
|
|
|
write(psb_out_unit,'("Solving matrix : ell1")')
|
|
|
|
|
write(psb_out_unit,'("Grid dimensions : ",i5," x ",i5)')idim,idim
|
|
|
|
|
write(psb_out_unit,'("Number of processors : ",i0)')np
|
|
|
|
|
write(psb_out_unit,'("Data distribution : BLOCK")')
|
|
|
|
|
write(psb_out_unit,'("Number of processors : ",i0)') np
|
|
|
|
|
select case(ipart)
|
|
|
|
|
case(1)
|
|
|
|
|
write(psb_out_unit,'("Data distribution : BLOCK")')
|
|
|
|
|
case(3)
|
|
|
|
|
write(psb_out_unit,'("Data distribution : 2D")')
|
|
|
|
|
case default
|
|
|
|
|
ipart = 3
|
|
|
|
|
write(psb_out_unit,'("Unknown data distrbution, defaulting to 2D")')
|
|
|
|
|
end select
|
|
|
|
|
write(psb_out_unit,'("Preconditioner : ",a)') ptype
|
|
|
|
|
write(psb_out_unit,'("Iterative method : ",a)') kmethd
|
|
|
|
|
write(psb_out_unit,'(" ")')
|
|
|
|
|
@ -767,6 +780,7 @@ contains
|
|
|
|
|
call psb_bcast(ictxt,afmt)
|
|
|
|
|
call psb_bcast(ictxt,ptype)
|
|
|
|
|
call psb_bcast(ictxt,idim)
|
|
|
|
|
call psb_bcast(ictxt,ipart)
|
|
|
|
|
call psb_bcast(ictxt,istopc)
|
|
|
|
|
call psb_bcast(ictxt,itmax)
|
|
|
|
|
call psb_bcast(ictxt,itrace)
|
|
|
|
|
@ -782,13 +796,14 @@ contains
|
|
|
|
|
integer(psb_ipk_) :: iout
|
|
|
|
|
write(iout,*)'incorrect parameter(s) found'
|
|
|
|
|
write(iout,*)' usage: pde2d90 methd prec dim &
|
|
|
|
|
&[istop itmax itrace]'
|
|
|
|
|
&[ipart istop itmax itrace]'
|
|
|
|
|
write(iout,*)' where:'
|
|
|
|
|
write(iout,*)' methd: cgstab cgs rgmres bicgstabl'
|
|
|
|
|
write(iout,*)' prec : bjac diag none'
|
|
|
|
|
write(iout,*)' dim number of points along each axis'
|
|
|
|
|
write(iout,*)' the size of the resulting linear '
|
|
|
|
|
write(iout,*)' system is dim**3'
|
|
|
|
|
write(iout,*)' system is dim**2'
|
|
|
|
|
write(iout,*)' ipart data partition 1 3 '
|
|
|
|
|
write(iout,*)' istop stopping criterion 1, 2 '
|
|
|
|
|
write(iout,*)' itmax maximum number of iterations [500] '
|
|
|
|
|
write(iout,*)' itrace <=0 (no tracing, default) or '
|
|
|
|
|
|