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) call p%precv(ilev_)%set(what,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
else if (ilev_ > 1) then else if (ilev_ > 1) then
@ -221,8 +220,7 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
end if end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
endif endif
@ -320,8 +318,9 @@ subroutine mld_cprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if end if
case default case default
write(0,*) name,': Error: invalid WHAT' do ilev_=1,nlev_
info = -2 call p%precv(ilev_)%set(what,val,info)
end do
end select end select
endif endif
@ -810,30 +809,7 @@ subroutine mld_cprecsetr(p,what,val,info,ilev)
! !
if (present(ilev)) then if (present(ilev)) then
if (ilev_ == 1) then call p%precv(ilev_)%set(what,val,info)
!
! 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 else if (.not.present(ilev)) then
! !
@ -841,26 +817,15 @@ subroutine mld_cprecsetr(p,what,val,info,ilev)
! !
select case(what) 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_) case(mld_coarse_iluthrs_)
ilev_=nlev_ ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info) call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_) case default
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) do ilev_=1,nlev_
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
end do end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select end select
endif endif

@ -149,8 +149,7 @@ subroutine mld_dprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
else if (ilev_ > 1) then else if (ilev_ > 1) then
@ -226,8 +225,7 @@ subroutine mld_dprecseti(p,what,val,info,ilev)
end if end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
endif endif
@ -327,8 +325,9 @@ subroutine mld_dprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if end if
case default case default
write(0,*) name,': Error: invalid WHAT' do ilev_=1,nlev_
info = -2 call p%precv(ilev_)%set(what,val,info)
end do
end select end select
endif endif
@ -350,7 +349,7 @@ contains
select type (sm => level%sm) select type (sm => level%sm)
type is (mld_d_base_smoother_type) type is (mld_d_base_smoother_type)
! do nothing ! do nothing
class default class default
call level%sm%free(info) call level%sm%free(info)
if (info == 0) deallocate(level%sm) if (info == 0) deallocate(level%sm)
if (info == 0) allocate(mld_d_base_smoother_type ::& if (info == 0) allocate(mld_d_base_smoother_type ::&
@ -368,12 +367,12 @@ contains
case (mld_jac_) case (mld_jac_)
if (allocated(level%sm)) then if (allocated(level%sm)) then
select type (sm => level%sm) select type (sm => level%sm)
class is (mld_d_jac_smoother_type) class is (mld_d_jac_smoother_type)
! do nothing ! do nothing
class default class default
call level%sm%free(info) call level%sm%free(info)
if (info == 0) deallocate(level%sm) 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) & level%sm, stat=info)
if (info == 0) allocate(mld_d_diag_solver_type :: & if (info == 0) allocate(mld_d_diag_solver_type :: &
& level%sm%sv, stat=info) & level%sm%sv, stat=info)
@ -387,9 +386,9 @@ contains
case (mld_bjac_) case (mld_bjac_)
if (allocated(level%sm)) then if (allocated(level%sm)) then
select type (sm => level%sm) select type (sm => level%sm)
class is (mld_d_jac_smoother_type) class is (mld_d_jac_smoother_type)
! do nothing ! do nothing
class default class default
call level%sm%free(info) call level%sm%free(info)
if (info == 0) deallocate(level%sm) if (info == 0) deallocate(level%sm)
if (info == 0) allocate(mld_d_jac_smoother_type ::& if (info == 0) allocate(mld_d_jac_smoother_type ::&
@ -406,9 +405,9 @@ contains
case (mld_as_) case (mld_as_)
if (allocated(level%sm)) then if (allocated(level%sm)) then
select type (sm => level%sm) select type (sm => level%sm)
class is (mld_d_as_smoother_type) class is (mld_d_as_smoother_type)
! do nothing ! do nothing
class default class default
call level%sm%free(info) call level%sm%free(info)
if (info == 0) deallocate(level%sm) if (info == 0) deallocate(level%sm)
if (info == 0) allocate(mld_d_as_smoother_type ::& if (info == 0) allocate(mld_d_as_smoother_type ::&
@ -445,9 +444,9 @@ contains
case (mld_f_none_) case (mld_f_none_)
if (allocated(level%sm%sv)) then if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv) select type (sv => level%sm%sv)
class is (mld_d_id_solver_type) class is (mld_d_id_solver_type)
! do nothing ! do nothing
class default class default
call level%sm%sv%free(info) call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv) if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_id_solver_type ::& if (info == 0) allocate(mld_d_id_solver_type ::&
@ -459,9 +458,9 @@ contains
case (mld_diag_scale_) case (mld_diag_scale_)
if (allocated(level%sm%sv)) then if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv) select type (sv => level%sm%sv)
class is (mld_d_diag_solver_type) class is (mld_d_diag_solver_type)
! do nothing ! do nothing
class default class default
call level%sm%sv%free(info) call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv) if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_diag_solver_type ::& if (info == 0) allocate(mld_d_diag_solver_type ::&
@ -474,9 +473,9 @@ contains
case (mld_ilu_n_,mld_milu_n_,mld_ilu_t_) case (mld_ilu_n_,mld_milu_n_,mld_ilu_t_)
if (allocated(level%sm%sv)) then if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv) select type (sv => level%sm%sv)
class is (mld_d_ilu_solver_type) class is (mld_d_ilu_solver_type)
! do nothing ! do nothing
class default class default
call level%sm%sv%free(info) call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv) if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_ilu_solver_type ::& if (info == 0) allocate(mld_d_ilu_solver_type ::&
@ -489,9 +488,9 @@ contains
case (mld_umf_) case (mld_umf_)
if (allocated(level%sm%sv)) then if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv) select type (sv => level%sm%sv)
class is (mld_d_umf_solver_type) class is (mld_d_umf_solver_type)
! do nothing ! do nothing
class default class default
call level%sm%sv%free(info) call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv) if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_umf_solver_type ::& if (info == 0) allocate(mld_d_umf_solver_type ::&
@ -505,9 +504,9 @@ contains
case (mld_slu_) case (mld_slu_)
if (allocated(level%sm%sv)) then if (allocated(level%sm%sv)) then
select type (sv => level%sm%sv) select type (sv => level%sm%sv)
class is (mld_d_slu_solver_type) class is (mld_d_slu_solver_type)
! do nothing ! do nothing
class default class default
call level%sm%sv%free(info) call level%sm%sv%free(info)
if (info == 0) deallocate(level%sm%sv) if (info == 0) deallocate(level%sm%sv)
if (info == 0) allocate(mld_d_slu_solver_type ::& if (info == 0) allocate(mld_d_slu_solver_type ::&
@ -831,30 +830,7 @@ subroutine mld_dprecsetr(p,what,val,info,ilev)
! !
if (present(ilev)) then if (present(ilev)) then
if (ilev_ == 1) then call p%precv(ilev_)%set(what,val,info)
!
! 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 else if (.not.present(ilev)) then
! !
@ -862,26 +838,15 @@ subroutine mld_dprecsetr(p,what,val,info,ilev)
! !
select case(what) 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_) case(mld_coarse_iluthrs_)
ilev_=nlev_ ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info) call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_) case default
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) do ilev_=1,nlev_
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
end do end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select end select
endif endif

@ -146,8 +146,7 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
else if (ilev_ > 1) then else if (ilev_ > 1) then
@ -221,8 +220,7 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
end if end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
endif endif
@ -320,8 +318,9 @@ subroutine mld_sprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if end if
case default case default
write(0,*) name,': Error: invalid WHAT' do ilev_=1,nlev_
info = -2 call p%precv(ilev_)%set(what,val,info)
end do
end select end select
endif endif
@ -811,30 +810,7 @@ subroutine mld_sprecsetr(p,what,val,info,ilev)
! !
if (present(ilev)) then if (present(ilev)) then
if (ilev_ == 1) then call p%precv(ilev_)%set(what,val,info)
!
! 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 else if (.not.present(ilev)) then
! !
@ -842,26 +818,15 @@ subroutine mld_sprecsetr(p,what,val,info,ilev)
! !
select case(what) 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_) case(mld_coarse_iluthrs_)
ilev_=nlev_ ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info) call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_) case default
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) do ilev_=1,nlev_
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
end do end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select end select
endif endif

@ -150,8 +150,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
else if (ilev_ > 1) then else if (ilev_ > 1) then
@ -227,8 +226,7 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
end if end if
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
case default case default
write(0,*) name,': Error: invalid WHAT' call p%precv(ilev_)%set(what,val,info)
info = -2
end select end select
endif endif
@ -328,8 +326,9 @@ subroutine mld_zprecseti(p,what,val,info,ilev)
call p%precv(nlev_)%set(mld_sub_fillin_,val,info) call p%precv(nlev_)%set(mld_sub_fillin_,val,info)
end if end if
case default case default
write(0,*) name,': Error: invalid WHAT' do ilev_=1,nlev_
info = -2 call p%precv(ilev_)%set(what,val,info)
end do
end select end select
endif endif
@ -835,30 +834,7 @@ subroutine mld_zprecsetr(p,what,val,info,ilev)
! !
if (present(ilev)) then if (present(ilev)) then
if (ilev_ == 1) then call p%precv(ilev_)%set(what,val,info)
!
! 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 else if (.not.present(ilev)) then
! !
@ -866,26 +842,15 @@ subroutine mld_zprecsetr(p,what,val,info,ilev)
! !
select case(what) 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_) case(mld_coarse_iluthrs_)
ilev_=nlev_ ilev_=nlev_
call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info) call p%precv(ilev_)%set(mld_sub_iluthrs_,val,info)
case(mld_aggr_omega_val_) case default
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) do ilev_=1,nlev_
end do
case(mld_aggr_thresh_)
do ilev_=2,nlev_
call p%precv(ilev_)%set(what,val,info) call p%precv(ilev_)%set(what,val,info)
end do end do
case default
write(0,*) name,': Error: invalid WHAT'
info = -2
end select end select
endif endif

@ -24,9 +24,9 @@ NONSMOOTHED ! Type of aggregation: SMOOTHED NONSMOOTHED
DEC ! Type of aggregation: DEC DEC ! Type of aggregation: DEC
MULT ! Type of multilevel correction: ADD MULT MULT ! Type of multilevel correction: ADD MULT
TWOSIDE ! Side of correction PRE POST TWOSIDE (ignored for ADD) 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 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) 0 ! Coarsest-level fillin P for ILU(P) and ILU(T,P)
1.d-4 ! Coarsest-level threshold T for 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 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 NONE ! rhs | http://www.cise.ufl.edu/research/sparse/matrices/index.html
MM ! File format: MM (Matrix Market) HB (Harwell-Boeing). MM ! File format: MM (Matrix Market) HB (Harwell-Boeing).
BICGSTAB ! Iterative method: BiCGSTAB BiCG CGS RGMRES BiCGSTABL CG BICGSTAB ! Iterative method: BiCGSTAB BiCG CGS RGMRES BiCGSTABL CG
CSR ! Storage format: CSR COO JAD CSR ! Storage format: CSR COO JAD
0 ! IPART (partition method): 0 (block) 2 (graph, with Metis) 0 ! IPART (partition method): 0 (block) 2 (graph, with Metis)
2 ! ISTOPC 2 ! ISTOPC
01000 ! ITMAX 00200 ! ITMAX
-1 ! ITRACE 02 ! ITRACE
30 ! IRST (restart for RGMRES and BiCGSTABL) 30 ! IRST (restart for RGMRES and BiCGSTABL)
1.d-5 ! EPS 1.d-5 ! EPS
3L-M-RAS-I-D4 ! Longer descriptive name for preconditioner (up to 20 chars) 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 DEC ! Type of aggregation: DEC
MULT ! Type of multilevel correction: ADD MULT MULT ! Type of multilevel correction: ADD MULT
POST ! Side of multiplicative correction PRE POST TWOSIDE (ignored for ADD) 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 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) 0 ! Coarsest-level fillin P for ILU(P) and ILU(T,P)
1.d-4 ! Coarsest-level threshold T for ILU(T,P) 1.d-4 ! Coarsest-level threshold T for ILU(T,P)
4 ! Number of Jacobi sweeps for BJAC coarsest-level solver 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) call mld_precset(prec,mld_sub_iluthrs_, prec_choice%thr, info)
end if end if
call psb_set_debug_level(0)
! building the preconditioner ! building the preconditioner
t1 = psb_wtime() t1 = psb_wtime()
call mld_precbld(a,desc_a,prec,info) call mld_precbld(a,desc_a,prec,info)

Loading…
Cancel
Save