From db4312151f91ddae221e160e42664a47a2003211 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 21 Apr 2006 10:48:58 +0000 Subject: [PATCH] Fixes for handling IBM SP build process. --- Make.inc.g95 | 4 +++- Make.inc.gfortran | 4 +++- Make.inc.ifc71 | 4 +++- Make.inc.ifc8 | 4 +++- Make.inc.pgf90 | 4 +++- Make.inc.rs6k | 4 ++++ src/internals/Makefile | 23 +++++++++++++---------- src/internals/krecvid.f90 | 7 +++++++ src/internals/ksendid.f90 | 7 +++++++ src/methd/Makefile | 2 +- src/methd/extra_env.f90 | 11 +++++++++++ src/methd/extra_env_essl.f90 | 13 +++++++++++++ src/methd/psb_dbicg.f90 | 9 ++++----- src/methd/psb_dcg.f90 | 7 +++---- src/methd/psb_dcgs.f90 | 9 ++++----- src/methd/psb_dcgstab.f90 | 6 ++---- src/methd/psb_dcgstabl.f90 | 9 ++++----- src/methd/psb_dgmresr.f90 | 10 +++++----- src/methd/psb_zcgs.f90 | 9 ++++----- src/methd/psb_zcgstab.f90 | 8 ++++---- src/modules/psb_realloc_mod.f90 | 2 +- src/prec/Makefile | 2 +- src/prec/psb_zbldaggrmat.f90 | 2 +- 23 files changed, 104 insertions(+), 56 deletions(-) create mode 100644 src/internals/krecvid.f90 create mode 100644 src/internals/ksendid.f90 create mode 100644 src/methd/extra_env.f90 create mode 100644 src/methd/extra_env_essl.f90 diff --git a/Make.inc.g95 b/Make.inc.g95 index 21d5c362..1c942b6b 100644 --- a/Make.inc.g95 +++ b/Make.inc.g95 @@ -17,8 +17,9 @@ CCOPT=-O3 # Define your linker and linker flags here # ########################################################## F90LINK=/usr/local/mpich-g95/bin/mpif90 -FLINK=/usr/local/mpich-g95/mpif77 +FLINK=/usr/local/mpich-g95/bin/mpif77 MPF90=/usr/local/mpich-g95/bin/mpif90 +MPF77=/usr/local/mpich-g95/bin/mpif77 MPCC=/usr/local/mpich-g95/bin/mpicc ####################### Section 3 ####################### @@ -26,6 +27,7 @@ MPCC=/usr/local/mpich-g95/bin/mpicc ########################################################## BLAS=-lblas -L$(HOME)/LIB BLACS=-lmpiblacsg95 -L$(HOME)/LIB +EXTRA_BLACS_ENV_OBJS=extra_env.o ####################### Section 4 ####################### diff --git a/Make.inc.gfortran b/Make.inc.gfortran index 8d4c334d..776fd399 100644 --- a/Make.inc.gfortran +++ b/Make.inc.gfortran @@ -18,8 +18,9 @@ CCOPT=-O3 -ffast-math -march=pentium4 -msse2 -mfpmath=sse # Define your linker and linker flags here # ########################################################## F90LINK=/usr/local/mpich-gfortran/bin/mpif90 -FLINK=/usr/local/mpich-gfortran/mpif77 +FLINK=/usr/local/mpich-gfortran/bin/mpif77 MPF90=/usr/local/mpich-gfortran/bin/mpif90 +MPF77=/usr/local/mpich-gfortran/bin/mpif77 MPCC=/usr/local/mpich-gfortran/bin/mpicc ####################### Section 3 ####################### @@ -27,6 +28,7 @@ MPCC=/usr/local/mpich-gfortran/bin/mpicc ########################################################## BLAS=-lblas-gcc41 -L$(HOME)/LIB BLACS=-lmpiblacs-gfortran -L$(HOME)/LIB +EXTRA_BLACS_ENV_OBJS=extra_env.o ####################### Section 4 ####################### diff --git a/Make.inc.ifc71 b/Make.inc.ifc71 index 8e0b735e..90a15705 100644 --- a/Make.inc.ifc71 +++ b/Make.inc.ifc71 @@ -18,8 +18,9 @@ CCOPT=-O3 # Define your linker and linker flags here # ########################################################## F90LINK=/usr/local/mpich-ifc71/bin/mpif90 -FLINK=/usr/local/mpich-ifc71/mpif77 +FLINK=/usr/local/mpich-ifc71/bin/mpif77 MPF90=/usr/local/mpich-ifc71/bin/mpif90 +MPF77=/usr/local/mpich-ifc71/bin/mpif77 MPCC=/usr/local/mpich-ifc71/bin/mpicc ####################### Section 3 ####################### @@ -27,6 +28,7 @@ MPCC=/usr/local/mpich-ifc71/bin/mpicc ########################################################## BLAS=-lblasintel -L$(HOME)/LIB BLACS=-lmpiblacsifc71 -L$(HOME)/LIB +EXTRA_BLACS_ENV_OBJS=extra_env.o ####################### Section 4 ####################### diff --git a/Make.inc.ifc8 b/Make.inc.ifc8 index 7d8e423e..26e90584 100644 --- a/Make.inc.ifc8 +++ b/Make.inc.ifc8 @@ -18,8 +18,9 @@ CCOPT=-O3 # Define your linker and linker flags here # ########################################################## F90LINK=/usr/local/mpich-ifc80/bin/mpif90 -g -CB -no_cpprt -FLINK=/usr/local/mpich-ifc80/mpif77 -g -CB -no_cpprt +FLINK=/usr/local/mpich-ifc80/bin/mpif77 -g -CB -no_cpprt MPF90=/usr/local/mpich-ifc80/bin/mpif90 -g -CB -no_cpprt +MPF77=/usr/local/mpich-ifc80/bin/mpif77 -g -CB -no_cpprt MPCC=/usr/local/mpich-ifc80/bin/mpicc -g -CB -no_cpprt ####################### Section 3 ####################### @@ -27,6 +28,7 @@ MPCC=/usr/local/mpich-ifc80/bin/mpicc -g -CB -no_cpprt ########################################################## BLAS=-lblas-intel -L$(HOME)/NUMERICAL/LIB BLACS=-lmpiblacs-intel -L$(HOME)/NUMERICAL/LIB +EXTRA_BLACS_ENV_OBJS=extra_env.o ####################### Section 4 ####################### diff --git a/Make.inc.pgf90 b/Make.inc.pgf90 index 7c4121c3..bd07db44 100644 --- a/Make.inc.pgf90 +++ b/Make.inc.pgf90 @@ -18,8 +18,9 @@ CCOPT=-O2 -g -ggdb -pg # Define your linker and linker flags here # ########################################################## F90LINK=/usr/local/mpich-pgi/bin/mpif90 -FLINK=/usr/local/mpich-pgi/mpif77 +FLINK=/usr/local/mpich-pgi/bin/mpif77 MPF90=/usr/local/mpich-pgi/bin/mpif90 +MPF77=/usr/local/mpich-pgi/bin/mpif77 MPCC=/usr/local/mpich-pgi/bin/mpicc ####################### Section 3 ####################### @@ -27,6 +28,7 @@ MPCC=/usr/local/mpich-pgi/bin/mpicc ########################################################## BLAS=-lblas-pgi -L$(HOME)/LIB BLACS=-lmpiblacs-pgi -L$(HOME)/LIB +EXTRA_BLACS_ENV_OBJS=extra_env.o ####################### Section 4 ####################### diff --git a/Make.inc.rs6k b/Make.inc.rs6k index 42e46f14..be2aa7dc 100644 --- a/Make.inc.rs6k +++ b/Make.inc.rs6k @@ -20,6 +20,7 @@ CCOPT=-O3 MPF90=mpxlf95 -qsuffix=f=f90 F90LINK=$(MPF90) FLINK=$(MPF90) +MPF77=mpxlf77 MPCC=mpxlc ####################### Section 3 ####################### @@ -27,6 +28,9 @@ MPCC=mpxlc ########################################################## BLAS=-lessl BLACS=-lmpiblacs +#These should be uncommented when using the ESSL BLACS library +#EXTRA_BLACS_P2P_OBJS= krecvid.o ksendid.o +EXTRA_BLACS_ENV_OBJS=extra_env_essl.o ####################### Section 4 ####################### diff --git a/src/internals/Makefile b/src/internals/Makefile index 0899623e..634d173d 100644 --- a/src/internals/Makefile +++ b/src/internals/Makefile @@ -2,26 +2,29 @@ include ../../Make.inc FOBJS = psi_compute_size.o psi_crea_bnd_elem.o psi_crea_index.o \ psi_crea_ovr_elem.o psi_dl_check.o \ - psi_exist_ovr_elem.o psi_gthsct.o \ - psi_list_search.o psi_sort_dl.o srtlist.o + psi_gthsct.o \ + psi_sort_dl.o $(EXTRA_BLACS_P2P_OBJS) +FOBJS2 = psi_exist_ovr_elem.o psi_list_search.o srtlist.o COBJS = avltree.o srcht.o MPFOBJS = psi_dswapdata.o psi_dswaptran.o psi_iswapdata.o \ - psi_iswaptran.o psi_extrct_dl.o psi_desc_index.o\ - psi_zswapdata.o psi_zswaptran.o + psi_iswaptran.o psi_desc_index.o \ + psi_zswapdata.o psi_zswaptran.o +MPFOBJS2 = psi_extrct_dl.o INCDIRS = -I ../../lib -I . LIBDIR = ../../lib -lib: mpfobjs $(FOBJS) $(COBJS) - $(AR) $(LIBDIR)/$(LIBNAME) $(MPFOBJS) $(FOBJS) $(COBJS) +lib: mpfobjs $(FOBJS) $(FOBJS2) $(COBJS) $(MPFOBJS2) + $(AR) $(LIBDIR)/$(LIBNAME) $(MPFOBJS) $(MPFOBJS2) $(FOBJS) $(FOBJS2) \ + $(COBJS) $(RANLIB) $(LIBDIR)/$(LIBNAME) mpfobjs: - (make $(MPFOBJS) F90="$(MPF90)" FC="$(MPF90)" FCOPT="$(F90COPT)") - - + (make $(MPFOBJS) F90="$(MPF90)" FC="$(MPF90)" FCOPT="$(F90COPT)") + (make $(MPFOBJS2) F90="$(MPF77)" FC="$(MPF77)" FCOPT="$(FCOPT)") + (make $(FOBJS2) F90="$(MPF77)" FC="$(MPF77)" FCOPT="$(FCOPT)") clean: - /bin/rm -f $(MPFOBJS) $(FOBJS) $(COBJS) + /bin/rm -f $(MPFOBJS) $(FOBJS) $(COBJS) $(FOBJS2) $(MPFOBJS2) veryclean: clean diff --git a/src/internals/krecvid.f90 b/src/internals/krecvid.f90 new file mode 100644 index 00000000..8a552d85 --- /dev/null +++ b/src/internals/krecvid.f90 @@ -0,0 +1,7 @@ + integer function krecvid(contxt,proc_to_comm,myrow) + integer contxt,proc_to_comm,myrow + + krecvid=32766 + + return + end diff --git a/src/internals/ksendid.f90 b/src/internals/ksendid.f90 new file mode 100644 index 00000000..c9c5bc48 --- /dev/null +++ b/src/internals/ksendid.f90 @@ -0,0 +1,7 @@ + integer function ksendid(contxt,proc_to_comm,myrow) + integer contxt,proc_to_comm,myrow + + ksendid=32766 + + return + end diff --git a/src/methd/Makefile b/src/methd/Makefile index 0fa70ec6..f60abbee 100644 --- a/src/methd/Makefile +++ b/src/methd/Makefile @@ -6,7 +6,7 @@ LIBDIR=../../lib HERE=. OBJS= 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_zcgstab.o psb_zcgs.o $(EXTRA_BLACS_ENV_OBJS) INCDIRS=-I. -I.. -I$(LIBDIR) diff --git a/src/methd/extra_env.f90 b/src/methd/extra_env.f90 new file mode 100644 index 00000000..cf13f79c --- /dev/null +++ b/src/methd/extra_env.f90 @@ -0,0 +1,11 @@ +subroutine psb_set_coher(icontxt,isvch) + integer :: icontxt, isvch + ! Ensure global coherence for convergence checks. + Call blacs_get(icontxt,16,isvch) + Call blacs_set(icontxt,16,1) +end subroutine psb_set_coher +subroutine psb_restore_coher(icontxt,isvch) + integer :: icontxt, isvch + ! Ensure global coherence for convergence checks. + Call blacs_set(icontxt,16,isvch) +end subroutine psb_restore_coher diff --git a/src/methd/extra_env_essl.f90 b/src/methd/extra_env_essl.f90 new file mode 100644 index 00000000..661b5628 --- /dev/null +++ b/src/methd/extra_env_essl.f90 @@ -0,0 +1,13 @@ +subroutine psb_set_coher(icontxt,isvch) + integer :: icontxt, isvch + ! Ensure global coherence for convergence checks. + ! Do nothing: ESSL does coherence by default, + ! and does not handle req=16 +!!$ Call blacs_get(icontxt,16,isvch) +!!$ Call blacs_set(icontxt,16,1) +end subroutine psb_set_coher +subroutine psb_restore_coher(icontxt,isvch) + integer :: icontxt, isvch + ! Ensure global coherence for convergence checks. +!!$ Call blacs_set(icontxt,16,isvch) +end subroutine psb_restore_coher diff --git a/src/methd/psb_dbicg.f90 b/src/methd/psb_dbicg.f90 index 62e58177..e0c3a219 100644 --- a/src/methd/psb_dbicg.f90 +++ b/src/methd/psb_dbicg.f90 @@ -127,10 +127,8 @@ subroutine psb_dbicg(a,prec,b,x,eps,desc_a,info,& n_row = desc_a%matrix_data(psb_n_row_) n_col = desc_a%matrix_data(psb_n_col_) - ! ensure global coherence for convergence checks. - call blacs_get(icontxt,16,isvch) - ich = 1 - call blacs_set(icontxt,16,ich) + ! Ensure global coherence for convergence checks. + call psb_set_coher(icontxt,isvch) if (present(istop)) then @@ -344,8 +342,9 @@ subroutine psb_dbicg(a,prec,b,x,eps,desc_a,info,& deallocate(aux) call psb_gefree(wwrk,desc_a,info) + ! restore external global coherence behaviour - call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) if(info/=0) then call psb_errpush(info,name) diff --git a/src/methd/psb_dcg.f90 b/src/methd/psb_dcg.f90 index d78b1079..bea4d478 100644 --- a/src/methd/psb_dcg.f90 +++ b/src/methd/psb_dcg.f90 @@ -178,9 +178,7 @@ Subroutine psb_dcg(a,prec,b,x,eps,desc_a,info,& itx=0 ! Ensure global coherence for convergence checks. - call blacs_get(icontxt,16,isvch) - ich = 1 - call blacs_set(icontxt,16,ich) + call psb_set_coher(icontxt,isvch) restart: do !!$ @@ -273,8 +271,9 @@ Subroutine psb_dcg(a,prec,b,x,eps,desc_a,info,& deallocate(aux) call psb_gefree(wwrk,desc_a,info) + ! restore external global coherence behaviour - call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) if (info.ne.0) then call psb_errpush(info,name) diff --git a/src/methd/psb_dcgs.f90 b/src/methd/psb_dcgs.f90 index 9415dfef..d151f1b6 100644 --- a/src/methd/psb_dcgs.f90 +++ b/src/methd/psb_dcgs.f90 @@ -186,10 +186,8 @@ Subroutine psb_dcgs(a,prec,b,x,eps,desc_a,info,& itrac = -1 End If - ! ensure global coherence for convergence checks. - Call blacs_get(icontxt,16,isvch) - ich = 1 - Call blacs_set(icontxt,16,ich) + ! Ensure global coherence for convergence checks. + call psb_set_coher(icontxt,isvch) diagl = 'u' diagu = 'u' @@ -336,8 +334,9 @@ Subroutine psb_dcgs(a,prec,b,x,eps,desc_a,info,& Deallocate(aux) Call psb_gefree(wwrk,desc_a,info) + ! restore external global coherence behaviour - Call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) if(info/=0) then call psb_errpush(info,name) diff --git a/src/methd/psb_dcgstab.f90 b/src/methd/psb_dcgstab.f90 index 46d76c9a..018c582e 100644 --- a/src/methd/psb_dcgstab.f90 +++ b/src/methd/psb_dcgstab.f90 @@ -191,9 +191,7 @@ Subroutine psb_dcgstab(a,prec,b,x,eps,desc_a,info,& diagu = 'U' ! Ensure global coherence for convergence checks. - Call blacs_get(icontxt,16,isvch) - ich = 1 - Call blacs_set(icontxt,16,ich) + call psb_set_coher(icontxt,isvch) itx = 0 @@ -391,7 +389,7 @@ Subroutine psb_dcgstab(a,prec,b,x,eps,desc_a,info,& Deallocate(aux) Call psb_gefree(wwrk,desc_a,info) ! restore external global coherence behaviour - Call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) !!$ imerr = MPE_Log_event( istpe, 0, "ed CGSTAB" ) if(info/=0) then call psb_errpush(info,name) diff --git a/src/methd/psb_dcgstabl.f90 b/src/methd/psb_dcgstabl.f90 index 150ba426..95a2260e 100644 --- a/src/methd/psb_dcgstabl.f90 +++ b/src/methd/psb_dcgstabl.f90 @@ -206,10 +206,8 @@ Subroutine psb_dcgstabl(a,prec,b,x,eps,desc_a,info,& ww => wwrk(:,9) rt0 => wwrk(:,10) - ! ensure global coherence for convergence checks. - Call blacs_get(icontxt,16,isvch) - ich = 1 - Call blacs_set(icontxt,16,ich) + ! Ensure global coherence for convergence checks. + call psb_set_coher(icontxt,isvch) if (istop_ == 1) then ani = psb_spnrmi(a,desc_a,info) @@ -400,8 +398,9 @@ Subroutine psb_dcgstabl(a,prec,b,x,eps,desc_a,info,& Call psb_gefree(wwrk,desc_a,info) Call psb_gefree(uh,desc_a,info) Call psb_gefree(rh,desc_a,info) + ! restore external global coherence behaviour - Call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) if(info/=0) then call psb_errpush(info,name) diff --git a/src/methd/psb_dgmresr.f90 b/src/methd/psb_dgmresr.f90 index 0b9f0f27..e1c5730b 100644 --- a/src/methd/psb_dgmresr.f90 +++ b/src/methd/psb_dgmresr.f90 @@ -199,10 +199,9 @@ Subroutine psb_dgmresr(a,prec,b,x,eps,desc_a,info,& End If if (debug) write(0,*) 'Size of V,W ',size(v),size(v,1),& &size(w),size(w,1), size(v(:,1)) - ! ensure global coherence for convergence checks. - Call blacs_get(icontxt,16,isvch) - ich = 1 - Call blacs_set(icontxt,16,ich) + + ! Ensure global coherence for convergence checks. + call psb_set_coher(icontxt,isvch) if (istop_ == 1) then ani = psb_spnrmi(a,desc_a,info) @@ -348,8 +347,9 @@ Subroutine psb_dgmresr(a,prec,b,x,eps,desc_a,info,& Deallocate(aux,h,c,s,rs,rr, stat=info) Call psb_gefree(v,desc_a,info) Call psb_gefree(w,desc_a,info) + ! restore external global coherence behaviour - Call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) if (info /= 0) then info=4011 diff --git a/src/methd/psb_zcgs.f90 b/src/methd/psb_zcgs.f90 index e6ce8489..9714067a 100644 --- a/src/methd/psb_zcgs.f90 +++ b/src/methd/psb_zcgs.f90 @@ -186,10 +186,8 @@ Subroutine psb_zcgs(a,prec,b,x,eps,desc_a,info,& itrac = -1 End If - ! ensure global coherence for convergence checks. - Call blacs_get(icontxt,16,isvch) - ich = 1 - Call blacs_set(icontxt,16,ich) + ! Ensure global coherence for convergence checks. + call psb_set_coher(icontxt,isvch) diagl = 'u' diagu = 'u' @@ -336,8 +334,9 @@ Subroutine psb_zcgs(a,prec,b,x,eps,desc_a,info,& Deallocate(aux) Call psb_gefree(wwrk,desc_a,info) + ! restore external global coherence behaviour - Call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) if(info/=0) then call psb_errpush(info,name) diff --git a/src/methd/psb_zcgstab.f90 b/src/methd/psb_zcgstab.f90 index 5c134576..6e7004c9 100644 --- a/src/methd/psb_zcgstab.f90 +++ b/src/methd/psb_zcgstab.f90 @@ -191,9 +191,7 @@ Subroutine psb_zcgstab(a,prec,b,x,eps,desc_a,info,& diagu = 'U' ! Ensure global coherence for convergence checks. - Call blacs_get(icontxt,16,isvch) - ich = 1 - Call blacs_set(icontxt,16,ich) + call psb_set_coher(icontxt,isvch) itx = 0 @@ -389,8 +387,10 @@ Subroutine psb_zcgstab(a,prec,b,x,eps,desc_a,info,& Deallocate(aux) Call psb_gefree(wwrk,desc_a,info) + ! restore external global coherence behaviour - Call blacs_set(icontxt,16,isvch) + call psb_restore_coher(icontxt,isvch) + !!$ imerr = MPE_Log_event( istpe, 0, "ed CGSTAB" ) if(info/=0) then call psb_errpush(info,name) diff --git a/src/modules/psb_realloc_mod.f90 b/src/modules/psb_realloc_mod.f90 index b7b1f1f4..441e3a36 100644 --- a/src/modules/psb_realloc_mod.f90 +++ b/src/modules/psb_realloc_mod.f90 @@ -69,7 +69,7 @@ Contains if(psb_get_errstatus().ne.0) return info=0 if (debug) write(0,*) 'reallocate I',len - if (associated(rrax)) then a + if (associated(rrax)) then dim=size(rrax) If (dim /= len) Then Allocate(tmp(len),stat=info) diff --git a/src/prec/Makefile b/src/prec/Makefile index 32763708..1b7c95cb 100644 --- a/src/prec/Makefile +++ b/src/prec/Makefile @@ -21,7 +21,7 @@ F90OBJS=psb_dasmatbld.o psb_dslu_bld.o psb_dumf_bld.o psb_dilu_fct.o\ COBJS=psb_slu_impl.o psb_umf_impl.o psb_zslu_impl.o psb_zumf_impl.o INCDIRS=-I. -I.. -I$(LIBDIR) -OBJS=$(F90OBJS) $(COBJS) +OBJS=$(F90OBJS) $(COBJS) $(MPFOBJS) lib: mpobjs $(OBJS) $(AR) $(LIBDIR)/$(LIBNAME) $(MPFOBJS) $(OBJS) diff --git a/src/prec/psb_zbldaggrmat.f90 b/src/prec/psb_zbldaggrmat.f90 index 1b3f1d77..09cea289 100644 --- a/src/prec/psb_zbldaggrmat.f90 +++ b/src/prec/psb_zbldaggrmat.f90 @@ -348,7 +348,7 @@ contains type(psb_zspmat_type) :: am3,am4 logical :: ml_global_nmb - logical, parameter :: test_dump=.false. + logical, parameter :: test_dump=.false., debug=.false. integer, parameter :: ncmax=16 real(kind(1.d0)) :: omega, anorm, tmp, dg character(len=20) :: name, ch_err