aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sci-chemistry/ambertools/files/ambertools-15-gentoo.patch')
-rw-r--r--sci-chemistry/ambertools/files/ambertools-15-gentoo.patch1441
1 files changed, 1441 insertions, 0 deletions
diff --git a/sci-chemistry/ambertools/files/ambertools-15-gentoo.patch b/sci-chemistry/ambertools/files/ambertools-15-gentoo.patch
new file mode 100644
index 000000000..f949a4945
--- /dev/null
+++ b/sci-chemistry/ambertools/files/ambertools-15-gentoo.patch
@@ -0,0 +1,1441 @@
+diff --git a/AmberTools/src/Makefile b/AmberTools/src/Makefile
+index 3d69773..c2a5045 100644
+--- a/AmberTools/src/Makefile
++++ b/AmberTools/src/Makefile
+@@ -15,12 +15,6 @@ install: $(INSTALLTYPE)
+ serial: configured_serial THIRDPARTY $(MTKPP)
+ @echo "Starting installation of ${AMBERTOOLS} serial at `date`".
+ # utility routines and libraries:
+- (cd ucpp-1.3 && $(MAKE) $(UCPP) )
+- (cd byacc && $(MAKE) install )
+- (cd arpack && $(MAKE) install );
+- (cd lapack && $(MAKE) $(LAPACK) )
+- (cd blas && $(MAKE) $(BLAS) )
+- (cd c9x-complex && $(MAKE) $(C9XCOMPLEX) )
+ (cd pbsa && $(MAKE) install )
+ (cd gbnsr6 && $(MAKE) install )
+ (cd cifparse && $(MAKE) install )
+@@ -33,7 +27,6 @@ serial: configured_serial THIRDPARTY $(MTKPP)
+ $(MAKE) cpptraj
+
+ # miscellaneous:
+- (cd reduce && $(MAKE) install )
+
+ # leap
+ (cd leap && $(MAKE) install )
+@@ -103,12 +96,6 @@ serial: configured_serial THIRDPARTY $(MTKPP)
+
+ nabonly: configured_serial $(XBLAS)
+ # utility routines and libraries:
+- (cd ucpp-1.3 && $(MAKE) $(UCPP) )
+- (cd byacc && $(MAKE) install )
+- (cd arpack && $(MAKE) install );
+- (cd lapack && $(MAKE) $(LAPACK) )
+- (cd blas && $(MAKE) $(BLAS) )
+- (cd c9x-complex && $(MAKE) $(C9XCOMPLEX) )
+ (cd pbsa && $(MAKE) libinstall )
+ (cd rism && $(MAKE) $(RISM) )
+ (cd cifparse && $(MAKE) install )
+@@ -144,12 +131,6 @@ parallel: configured_parallel THIRDPARTY
+ # (cd pbsa && $(MAKE) clean && $(MAKE) install.parallel )
+ (cd pbsa && $(MAKE) libinstall )
+ $(MAKE) cpptraj
+- (cd byacc && $(MAKE) install )
+- (cd ucpp-1.3 && $(MAKE) $(UCPP) )
+- (cd cifparse && $(MAKE) install )
+- (cd arpack && $(MAKE) install );
+- (cd lapack && $(MAKE) $(LAPACK) )
+- (cd blas && $(MAKE) $(BLAS) )
+ (cd mdgx && $(MAKE) $(MDGX) )
+ (if [ "$(RISM)" = "yes" ]; then \
+ cd rism && $(MAKE) install_mpi ; \
+@@ -215,18 +196,11 @@ netcdf_uninstall:
+ -/bin/rm -f netcdf_config.log ../lib/libnetcdf* ../include/netcdf.*
+
+ clean::
+- -(cd ucpp-1.3 && $(MAKE) clean )
+- -(cd byacc && $(MAKE) clean )
+- -(cd cifparse && $(MAKE) clean )
+ -(cd nab && $(MAKE) clean )
+ -(cd sff && $(MAKE) clean )
+ -(cd nss && $(MAKE) clean )
+ -(cd leap && $(MAKE) clean )
+- -(cd arpack && $(MAKE) clean )
+- -(cd blas && $(MAKE) clean )
+ -(cd xblas && $(MAKE) clean )
+- -(cd lapack && $(MAKE) clean )
+- -(cd c9x-complex && $(MAKE) clean )
+ -(cd etc && $(MAKE) clean )
+ -(cd chamber && $(MAKE) clean )
+ -(cd pbsa && $(MAKE) clean )
+@@ -236,15 +210,12 @@ clean::
+ -(cd lib && $(MAKE) clean )
+ -(cd ptraj && $(MAKE) clean )
+ -(cd cpptraj && $(MAKE) clean)
+- -(cd reduce && $(MAKE) clean )
+ -(cd mtkpp && $(MAKE) clean )
+ -(cd mdgx && $(MAKE) clean )
+ -(cd xtalutil/CPrograms && $(MAKE) clean )
+ -(cd saxs && $(MAKE) clean )
+ -(cd paramfit && $(MAKE) clean )
+ -(cd rism && $(MAKE) clean )
+- -(cd fftw-3.3 && $(MAKE) clean )
+- -($(RM) -f fftw-3.3/mpi/fftw3-mpi.f03 )
+ -(cd mmpbsa_py && /bin/rm -fr MMPBSA.py.MPI build/ mpi4py-1.2.2/)
+ -(cd mm_pbsa && $(MAKE) clean )
+ -(cd FEW && $(MAKE) clean )
+@@ -315,7 +286,7 @@ $(LIBDIR)/libxblas-amb.a:
+ $(LIBDIR)/libfftw3.a $(LIBDIR)/libfftw3_mpi.a:
+ cd fftw-3.3 && $(MAKE) && $(MAKE) -j 1 install;
+
+-THIRDPARTY: $(XBLAS) $(FFTW3)
++THIRDPARTY: $(XBLAS)
+
+ cuda:
+ @echo "$(AMBERTOOLS) has no CUDA-enabled components"
+diff --git a/AmberTools/src/configure2 b/AmberTools/src/configure2
+index f1a3cff..4b07fa5 100755
+--- a/AmberTools/src/configure2
++++ b/AmberTools/src/configure2
+@@ -318,7 +318,7 @@ fi
+ #------------------------------------------------------------------------------
+ # Define variables that are currently constants:
+ #------------------------------------------------------------------------------
+-bintraj='yes'
++bintraj='no'
+ ldout=' -o '
+ localcp='cp'
+ localmv='mv'
+@@ -358,7 +358,7 @@ cygwin='no'
+ debug='no'
+ dragonegg=''
+ fpp="cpp -traditional -P"
+-fppflags=''
++fppflags='-DBINTRAJ'
+ freeformat_flag=''
+ fwarnflag=''
+ g95='no'
+@@ -370,7 +370,7 @@ installtype='serial'
+ intel_compiler_flag_mkl='no'
+ intelmpi='no'
+ is_mac='no'
+-ldflags=''
++ldflags='GENTOO_LDFLAGS'
+ ld='ld '
+ lfs='yes'
+ lm='-lm'
+@@ -599,11 +599,11 @@ omp_flag=
+ mpi_flag=
+ lex=flex
+ flibs_mkl=
+-lapack=install
+-blas=install
++lapack=skip
++blas=skip
+ f2c=skip
+-ucpp=install
+-cpp="ucpp -l"
++ucpp=skip
++cpp="\$(EPREFIX)/usr/bin/ucpp -l"
+
+ #-----------------------------------
+ # skip building of xleap?
+@@ -907,7 +907,7 @@ gnu)
+ flibs_arch="-lgfortran -w"
+ flibsf_arch=
+ cc=gcc
+- cflags="-fPIC"
++ cflags="-fPIC -DBINTRAJ"
+ ambercflags=""
+ cplusplus=g++
+ cxxflags="-fPIC"
+@@ -937,11 +937,11 @@ gnu)
+ foptflags=""
+ else
+ cnooptflags=
+- coptflags="-O3"
++ coptflags="GENTOO_CFLAGS"
+ cxxnooptflags=
+- cxxoptflags="-fPIC -O3"
++ cxxoptflags="-fPIC GENTOO_CXXFLAGS"
+ fnooptflags="-O0"
+- foptflags="-O3"
++ foptflags="GENTOO_FFLAGS"
+ fi
+
+ # Debugging options
+@@ -957,11 +957,11 @@ gnu)
+ if [ $sse = 'yes' ]; then
+ if [ $x86_64 = 'yes' ]; then
+ #-mfpmath=sse is default for x86_64, no need to specific it
+- coptflags="$coptflags -mtune=native"
+- foptflags="$foptflags -mtune=native"
++ coptflags="$coptflags"
++ foptflags="$foptflags"
+ else # i386 needs to be told to use sse prior to using -mfpmath=sse
+- coptflags="$coptflags -mtune=native -msse -mfpmath=sse"
+- foptflags="$foptflags -mtune=native -msse -mfpmath=sse"
++ coptflags="$coptflags"
++ foptflags="$foptflags"
+ fi
+ fi
+ fcreal8="-fdefault-real-8"
+@@ -1032,7 +1032,7 @@ gnu)
+ # pmemd_fpp_flags='-DFFTW_FFT'
+ # fi
+ pmemd_foptflags="$foptflags"
+- pmemd_coptflags="$coptflags"
++ pmemd_coptflags="$coptflags -DBINTRAJ"
+ if [ ! -z $dragonegg ]; then
+ pmemd_foptflags="-fplugin=$dragonegg $fflags $pmemd_foptflags"
+ pmemd_coptflags="-fplugin=$dragonegg $pmemd_coptflags"
+@@ -1062,7 +1062,7 @@ gnu)
+ fi
+ pmemd_cu_includes="$pmemd_cu_includes $mpi_inc"
+ pmemd_cu_defines="$pmemd_cu_defines -DMPI -DMPICH_IGNORE_CXX_SEEK"
+- pmemd_coptflags="$coptflags -DMPICH_IGNORE_CXX_SEEK"
++ pmemd_coptflags="$coptflags -DMPICH_IGNORE_CXX_SEEK -DBINTRAJ"
+ fi
+ fi
+ if [ "$cuda_SPFP" = 'yes' ]; then
+@@ -2649,40 +2649,40 @@ if [ "$has_fftw3" = 'yes' ]; then
+ if [ "$sse" = "yes" ]; then
+ enable_sse="--enable-sse2=yes" # --enable-avx=yes"
+ fi
+- if [ "$mic" = 'yes' ]; then
+- echo " --configuring for mic (native mode)..."
+- echo
+- cd fftw-3.3 && \
+- ./configure --prefix=$AMBERHOME --libdir=$AMBERHOME/lib \
+- --enable-static --enable-shared --host=x86_64-k1om-linux \
+- --build=x86_64-unknown-linux \
+- $enable_mpi $mpicc $enable_debug \
+- CC="$cc -mmic" CFLAGS="$cflags $coptflags " \
+- F77="$fc -mmic" FFLAGS="$fflags $foptflags " \
+- FLIBS="$flibs_arch" \
+- > ../fftw3_config.log 2>&1
+- ncerror=$?
+- else
+- cd fftw-3.3 && \
+- ./configure --prefix=$AMBERHOME --libdir=$AMBERHOME/lib \
+- --enable-static --enable-shared \
+- $enable_mpi $mpicc $enable_debug $enable_sse\
+- CC="$cc" CFLAGS="$cflags $coptflags" \
+- F77="$fc" FFLAGS="$fflags $foptflags" \
+- FLIBS="$flibs_arch" \
+- > ../fftw3_config.log 2>&1
+- ncerror=$?
+- fi
+- if [ $ncerror -gt 0 ]; then
+- echo "Error: FFTW configure returned $ncerror"
+- echo " FFTW configure failed! Check the fftw3_config.log file"
+- echo " in the $AMBERHOME/AmberTools/src directory."
+- exit 1
+- else
+- echo " fftw-3.3 configure succeeded."
+- fi
+- cd ..
+- flibs_fftw3="-lfftw3"
++# if [ "$mic" = 'yes' ]; then
++# echo " --configuring for mic (native mode)..."
++# echo
++# cd fftw-3.3 && \
++# ./configure --prefix=$AMBERHOME --libdir=$AMBERHOME/lib \
++# --enable-static --enable-shared --host=x86_64-k1om-linux \
++# --build=x86_64-unknown-linux \
++# $enable_mpi $mpicc $enable_debug \
++# CC="$cc -mmic" CFLAGS="$cflags $coptflags " \
++# F77="$fc -mmic" FFLAGS="$fflags $foptflags " \
++# FLIBS="$flibs_arch" \
++# > ../fftw3_config.log 2>&1
++# ncerror=$?
++# else
++# cd fftw-3.3 && \
++# ./configure --prefix=$AMBERHOME --libdir=$AMBERHOME/lib \
++# --enable-static --enable-shared \
++# $enable_mpi $mpicc $enable_debug $enable_sse\
++# CC="$cc" CFLAGS="$cflags $coptflags" \
++# F77="$fc" FFLAGS="$fflags $foptflags" \
++# FLIBS="$flibs_arch" \
++# > ../fftw3_config.log 2>&1
++# ncerror=$?
++# fi
++# if [ $ncerror -gt 0 ]; then
++# echo "Error: FFTW configure returned $ncerror"
++# echo " FFTW configure failed! Check the fftw3_config.log file"
++# echo " in the $AMBERHOME/AmberTools/src directory."
++# exit 1
++# else
++# echo " fftw-3.3 configure succeeded."
++# fi
++# cd ..
++ flibs_fftw3="GENTOO_FFTW3_LIBS"
+ fftw3="\$(LIBDIR)/libfftw3.a"
+ if [ "$mpi" = 'yes' -a "$intelmpi" = 'no' ]; then
+ flibs_fftw3="-lfftw3_mpi $flibs_fftw3"
+@@ -2701,23 +2701,23 @@ elif [ "$mdgx" = 'yes' ]; then
+ if [ "$sse" = "yes" ]; then
+ enable_sse="--enable-sse2=yes" # --enable-avx=yes"
+ fi
+- cd fftw-3.3 && \
+- ./configure --prefix=$AMBERHOME --libdir=$AMBERHOME/lib \
+- --enable-static --enable-shared --disable-fortran \
+- $enable_debug $enable_sse\
+- CC="$cc" CFLAGS="$cflags $coptflags" \
+- > ../fftw3_config.log 2>&1
+- ncerror=$?
+- if [ $ncerror -gt 0 ]; then
+- echo "Error: FFTW configure returned $ncerror"
+- echo " FFTW configure failed! Check the fftw3_config.log file"
+- echo " in the $AMBERHOME/AmberTools/src directory."
+- exit 1
+- else
+- echo " fftw-3.3 configure succeeded."
+- fi
+- cd ..
+- flibs_fftw3="-lfftw3"
++# cd fftw-3.3 && \
++# ./configure --prefix=$AMBERHOME --libdir=$AMBERHOME/lib \
++# --enable-static --enable-shared --disable-fortran \
++# $enable_debug $enable_sse\
++# CC="$cc" CFLAGS="$cflags $coptflags" \
++# > ../fftw3_config.log 2>&1
++# ncerror=$?
++# if [ $ncerror -gt 0 ]; then
++# echo "Error: FFTW configure returned $ncerror"
++# echo " FFTW configure failed! Check the fftw3_config.log file"
++# echo " in the $AMBERHOME/AmberTools/src directory."
++# exit 1
++# else
++# echo " fftw-3.3 configure succeeded."
++# fi
++# cd ..
++ flibs_fftw3="GENTOO_FFTW3_LIBS"
+ fftw3="\$(LIBDIR)/libfftw3.a"
+ else
+ echo ""
+@@ -3162,7 +3162,7 @@ LDFLAGS=$ldflags \$(CUSTOMBUILDFLAGS) \$(AMBERBUILDFLAGS)
+ AMBERLDFLAGS=\$(AMBERBUILDFLAGS)
+
+ LEX= $lex
+-YACC= \$(BINDIR)/yacc
++YACC= byacc
+ AR= ar rv
+ M4= $m4
+ RANLIB=$ranlib
+@@ -3198,7 +3198,7 @@ CP=$localcp
+ # Information about Fortran compilation:
+
+ FC=$fc
+-FFLAGS= $fflags \$(LOCALFLAGS) \$(CUSTOMBUILDFLAGS) -I\$(INCDIR) \$(NETCDFINC) $mklinc \$(AMBERBUILDFLAGS)
++FFLAGS= $fflags \$(LOCALFLAGS) \$(CUSTOMBUILDFLAGS) -IGENTOO_INCLUDE \$(NETCDFINC) $mklinc \$(AMBERBUILDFLAGS)
+ FNOOPTFLAGS= $fnooptflags
+ FOPTFLAGS= $foptflags
+ AMBERFFLAGS=\$(AMBERBUILDFLAGS)
+diff --git a/AmberTools/src/cpptraj/src/Makefile_at b/AmberTools/src/cpptraj/src/Makefile_at
+index 977439f..4bf25c8 100644
+--- a/AmberTools/src/cpptraj/src/Makefile_at
++++ b/AmberTools/src/cpptraj/src/Makefile_at
+@@ -10,7 +10,7 @@ CPPTRAJ_FLAGS= -I$(INCDIR) $(COPTFLAGS) $(CFLAGS) $(NETCDFINC)
+ # NOTE: Since -nobintraj is possible and the dependency for netcdf is not
+ # set correctly by configure there is no way this can work for netcdf
+ READLINE_HOME=readline
+-READLINE=$(READLINE_HOME)/libreadline.a
++READLINE=-lreadline
+ EXTERNAL_LIBS=$(LIBDIR)/libarpack.a $(LIBDIR)/liblapack.a $(LIBDIR)/libblas.a $(READLINE)
+
+ include cpptrajfiles
+@@ -45,7 +45,7 @@ depend: findDepend
+ dependclean:
+ /bin/rm -f FindDepend.o findDepend
+
+-cpptraj$(SFX): $(OBJECTS) pub_fft.o $(EXTERNAL_LIBS)
++cpptraj$(SFX): $(OBJECTS) pub_fft.o
+ $(CXX) $(WARNFLAGS) $(LDFLAGS) -o cpptraj$(SFX) $(OBJECTS) pub_fft.o \
+ -L$(LIBDIR) $(NETCDFLIB) $(ZLIB) $(BZLIB) $(FLIBS_PTRAJ) $(READLINE)
+
+@@ -53,12 +53,12 @@ ambpdb$(SFX): $(AMBPDB_OBJECTS)
+ $(CXX) $(WARNFLAGS) $(LDFLAGS) -o ambpdb$(SFX) $(AMBPDB_OBJECTS) \
+ -L$(LIBDIR) $(NETCDFLIB) $(ZLIB) $(BZLIB)
+
+-cpptraj.sander$(SFX): $(OBJECTS) pub_fft.o $(EXTERNAL_LIBS) $(LIBDIR)/libsander.so
++cpptraj.sander$(SFX): $(OBJECTS) pub_fft.o $(LIBDIR)/libsander.so
+ $(CXX) $(WARNFLAGS) $(LDFLAGS) -o cpptraj.sander$(SFX) $(OBJECTS) pub_fft.o \
+ -L$(LIBDIR) $(NETCDFLIB) $(ZLIB) $(BZLIB) $(FLIBS_PTRAJ) $(READLINE) \
+ -lsander
+
+-libcpptraj$(SHARED_SUFFIX): $(OBJECTS) pub_fft.o $(EXTERNAL_LIBS)
++libcpptraj$(SHARED_SUFFIX): $(OBJECTS) pub_fft.o
+ $(CXX) $(MAKE_SHARED) $(WARNFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) pub_fft.o \
+ -L$(LIBDIR) $(NETCDFLIB) $(ZLIB) $(BZLIB) $(FLIBS_PTRAJ) $(READLINE)
+
+diff --git a/AmberTools/src/gbnsr6/Makefile b/AmberTools/src/gbnsr6/Makefile
+index 0d704cb..85042d4 100644
+--- a/AmberTools/src/gbnsr6/Makefile
++++ b/AmberTools/src/gbnsr6/Makefile
+@@ -66,7 +66,7 @@ configured_serial: configured
+ )
+
+ #---------------------------------------------------------------------------
+-gbnsr6$(SFX): $(OBJ) syslib netlib c9x-complex configured_serial
++gbnsr6$(SFX): $(OBJ) syslib configured_serial
+ $(FC) $(PBSAFLAG) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o gbnsr6$(SFX) $(OBJ) \
+ ../lib/nxtsec.o ../lib/random.o \
+ -L$(LIBDIR) $(FLIBSF) $(LDFLAGS) $(AMBERLDFLAGS)
+diff --git a/AmberTools/src/mdgx/Makefile b/AmberTools/src/mdgx/Makefile
+index 5751142..04e8e1c 100644
+--- a/AmberTools/src/mdgx/Makefile
++++ b/AmberTools/src/mdgx/Makefile
+@@ -151,7 +151,7 @@ MDGX_HEADERS = \
+ ptrajmask.h \
+ AmberNetcdf.h
+
+-$(BINDIR)/mdgx$(SFX) : $(FFTW3) $(MDGX_OBJS)
++$(BINDIR)/mdgx$(SFX) : $(MDGX_OBJS)
+ $(CC) $(COPTFLAGS) $(CFLAGS) $(AMBERCFLAGS) $(LDFLAGS) \
+ -o $@ $(MDGX_OBJS) -L$(LIBDIR) $(FLIBS_FFTW3) $(NETCDFLIB) $(LM)
+
+@@ -159,7 +159,7 @@ $(BINDIR)/mdgx.MPI$(SFX) : $(MDGX_OBJS)
+ $(CC) $(COPTFLAGS) $(CFLAGS) $(AMBERCFLAGS) $(LDFLAGS) \
+ -o $@ $(MDGX_OBJS) -L$(LIBDIR) $(FLIBSF) $(FLIBS_FFTW3) $(NETCDFLIB) $(LM)
+
+-$(LIBDIR)/libmdgx$(SHARED_SUFFIX): $(MDGX_OBJS) $(MDGXWRAP_OBJS) $(BINDIR)/ucpp
++$(LIBDIR)/libmdgx$(SHARED_SUFFIX): $(MDGX_OBJS) $(MDGXWRAP_OBJS)
+ $(CC) $(MAKE_SHARED) -o $@ $(CFLAGS) $(COPTFLAGS) -L$(LIBDIR) $(FLIBSF) \
+ $(FLIBS_FFTW3) $(NETCDFLIB) $(LM) $(MDGX_OBJS) $(MDGXWRAP_OBJS)
+ cp -p mdgxapi.h $(INCDIR)/mdgx.h
+diff --git a/AmberTools/src/nab/nab.c b/AmberTools/src/nab/nab.c
+index 2e90068..cf83aaa 100644
+--- a/AmberTools/src/nab/nab.c
++++ b/AmberTools/src/nab/nab.c
+@@ -161,8 +161,8 @@ char *cppstring;
+ fprintf( stderr, "AMBERHOME is not set!\n" );
+ exit(1);
+ }
+- sprintf( cmd, "%s/bin/%s %s -I%s/include %s ",
+- amberhome, CPP, cppstring, amberhome,
++ sprintf( cmd, "%s %s -I%s/include %s ",
++ CPP, cppstring, amberhome,
+ argv[ ac ] ? argv[ ac ] : "" );
+ if( cgdopt ) fprintf( stderr, "cpp cmd: %s\n", cmd );
+ nfields = split( cmd, fields, " " );
+diff --git a/AmberTools/src/nmode/Makefile b/AmberTools/src/nmode/Makefile
+index 12acf35..4f26593 100644
+--- a/AmberTools/src/nmode/Makefile
++++ b/AmberTools/src/nmode/Makefile
+@@ -87,12 +87,12 @@ LIBOBJ= ../lib/rfree.o ../lib/matinv.o ../lib/nxtsec.o \
+ LIBOBJNOPATH= rfree.o matinv.o nxtsec.o \
+ amopen.o rgroup.o
+
+-$(BINDIR)/nmode$(SFX): $(OBJ) libobj syslib netlib
++$(BINDIR)/nmode$(SFX): $(OBJ) libobj syslib
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $(BINDIR)/nmode$(SFX) \
+ $(OBJ) $(LIBOBJ) \
+ ../lib/sys.a -L$(LIBDIR) $(FLIBSF) $(LDFLAGS) $(AMBERLDFLAGS)
+
+-nmanal$(SFX): $(OBJ1) libobj netlib binpos.o
++nmanal$(SFX): $(OBJ1) libobj binpos.o
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o nmanal$(SFX) \
+ $(OBJ1) $(LIBOBJ) binpos.o \
+ -L$(LIBDIR) $(FLIBSF) $(LDFLAGS) $(AMBERLDFLAGS)
+@@ -103,7 +103,7 @@ lmanal$(SFX): $(OBJ2) libobj binpos.o
+ -L$(LIBDIR) $(FLIBSF) $(LDFLAGS) $(AMBERLDFLAGS)
+
+ quasih$(SFX): quasih.o fileio.o thermo.o mexit.o \
+- syslib netlib libobj binpos.o
++ syslib libobj binpos.o
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o quasih$(SFX) \
+ quasih.o fileio.o thermo.o mexit.o \
+ $(LIBOBJ) binpos.o ../lib/sys.a -L$(LIBDIR) $(FLIBSF) \
+diff --git a/AmberTools/src/parmed/chemistry/unit/unit.py b/AmberTools/src/parmed/chemistry/unit/unit.py
+index 7767f39..a8d8a47 100644
+--- a/AmberTools/src/parmed/chemistry/unit/unit.py
++++ b/AmberTools/src/parmed/chemistry/unit/unit.py
+@@ -612,7 +612,7 @@ class UnitSystem(object):
+ to_base_units[m][n] = power
+ try:
+ self.from_base_units = ~to_base_units
+- except ArithmeticError, e:
++ except ArithmeticError as e:
+ raise ArithmeticError("UnitSystem is not a valid basis set. " + str(e))
+
+ def __iter__(self):
+diff --git a/AmberTools/src/pbsa/Makefile b/AmberTools/src/pbsa/Makefile
+index 1b2c09a..6dc65a6 100644
+--- a/AmberTools/src/pbsa/Makefile
++++ b/AmberTools/src/pbsa/Makefile
+@@ -148,23 +148,23 @@ configured_parallel: configured
+ )
+
+ #---------------------------------------------------------------------------
+-pbsa$(SFX): FFTW3 $(OBJ) syslib netlib c9x-complex configured_serial
++pbsa$(SFX): $(OBJ) syslib configured_serial
+ $(FC) $(PBSAFLAG) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o pbsa$(SFX) $(OBJ) \
+ ../lib/nxtsec.o ../lib/random.o $(FLIBS_FFTW3) \
+ -L$(LIBDIR) $(FLIBSF) $(LDFLAGS) $(AMBERLDFLAGS)
+
+-pbsa.MPI$(SFX): FFTW3.MPI $(OBJ) syslib netlib c9x-complex configured_parallel
++pbsa.MPI$(SFX): $(OBJ) syslib configured_parallel
+ $(FC) $(PBSAFLAG) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o pbsa.MPI$(SFX) $(OBJ) \
+ ../lib/nxtsec.o ../lib/random.o $(FLIBS_FFTW3) \
+ -L$(LIBDIR) $(FLIBSF) $(LDFLAGS) $(AMBERLDFLAGS)
+
+-simplepbsa$(SFX): simplepbsa.o gopt.o libpbsa.a sfflib syslib netlib c9x-complex
++simplepbsa$(SFX): simplepbsa.o gopt.o libpbsa.a sfflib syslib
+ $(FC) $(PBSAFLAG) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o simplepbsa$(SFX) simplepbsa.o gopt.o \
+ libpbsa.a $(LIBDIR)/libsff.a ../lib/nxtsec.o -L$(LIBDIR) $(FLIBSF) \
+ $(LDFLAGS) $(AMBERLDFLAGS)
+ /bin/mv simplepbsa$(SFX) $(BINDIR)
+
+-libpbsa.a: FFTW3 $(LIBPBSAOBJS) syslib
++libpbsa.a: $(LIBPBSAOBJS) syslib
+ -rm -f libpbsa.a
+ $(AR) libpbsa.a $(LIBPBSAOBJS) ../lib/random.o
+ $(RANLIB) libpbsa.a
+diff --git a/AmberTools/src/ptraj/Makefile b/AmberTools/src/ptraj/Makefile
+index df789e8..48227d5 100644
+--- a/AmberTools/src/ptraj/Makefile
++++ b/AmberTools/src/ptraj/Makefile
+@@ -61,17 +61,16 @@ rdparm$(SFX): libs $(OBJECTS)
+ $(CC) $(CFLAGS) $(AMBERCFLAGS) $(LDFLAGS) $(AMBERLDFLAGS) \
+ -o rdparm$(SFX) $(OBJECTS) $(LIBS) $(NETCDFLIB) $(LM)
+
+-ptraj$(SFX): libs netlib $(OBJECTS)
++ptraj$(SFX): libs $(OBJECTS)
+ $(CC) $(CFLAGS) $(AMBERCFLAGS) $(LDFLAGS) $(AMBERLDFLAGS) \
+ -o ptraj$(SFX) $(OBJECTS) $(LIBS) $(NETCDFLIB) $(LM)
+
+-ptraj.MPI$(SFX): libs netlib $(OBJECTS)
++ptraj.MPI$(SFX): libs $(OBJECTS)
+ $(CC) $(CFLAGS) $(AMBERCFLAGS) $(LDFLAGS) $(AMBERLDFLAGS) \
+ -o ptraj.MPI$(SFX) $(OBJECTS) $(LIBS) $(PNETCDFLIB) $(LM)
+
+ libs:
+ cd pdb && $(MAKE)
+- cd ../arpack && $(MAKE)
+
+ netlib:
+ cd ../lapack && $(MAKE) $(LAPACK)
+diff --git a/AmberTools/src/sander/Makefile b/AmberTools/src/sander/Makefile
+index 9b9488c..67fe45a 100644
+--- a/AmberTools/src/sander/Makefile
++++ b/AmberTools/src/sander/Makefile
+@@ -90,7 +90,7 @@ APBSOBJ= \
+ file_io_dat.APBS.o apbs_vars.APBS.o apbs.APBS.o \
+ constants.o state.o memory_module.o stack.o \
+ nose_hoover.o nose_hoover_init.o \
+- trace.o rmsgrd.o lmod.o rand2.o lmodC.o xminC.o decomp.o \
++ trace.o rmsgrd.o lmod.o rand2.o dsarpack.o lmodC.o xminC.o decomp.o \
+ icosasurf.o egb.o remd.o findmask.o \
+ relax_mat.o nmr.o multitmd.o \
+ multisander.o sander.APBS.o trajene.o cshf.o nmrcal.o mtmdcall.o pearsn.o \
+@@ -138,7 +138,7 @@ SEBOMDLIB = ../sebomd/sebomd.a
+
+ MMOBJ= file_io_dat.o constants.o state.o memory_module.o stack.o \
+ nose_hoover.o nose_hoover_init.o \
+- trace.o rmsgrd.o lmod.o rand2.o lmodC.o xminC.o decomp.o \
++ trace.o rmsgrd.o lmod.o rand2.o dsarpack.o lmodC.o xminC.o decomp.o \
+ icosasurf.o egb.o remd.o findmask.o \
+ relax_mat.o nmr.o multitmd.o \
+ multisander.o sander.o trajene.o cshf.o nmrcal.o mtmdcall.o pearsn.o \
+@@ -159,7 +159,7 @@ MMOBJ= file_io_dat.o constants.o state.o memory_module.o stack.o \
+
+ APIOBJ= file_io_dat.o constants.o state.o memory_module.o stack.o \
+ nose_hoover.o nose_hoover_init.o \
+- trace.o rmsgrd.o lmod.o rand2.o lmodC.o xminC.o decomp.o \
++ trace.o rmsgrd.o lmod.o rand2.o dsarpack.o lmodC.o xminC.o decomp.o \
+ icosasurf.o egb.o remd.o findmask.o \
+ relax_mat.o nmr.o multitmd.o \
+ trajene.o cshf.o nmrcal.o mtmdcall.o pearsn.o \
+@@ -180,7 +180,7 @@ APIOBJ= file_io_dat.o constants.o state.o memory_module.o stack.o \
+
+ LESAPIOBJ= memory_module.o stack.o file_io_dat.o les.o \
+ constants.o state.o nose_hoover.o nose_hoover_init_LES.o \
+- trace.o rmsgrd.o rand2.o lmodC.o xminC.o decomp.o icosasurf.o \
++ trace.o rmsgrd.o rand2.o dsarpack.o lmodC.o xminC.o decomp.o icosasurf.o \
+ egb.LES.o remd.LES.o findmask.o relax_mat.o nmr.LES.o multitmd.o \
+ cshf.o nmrcal.o mtmdcall.o pearsn.o cpparm.LES.o \
+ printe.o runmin.o nonbond_list.LESAPI.o force.LES.o rdparm.LESAPI.o \
+@@ -209,7 +209,7 @@ PARTPIMDOBJ = pimd_vars.o pimd_force.LES.o pimd_init.LES.o cmd_vars.o cmd_matrix
+
+ PUPILOBJ= file_io_dat.o constants.o state.o memory_module.o stack.o \
+ nose_hoover.o nose_hoover_init.o \
+- trace.o rmsgrd.o lmod.o rand2.o lmodC.o xminC.o decomp.o \
++ trace.o rmsgrd.o lmod.o rand2.o dsarpack.o lmodC.o xminC.o decomp.o \
+ pupildata.o icosasurf.o egb.o findmask.o \
+ relax_mat.o nmr.o multitmd.o \
+ multisander.o sander.PUPIL.o trajene.o cshf.o nmrcal.o mtmdcall.o pearsn.o \
+@@ -233,7 +233,7 @@ LSCIVROBJ = lscivr_vars.o lsc_init.o lsc_xp.o
+
+ LESOBJ= memory_module.o stack.o file_io_dat.o \
+ constants.o state.o nose_hoover.o nose_hoover_init_LES.o \
+- trace.o rmsgrd.o rand2.o lmodC.o xminC.o decomp.o icosasurf.o \
++ trace.o rmsgrd.o rand2.o dsarpack.o lmodC.o xminC.o decomp.o icosasurf.o \
+ egb.LES.o remd.LES.o findmask.o \
+ relax_mat.o nmr.LES.o multitmd.o \
+ multisander.LES.o sander.LES.o cshf.o nmrcal.o mtmdcall.o pearsn.o \
+@@ -293,7 +293,7 @@ all_serial_programs: $(SERIALPROGS)
+ $(BINDIR)/sander$(SFX): libsqm $(MMOBJ) $(QMOBJ) $(FULLPIMDOBJ) $(EMIL) \
+ $(SEBOMDOBJ) sebomd \
+ $(LSCIVROBJ) force.o syslib \
+- ../lib/nxtsec.o netlib configured_serial \
++ ../lib/nxtsec.o configured_serial \
+ $(NCSU_OBJECTS) $(XRAY_OBJS) libpbsa librism $(PLUMED_DEPENDENCIES)
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(MMOBJ) $(QMOBJ) $(SEBOMDOBJ) \
+ $(FULLPIMDOBJ) $(LSCIVROBJ) force.o -L$(LIBDIR) -lsqm \
+@@ -308,7 +308,7 @@ $(BINDIR)/sander$(SFX): libsqm $(MMOBJ) $(QMOBJ) $(FULLPIMDOBJ) $(EMIL) \
+ $(BINDIR)/sander.MPI$(SFX): libsqm $(MMOBJ) $(QMOBJ) $(FULLPIMDOBJ) $(EMIL) \
+ $(LSCIVROBJ) $(EVBOBJ) force.o \
+ $(SEBOMDOBJ) sebomd $(XRAY_OBJS) \
+- syslib ../lib/nxtsec.o netlib libpbsa librism_mpi configured_parallel $(NCSU_OBJECTS) \
++ syslib ../lib/nxtsec.o libpbsa librism_mpi configured_parallel $(NCSU_OBJECTS) \
+ $(PLUMED_DEPENDENCIES)
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(MMOBJ) $(QMOBJ) $(SEBOMDOBJ) \
+ $(FULLPIMDOBJ) $(LSCIVROBJ) $(EVBOBJ) force.o \
+@@ -323,7 +323,7 @@ $(BINDIR)/sander.MPI$(SFX): libsqm $(MMOBJ) $(QMOBJ) $(FULLPIMDOBJ) $(EMIL) \
+ $(BINDIR)/sander.PUPIL$(SFX): libsqm $(PUPILOBJ) $(QMOBJ) $(FULLPIMDOBJ) $(EMIL) \
+ $(LSCIVROBJ) syslib $(XRAY_OBJS) \
+ $(SEBOMDOBJ) sebomd \
+- ../lib/nxtsec.o netlib libpbsa librism configured_serial $(NCSU_OBJECTS) \
++ ../lib/nxtsec.o libpbsa librism configured_serial $(NCSU_OBJECTS) \
+ $(PLUMED_DEPENDENCIES)
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(PUPILOBJ) $(QMOBJ) $(SEBOMDOBJ) $(FULLPIMDOBJ) \
+ $(LSCIVROBJ) -L$(LIBDIR) -lsqm -lFpbsa \
+@@ -335,7 +335,7 @@ $(BINDIR)/sander.PUPIL$(SFX): libsqm $(PUPILOBJ) $(QMOBJ) $(FULLPIMDOBJ) $(EMIL)
+
+ #---------------------------------------------------------------------------
+ $(BINDIR)/sander.LES$(SFX): libsqm $(LESOBJ) $(PARTPIMDOBJ) syslib \
+- ../lib/nxtsec.o netlib \
++ ../lib/nxtsec.o \
+ $(LSCIVROBJ) $(NCSU_OBJECTS) $(XRAY_OBJS) configured_serial \
+ libpbsa librism $(EMIL) sebomd $(PLUMED_DEPENDENCIES)
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(LESOBJ) $(PARTPIMDOBJ) $(LSCIVROBJ) \
+@@ -348,7 +348,7 @@ $(BINDIR)/sander.LES$(SFX): libsqm $(LESOBJ) $(PARTPIMDOBJ) syslib \
+ #---------------------------------------------------------------------------
+ $(BINDIR)/sander.LES.MPI$(SFX): libsqm $(LESOBJ) $(EVBPIMD) \
+ $(PARTPIMDOBJ) syslib ../lib/nxtsec.o \
+- netlib libpbsa librism_mpi $(EMIL) $(XRAY_OBJS) \
++ libpbsa librism_mpi $(EMIL) $(XRAY_OBJS) \
+ $(LSCIVROBJ) $(NCSU_OBJECTS) sebomd configured_parallel $(PLUMED_DEPENDENCIES)
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(LESOBJ) $(EVBPIMD) \
+ $(PARTPIMDOBJ) $(LSCIVROBJ) $(XRAY_OBJS) \
+@@ -363,7 +363,7 @@ $(BINDIR)/sander.APBS$(SFX): libsqm $(APBSOBJ) $(QMOBJ) \
+ $(LSCIVROBJ) $(FULLPIMDOBJ) $(NCSU_OBJECTS) \
+ force.APBS.o syslib librism $(EMIL) \
+ $(SEBOMDOBJ) sebomd $(XRAY_OBJS) \
+- ../lib/nxtsec.o netlib configured_serial $(PLUMED_DEPENDENCIES)
++ ../lib/nxtsec.o configured_serial $(PLUMED_DEPENDENCIES)
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(APBSOBJ) $(QMOBJ) $(SEBOMDOBJ) \
+ $(FULLPIMDOBJ) $(LSCIVROBJ) force.APBS.o \
+ -L$(APBS_LIBDIR) $(APBS_LIBS) \
+@@ -386,7 +386,7 @@ $(BINDIR)/ambmask$(SFX): ambmask.o findmask.o amopen.o parms.o \
+ $(LIBDIR)/libsander$(SHARED_SUFFIX): libsqm $(APIOBJ) $(QMAPIOBJ) $(FULLPIMDOBJ) $(EMIL) \
+ $(SEBOMDOBJ) sebomd $(INCDIR)/sander_api.mod \
+ $(LSCIVROBJ) force.o syslib $(PLUMED_DEPENDENCIES) \
+- ../lib/nxtsec.o netlib configured_serial \
++ ../lib/nxtsec.o configured_serial \
+ $(NCSU_OBJECTS) $(XRAY_OBJS) libpbsa librism
+ $(FC) $(MAKE_SHARED) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o $@ $(APIOBJ) \
+ $(QMAPIOBJ) $(SEBOMDOBJ) $(FULLPIMDOBJ) $(LSCIVROBJ) force.o \
+@@ -399,7 +399,7 @@ $(LIBDIR)/libsander$(SHARED_SUFFIX): libsqm $(APIOBJ) $(QMAPIOBJ) $(FULLPIMDOBJ)
+ $(LIOLIBS) $(PLUMED_LOAD)
+
+ $(LIBDIR)/libsanderles$(SHARED_SUFFIX): libsqm $(LESAPIOBJ) $(PARTPIMDOBJ) $(QMAPIOBJ) syslib \
+- ../lib/nxtsec.o netlib $(INCDIR)/sanderles_api.mod \
++ ../lib/nxtsec.o $(INCDIR)/sanderles_api.mod \
+ $(LSCIVROBJ) $(NCSU_OBJECTS) $(XRAY_OBJS) configured_serial \
+ libpbsa librism $(EMIL) sebomd $(PLUMED_DEPENDENCIES)
+ $(FC) $(MAKE_SHARED) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) \
+@@ -452,6 +452,10 @@ rand2.o: ../sff/rand2.c
+ $(CC) -c $(CNOOPTFLAGS) $(CFLAGS) $(AMBERCFLAGS) \
+ -o rand2.o ../sff/rand2.c
+
++dsarpack.o: ../sff/dsarpack.f
++ $(CC) -c -DSQM $(CNOOPTFLAGS) $(CFLAGS) $(AMBERCFLAGS) \
++ -o dsarpack.o ../sff/dsarpack.f
++
+ lmodC.o: ../sff/lmodC.c
+ $(CC) -c -DSQM $(CNOOPTFLAGS) $(CFLAGS) $(AMBERCFLAGS) \
+ -o lmodC.o ../sff/lmodC.c
+diff --git a/AmberTools/src/sander/depend b/AmberTools/src/sander/depend
+index 67cc33b..b8667d7 100644
+--- a/AmberTools/src/sander/depend
++++ b/AmberTools/src/sander/depend
+@@ -5774,7 +5774,7 @@ yammpnb.o: \
+ yammpnb.o: yammpnb.F90
+ $(FC) $(FWARNFLAGS) $(FPPFLAGS) -c $(FOPTFLAGS) $(FFLAGS) $(AMBERFFLAGS) $(RISMSANDER) -o $@ yammpnb.F90
+
+-netcdf.o: $(NETCDF)
++netcdf.o:
+ test -e $@ || touch netcdf.o
+
+ AmberNetcdf.o: ../lib/AmberNetcdf.F90
+diff --git a/AmberTools/src/sander/makedepend b/AmberTools/src/sander/makedepend
+index 05c04c4..a18d979 100755
+--- a/AmberTools/src/sander/makedepend
++++ b/AmberTools/src/sander/makedepend
+@@ -232,7 +232,7 @@ foreach $file ( <*.F90> ){
+ }
+
+ # special "compilation rule" for netcdf.o
+-printf "netcdf.o: \$(NETCDF)\n\ttest -e \$\@ || touch netcdf.o\n\n";
++printf "netcdf.o:\n\ttest -e \$\@ || touch netcdf.o\n\n";
+
+ # special compilation rule for AmberNetcdf.o, random.o, and constants.o
+ printf "AmberNetcdf.o: ../lib/AmberNetcdf.F90\n";
+diff --git a/AmberTools/src/sander/sander.h b/AmberTools/src/sander/sander.h
+index e4ca7e3..23cb216 100644
+--- a/AmberTools/src/sander/sander.h
++++ b/AmberTools/src/sander/sander.h
+@@ -47,7 +47,7 @@
+ // Workaround for strange behavior of clang compiler -- clang C doesn't seem to
+ // like the inline specifier on any of these functions, but clang++ handles it
+ // just fine.
+-#if defined(__cplusplus) || !defined(__clang__)
++#if defined(__cplusplus)
+ # define INLINE inline
+ #else
+ # define INLINE
+diff --git a/AmberTools/src/sff/Makefile b/AmberTools/src/sff/Makefile
+index 228625a..88d5531 100644
+--- a/AmberTools/src/sff/Makefile
++++ b/AmberTools/src/sff/Makefile
+@@ -3,7 +3,7 @@ include ../config.h
+ .c.o:
+ $(CC) -c -Dflex $(COPTFLAGS) $(CFLAGS) $(AMBERCFLAGS) $(RISMSFF) $(NETCDFINC) -o $@ $<
+
+-OBJS = binpos.o conjgrad.o lmodC.o memutil.o nblist.o newton.o nmode.o \
++OBJS = binpos.o conjgrad.o dsarpack.o lmodC.o memutil.o nblist.o newton.o nmode.o \
+ prm.o rand2.o sasad.o sff.o time.o xminC.o AmberNetcdf.o atomic_number.o $(SFF_RISM_INTERFACE)
+
+
+@@ -65,7 +65,7 @@ xminC.o: sff.h
+ AmberNetcdf.o: AmberNetcdf.h
+
+ hcp_getpdb: hcp_getpdb.c
+- $(CC) -o $(BINDIR)/hcp_getpdb hcp_getpdb.c
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $(BINDIR)/hcp_getpdb hcp_getpdb.c
+
+ .PHONY: ../rism/amber_rism_interface.NAB.o
+ ../rism/amber_rism_interface.NAB.o:
+diff --git a/AmberTools/src/sff/dsarpack.f b/AmberTools/src/sff/dsarpack.f
+new file mode 100644
+index 0000000..5544df9
+--- /dev/null
++++ b/AmberTools/src/sff/dsarpack.f
+@@ -0,0 +1,654 @@
++ subroutine dsarpack(n_dim,n_eig_in,n_eig_out,ncv_in,itr_in,
++ & eigval_tol,eigvals,eigvecs,spectrum,
++ & need_eigvecs,ierr,debug_arpack,
++ & v,workl,workd,d,resid,ax,select,
++ & xyz,grad,return_flag,label)
++c
++ implicit none
++c
++c %-----------------%
++c | Dummy Arguments |
++c %-----------------%
++c
++ integer n_dim,n_eig_in,n_eig_out,ncv_in,itr_in,spectrum,
++ & need_eigvecs,ierr,debug_arpack,return_flag,label
++ Double precision eigval_tol
++ Double precision eigvals(n_eig_in),eigvecs(n_dim * n_eig_in)
++ Double precision v(n_dim,ncv_in),
++ & workl(ncv_in*(ncv_in+8)),workd(3*n_dim),
++ & d(ncv_in,2),resid(n_dim),ax(n_dim),
++ & xyz(n_dim),grad(n_dim)
++ logical select(ncv_in)
++c
++ save
++c
++c %---------------%
++c | Include Files |
++c %---------------%
++c
++c include 'debug.h'
++c
++c\SCCS Information: @(#)
++c FILE: debug.h SID: 2.3 DATE OF SID: 11/16/95 RELEASE: 2
++c
++c %---------------------------------%
++c | See debug.doc for documentation |
++c %---------------------------------%
++ integer logfil, ndigit, mgetv0,
++ & msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd,
++ & mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd,
++ & mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd
++ common /debug/
++ & logfil, ndigit, mgetv0,
++ & msaupd, msaup2, msaitr, mseigt, msapps, msgets, mseupd,
++ & mnaupd, mnaup2, mnaitr, mneigh, mnapps, mngets, mneupd,
++ & mcaupd, mcaup2, mcaitr, mceigh, mcapps, mcgets, mceupd
++c
++c This code shows how to use ARPACK to find a few eigenvalues
++c (lambda) and corresponding eigenvectors (x) for the standard
++c eigenvalue problem:
++c
++c A*x = lambda*x
++c
++c where A is an n by n real symmetric matrix.
++c
++c The main points illustrated here are
++c
++c 1) How to declare sufficient memory to find NEV
++c eigenvalues of largest magnitude. Other options
++c are available.
++c
++c 2) Illustration of the reverse communication interface
++c needed to utilize the top level ARPACK routine DSAUPD
++c that computes the quantities needed to construct
++c the desired eigenvalues and eigenvectors(if requested).
++c
++c 3) How to extract the desired eigenvalues and eigenvectors
++c using the ARPACK routine DSEUPD.
++c
++c The only thing that must be supplied in order to use this
++c routine on your problem is to change the array dimensions
++c appropriately, to specify WHICH eigenvalues you want to compute
++c and to supply a matrix-vector product
++c
++c w <- Av
++c
++c in place of the call to AV( ) below.
++c
++c Once usage of this routine is understood, you may wish to explore
++c the other available options to improve convergence, to solve generalized
++c problems, etc. Look at the file ex-sym.doc in DOCUMENTS directory.
++c This codes implements
++c
++c\Example-1
++c ... Suppose we want to solve A*x = lambda*x in regular mode,
++c where A is derived from the central difference discretization
++c of the 2-dimensional Laplacian on the unit square with
++c zero Dirichlet boundary condition.
++c ... OP = A and B = I.
++c ... Assume "call av (n,x,y)" computes y = A*x
++c ... Use mode 1 of DSAUPD.
++c
++c\BeginLib
++c
++c\Routines called:
++c dsaupd ARPACK reverse communication interface routine.
++c dseupd ARPACK routine that returns Ritz values and (optionally)
++c Ritz vectors.
++c dnrm2 Level 1 BLAS that computes the norm of a vector.
++c daxpy Level 1 BLAS that computes y <- alpha*x+y.
++c
++c\Author
++c Richard Lehoucq
++c Danny Sorensen
++c Chao Yang
++c Dept. of Computational &
++c Applied Mathematics
++c Rice University
++c Houston, Texas
++c
++c\SCCS Information: %Z%
++c FILE: %M% SID: %I% DATE OF SID: %G% RELEASE: %R%
++c
++c\Remarks
++c 1. None
++c
++c\EndLib
++c
++c-----------------------------------------------------------------------
++c
++c %-------------------------------------------------------%
++c | Storage Declarations: |
++c | |
++c | The maximum dimensions for all arrays are |
++c | set here to accommodate a problem size of |
++c | N .le. MAXN |
++c | |
++c | NEV is the number of eigenvalues requested. |
++c | See specifications for ARPACK usage below. |
++c | |
++c | NCV is the largest number of basis vectors that will |
++c | be used in the Implicitly Restarted Arnoldi |
++c | Process. Work per major iteration is |
++c | proportional to N*NCV*NCV. |
++c | |
++c | You must set: |
++c | |
++c | MAXN: Maximum dimension of the A allowed. (dynamic) |
++c | MAXNEV: Maximum NEV allowed. (dynamic) |
++c | MAXNCV: Maximum NCV allowed. (dynamic) |
++c %-------------------------------------------------------%
++c
++C %--------------------------------------%
++C | F90 Allocatable Arrays (on the heap) |
++C %--------------------------------------%
++c
++C Double precision,allocatable,save :: v(:,:)
++C integer,save :: v_row_allocated = 0, v_col_allocated = 0
++c
++c %----------------------------------------------%
++c | Originally, as F77 parameters, the following |
++c | integers were used to dimension work arrays. |
++c | They are replaced by dummy arguments used to |
++c | dimension the work arrays as F90 automatic |
++c | arrays, but the integers are still used for |
++c | passing the dimensions to lower level ARPACK |
++c | routines dsaupd, dseupd and dmout. |
++c %----------------------------------------------%
++c
++ integer maxn, maxnev, maxncv, ldv
++c
++c %-------------------------------------------%
++c | Local F90 Automatic Arrays (on the stack) |
++c %-------------------------------------------%
++c
++ Double precision
++C & workl(ncv_in*(ncv_in+8)),
++C & workd(3*n_dim), d(ncv_in,2), resid(n_dim),
++C & ax(n_dim),
++ & cg_dstat(4)
++C logical select(ncv_in)
++ integer iparam(11), ipntr(11),
++ & cg_istat(4)
++c
++c %---------------%
++c | Local Scalars |
++c %---------------%
++c
++ character bmat*1, which*2
++ integer ido, n, nev, ncv, lworkl, info,
++ & i, j, nx, ishfts, maxitr, mode1, nconv
++ integer L12, L18, ARPACK_ERROR, status_flag
++ data L12, L18, ARPACK_ERROR /1, 2, -2/
++C integer v_row_needed, v_col_needed
++ logical rvec
++ Double precision
++ & tol, sigma
++c
++c %------------%
++c | Parameters |
++c %------------%
++c
++ Double precision
++ & zero
++ parameter (zero = 0.0D+0)
++c
++c %-----------------------------%
++c | BLAS & LAPACK routines used |
++c %-----------------------------%
++c
++ Double precision
++ & dnrm2
++ external dnrm2, daxpy, hessvec
++c
++c %--------------------%
++c | Intrinsic function |
++c %--------------------%
++c
++ intrinsic abs
++c
++c %-----------------------%
++c | Executable Statements |
++c %-----------------------%
++c
++ if ( label.eq.0 ) go to 1
++ go to (12,18) label
++ 1 continue
++c
++c %------------------------------------------------%
++c | Values used to calculate work array dimensions |
++c %------------------------------------------------%
++c
++ maxn = n_dim
++ maxnev = n_eig_in
++ maxncv = ncv_in
++ ldv = maxn
++c
++c %---------------------------------------------------%
++c | The include debug.h statement above and |
++c | assignments here initiate trace output from the |
++c | internal actions of ARPACK. See debug.doc in the |
++c | DOCUMENTS directory for usage. Initially, the |
++c | most useful information will be a breakdown of |
++c | time spent in the various stages of computation |
++c | given by setting msaupd = 1. |
++c %---------------------------------------------------%
++c
++ ndigit = -5
++ logfil = 6
++ msgets = 0
++ msaitr = 0
++ msapps = 0
++ if ( debug_arpack.eq.1 ) then
++ msaupd = 1
++ else
++ msaupd = 0
++ endif
++ msaup2 = 0
++ mseigt = 0
++ mseupd = 0
++c
++c *** Allocatable array v will be allowed to grow to its largest size;
++c *** it is never deallocated:
++C v_row_needed = n_dim !!! ldv
++C v_col_needed = ncv_in !!! maxncv
++C if( allocated(v) )then
++C if( (v_row_needed .gt. v_row_allocated)
++C & .or. (v_col_needed .gt. v_col_allocated) )then
++C deallocate(v,stat=ierr)
++C if( ierr .ne. 0 )then
++C write( logfil, '(a,i16,1x,i8)' )
++C & 'ARPACK: could not deallocate v'
++C go to 9000
++C endif
++C endif
++C endif
++C if( .not. allocated(v) )then
++C allocate( v(v_row_needed,v_col_needed), stat=ierr )
++C if( ierr .ne. 0 )then
++C write( logfil, '(a,2i10)' )
++C & 'ARPACK: could not allocate v'
++C go to 9000
++C endif
++C v_row_allocated = v_row_needed
++C v_col_allocated = v_col_needed
++C endif
++C v = zero !!! zero out entire v array
++c
++c %-------------------------------------------------%
++c | The following sets dimensions for this problem. |
++c %-------------------------------------------------%
++c
++ n = n_dim
++c
++c %----------------------------------------------%
++c | |
++c | Specifications for ARPACK usage are set |
++c | below: |
++c | |
++c | 1) NEV = N_EIG_IN asks for N_EIG_IN |
++c | eigenvalues to be computed. |
++c | |
++c | 2) NCV = NCV_IN sets the length of the |
++c | Arnoldi factorization |
++c | |
++c | 3) This is a standard problem |
++c | (indicated by bmat = 'I') |
++c | |
++c | 4) Ask for the NEV eigenvalues of |
++c | smallest magnitude |
++c | (indicated by which = 'SM') |
++c | See documentation in SSAUPD for the |
++c | other options SA, LA, LM, BE. |
++c | |
++c | Note: NEV and NCV must satisfy the following |
++c | conditions: |
++c | NEV <= MAXNEV |
++c | NEV + 1 <= NCV <= MAXNCV |
++c %----------------------------------------------%
++c
++ nev = n_eig_in
++ ncv = ncv_in
++ bmat = 'I'
++ if ( spectrum .eq. 1 ) then
++ which = 'SM'
++ else if ( spectrum .eq. 2 ) then
++ which = 'SA'
++ else if ( spectrum .eq. 3 ) then
++ which = 'LM'
++ else if ( spectrum .eq. 4 ) then
++ which = 'LA'
++ else if ( spectrum .eq. 5 ) then
++ which = 'BE'
++ else
++ print *, ' ERROR with _SSIMP: Spectrum .NE. (SM|SA|LA|LM|BE)'
++ go to 9000
++ end if
++c
++ if ( n .gt. maxn ) then
++ print *, ' ERROR with _SSIMP: N is greater than MAXN '
++ go to 9000
++ else if ( nev .gt. maxnev ) then
++ print *, ' ERROR with _SSIMP: NEV is greater than MAXNEV '
++ go to 9000
++ else if ( ncv .gt. maxncv ) then
++ print *, ' ERROR with _SSIMP: NCV is greater than MAXNCV '
++ go to 9000
++ end if
++c
++c %-----------------------------------------------------%
++c | |
++c | Specification of stopping rules and initial |
++c | conditions before calling DSAUPD |
++c | |
++c | TOL determines the stopping criterion. |
++c | |
++c | Expect |
++c | abs(lambdaC - lambdaT) < TOL*abs(lambdaC) |
++c | computed true |
++c | |
++c | If TOL .le. 0, then TOL <- macheps |
++c | (machine precision) is used. |
++c | |
++c | IDO is the REVERSE COMMUNICATION parameter |
++c | used to specify actions to be taken on return |
++c | from DSAUPD. (See usage below.) |
++c | |
++c | It MUST initially be set to 0 before the first |
++c | call to DSAUPD. |
++c | |
++c | INFO on entry specifies starting vector information |
++c | and on return indicates error codes |
++c | |
++c | Initially, setting INFO=0 indicates that a |
++c | random starting vector is requested to |
++c | start the ARNOLDI iteration. Setting INFO to |
++c | a nonzero value on the initial call is used |
++c | if you want to specify your own starting |
++c | vector (This vector must be placed in RESID.) |
++c | |
++c | The work array WORKL is used in DSAUPD as |
++c | workspace. Its dimension LWORKL is set as |
++c | illustrated below. |
++c | |
++c %-----------------------------------------------------%
++c
++ lworkl = ncv*(ncv+8)
++ tol = eigval_tol
++ info = 0
++ ido = 0
++c
++c %---------------------------------------------------%
++c | Specification of Algorithm Mode: |
++c | |
++c | This program uses the exact shift strategy |
++c | (indicated by setting PARAM(1) = 1). |
++c | IPARAM(3) specifies the maximum number of Arnoldi |
++c | iterations allowed. Mode 1 of DSAUPD is used |
++c | (IPARAM(7) = 1). All these options can be changed |
++c | by the user. For details see the documentation in |
++c | DSAUPD. |
++c %---------------------------------------------------%
++c
++ ishfts = 1
++ maxitr = itr_in
++ mode1 = 1
++c
++ iparam(1) = ishfts
++c
++ iparam(3) = maxitr
++c
++ iparam(7) = mode1
++c
++c %------------------------------------------------%
++c | M A I N L O O P (Reverse communication loop) |
++c %------------------------------------------------%
++c
++ 10 continue
++c
++c %---------------------------------------------%
++c | Repeatedly call the routine DSAUPD and take |
++c | actions indicated by parameter IDO until |
++c | either convergence is indicated or maxitr |
++c | has been exceeded. |
++c %---------------------------------------------%
++c
++ call dsaupd ( ido, bmat, n, which, nev, tol, resid,
++ & ncv, v, ldv, iparam, ipntr, workd, workl,
++ & lworkl, info )
++c
++ if (ido .eq. -1 .or. ido .eq. 1) then
++c
++c %--------------------------------------%
++c | Perform matrix vector multiplication |
++c | y <--- OP*x |
++c | The user should supply his/her own |
++c | matrix vector multiplication routine |
++c | here that takes workd(ipntr(1)) as |
++c | the input, and return the result to |
++c | workd(ipntr(2)). |
++c %--------------------------------------%
++c
++ status_flag = 0
++ 11 continue
++ call hessvec ( n, workd(ipntr(1)), workd(ipntr(2)),
++ & xyz, grad, return_flag, status_flag )
++ if ( status_flag.eq.0 ) go to 13
++ if ( status_flag.lt.0 ) go to 9000
++ label = L12
++ return
++ 12 go to 11
++ 13 continue
++c
++c %-----------------------------------------%
++c | L O O P B A C K to call DSAUPD again. |
++c %-----------------------------------------%
++c
++ go to 10
++c
++ end if
++c
++c %----------------------------------------%
++c | Either we have convergence or there is |
++c | an error. |
++c %----------------------------------------%
++c
++ if ( info .lt. 0 ) then
++c
++c %--------------------------%
++c | Error message. Check the |
++c | documentation in DSAUPD. |
++c %--------------------------%
++c
++ print *, ' '
++ print *, ' Error with _saupd, info = ', info
++ print *, ' Check documentation in _saupd '
++ print *, ' '
++ go to 9000
++c
++ else
++c
++c %-------------------------------------------%
++c | No fatal errors occurred. |
++c | Post-Process using DSEUPD. |
++c | |
++c | Computed eigenvalues may be extracted. |
++c | |
++c | Eigenvectors may be also computed now if |
++c | desired. (indicated by rvec = .true.) |
++c | |
++c | The routine DSEUPD now called to do this |
++c | post processing (Other modes may require |
++c | more complicated post processing than |
++c | mode1.) |
++c | |
++c %-------------------------------------------%
++c
++ if ( need_eigvecs .eq. 1 ) then
++ rvec = .true.
++ else
++ rvec = .false.
++ end if
++c
++ call dseupd ( rvec, 'All', select, d, v, ldv, sigma,
++ & bmat, n, which, nev, tol, resid, ncv, v, ldv,
++ & iparam, ipntr, workd, workl, lworkl, ierr )
++c
++c %----------------------------------------------%
++c | Eigenvalues are returned in the first column |
++c | of the two dimensional array D and the |
++c | corresponding eigenvectors are returned in |
++c | the first NCONV (=IPARAM(5)) columns of the |
++c | two dimensional array V if requested. |
++c | Otherwise, an orthogonal basis for the |
++c | invariant subspace corresponding to the |
++c | eigenvalues in D is returned in V. |
++c %----------------------------------------------%
++c
++ if ( ierr .ne. 0) then
++c
++c %------------------------------------%
++c | Error condition: |
++c | Check the documentation of DSEUPD. |
++c %------------------------------------%
++c
++ print *, ' '
++ print *, ' Error with _seupd, info = ', ierr
++ print *, ' Check the documentation of _seupd. '
++ print *, ' '
++ go to 9000
++c
++ else if ( debug_arpack.eq.1 ) then
++c
++ nconv = iparam(5)
++ n_eig_out = nconv
++ if ( nconv .le. 0 ) then
++ print *, ' '
++ print *, ' ARPACK: Not a single mode converged.'
++ print *, ' '
++ go to 9000
++ endif
++c
++C %--------------------------------------------%
++C | "UnDO" DO 20 j=1,nconv loop, because it is |
++C | illegal to jump in and out from a DO loop. |
++C %--------------------------------------------%
++c
++ j = 1
++ 16 continue
++c
++c %---------------------------%
++c | Compute the residual norm |
++c | |
++c | || A*x - lambda*x || |
++c | |
++c | for the NCONV accurately |
++c | computed eigenvalues and |
++c | eigenvectors. (iparam(5) |
++c | indicates how many are |
++c | accurate to the requested |
++c | tolerance) |
++c %---------------------------%
++c
++ status_flag = 0
++ 17 continue
++ call hessvec ( n, v(1,j), ax, xyz, grad,
++ & return_flag, status_flag )
++ if ( status_flag.eq.0 ) go to 19
++ if ( status_flag.lt.0 ) go to 9000
++ label = L18
++ return
++ 18 go to 17
++ 19 continue
++c
++ call daxpy(n, -d(j,1), v(1,j), 1, ax, 1)
++ d(j,2) = dnrm2(n, ax, 1)
++ d(j,2) = d(j,2) / abs(d(j,1))
++c
++ j = j + 1
++ if ( j .gt. nconv ) go to 20
++c
++ go to 16
++c
++ 20 continue
++c
++c %-----------------------------%
++c | Display computed residuals. |
++c %-----------------------------%
++c
++ call dmout(6, nconv, 2, d, maxncv, -6,
++ & 'Ritz values and relative residuals')
++c
++c %-------------------------------------------%
++c | Print additional convergence information. |
++c %-------------------------------------------%
++c
++ if ( info .eq. 1) then
++ print *, ' '
++ print *, ' Maximum number of iterations reached.'
++ print *, ' '
++ else if ( info .eq. 3) then
++ print *, ' '
++ print *, ' No shifts could be applied during implicit',
++ & ' Arnoldi update, try increasing NCV.'
++ print *, ' '
++ end if
++c
++ print *, ' '
++ print *, ' _SSIMP '
++ print *, ' ====== '
++ print *, ' '
++ print *, ' Size of the matrix is ', n
++ print *, ' The number of Ritz values requested is ', nev
++ print *, ' The number of Arnoldi vectors generated',
++ & ' (NCV) is ', ncv
++ print *, ' What portion of the spectrum: ', which
++ print *, ' The number of converged Ritz values is ',
++ & nconv
++ print *, ' The number of Implicit Arnoldi update',
++ & ' iterations taken is ', iparam(3)
++ print *, ' The number of OP*x is ', iparam(9)
++ print *, ' The convergence criterion is ', tol
++ print *, ' '
++ end if
++c
++c %----------------------------%
++c | Return eigvals and eigvecs |
++c %----------------------------%
++c
++ nconv = iparam(5)
++ n_eig_out = nconv
++ if ( nconv .le. 0 ) then
++ print *, ' '
++ print *, ' ARPACK: Not a single mode converged.'
++ print *, ' '
++ go to 9000
++ endif
++c
++ do 40 j=1, nconv
++ eigvals(j) = d(j,1)
++c
++ do 30 i=1, n
++ eigvecs((j-1)*n+i) = v(i,j)
++ 30 continue
++ 40 continue
++c
++ end if
++c
++c %--------------------------------%
++c | Done with subroutine dsarpack. |
++c %--------------------------------%
++c
++ label = 0
++ return
++c
++ 9000 continue !!! Error
++c
++ if( status_flag.eq.0 ) status_flag = ARPACK_ERROR
++c
++ label = status_flag
++ return
++c
++ end
++c
++c ------------------------------------------------------------------
+diff --git a/AmberTools/src/sqm/Makefile b/AmberTools/src/sqm/Makefile
+index a0fa790..5983764 100644
+--- a/AmberTools/src/sqm/Makefile
++++ b/AmberTools/src/sqm/Makefile
+@@ -82,7 +82,7 @@ QMOBJ = qm2_allocate_e_repul.o qm2_calc_charges.o qm2_calc_dipole.o \
+ install: sqm$(SFX)
+ mv sqm$(SFX) $(BINDIR)
+
+-sqm$(SFX): $(SQMOBJ) $(QMOBJ) netlib sys
++sqm$(SFX): $(SQMOBJ) $(QMOBJ) sys
+ $(FC) $(FPPFLAGS) $(FFLAGS) $(AMBERFFLAGS) -o sqm$(SFX) $(SQMOBJ) $(QMOBJ) \
+ -L$(LIBDIR) $(FLIBSF) ../lib/sys.a $(LDFLAGS) $(AMBERLDFLAGS)
+
+diff --git a/AmberTools/test/Makefile b/AmberTools/test/Makefile
+index 8252d52..24b9272 100644
+--- a/AmberTools/test/Makefile
++++ b/AmberTools/test/Makefile
+@@ -3,14 +3,14 @@ include ../src/config.h
+ ###### Top-level targets, for general use: ############################
+
+ test::
+- ./test_at_serial.sh
++ +./test_at_serial.sh
+
+ test.parallel::
+ ./test_at_parallel.sh
+
+ ###### Intermediate-level targets: ############################
+
+-test.serial: clean is_amberhome_defined \
++test.serial: is_amberhome_defined \
+ test.nab test.cpptraj test.antechamber test.mdgx \
+ test.leap test.resp test.pbsa test.gbnsr6 test.mmpbsa test.parmed \
+ test.elsize test.sqm test.rism1d test.amberlite \
+diff --git a/AmberTools/test/test_at_serial.sh b/AmberTools/test/test_at_serial.sh
+index a154c84..c092eb6 100755
+--- a/AmberTools/test/test_at_serial.sh
++++ b/AmberTools/test/test_at_serial.sh
+@@ -44,3 +44,9 @@ fi
+
+ # save summary for later reporting:
+ tail -5 ${logfile} > ${logdir}/at_summary
++
++if [ "${questionable_count}" -ne 0 -o "${error_count}" -ne 0 ]
++then
++ # Tests failed
++ exit 1
++fi
+diff --git a/AmberTools/test/test_check.sh b/AmberTools/test/test_check.sh
+index 108c446..62c0b88 100644
+--- a/AmberTools/test/test_check.sh
++++ b/AmberTools/test/test_check.sh
+@@ -63,7 +63,7 @@ check_environment() {
+ # We are done here for Macs
+ test $is_mac = "yes" && return
+
+- python << EOF
++ python2 << EOF
+ import os
+ import sys
+ ambhome = os.getenv('AMBERHOME')