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 $(PSBLASDIR)/Make.inc
|
||||
LIBDIR=$(PSBLASDIR)/lib
|
||||
HERE=.
|
||||
FINCLUDES=$(FMFLAG)$(LIBDIR) $(FMFLAG).
|
||||
|
||||
|
||||
MODOBJS=mld_prec_type.o mld_prec_mod.o psb_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=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)
|
||||
include Make.inc
|
||||
|
||||
lib: mlp kryl
|
||||
|
||||
mlp:
|
||||
(cd mlprec; make lib)
|
||||
kryl:
|
||||
(cd krylov; make symlink)
|
||||
(cd krylov; make lib)
|
||||
veryclean:
|
||||
(cd mlprec; make veryclean)
|
||||
(cd krylov; make veryclean)
|
||||
/bin/rm -f $(OBJS) $(LOCAL_MODS)
|
||||
|
||||
clean:
|
||||
(cd mlprec; make clean)
|
||||
(cd krylov; make clean)
|
||||
/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