Reorganized directory structure and build process.
parent
15f2102d4a
commit
408386cd11
@ -0,0 +1,37 @@
|
|||||||
|
##########################################################
|
||||||
|
# #
|
||||||
|
# Note: directories external to the MLD2P4 subtree #
|
||||||
|
# must be specified here with absolute pathnames #
|
||||||
|
# #
|
||||||
|
##########################################################
|
||||||
|
PSBLASDIR=$(HOME)/NUMERICAL/PSBLAS2/psblas2-dev
|
||||||
|
include $(PSBLASDIR)/Make.inc
|
||||||
|
|
||||||
|
##########################################################
|
||||||
|
# #
|
||||||
|
# Additional defines and libraries for multilevel #
|
||||||
|
# Note that these libraries should be compatible #
|
||||||
|
# (compiled with) the compilers specified in the #
|
||||||
|
# PSBLAS main Make.inc #
|
||||||
|
# #
|
||||||
|
# #
|
||||||
|
##########################################################
|
||||||
|
SLUINCDIR=/usr/local/SuperLU_3.0
|
||||||
|
SLULIBDIR=/usr/local/SuperLU_3.0
|
||||||
|
SLU=-lslu_lx_gcc42 -L$(SLULIBDIR)
|
||||||
|
#SLUDistLIBDIR=/usr/local/SLUDist_2.0
|
||||||
|
#SLUDistINCDIR=/usr/local/SLUDist_2.0
|
||||||
|
#SLUDist=-lslud-gcc42 -L$(SLUDistLIBDIR) -L $(HOME)/LIB
|
||||||
|
#SLUDISTDEF=-DHave_SLUDist_ -I$(SLUDistINCDIR)
|
||||||
|
SLUDEF=-DHave_SLU_ -I$(SLUINCDIR)
|
||||||
|
|
||||||
|
|
||||||
|
UMFINCDIR=$(HOME)/LIB/Umfpack_gcc41
|
||||||
|
UMFLIBDIR=$(HOME)/LIB/Umfpack_gcc41
|
||||||
|
UMF=-lumfpack -lamd -L$(UMFLIBDIR)
|
||||||
|
UMFDEF=-DHave_UMF_ -I$(UMFINCDIR)
|
||||||
|
|
||||||
|
LDLIBS=$(BLACS) $(SLU) $(SLUDist) $(UMF) $(BLAS) $(METIS_LIB)
|
||||||
|
|
||||||
|
# Add -DLargeFptr for 64-bit addresses
|
||||||
|
CDEFINES=-DAdd_ $(SLUDEF) $(UMFDEF) $(SLUDISTDEF)
|
@ -1,51 +1,18 @@
|
|||||||
PSBLASDIR=../psblas2
|
include Make.inc
|
||||||
|
|
||||||
include $(PSBLASDIR)/Make.inc
|
lib: mlp kryl
|
||||||
LIBDIR=$(PSBLASDIR)/lib
|
|
||||||
HERE=.
|
mlp:
|
||||||
FINCLUDES=$(FMFLAG)$(LIBDIR) $(FMFLAG).
|
(cd mlprec; make lib)
|
||||||
|
kryl:
|
||||||
|
(cd krylov; make symlink)
|
||||||
MODOBJS=mld_prec_type.o mld_prec_mod.o psb_prec_mod.o
|
(cd krylov; make lib)
|
||||||
MPFOBJS=mld_daggrmat_raw_asb.o mld_daggrmat_smth_asb.o \
|
veryclean:
|
||||||
mld_zaggrmat_raw_asb.o mld_zaggrmat_smth_asb.o
|
(cd mlprec; make veryclean)
|
||||||
MPCOBJS=mld_slud_impl.o mld_zslud_impl.o
|
(cd krylov; make veryclean)
|
||||||
F90OBJS=mld_dasmat_bld.o mld_dslu_bld.o mld_dumf_bld.o mld_dilu_fct.o\
|
/bin/rm -f $(OBJS) $(LOCAL_MODS)
|
||||||
mld_dmlprec_bld.o mld_dsp_renum.o mld_dbjac_bld.o mld_dilu_bld.o \
|
|
||||||
mld_dprecbld.o mld_dprecfree.o mld_dprecset.o mld_dprecinit.o\
|
|
||||||
mld_dbaseprec_bld.o mld_ddiagsc_bld.o mld_daggrmap_bld.o \
|
|
||||||
mld_dprec_aply.o mld_dmlprec_aply.o mld_dslud_bld.o\
|
|
||||||
mld_dbaseprec_aply.o mld_dbjac_aply.o mld_daggrmat_asb.o \
|
|
||||||
mld_zasmat_bld.o mld_zslu_bld.o mld_zumf_bld.o mld_zilu_fct.o\
|
|
||||||
mld_zmlprec_bld.o mld_zsp_renum.o mld_zbjac_bld.o mld_zilu_bld.o \
|
|
||||||
mld_zprecbld.o mld_zprecfree.o mld_zprecset.o mld_zprecinit.o \
|
|
||||||
mld_zbaseprec_bld.o mld_zdiagsc_bld.o mld_zaggrmap_bld.o \
|
|
||||||
mld_zprec_aply.o mld_zmlprec_aply.o mld_zslud_bld.o\
|
|
||||||
mld_zbaseprec_aply.o mld_zbjac_aply.o mld_zaggrmat_asb.o\
|
|
||||||
$(MPFOBJS)
|
|
||||||
COBJS=mld_slu_impl.o mld_umf_impl.o mld_zslu_impl.o mld_zumf_impl.o
|
|
||||||
OBJS=$(F90OBJS) $(COBJS) $(MPFOBJS) $(MPCOBJS) $(MODOBJS)
|
|
||||||
|
|
||||||
LIBMOD=psb_prec_mod$(.mod)
|
|
||||||
LOCAL_MODS=$(LIBMOD) mld_prec_type$(.mod) mld_prec_mod$(.mod)
|
|
||||||
LIBNAME=$(PRECLIBNAME)
|
|
||||||
|
|
||||||
lib: mpobjs $(OBJS)
|
|
||||||
$(AR) $(HERE)/$(LIBNAME) $(OBJS)
|
|
||||||
$(RANLIB) $(HERE)/$(LIBNAME)
|
|
||||||
/bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR)
|
|
||||||
/bin/cp -p $(LIBMOD) $(LOCAL_MODS) $(LIBDIR)
|
|
||||||
|
|
||||||
$(F90OBJS) $(MPFOBJS): $(MODOBJS)
|
|
||||||
psb_prec_mod.o: mld_prec_mod.o
|
|
||||||
mld_prec_mod.o: mld_prec_type.o
|
|
||||||
|
|
||||||
mpobjs:
|
|
||||||
(make $(MPFOBJS) F90="$(MPF90)" F90COPT="$(F90COPT)")
|
|
||||||
(make $(MPCOBJS) CC="$(MPCC)" CCOPT="$(CCOPT)")
|
|
||||||
|
|
||||||
veryclean: clean
|
|
||||||
/bin/rm -f $(LIBNAME)
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
(cd mlprec; make clean)
|
||||||
|
(cd krylov; make clean)
|
||||||
/bin/rm -f $(OBJS) $(LOCAL_MODS)
|
/bin/rm -f $(OBJS) $(LOCAL_MODS)
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
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_dgmresr.o\
|
||||||
|
psb_zcgstab.o psb_zcgs.o psb_zgmresr.o
|
||||||
|
|
||||||
|
LIBMOD=psb_krylov_mod$(.mod)
|
||||||
|
MODOBJS=$(LIBMOD:$(.mod)=.o)
|
||||||
|
LOCAL_MODS=psb_prec_mod$(.mod)
|
||||||
|
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
|
||||||
|
|
||||||
|
symlink:
|
||||||
|
(/bin/ln -fs $(PSBKRYLDIR)/*.f90 . )
|
||||||
|
(/bin/ln -fs $(PSBKRYLDIR)/*.F90 . )
|
||||||
|
|
||||||
|
mld_krylov_mod.o: mld_krylov_mod.f90 $(LIBDIR)/mld_prec_mod$(.mod)
|
||||||
|
$(F90) $(F90COPT) $(FINCLUDES) -c $<
|
||||||
|
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)
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for file in $*
|
||||||
|
do
|
||||||
|
if [ -L $file ]
|
||||||
|
then
|
||||||
|
/bin/rm -f $file
|
||||||
|
fi
|
||||||
|
done
|
@ -0,0 +1,354 @@
|
|||||||
|
!!$
|
||||||
|
!!$ Parallel Sparse BLAS v2.0
|
||||||
|
!!$ (C) Copyright 2006 Salvatore Filippone University of Rome Tor Vergata
|
||||||
|
!!$ Alfredo Buttari University of Rome Tor Vergata
|
||||||
|
!!$
|
||||||
|
!!$ 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 PSBLAS 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 PSBLAS 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.
|
||||||
|
!!$
|
||||||
|
!!$
|
||||||
|
!
|
||||||
|
! This is a partial duplication of material already present in the Krylov
|
||||||
|
! part of the PSBLAS subtree. This is not as bad as it sounds, since
|
||||||
|
! 1. There is no actual computation here, these are just wrappers around
|
||||||
|
! the actual methods, so very little code is necessary;
|
||||||
|
! 2. Changing the wrappers enables issuing error messages with a subroutine
|
||||||
|
! name coherent with what the user sees;
|
||||||
|
! 3. At the very least we would need a layer renaming the PSBLAS krylov interfaces,
|
||||||
|
! so we are doing approx. the same amount of (re)coding.
|
||||||
|
!
|
||||||
|
Module mld_krylov_mod
|
||||||
|
|
||||||
|
|
||||||
|
interface mld_krylov
|
||||||
|
module procedure mld_dkrylov, mld_zkrylov
|
||||||
|
end interface
|
||||||
|
|
||||||
|
interface psb_cg
|
||||||
|
subroutine psb_dcg(a,prec,b,x,eps,&
|
||||||
|
& desc_a,info,itmax,iter,err,itrace,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
type(psb_dspmat_type), intent(in) :: a
|
||||||
|
type(psb_desc_type), intent(in) :: desc_a
|
||||||
|
real(kind(1.d0)), intent(in) :: b(:)
|
||||||
|
real(kind(1.d0)), intent(inout) :: x(:)
|
||||||
|
real(kind(1.d0)), intent(in) :: eps
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
integer, intent(out) :: info
|
||||||
|
integer, optional, intent(in) :: itmax, itrace,istop
|
||||||
|
integer, optional, intent(out) :: iter
|
||||||
|
real(kind(1.d0)), optional, intent(out) :: err
|
||||||
|
end subroutine psb_dcg
|
||||||
|
end interface
|
||||||
|
|
||||||
|
interface psb_bicg
|
||||||
|
subroutine psb_dbicg(a,prec,b,x,eps,&
|
||||||
|
& desc_a,info,itmax,iter,err,itrace,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
type(psb_dspmat_type), intent(in) :: a
|
||||||
|
type(psb_desc_type), intent(in) :: desc_a
|
||||||
|
real(kind(1.d0)), intent(in) :: b(:)
|
||||||
|
real(kind(1.d0)), intent(inout) :: x(:)
|
||||||
|
real(kind(1.d0)), intent(in) :: eps
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
integer, intent(out) :: info
|
||||||
|
integer, optional, intent(in) :: itmax, itrace,istop
|
||||||
|
integer, optional, intent(out) :: iter
|
||||||
|
real(kind(1.d0)), optional, intent(out) :: err
|
||||||
|
end subroutine psb_dbicg
|
||||||
|
end interface
|
||||||
|
|
||||||
|
interface psb_bicgstab
|
||||||
|
subroutine psb_dcgstab(a,prec,b,x,eps,&
|
||||||
|
& desc_a,info,itmax,iter,err,itrace,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
type(psb_dspmat_type), intent(in) :: a
|
||||||
|
type(psb_desc_type), intent(in) :: desc_a
|
||||||
|
real(kind(1.d0)), intent(in) :: b(:)
|
||||||
|
real(kind(1.d0)), intent(inout) :: x(:)
|
||||||
|
real(kind(1.d0)), intent(in) :: eps
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
integer, intent(out) :: info
|
||||||
|
integer, optional, intent(in) :: itmax, itrace,istop
|
||||||
|
integer, optional, intent(out) :: iter
|
||||||
|
real(kind(1.d0)), optional, intent(out) :: err
|
||||||
|
end subroutine psb_dcgstab
|
||||||
|
subroutine psb_zcgstab(a,prec,b,x,eps,&
|
||||||
|
& desc_a,info,itmax,iter,err,itrace,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
type(psb_zspmat_type), intent(in) :: a
|
||||||
|
type(psb_desc_type), intent(in) :: desc_a
|
||||||
|
complex(kind(1.d0)), intent(in) :: b(:)
|
||||||
|
complex(kind(1.d0)), intent(inout) :: x(:)
|
||||||
|
real(kind(1.d0)), intent(in) :: eps
|
||||||
|
type(psb_zprec_type), intent(in) :: prec
|
||||||
|
integer, intent(out) :: info
|
||||||
|
integer, optional, intent(in) :: itmax, itrace,istop
|
||||||
|
integer, optional, intent(out) :: iter
|
||||||
|
real(kind(1.d0)), optional, intent(out) :: err
|
||||||
|
end subroutine psb_zcgstab
|
||||||
|
end interface
|
||||||
|
|
||||||
|
interface psb_bicgstabl
|
||||||
|
Subroutine psb_dcgstabl(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err, itrace,irst,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
Type(psb_dspmat_type), Intent(in) :: a
|
||||||
|
Type(psb_desc_type), Intent(in) :: desc_a
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: b(:)
|
||||||
|
Real(Kind(1.d0)), Intent(inout) :: x(:)
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: eps
|
||||||
|
integer, intent(out) :: info
|
||||||
|
Integer, Optional, Intent(in) :: itmax, itrace, irst,istop
|
||||||
|
Integer, Optional, Intent(out) :: iter
|
||||||
|
Real(Kind(1.d0)), Optional, Intent(out) :: err
|
||||||
|
end subroutine psb_dcgstabl
|
||||||
|
end interface
|
||||||
|
|
||||||
|
interface psb_rgmres
|
||||||
|
Subroutine psb_dgmresr(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,irst,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
Type(psb_dspmat_type), Intent(in) :: a
|
||||||
|
Type(psb_desc_type), Intent(in) :: desc_a
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: b(:)
|
||||||
|
Real(Kind(1.d0)), Intent(inout) :: x(:)
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: eps
|
||||||
|
integer, intent(out) :: info
|
||||||
|
Integer, Optional, Intent(in) :: itmax, itrace, irst,istop
|
||||||
|
Integer, Optional, Intent(out) :: iter
|
||||||
|
Real(Kind(1.d0)), Optional, Intent(out) :: err
|
||||||
|
end subroutine psb_dgmresr
|
||||||
|
Subroutine psb_zgmresr(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,irst,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
Type(psb_zspmat_type), Intent(in) :: a
|
||||||
|
Type(psb_desc_type), Intent(in) :: desc_a
|
||||||
|
type(psb_zprec_type), intent(in) :: prec
|
||||||
|
complex(Kind(1.d0)), Intent(in) :: b(:)
|
||||||
|
complex(Kind(1.d0)), Intent(inout) :: x(:)
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: eps
|
||||||
|
integer, intent(out) :: info
|
||||||
|
Integer, Optional, Intent(in) :: itmax, itrace, irst,istop
|
||||||
|
Integer, Optional, Intent(out) :: iter
|
||||||
|
Real(Kind(1.d0)), Optional, Intent(out) :: err
|
||||||
|
end subroutine psb_zgmresr
|
||||||
|
end interface
|
||||||
|
|
||||||
|
interface psb_cgs
|
||||||
|
subroutine psb_dcgs(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
type(psb_dspmat_type), intent(in) :: a
|
||||||
|
type(psb_desc_type), intent(in) :: desc_a
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
real(kind(1.d0)), intent(in) :: b(:)
|
||||||
|
real(kind(1.d0)), intent(inout) :: x(:)
|
||||||
|
real(kind(1.d0)), intent(in) :: eps
|
||||||
|
integer, intent(out) :: info
|
||||||
|
integer, optional, intent(in) :: itmax, itrace,istop
|
||||||
|
integer, optional, intent(out) :: iter
|
||||||
|
real(kind(1.d0)), optional, intent(out) :: err
|
||||||
|
end subroutine psb_dcgs
|
||||||
|
subroutine psb_zcgs(a,prec,b,x,eps,&
|
||||||
|
& desc_a,info,itmax,iter,err,itrace,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
type(psb_zspmat_type), intent(in) :: a
|
||||||
|
type(psb_desc_type), intent(in) :: desc_a
|
||||||
|
complex(kind(1.d0)), intent(in) :: b(:)
|
||||||
|
complex(kind(1.d0)), intent(inout) :: x(:)
|
||||||
|
real(kind(1.d0)), intent(in) :: eps
|
||||||
|
type(psb_zprec_type), intent(in) :: prec
|
||||||
|
integer, intent(out) :: info
|
||||||
|
integer, optional, intent(in) :: itmax, itrace,istop
|
||||||
|
integer, optional, intent(out) :: iter
|
||||||
|
real(kind(1.d0)), optional, intent(out) :: err
|
||||||
|
end subroutine psb_zcgs
|
||||||
|
end interface
|
||||||
|
|
||||||
|
contains
|
||||||
|
|
||||||
|
|
||||||
|
Subroutine mld_dkrylov(method,a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,irst,istop)
|
||||||
|
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
|
||||||
|
character(len=*) :: method
|
||||||
|
Type(psb_dspmat_type), Intent(in) :: a
|
||||||
|
Type(psb_desc_type), Intent(in) :: desc_a
|
||||||
|
type(psb_dprec_type), intent(in) :: prec
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: b(:)
|
||||||
|
Real(Kind(1.d0)), Intent(inout) :: x(:)
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: eps
|
||||||
|
integer, intent(out) :: info
|
||||||
|
Integer, Optional, Intent(in) :: itmax, itrace, irst,istop
|
||||||
|
Integer, Optional, Intent(out) :: iter
|
||||||
|
Real(Kind(1.d0)), Optional, Intent(out) :: err
|
||||||
|
|
||||||
|
integer :: ictxt,me,np,err_act
|
||||||
|
character(len=20) :: name
|
||||||
|
|
||||||
|
info = 0
|
||||||
|
name = 'mld_krylov'
|
||||||
|
call psb_erractionsave(err_act)
|
||||||
|
|
||||||
|
ictxt=psb_cd_get_context(desc_a)
|
||||||
|
|
||||||
|
call psb_info(ictxt, me, np)
|
||||||
|
|
||||||
|
select case(toupper(method))
|
||||||
|
case('CG')
|
||||||
|
call psb_cg(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
case('CGS')
|
||||||
|
call psb_cgs(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
case('BICG')
|
||||||
|
call psb_bicg(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
case('BICGSTAB')
|
||||||
|
call psb_bicgstab(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
case('RGMRES')
|
||||||
|
call psb_rgmres(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,irst,istop)
|
||||||
|
case('BICGSTABL')
|
||||||
|
call psb_bicgstabl(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,irst,istop)
|
||||||
|
case default
|
||||||
|
if (me==0) write(0,*) 'Warning: Unknown method ',method,&
|
||||||
|
& ' in ',name,' defaulting to BiCGSTAB'
|
||||||
|
call psb_bicgstab(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
end select
|
||||||
|
|
||||||
|
if(info/=0) then
|
||||||
|
call psb_errpush(info,name)
|
||||||
|
goto 9999
|
||||||
|
end if
|
||||||
|
|
||||||
|
call psb_erractionrestore(err_act)
|
||||||
|
return
|
||||||
|
|
||||||
|
9999 continue
|
||||||
|
call psb_erractionrestore(err_act)
|
||||||
|
if (err_act.eq.psb_act_abort_) then
|
||||||
|
call psb_error(ictxt)
|
||||||
|
return
|
||||||
|
end if
|
||||||
|
|
||||||
|
end subroutine mld_dkrylov
|
||||||
|
|
||||||
|
|
||||||
|
Subroutine mld_zkrylov(method,a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,irst,istop)
|
||||||
|
use psb_base_mod
|
||||||
|
use psb_prec_mod
|
||||||
|
character(len=*) :: method
|
||||||
|
Type(psb_zspmat_type), Intent(in) :: a
|
||||||
|
Type(psb_desc_type), Intent(in) :: desc_a
|
||||||
|
type(psb_zprec_type), intent(in) :: prec
|
||||||
|
complex(Kind(1.d0)), Intent(in) :: b(:)
|
||||||
|
complex(Kind(1.d0)), Intent(inout) :: x(:)
|
||||||
|
Real(Kind(1.d0)), Intent(in) :: eps
|
||||||
|
integer, intent(out) :: info
|
||||||
|
Integer, Optional, Intent(in) :: itmax, itrace, irst,istop
|
||||||
|
Integer, Optional, Intent(out) :: iter
|
||||||
|
Real(Kind(1.d0)), Optional, Intent(out) :: err
|
||||||
|
|
||||||
|
integer :: ictxt,me,np,err_act
|
||||||
|
character(len=20) :: name
|
||||||
|
|
||||||
|
info = 0
|
||||||
|
name = 'mld_krylov'
|
||||||
|
call psb_erractionsave(err_act)
|
||||||
|
|
||||||
|
|
||||||
|
ictxt=psb_cd_get_context(desc_a)
|
||||||
|
|
||||||
|
call psb_info(ictxt, me, np)
|
||||||
|
|
||||||
|
|
||||||
|
select case(toupper(method))
|
||||||
|
!!$ case('CG')
|
||||||
|
!!$ call psb_cg(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
!!$ &itmax,iter,err,itrace,istop)
|
||||||
|
case('CGS')
|
||||||
|
call psb_cgs(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
!!$ case('BICG')
|
||||||
|
!!$ call psb_bicg(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
!!$ &itmax,iter,err,itrace,istop)
|
||||||
|
case('BICGSTAB')
|
||||||
|
call psb_bicgstab(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
& itmax,iter,err,itrace,istop)
|
||||||
|
case('RGMRES')
|
||||||
|
call psb_rgmres(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
& itmax,iter,err,itrace,irst,istop)
|
||||||
|
!!$ case('BICGSTABL')
|
||||||
|
!!$ call psb_bicgstabl(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
!!$ &itmax,iter,err,itrace,irst,istop)
|
||||||
|
case default
|
||||||
|
if (me==0) write(0,*) 'Warning: Unknown method ',method,&
|
||||||
|
& ' in ',name,' defaulting to BiCGSTAB'
|
||||||
|
call psb_bicgstab(a,prec,b,x,eps,desc_a,info,&
|
||||||
|
&itmax,iter,err,itrace,istop)
|
||||||
|
end select
|
||||||
|
|
||||||
|
if(info/=0) then
|
||||||
|
call psb_errpush(info,name)
|
||||||
|
goto 9999
|
||||||
|
end if
|
||||||
|
|
||||||
|
call psb_erractionrestore(err_act)
|
||||||
|
return
|
||||||
|
|
||||||
|
9999 continue
|
||||||
|
call psb_erractionrestore(err_act)
|
||||||
|
if (err_act.eq.psb_act_abort_) then
|
||||||
|
call psb_error(ictxt)
|
||||||
|
return
|
||||||
|
end if
|
||||||
|
|
||||||
|
end subroutine mld_zkrylov
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end module mld_krylov_mod
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
|||||||
|
include ../Make.inc
|
||||||
|
LIBDIR=../lib
|
||||||
|
PSBLIBDIR=$(PSBLASDIR)/lib
|
||||||
|
HERE=.
|
||||||
|
|
||||||
|
FINCLUDES=$(FMFLAG). $(FMFLAG)$(LIBDIR) $(FMFLAG)$(PSBLIBDIR)
|
||||||
|
|
||||||
|
|
||||||
|
MODOBJS=mld_prec_type.o mld_prec_mod.o
|
||||||
|
MPFOBJS=mld_daggrmat_raw_asb.o mld_daggrmat_smth_asb.o \
|
||||||
|
mld_zaggrmat_raw_asb.o mld_zaggrmat_smth_asb.o
|
||||||
|
MPCOBJS=mld_slud_impl.o mld_zslud_impl.o
|
||||||
|
F90OBJS=mld_dasmat_bld.o mld_dslu_bld.o mld_dumf_bld.o mld_dilu_fct.o\
|
||||||
|
mld_dmlprec_bld.o mld_dsp_renum.o mld_dbjac_bld.o mld_dilu_bld.o \
|
||||||
|
mld_dprecbld.o mld_dprecfree.o mld_dprecset.o mld_dprecinit.o\
|
||||||
|
mld_dbaseprec_bld.o mld_ddiagsc_bld.o mld_daggrmap_bld.o \
|
||||||
|
mld_dprec_aply.o mld_dmlprec_aply.o mld_dslud_bld.o\
|
||||||
|
mld_dbaseprec_aply.o mld_dbjac_aply.o mld_daggrmat_asb.o \
|
||||||
|
mld_zasmat_bld.o mld_zslu_bld.o mld_zumf_bld.o mld_zilu_fct.o\
|
||||||
|
mld_zmlprec_bld.o mld_zsp_renum.o mld_zbjac_bld.o mld_zilu_bld.o \
|
||||||
|
mld_zprecbld.o mld_zprecfree.o mld_zprecset.o mld_zprecinit.o \
|
||||||
|
mld_zbaseprec_bld.o mld_zdiagsc_bld.o mld_zaggrmap_bld.o \
|
||||||
|
mld_zprec_aply.o mld_zmlprec_aply.o mld_zslud_bld.o\
|
||||||
|
mld_zbaseprec_aply.o mld_zbjac_aply.o mld_zaggrmat_asb.o\
|
||||||
|
$(MPFOBJS)
|
||||||
|
COBJS=mld_slu_impl.o mld_umf_impl.o mld_zslu_impl.o mld_zumf_impl.o
|
||||||
|
OBJS=$(F90OBJS) $(COBJS) $(MPFOBJS) $(MPCOBJS) $(MODOBJS)
|
||||||
|
|
||||||
|
LIBMOD=mld_prec_mod$(.mod)
|
||||||
|
LOCAL_MODS=$(LIBMOD) mld_prec_type$(.mod)
|
||||||
|
LIBNAME=libmld_prec.a
|
||||||
|
|
||||||
|
lib: mpobjs $(OBJS)
|
||||||
|
$(AR) $(HERE)/$(LIBNAME) $(OBJS)
|
||||||
|
$(RANLIB) $(HERE)/$(LIBNAME)
|
||||||
|
/bin/cp -p $(HERE)/$(LIBNAME) $(LIBDIR)
|
||||||
|
/bin/cp -p $(LIBMOD) $(LOCAL_MODS) $(LIBDIR)
|
||||||
|
|
||||||
|
$(F90OBJS) $(MPFOBJS): $(MODOBJS)
|
||||||
|
psb_prec_mod.o: mld_prec_mod.o
|
||||||
|
mld_prec_mod.o: mld_prec_type.o
|
||||||
|
|
||||||
|
mpobjs:
|
||||||
|
(make $(MPFOBJS) F90="$(MPF90)" F90COPT="$(F90COPT)")
|
||||||
|
(make $(MPCOBJS) CC="$(MPCC)" CCOPT="$(CCOPT)")
|
||||||
|
|
||||||
|
veryclean: clean
|
||||||
|
/bin/rm -f $(LIBNAME)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
/bin/rm -f $(OBJS) $(LOCAL_MODS)
|
Loading…
Reference in New Issue