Aligned to new names for internal constants.

Fixed ext field of descriptors.
stopcriterion
Salvatore Filippone 18 years ago
parent 26ea96cde7
commit 246f8b3c45

@ -32,7 +32,7 @@ lib: mpobjs $(OBJS)
$(AR) $(HERE)/$(LIBNAME) $(OBJS)
$(RANLIB) $(HERE)/$(LIBNAME)
/bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR)
/bin/cp -p $(LIBMOD) $(LIBDIR)
/bin/cp -p $(LIBMOD) $(LOCAL_MODS) $(LIBDIR)
$(F90OBJS) $(MPFOBJS): $(MODOBJS)
psb_prec_mod.o: psb_prec_type.o

131
README

@ -1,129 +1,18 @@
This directory contains the PSBLAS library, version 2.1.0
This directory contains the MLD2P4 set of preconditioners.
Version 1.0 of the library was described in:
S. Filippone, M. Colajanni
PSBLAS: A library for parallel linear algebra computation on sparse matrices
ACM Trans. on Math. Software, 26(4), Dec. 2000, pp. 527-550.
PLATFORMS:
The compilation process relies on the choice of an appropriate
Make.inc file; we have tested with AIX XLF, Intel ifc/Linux, Lahey
F95/Linux, Nag f95/Linux, GNU Fortran/Linux. If you succeed in compiling with
other compiler/operating systems please let us know.
LINUX:
There finally exist a GNU Fortran 95 implementation: we are using the
development snapshots from GCC 3.5.0, later 4.1 and 4.2 since July
2004, and it appears to work. The 4.2 version of GNU compilers is now
our reference platform; the official 4.2.0 release is due pretty
soon. It now includes support for ALLOCATABLES.
The Lahey version we got access to (6.0 and 6.1) seems to suffer from
spurious extra copies problem; this is most apparent in the matrix
build process.
For the Intel compilers, we recommend moving to version 9; previous
versions of the library have been compiled with version 7 and 8 of
ifort.
IBM SP.
The library has been tested on an IBM SP2, SP4 and SP5, with XLC and XLF
compilers, and a version of the BLACS based on MPI.
The setting
F90=xlf90 -qsuffix=f=f90
in Make.inc.rs6k takes care of the f90 extension.
WARNING: xlf 8.1 introduced a performance bug, whereas a Fortan 90
code calling a Fortan 77 code would incur spurious array copies;
please make sure your system has the PTF xlf 8102 installed.
UTILITIES
The TEST/Fileread directory contains some utilities to convert to/from
Harwell-Boeing and MatrixMarket file formats.
DOCUMENTATION
See userguide.pdf
Please consult the sample programs, especially TEST/pargen/ppde90.f90.
OTHER SOFTWARE CREDITS
We include our modified implementation of some of the Sparker (serial
sparse BLAS) material, e.g. Jagged diagonal, plus a number of
extensions of our own design. The original file spblas.f can be
downloaded from matisa.cc.rl.ac.uk; of course any bugs in our
implementation are our own to fix. The main reference for the serial
sparse BLAS is:
Duff, I., Marrone, M., Radicati, G., and Vittoli, C.
Level 3 basic linear algebra subprograms for sparse matrices: a user
level interface
ACM Trans. Math. Softw., 23(3), 379-401, 1997.
In the multilevel preconditioners we use SMMP by Randolph E. Bank and
Craig C. Douglas na.bank@na-net.ornl.gov and
na.cdouglas@na-net.ornl.gov; we wrapped it in a Fortran 95 interface
with dynamic memory allocation.
To compile and run our software you will need
1. A working version of MPI
2. The MPI version of the BLACS from
http://www.netlib.org/blacs/index.html
3. A version of the BLAS; if you don't have a specific version for
your platform you may try ATLAS available from
http://math-atlas.sourceforge.net/
4. We have had good results with the METIS library, from
http://www-users.cs.umn.edu/~karypis/metis/metis/main.html
This is not necessary to compile our library, but the test program
in test/Fileread assumes you have it installed.
5. For our preconditioners we include interfaces to the following
software packages:
-- SuperLU 3.0 http://crd.lbl.gov/~xiaoye/SuperLU/
-- UMFPACK 4.4 http://www.cise.ufl.edu/research/sparse/umfpack/
These are optional, you only need to install them if you actually
want to use them.
TODO:
- As soon as TR 15581 and MOVE_ALLOC become available in GNU Fortran
we shall move from POINTERS to ALLOCATABLE for both vectors and
derived data types components.
- The GLOB_TO_LOC array should be changed for large test cases.
The PSBLAS team.
Contact: Salvatore Filippone salvatore.filippone@uniroma2.it
Credits for version 2.0:
developed by
Salvatore Filippone
Alfredo Buttari
The MD2P4 multilevel parallel preconditioners contained in directory
src/prec were developed with the contribution of:
Pasqua D'Ambra
Daniela di Serafino
They are still in an early experimental stage, use at your own risk!
Credits for version 1.0:
Salvatore Filippone
Michele Colajanni
Fabio Cerioni
Stefano Maiolatesi
Dario Pascucci
To compile:
1. Edit Makefile and point PSBLASDIR to the main directory containing
the PSBLAS source code
2. Edit the Makefile in the main PSBLAS dir modifying the PREC
variable to make it point to this directory, e.g.
PREC=../mld2p4
3. Run make from the main PSBLAS directory.

@ -138,7 +138,7 @@ Subroutine psb_dasmatbld(ptype,novr,a,blk,desc_data,upd,desc_p,info,outfmt)
goto 9999
endif
if (novr == 0) then
if ((novr == 0).or.(np==1)) then
!
! This is really just Block Jacobi.....
!
@ -176,16 +176,16 @@ Subroutine psb_dasmatbld(ptype,novr,a,blk,desc_data,upd,desc_p,info,outfmt)
!
! Build the auiliary descriptor',desc_p%matrix_data(psb_n_row_)
!
call psb_cdbldovr(a,desc_data,novr,desc_p,info)
call psb_cdbldext(a,desc_data,novr,desc_p,info,extype=psb_ovt_asov_)
if(info /= 0) then
info=4010
ch_err='psb_cdbldovr'
ch_err='psb_cdbldext'
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
Endif
if(debug) write(0,*) me,' From cdbldovr _:',desc_p%matrix_data(psb_n_row_),&
if(debug) write(0,*) me,' From cdbldext _:',desc_p%matrix_data(psb_n_row_),&
& desc_p%matrix_data(psb_n_col_)
@ -202,11 +202,11 @@ Subroutine psb_dasmatbld(ptype,novr,a,blk,desc_data,upd,desc_p,info,outfmt)
!!$ blk%k = n_row
if (present(outfmt)) then
if(debug) write(0,*) me,': Calling SPHALO with ',size(blk%ia2)
Call psb_sphalo(a,desc_p,blk,info,outfmt=outfmt)
if(debug) write(0,*) me,': Calling outfmt SPHALO with ',size(blk%ia2)
Call psb_sphalo(a,desc_p,blk,info,outfmt=outfmt,data=psb_comm_ext_)
else
if(debug) write(0,*) me,': Calling SPHALO with ',size(blk%ia2)
Call psb_sphalo(a,desc_p,blk,info)
Call psb_sphalo(a,desc_p,blk,info,data=psb_comm_ext_)
end if
@ -235,7 +235,7 @@ Subroutine psb_dasmatbld(ptype,novr,a,blk,desc_data,upd,desc_p,info,outfmt)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -191,7 +191,7 @@ subroutine psb_dbaseprc_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
tx(desc_data%matrix_data(psb_n_row_)+1:isz) = dzero
if (prec%iprcparm(restr_)==psb_halo_) then
call psb_halo(tx,prec%desc_data,info,work=aux)
call psb_halo(tx,prec%desc_data,info,work=aux,data=psb_comm_ext_)
if(info /=0) then
info=4010
ch_err='psb_halo'
@ -271,7 +271,7 @@ subroutine psb_dbaseprc_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
9999 continue
call psb_errpush(info,name,i_err=int_err,a_err=ch_err)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -257,7 +257,7 @@ subroutine psb_dbaseprc_bld(a,desc_a,p,info,upd)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -260,7 +260,7 @@ subroutine psb_dbjac_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
9999 continue
call psb_errpush(info,name,i_err=int_err,a_err=ch_err)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -89,7 +89,7 @@ subroutine psb_dbldaggrmat(a,desc_a,ac,desc_ac,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -265,8 +265,9 @@ contains
!if(.not.associated(p%av(ap_nd_)%aspk)) p%iprcparm(jac_sweeps_) = 1
!------------------------------------------------------------------
! Split AC=M+N N off-diagonal part
nzl = psb_sp_get_nnzeros(ac)
call psb_sp_all(ac%m,ac%k,p%av(ap_nd_),nzl,info)
if(info /= 0) then
if (info /= 0) then
call psb_errpush(4010,name,a_err='psb_sp_all')
goto 9999
end if
@ -324,7 +325,7 @@ contains
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -1031,7 +1032,7 @@ contains
9999 continue
call psb_errpush(info,name)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -158,7 +158,7 @@ subroutine psb_ddiagsc_bld(a,desc_a,p,upd,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -283,7 +283,7 @@ subroutine psb_dgenaggrmap(aggr_type,a,desc_a,nlaggr,ilaggr,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -339,11 +339,17 @@ subroutine psb_dilu_bld(a,desc_a,p,upd,info)
if (psb_sp_getifld(psb_upd_,p%av(u_pr_),info) /= psb_upd_perm_) then
call psb_sp_trimsize(p%av(u_pr_),i1,i2,ia,info)
if (info == 0) call psb_sp_reall(p%av(u_pr_),i1,i2,ia,info)
if (info /=0) then
write(0,*) 'Error from trimsize 1',info
endif
endif
if (psb_sp_getifld(psb_upd_,p%av(l_pr_),info) /= psb_upd_perm_) then
call psb_sp_trimsize(p%av(l_pr_),i1,i2,ia,info)
if (info == 0) call psb_sp_reall(p%av(l_pr_),i1,i2,ia,info)
if (info /=0) then
write(0,*) 'Error from trimsize 2',info
endif
endif
@ -354,7 +360,7 @@ subroutine psb_dilu_bld(a,desc_a,p,upd,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -122,7 +122,7 @@ subroutine psb_dilu_fct(a,l,u,d,info,blck)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -466,7 +466,7 @@ contains
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -753,7 +753,7 @@ subroutine psb_dmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
9999 continue
call psb_errpush(info,name)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -189,7 +189,7 @@ subroutine psb_dmlprc_bld(a,desc_a,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -134,7 +134,7 @@ subroutine psb_dprc_aply(prec,x,y,desc_data,info,trans, work)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -242,7 +242,7 @@ subroutine psb_dprc_aply1(prec,x,desc_data,info,trans)
9999 continue
call psb_errpush(info,name)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -144,7 +144,7 @@ subroutine psb_dprecbld(a,desc_a,p,info,upd)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -63,7 +63,7 @@ subroutine psb_dprecfree(p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -196,7 +196,7 @@ subroutine psb_dslu_bld(a,desc_a,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -353,7 +353,7 @@ subroutine psb_dsp_renum(a,desc_a,blck,p,atmp,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -448,7 +448,7 @@ contains
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -200,7 +200,7 @@ subroutine psb_dumf_bld(a,desc_a,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -176,16 +176,16 @@ Subroutine psb_zasmatbld(ptype,novr,a,blk,desc_data,upd,desc_p,info,outfmt)
!
! Build the auiliary descriptor',desc_p%matrix_data(psb_n_row_)
!
call psb_cdbldovr(a,desc_data,novr,desc_p,info)
call psb_cdbldext(a,desc_data,novr,desc_p,info,extype=psb_ovt_asov_)
if(info /= 0) then
info=4010
ch_err='psb_cdbldovr'
ch_err='psb_cdbldext'
call psb_errpush(info,name,a_err=ch_err)
goto 9999
end if
Endif
if(debug) write(0,*) me,' From cdovr _:',desc_p%matrix_data(psb_n_row_),desc_p%matrix_data(psb_n_col_)
if(debug) write(0,*) me,' From bldext:',desc_p%matrix_data(psb_n_row_),desc_p%matrix_data(psb_n_col_)
n_row = desc_p%matrix_data(psb_n_row_)
@ -226,7 +226,7 @@ Subroutine psb_zasmatbld(ptype,novr,a,blk,desc_data,upd,desc_p,info,outfmt)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -270,7 +270,7 @@ subroutine psb_zbaseprc_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
9999 continue
call psb_errpush(info,name,i_err=int_err,a_err=ch_err)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -252,7 +252,7 @@ subroutine psb_zbaseprc_bld(a,desc_a,p,info,upd)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -260,7 +260,7 @@ subroutine psb_zbjac_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
9999 continue
call psb_errpush(info,name,i_err=int_err,a_err=ch_err)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -88,7 +88,7 @@ subroutine psb_zbldaggrmat(a,desc_a,ac,desc_ac,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -323,7 +323,7 @@ contains
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -1027,7 +1027,7 @@ contains
9999 continue
call psb_errpush(info,name)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -154,7 +154,7 @@ subroutine psb_zdiagsc_bld(a,desc_a,p,upd,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -283,7 +283,7 @@ subroutine psb_zgenaggrmap(aggr_type,a,desc_a,nlaggr,ilaggr,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -352,7 +352,7 @@ subroutine psb_zilu_bld(a,desc_a,p,upd,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -119,7 +119,7 @@ subroutine psb_zilu_fct(a,l,u,d,info,blck)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -463,7 +463,7 @@ contains
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -750,7 +750,7 @@ subroutine psb_zmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
9999 continue
call psb_errpush(info,name)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -189,7 +189,7 @@ subroutine psb_zmlprc_bld(a,desc_a,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -134,7 +134,7 @@ subroutine psb_zprc_aply(prec,x,y,desc_data,info,trans, work)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -239,7 +239,7 @@ subroutine psb_zprc_aply1(prec,x,desc_data,info,trans)
9999 continue
call psb_errpush(info,name)
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -144,7 +144,7 @@ subroutine psb_zprecbld(a,desc_a,p,info,upd)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -65,7 +65,7 @@ subroutine psb_zprecfree(p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -194,7 +194,7 @@ subroutine psb_zslu_bld(a,desc_a,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -352,7 +352,7 @@ subroutine psb_zsp_renum(a,desc_a,blck,p,atmp,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if
@ -447,7 +447,7 @@ contains
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

@ -199,7 +199,7 @@ subroutine psb_zumf_bld(a,desc_a,p,info)
9999 continue
call psb_erractionrestore(err_act)
if (err_act.eq.act_abort) then
if (err_act.eq.psb_act_abort_) then
call psb_error()
return
end if

Loading…
Cancel
Save