mld2p4-2:

krylov
 krylov/Makefile
 krylov/cleansymlinks
 krylov/psb_prec_mod.F90
 mlprec/mld_cprecset.F90
 mlprec/mld_dprecset.F90
 mlprec/mld_sprecset.F90
 mlprec/mld_zprecset.F90
 tests/fileread/runs/dfs.inp
 tests/fileread/runs/zfs.inp
 tests/fileread/zf_sample.f90

Fixed precset to call smoother when it does not know what is asked of
it. 
Taken out krylov subdir, does not make sense anymore.
stopcriterion
Salvatore Filippone 14 years ago
parent 2c2a166f44
commit 114a5de98a

@ -1,52 +0,0 @@
include ../Make.inc
LIBDIR=../lib
PSBLIBDIR=$(PSBLASDIR)/lib
HERE=.
#
# Don't you dare touch the include order here!
# The method source file are symlinked, so as not to duplicate
# code, and the symlinks are recompiled using the local version
# of psb_prec_mod, so that they are tricked into using the
# MLD preconditioners while believing to be using the PSB ones.
#
FINCLUDES=$(FMFLAG). $(FMFLAG)$(LIBDIR) $(FMFLAG)$(PSBLIBDIR)
PSBKRYLDIR=$(PSBLASDIR)/krylov
METHDOBJS= psb_dcgstab.o psb_dcg.o psb_dcgs.o \
psb_dbicg.o psb_dcgstabl.o psb_drgmres.o\
psb_scgstab.o psb_scg.o psb_scgs.o \
psb_sbicg.o psb_scgstabl.o psb_srgmres.o\
psb_ccgstab.o psb_ccg.o psb_ccgs.o \
psb_cbicg.o psb_ccgstabl.o psb_crgmres.o\
psb_zcgstab.o psb_zcg.o psb_zcgs.o \
psb_zbicg.o psb_zcgstabl.o psb_zrgmres.o
LIBMOD=psb_krylov_mod$(.mod) psb_prec_mod$(.mod)
MODOBJS=$(LIBMOD:$(.mod)=.o)
LOCAL_MODS=
LOCAL_OBJS=$(LOCAL_MODS:$(.mod)=.o)
OBJS=$(METHDOBJS) $(MODOBJS)
LIBNAME=libmld_krylov.a
lib: $(OBJS)
$(AR) $(HERE)/$(LIBNAME) $(OBJS)
$(RANLIB) $(HERE)/$(LIBNAME)
/bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR)
/bin/cp -p $(LIBMOD) $(LIBDIR)
$(METHDOBJS): psb_prec_mod.o psb_krylov_mod.o
symlink:
(/bin/ln -fs $(PSBKRYLDIR)/*.f90 . )
(/bin/ln -fs $(PSBKRYLDIR)/*.F90 . )
psb_krylov_mod.o: psb_krylov_mod.f90 $(LIBDIR)/mld_prec_mod$(.mod)
$(F90) $(F90COPT) $(FINCLUDES) -c $<
veryclean: clean
(sh ./cleansymlinks *f90 *F90)
/bin/rm -f $(LIBNAME)
clean:
/bin/rm -f $(OBJS) $(LOCAL_MODS) $(LIBMOD) $(LOCAL_OBJS)

@ -1,9 +0,0 @@
#!/bin/sh
for file in $*
do
if [ -L $file ]
then
/bin/rm -f $file
fi
done

@ -1,79 +0,0 @@
!!$
!!$
!!$ MLD2P4 version 2.0
!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package
!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0)
!!$
!!$ (C) Copyright 2008,2009,2010
!!$
!!$ Salvatore Filippone University of Rome Tor Vergata
!!$ Alfredo Buttari CNRS-IRIT, Toulouse
!!$ Pasqua D'Ambra ICAR-CNR, Naples
!!$ Daniela di Serafino Second University of Naples
!!$
!!$ Redistribution and use in source and binary forms, with or without
!!$ modification, are permitted provided that the following conditions
!!$ are met:
!!$ 1. Redistributions of source code must retain the above copyright
!!$ notice, this list of conditions and the following disclaimer.
!!$ 2. Redistributions in binary form must reproduce the above copyright
!!$ notice, this list of conditions, and the following disclaimer in the
!!$ documentation and/or other materials provided with the distribution.
!!$ 3. The name of the MLD2P4 group or the names of its contributors may
!!$ not be used to endorse or promote products derived from this
!!$ software without specific written permission.
!!$
!!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
!!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
!!$ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
!!$ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
!!$ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
!!$ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
!!$ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
!!$ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
!!$ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
!!$ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
!!$ POSSIBILITY OF SUCH DAMAGE.
!!$
!!$
! File: psb_prec_mod.f90.
!
! Module: psb_prec_mod
!
! This version of the preconditioner module psb_prec_mod renames "on the fly"
! the MLD2P4 preconditioner routines and data types so that the Krylov solvers
! in PSBLAS can be tricked into using the MLD2P4 versions instead of the original
! ones. Since there is no native runtime polymorphism this implies a recompilation,
! but thanks to the renaming feature of Fortran 95 (and to the compatibility of
! the calling sequences) there is no need to change the source code for the
! Krylov methods.
!
module psb_prec_mod
use mld_prec_mod, &
& psb_sbaseprec_type => mld_sbaseprec_type,&
& psb_dbaseprec_type => mld_dbaseprec_type,&
& psb_cbaseprec_type => mld_cbaseprec_type,&
& psb_zbaseprec_type => mld_zbaseprec_type,&
& psb_sprec_type => mld_sprec_type,&
& psb_dprec_type => mld_dprec_type,&
& psb_cprec_type => mld_cprec_type,&
& psb_zprec_type => mld_zprec_type,&
& psb_nullify_baseprec => mld_nullify_baseprec,&
& psb_precdescr => mld_precdescr,&
& psb_prec_short_descr => mld_prec_short_descr,&
& psb_precbld => mld_precbld, &
& psb_precinit => mld_precinit, &
& psb_precfree => mld_precfree, &
& psb_precset => mld_precset, &
& psb_precaply => mld_precaply
integer, parameter :: psb_noprec_=mld_noprec_, psb_diag_=mld_diag_,&
& psb_bjac_=mld_bjac_
interface psb_sizeof
module procedure mld_dprec_sizeof, mld_zprec_sizeof, &
& mld_dbaseprec_sizeof, mld_zbaseprec_sizeof
end interface
end module psb_prec_mod

@ -146,8 +146,7 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
else if (ilev_ > 1) then
@ -221,8 +220,7 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
endif
@ -320,8 +318,9 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
end select
endif
@ -810,57 +809,23 @@ subroutine mld_cprecsetr(p,what,val,info,ilev)
!
if (present(ilev)) then
if (ilev_ == 1) then
!
! Rules for fine level are slightly different.
!
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
else if (ilev_ > 1) then
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case(mld_aggr_omega_val_,mld_aggr_thresh_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif
else if (.not.present(ilev)) then
!
! ilev not specified: set preconditioner parameters at all the appropriate levels
!
select case(what)
case(mld_sub_iluthrs_)
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_coarse_iluthrs_)
ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
case default
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif

@ -149,8 +149,7 @@ subroutine mld_dprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
else if (ilev_ > 1) then
@ -226,8 +225,7 @@ subroutine mld_dprecseti(p,what,val,info,ilev)
end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
endif
@ -327,8 +325,9 @@ subroutine mld_dprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
end select
endif
@ -373,7 +372,7 @@ contains
class default
call level%sm%free(info)
if (info == 0) deallocate(level%sm)
if (info == 0) allocate(mld_d_jac_smoother_type :: &
n if (info == 0) allocate(mld_d_jac_smoother_type :: &
& level%sm, stat=info)
if (info == 0) allocate(mld_d_diag_solver_type :: &
& level%sm%sv, stat=info)
@ -831,57 +830,23 @@ subroutine mld_dprecsetr(p,what,val,info,ilev)
!
if (present(ilev)) then
if (ilev_ == 1) then
!
! Rules for fine level are slightly different.
!
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
else if (ilev_ > 1) then
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case(mld_aggr_omega_val_,mld_aggr_thresh_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif
else if (.not.present(ilev)) then
!
! ilev not specified: set preconditioner parameters at all the appropriate levels
!
select case(what)
case(mld_sub_iluthrs_)
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_coarse_iluthrs_)
ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
case default
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif

@ -146,8 +146,7 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
else if (ilev_ > 1) then
@ -221,8 +220,7 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
endif
@ -320,8 +318,9 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
end select
endif
@ -811,57 +810,23 @@ subroutine mld_sprecsetr(p,what,val,info,ilev)
!
if (present(ilev)) then
if (ilev_ == 1) then
!
! Rules for fine level are slightly different.
!
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
else if (ilev_ > 1) then
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case(mld_aggr_omega_val_,mld_aggr_thresh_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif
else if (.not.present(ilev)) then
!
! ilev not specified: set preconditioner parameters at all the appropriate levels
!
select case(what)
case(mld_sub_iluthrs_)
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_coarse_iluthrs_)
ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
case default
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif

@ -150,8 +150,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
else if (ilev_ > 1) then
@ -227,8 +226,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
call p%precv(ilev_)%set(what,val,info)
end select
endif
@ -328,8 +326,9 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
end select
endif
@ -835,57 +834,23 @@ subroutine mld_zprecsetr(p,what,val,info,ilev)
!
if (present(ilev)) then
if (ilev_ == 1) then
!
! Rules for fine level are slightly different.
!
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
else if (ilev_ > 1) then
select case(what)
case(mld_sub_iluthrs_)
call p%precv(ilev_)%set(what,val,info)
case(mld_aggr_omega_val_,mld_aggr_thresh_)
call p%precv(ilev_)%set(what,val,info)
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif
else if (.not.present(ilev)) then
!
! ilev not specified: set preconditioner parameters at all the appropriate levels
!
select case(what)
case(mld_sub_iluthrs_)
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_coarse_iluthrs_)
ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
case default
do ilev_=1,nlev_
call p%precv(ilev_)%set(what,val,info)
end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select
endif

@ -24,9 +24,9 @@ NONSMOOTHED ! Type of aggregation: SMOOTHED NONSMOOTHED
DEC ! Type of aggregation: DEC
MULT ! Type of multilevel correction: ADD MULT
TWOSIDE ! Side of correction PRE POST TWOSIDE (ignored for ADD)
DIST ! Coarsest-level matrix distribution: DIST REPL
REPL ! Coarsest-level matrix distribution: DIST REPL
BJAC ! Coarsest-level solver: JACOBI BJAC UMF SLU SLUDIST
ILU ! Coarsest-level subsolver: ILU UMF SLU SLUDIST (DSCALE for JACOBI)
UMF ! Coarsest-level subsolver: ILU UMF SLU SLUDIST (DSCALE for JACOBI)
0 ! Coarsest-level fillin P for ILU(P) and ILU(T,P)
1.d-4 ! Coarsest-level threshold T for ILU(T,P)
4 ! Number of Jacobi sweeps for BJAC/PJAC coarsest-level solver

@ -1,12 +1,12 @@
waveguide3D.mtx ! This matrix (and others) from: http://math.nist.gov/MatrixMarket/ or
young1c.mtx ! This matrix (and others) from: http://math.nist.gov/MatrixMarket/ or
NONE ! rhs | http://www.cise.ufl.edu/research/sparse/matrices/index.html
MM ! File format: MM (Matrix Market) HB (Harwell-Boeing).
BICGSTAB ! Iterative method: BiCGSTAB BiCG CGS RGMRES BiCGSTABL CG
CSR ! Storage format: CSR COO JAD
0 ! IPART (partition method): 0 (block) 2 (graph, with Metis)
2 ! ISTOPC
01000 ! ITMAX
-1 ! ITRACE
00200 ! ITMAX
02 ! ITRACE
30 ! IRST (restart for RGMRES and BiCGSTABL)
1.d-5 ! EPS
3L-M-RAS-I-D4 ! Longer descriptive name for preconditioner (up to 20 chars)
@ -24,9 +24,9 @@ SMOOTHED ! Type of aggregation: SMOOTHED NONSMOOTHED MINENERG
DEC ! Type of aggregation: DEC
MULT ! Type of multilevel correction: ADD MULT
POST ! Side of multiplicative correction PRE POST TWOSIDE (ignored for ADD)
DIST ! Coarsest-level matrix distribution: DIST REPL
REPL ! Coarsest-level matrix distribution: DIST REPL
BJAC ! Coarsest-level solver: JACOBI BJAC UMF SLU SLUDIST
ILU ! Coarsest-level subsolver: ILU UMF SLU SLUDIST (DSCALE for JACOBI)
UMF ! Coarsest-level subsolver: ILU UMF SLU SLUDIST (DSCALE for JACOBI)
0 ! Coarsest-level fillin P for ILU(P) and ILU(T,P)
1.d-4 ! Coarsest-level threshold T for ILU(T,P)
4 ! Number of Jacobi sweeps for BJAC coarsest-level solver

@ -279,6 +279,7 @@ program zf_sample
call mld_precset(prec,mld_sub_iluthrs_, prec_choice%thr, info)
end if
call psb_set_debug_level(0)
! building the preconditioner
t1 = psb_wtime()
call mld_precbld(a,desc_a,prec,info)

Loading…
Cancel
Save