#!/bin/csh # # 1 Oct 10 - script to "link-edit" a GAMESS executable # # Invoke this job by 'lked EXE VERNO >& lked.log &' # EXE is normally 'gamess', # VERNO is the next version number, e.g. 01, 02, 03, ... # This produces executable "EXE.VERNO.x", e.g. gamess.01.x # if (-e install.info) then source install.info else echo "Please run 'config' first, to set up GAMESS compiling information" exit 4 endif # # the configuration file read just above provides the next two variables, # and some others that are used below. # set TARGET=$GMS_TARGET chdir $GMS_PATH # if (!($?GMS_BG_MODEL)) set GMS_BG_MODEL=' ' # # ---- and now the script begins... # set EXE=$1 set VERNO=$2 if (null$EXE == null) set EXE=gamess if (null$VERNO == null) set VERNO=00 date # echo GAMESS will be linked into the binary file $EXE.$VERNO.x. # if (-e $EXE.$VERNO.x) then echo An old executable $EXE.$VERNO.x already exists! echo Bombing out... exit 4 endif # # By hand editing, the user can select some "plug-in" optional codes # ================================================================== # # 1. optional SIMOMM method, using Tinker MM code # set TINKER=false # # 2. optional Valence Bond method, using VB2000 code --or-- XMVB code. # you can link only one (1) VB program, please do not select both! # set VB2000=false set XMVB=false # # 3. optional Nuclear-Electronic Orbital method, using NEO code # set NEO=false # # 4. optional Nvidia/CUDA code, for closed shell SCF Fock construction # see ~/gamess/libqc/aaa.readme.1st for more information # set GPUCODE=false # # choose compiler and math library options for each system # ======================================================== # these consist of # LDR - the name of the loader (usually a compiler). # LDOPTS - options, such as asking for a load map. # LIBRARIES - extra system libraries which must be searched. # BLAS - set to blas.o if not using system BLAS. # set to blank if using system BLAS. # VECTOR - set to vector.o on a vector processor. # set to blank on a scalar processor. # QUICHE - set to zunix.o if using true dynamic memory, # possibly add other system specific objects. # set to blank otherwise. # In principle, the 'config' step has captured enough information # about library locations that no user need change anything below. # Digital/Compaq/HP 64 bit "alpha workstation" # Use the Digital/Compaq eXtended Math Library for BLAS if installed. # if ($TARGET == axp64) then set LDR='f77' if (`uname` == Linux) set LDR='fort' set LDOPTS='' # -Wl,-M' shows load map, -non_shared to see libraries set LIBRARIES=' ' set BLAS='blas.o' if (-e /usr/lib/libdxml.a) then set LIBRARIES='-ldxml' set BLAS=' ' endif if (-e /usr/lib/libcxml.a) then set LIBRARIES='-lcxml' set BLAS=' ' endif set VECTOR=' ' set QUICHE='zunix.o' endif # if ($TARGET == cray-pvp) then set LDR='f90' set LDOPTS='-m 0 -v -V' set LIBRARIES=' ' set BLAS=' ' set VECTOR='vector.o' set QUICHE='zunix.o' endif # if ($TARGET == cray-t3e) then set LDR='env TARGET=cray-t3e cld -Dstreams=on' set LDOPTS='-V -Xm' set LIBRARIES='-lc -lm -lu -lf -lsci -lfi -lsma -lmpi -lpmpi' set BLAS=' ' set VECTOR=' ' set QUICHE='zunix.o' endif # if ($TARGET == cray-x1) then set LDR='ftn' set LDOPTS='-V -dp -sdefault64 -Ossp' set LIBRARIES=' ' set BLAS=' ' set VECTOR='vector.o' set QUICHE='zunix.o' endif # if ($TARGET == cray-xd1) then set LDR='mpif90' # select 'amd64e' in next line if your Opteron supports SSE3 instructions set LDOPTS='-tp amd64 -i8 -fast -Mnosecond_underscore' set LIBRARIES=' ' set BLAS=' ' # select PGI library over ACML library. if (-e $PGI/linux86-64/lib/libblas.a) then set LIBRARIES="$PGI/linux86-64/lib/libblas.a" echo "Found BLAS in $LIBRARIES" else if (-e $ACML_DIR/lib/libacml.a) then set LIBRARIES="$ACML_DIR/lib/libacml.a" echo "Found BLAS in $LIBRARIES" else echo ' ' echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * *' echo ' Warning. No math library was found.' echo ' You should install one for maximum performance.' echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * *' echo ' ' set BLAS='blas.o' endif set VECTOR=' ' set QUICHE='zunix.o' endif # # Cray XT # if ($TARGET == cray-xt) then # this will be set to 'ftn' by the configuration step set LDR=$GMS_FORTRAN # two choices not included in the configuration step # These must match 'comp' and 'compddi', and loaded software modules. # valid choices: pathscale, intel, cray, pgi set GMS_XT_COMP = 'pgi' # valid choices: i7, barcelona, shanghai, or blank set GMS_XT_ARCH = ' ' set LDOPTS='-default64' switch ($GMS_XT_COMP) case pgi: set LDOPTS="$LDOPTS -i8 -mcmodel=medium" breaksw case pathscale: set LDOPTS="$LDOPTS -L$MPT_DIR/mpich2-pgi/lib" breaksw case intel: case cray: default: breaksw endsw switch ($GMS_XT_ARCH) case barcelona: set LDOPTS = "$LDOPTS -tp barcelona-64 -Mfpmisalign" breaksw case shanghai: set LDOPTS = "$LDOPTS -tp shanghai-64 -Mfpmisalign" breaksw case i7: set LDOPTS = "$LDOPTS -tp x64" breaksw default: set LDOPTS = "$LDOPTS" breaksw endsw set LIBRARIES="-L/cray/iss/park_bench/lib -lfpmpi64-cnl" set LIBRARIES=" " set LIBRARIES="$LIBRARIES -lhugetlbfs" # # ------------------------ -lfast_mv ------------------------------ # use -lfast_mv for faster evaluation of the exponential function. # -lfast_mv must come after the objects, yet before -lm or -lacml # performance improvement will vary. # not used by default, since it is so far a non-standard module. # ------------------------ -lfast_mv ------------------------------ # set BLAS=' ' set VECTOR=' ' set QUICHE='zunix.o' endif # # Fujitsu PrimePower, using SSL2 BLAS library # if (($TARGET == fuji-pp32) || ($TARGET == fuji-pp64)) then set LDR='f90' set LDOPTS='-KV8PLUS' if ($TARGET == fuji-pp64) set LDOPTS='-KV9' set LIBRARIES='-SSL2' set BLAS=' ' if ($TARGET == fuji-pp64) set BLAS='blaswrap.o' set VECTOR=' ' set QUICHE='zunix.o' endif # if (($TARGET == hpux32) || ($TARGET == hpux64)) then set LDR='f90' if ($TARGET == hpux32) then set LDOPTS='+O2 +Ofastaccess' # add -Wl,-m to see map set LIBRARIES='-ldld /opt/fortran90/lib/pa2.0/libblas.a +U77' endif if ($TARGET == hpux64) then set LDOPTS='+DD64 +O2' # add -Wl,-m to see map set LIBRARIES='-ldld -lveclib8 +U77' endif set BLAS=' ' set VECTOR=' ' set QUICHE=' ' endif # # Various IBM sections follow. # To see length of common blocks and subroutine sizes, # add "-Wl,-bmap:../lked.sizes" to LDOPTS. # The following will pick out the huge common blocks: # a) grep -i " cm " lked.sizes >& filtered # b) vi filtered # :%s/^/ / # :wq (pushes subroutine names above column72) # c) strip72 (Mike's program on Si.FI) # input=filtered # output=stripped # d) vi stripped # :%s/^ // # :wq (no blanks in column 1) # e) sort +1 -d stripped >& sorted # f) keep only the end of 'sorted' # # To avoid use of dynamic link libraries, if xlfrte is absent, # add "-Wl,-bnso -Wl,-bI:/lib/syscalls.exp" to LDOPTS. # # The fast math library from IBM is called ESSL: # 1. BLAS routines in ESSL are faster than the free 32 bit lib in AIX, # note that -lblas works *IF AND ONLY IF* you are running 32 bit. # 2. Power2 has a different ESSL name, -lessl2, which we don't # any longer try to detect since few Power2 systems remain. # 3. We can use -lessl on 64 bit machines only by using the 32 bit # wrapper hack in blaswrap.src. # 4. If you don't have ESSL, a fallback is to remove the 32 bit # wrapper hack in "comp" (search on DASUM), repeat compall, # and set BLAS to "blas.o" and LIBRARIES to blank below. # if ($TARGET == ibm32) then set LDR='xlf' set LDOPTS='-Wl,-m -Wl,-bmaxdata:0x70000000 -Wl,-bloadmap:../lked.map' set LIBRARIES='-lblas' # free 32 bit lib in AIX if (-e /lib/libessl.a) set LIBRARIES='-lessl' # a bit better if exists set BLAS=' ' set VECTOR=' ' set QUICHE='zunix.o' endif # if ($TARGET == ibm64) then set LDR='xlf' if(`uname` == AIX) then set LDOPTS='-bbigtoc -q64 -Wl,-m -Wl,-bloadmap:../lked.map' set LIBRARIES='-lessl' else set LDOPTS='-q64' set LIBRARIES='-lessl -lxlf90_r' endif set BLAS='blaswrap.o' set VECTOR=' ' set QUICHE='zunix.o' endif # if ($TARGET == ibm64-sp) then set LDR='mpxlf_r' set LDOPTS='-q64' set LIBRARIES='-lessl' set BLAS='blaswrap.o' set VECTOR=' ' set QUICHE='zunix.o' endif # if ($TARGET == ibm-bg) then if ($GMS_BG_MODEL == L) then set LDR='blrts_xlf' endif if ($GMS_BG_MODEL == P) then set LDR='mpixlf77_r' endif set LDOPTS=' ' # math library: try IBM's ESSL first, # then try Goto-san's Blas (two possible system directories), # then try Goto-san's Blas (from GAMESS directory itself). # Abort if none is found. if (-e /opt/ibmmath/lib/libesslbg.a) then set LIBRARIES='-L/opt/ibmmath/lib -lesslbg' set BLAS=' ' else if (-e /soft/tools/GotBLAS/libgoto.a) then set LIBRARIES='-L/soft/tools/GotBLAS -lgoto' set BLAS=' ' else if (-e /soft/tools/LIBGOTO/libgoto.a) then set LIBRARIES='-L/soft/tools/LIBGOTO -lgoto' set BLAS=' ' else if (-e libgoto.a) then set LIBRARIES='-L.. -lgoto' set BLAS=' ' else # if you really don't have a math library, use the slow FORTRAN # code supplied with GAMESS, taking out this abrupt departure. #--set LIBRARIES=' ' #--set BLAS='blas.o' echo "No math library found on this Blue Gene, please help scripting" exit 4 endif set VECTOR=' ' set QUICHE='zunix.o' endif # # remarks common to linux32 and linux64 # Linux has become the standard Unix flavor, and thus blossomed into # the usual Unix confusion: multiple FORTRAN compilers, multiple # math libraries, and since there is no vendor, or even one main # distribution, the software is installed at random locations. # Hence, the 'config' script will have asked many questions to get the # compiler, math library, version numbers, and appropriate path names. # # ------ Linux on 32 bit chips ----- # if ($TARGET == linux32) then set VECTOR=' ' set QUICHE='zunix.o' # # settings which depend on the compiler choice: # switch ($GMS_FORTRAN) case g77: set LDR='g77' set LDOPTS=' ' # add '-Wl,-M' to see load map set FORTLIBS=' ' breaksw case gfortran: set LDR='gfortran' set LDOPTS=' ' set FORTLIBS=' ' breaksw case ifort: set LDR='ifort' set LDOPTS=' ' # add '-Wl,-M' to see load map set FORTLIBS='-Vaxlib' breaksw case pgf77: set LDR='pgf77' set LDOPTS='-g77libs -Mlfs' set FORTLIBS=' ' breaksw case f2c: set LDR='gcc' set LDOPTS=' ' set FORTLIBS='-lf2c -lm' breaksw default: echo Please spell your linux32 compiler correctly. exit 4 endsw # # settings which depend on the math library: mkl, atlas, acml, none # switch ($GMS_MATHLIB) # for MKL, we lack experience. The following is the 64-bit # stuff, with all 64's removed. It might be right! Try your # major version number by deleting the "help", in your case below. # It will then go into your choice of 8, 9, ... and miss the # bombing out in the 'default' clause. case mkl: set mpath=$GMS_MATHLIB_PATH switch ($GMS_MKL_VERNO) case 8help: set MATHLIBS="-L$mpath -lmkl_lapack -lmkl -lguide -lpthread" breaksw case 9help: set MATHLIBS="-L$mpath -lmkl_lapack -lmkl -lguide -lpthread" breaksw case 10help: # next one forces single-threaded usage only...exactly what we want. set MATHLIBS="-L$mpath -lmkl_intel_lp -lmkl_sequential -lmkl_core" breaksw case 11: # next attempts a static link, from reading online documentation. # if this fails to work, try the version 10 lines shown just above. set MATHLIBS="$mpath/libmkl_intel.a" set MATHLIBS="$MATHLIBS $mpath/libmkl_sequential.a" set MATHLIBS="$MATHLIBS $mpath/libmkl_core.a" breaksw default: echo "please edit 'lked' to select the right MKL library stuff" exit breaksw endsw set BLAS=' ' breaksw case atlas: # If the ATLAS comes with static libraries, link to them, # so that only the compile node has to have the libraries. # Otherwise, attempt a link against shared object libs. # See the 64 bit Atlas below for a way to fix the linker's # not being able to locate -lf77blas, if that happens. if (-e $GMS_MATHLIB_PATH/libf77blas.a) then set MATHLIBS="$GMS_MATHLIB_PATH/libf77blas.a" set MATHLIBS="$MATHLIBS $GMS_MATHLIB_PATH/libatlas.a" else set MATHLIBS="-L$GMS_MATHLIB_PATH -lf77blas -latlas" endif set BLAS=' ' breaksw case acml: # do a static link so that only compile node needs to install ACML set MATHLIBS="$GMS_MATHLIB_PATH/libacml.a" set BLAS=' ' breaksw case none: default: echo "Warning. No math library was found, you should install one." echo " MP2 calculations speed up about 2x with a math library." echo "CCSD(T) calculations speed up about 5x with a math library." set BLAS='blas.o' set MATHLIBS=' ' breaksw endsw # set LIBRARIES="$FORTLIBS $MATHLIBS" endif # # ------ Linux on 64 bit chips ----- # if ($TARGET == linux64) then set VECTOR=' ' set QUICHE='zunix.o' # # settings which depend on the FORTRAN: # switch ($GMS_FORTRAN) case gfortran: set LDR='gfortran' set LDOPTS=' ' set FORTLIBS=' ' breaksw case ifort: set LDR='ifort' set LDOPTS='-i8' # -Wl,-M generates a load map # this auxiliary library seems to have disappeared in ifort 10 set FORTLIBS=' ' if($GMS_IFORT_VERNO < 10) set FORTLIBS='-Vaxlib' breaksw case pgf77: set LDR='pgf77' set LDOPTS='-i8 -i8storage -mcmodel=medium' set LDOPTS="$LDOPTS -fastsse -Mipa=fast,safe -Mprof=func" set FORTLIBS=' ' breaksw case pathf90: set LDR='pathf90' set LDOPTS=' ' set FORTLIBS=' ' breaksw default: echo "don't know how to use a linux64 compiler named $GMS_FORTRAN" exit 4 breaksw endsw # # settings which depend on the math library: mkl, atlas, acml, none # switch ($GMS_MATHLIB) case mkl: set mpath=$GMS_MATHLIB_PATH switch ($GMS_MKL_VERNO) case 8: set MATHLIBS="-L$mpath -lmkl_lapack64 -lmkl -lguide -lpthread" breaksw case 9: set MATHLIBS="-L$mpath -lmkl_lapack -lmkl -lguide -lpthread" breaksw breaksw case 10: case 11: # next are a static link, in single-threaded mode (serial BLAS). # This option precludes any need to # a) install .so shared object libraries on every node, # b) define LD_LIBRARY_PATH to find the .so libraries, or # c) define MKL_NUM_THREADS=1 # If desired, there is a single-threaded shared object link below. set MATHLIBS=" $mpath/libmkl_intel_lp64.a" set MATHLIBS="$MATHLIBS $mpath/libmkl_sequential.a" set MATHLIBS="$MATHLIBS $mpath/libmkl_core.a" breaksw case 10-so: case 11-so: # next one forces single-threaded usage. # run-time libs (and LD_LIBRARY_PATH) needed on every compute node. # hand edit GMS_MKL_VERNO in your 'install.info' to access this. set MATHLIBS="-L$mpath -lmkl_intel_lp64 -lmkl_sequential -lmkl_core" default: echo "unknown version number for MKL/linux64" exit breaksw endsw set BLAS=' ' breaksw case atlas: # If the ATLAS comes with static libraries, link to them, # so that only the compile node has to have the libraries. # Otherwise, attempt a link against shared object libs. # # Some versions of Atlas come without proper setup to use them. # For example, you may need to give some specific version such # as 3.0 some generic names, by doing the right soft links: # chdir /usr/lib64/atlas (just 'lib' for linux32) # ln -s libatlas.so.3.0 libatlas.so # ln -s libblas.so.3.0 libblas.so # ln -s libcblas.so.3.0 libcblas.so # ln -s libf77blas.so.3.0 libf77blas.so # ln -s liblapack_atlas.so.3.0 liblapack.so # ln -s liblapack.so.3.0 liblapack.so # It is strange the RPM's don't do these soft links for us. if (-e $GMS_MATHLIB_PATH/libf77blas.a) then set MATHLIBS="$GMS_MATHLIB_PATH/libf77blas.a" set MATHLIBS="$MATHLIBS $GMS_MATHLIB_PATH/libatlas.a" else set MATHLIBS="-L$GMS_MATHLIB_PATH -lf77blas -latlas" endif set BLAS=' ' breaksw case acml: # do a static link so that only compile node needs to install ACML set MATHLIBS="$GMS_MATHLIB_PATH/libacml.a" # if you want to try a dynamic link, use this: #---set MATHLIBS="-L$GMS_MATHLIB_PATH -lacml -lacml_mv" set BLAS=' ' breaksw case none: default: echo "Warning. No math library was found, you should install one." echo " MP2 calculations speed up about 2x with a math library." echo "CCSD(T) calculations speed up about 5x with a math library." set BLAS='blas.o' set MATHLIBS=' ' breaksw endsw # set LIBRARIES="$FORTLIBS $MATHLIBS" endif # endif # # MacIntosh, clauses for using g77 or gfortran. # The math library is Apple's veclib framework. # if (($TARGET == mac32) || ($TARGET == mac64)) then set LDR=$GMS_FORTRAN switch ($TARGET) case mac32: set LDOPTS='-Wl,-multiply_defined -Wl,suppress' set BLAS=' ' breaksw case mac64: set LDOPTS='-m64' set BLAS='blaswrap.o' breaksw endsw # Next is the incantation to link to Apple's BLAS library. # The SystemStubs library wasn't needed under Xcode 2.0 # Older systems (e.g. 10.3) may need this changed to -lcc_dynamic set LIBRARIES='-Wl,-framework -Wl,vecLib -lSystemStubs' set VECTOR=' ' set QUICHE='zunix.o' endif # if ($TARGET == necsx) then set LDR='f90' set LDOPTS='-ebw -size_t64 -Wf"-v -pvctl noassume vwork=stack"' # If MathKeisan is installed do not use the old memory layout. if ({(/bin/nm /usr/lib/libblas.a | grep -c mkversion)}) then echo 'MathKeisan is in use' set LDOPTS="$LDOPTS -Pmulti" else echo 'MathKeisan is NOT in use' set LDOPTS="$LDOPTS -Pmulti -Wl,-h32G_memlayout" endif set LIBRARIES='/usr/lib/lib64/libblas_64.a' set BLAS=' ' set VECTOR='vector.o' set QUICHE='zunix.o' endif # # IRIX/MIPS chips only. In other words, only systems sold long, long ago # add '-Wl,-M' to LDOPTS in order to see load map # error 136 about padding common blocks is to be suppressed. if (($TARGET == sgi32) || ($TARGET == sgi64)) then set LDR=$GMS_FORTRAN if ($TARGET == sgi32) set LDOPTS='-n32 -woff 136' if ($TARGET == sgi64) set LDOPTS=' -64 -woff 136' set LIBRARIES='-lblas' set BLAS=' ' if ($TARGET == sgi64) set BLAS='blaswrap.o' set VECTOR=' ' set QUICHE='zunix.o' endif # if (($TARGET == sun32) || ($TARGET == sun64)) then set VECTOR=' ' set QUICHE='zunix.o' # # linker name and link options depend on Solaris and FORTRAN release if ($GMS_SUN_OS_VERNO >= 7) then set LDR='f90' set xxx=$GMS_SUN_FORT_VERNO set f90_major=$xxx:r set f90_minor=$xxx:e set newf90=false if (($f90_major == 8) && ($f90_minor >= 3)) set newf90=true if ($f90_major >= 9) set newf90=true if ($TARGET == sun32) then if ($newf90 == true) then set LDOPTS=-m32 else if(`uname -p` == sparc) set LDOPTS='-fast -xarch=v8plus' if(`uname -p` == i386) set LDOPTS='-fast -xarch=pentium_pro' endif endif if ($TARGET == sun64) then if ($newf90 == true) then set LDOPTS=-m64 else if(`uname -p` == sparc) set LDOPTS='-fast -xarch=v9' if(`uname -p` == i386) set LDOPTS='-fast -xarch=amd64' endif endif else set LDR=f77 set LDOPTS='-fast -xarch=v8plus' endif # add -m to LDOPTS to see a load map if (-e /opt/SUNWspro/lib/libsunperf.so) then set LIBRARIES='-xlic_lib=sunperf' set BLAS=' ' if ($TARGET == sun64) set BLAS='blaswrap.o' else set LIBRARIES=' ' set BLAS='blas.o' if ($TARGET == sun64) set BLAS='blaswrap.o blas.o' echo " " echo "You did not install the Sun Performance Library," echo "which should should in your compiler suite." echo "We strongly recommend tthat you do install this..." echo " " echo "Proceeding without a good math library, which is slow at run time." echo " " endif endif # # ------ Windows on 32 bit chips ----- # if ($TARGET == win32) then # # settings which depend on the FORTRAN: pgf77 # # WS2_32.Lib is needed for WinSock # set LIBRARIES="WS2_32.Lib" # switch ($GMS_FORTRAN) case pgf77: set LDR='pgf77' set LDOPTS='-Bstatic' if ($GMS_WIN_OPT == baseline) set LDOPTS="$LDOPTS $GMS_WIN_TP -O0" if ($GMS_WIN_OPT == linux) set LDOPTS="$LDOPTS $GMS_WIN_TP" if ($GMS_WIN_OPT == fast) set LDOPTS="$LDOPTS $GMS_WIN_TP -fast -Mipa=fast,safe" if ($GMS_WIN_OPT == testing) set LDOPTS="$LDOPTS $GMS_WIN_TP -fast -Mipa=fast,safe $GMS_WIN_FLAGS" # # For more detailed information as to which flags are being used # by the compiler during the build - uncomment the line below. # # set LDOPTS="$LDOPTS -v" # set LIBRARIES="$LIBRARIES" breaksw default: echo "Please spell your win32 compiler correctly." exit 4 endsw # # settings which depend on the math library: acml, blas, none # switch ($GMS_MATHLIB) # case acml: # do a static link so that only compile node needs to install ACML set LIBRARIES="$LIBRARIES -Bdynamic -lacml" set BLAS=' ' breaksw case blas: if (-e $PGI\\win32\\10.4\\lib\\libblas.lib) then echo "Using PGI's 32-bit blas version 10.4" set LIBRARIES="$LIBRARIES -lblas" set BLAS=' ' breaksw endif if (-e $PGI\\win32\\10.3\\lib\\libblas.lib) then echo "Using PGI's 32-bit blas version 10.3" set LIBRARIES="$LIBRARIES -lblas" set BLAS=' ' breaksw endif if (-e $PGI\\win32\\10.2\\lib\\libblas.lib) then echo "Using PGI's 32-bit blas version 10.2" set LIBRARIES="$LIBRARIES -lblas" set BLAS=' ' breaksw endif case none: default: echo "Warning. No math library was found, you should install one." echo " MP2 calculations speed up about 2x with a math library." echo "CCSD(T) calculations speed up about 5x with a math library." set BLAS='blas.o' breaksw endsw # set VECTOR=' ' set QUICHE='zunix.o' endif # # ------ Windows on 64 bit chips ----- # if ($TARGET == win64) then # # settings which depend on the FORTRAN: pgf77 # # WS2_32.Lib is needed for WinSock # set LIBRARIES="WS2_32.Lib" # switch ($GMS_FORTRAN) case pgf77: set LDR = 'pgf77' # # -i8storage is a depreciated flag so we remove it. # # set LDOPTS='-i8 -i8storage -Bstatic' set LDOPTS='-i8 -Bstatic' if ($GMS_WIN_OPT == baseline) set LDOPTS="$LDOPTS $GMS_WIN_TP -O0" if ($GMS_WIN_OPT == linux) set LDOPTS="$LDOPTS $GMS_WIN_TP -fastsse -Mipa=fast,safe -Mprof=func" if ($GMS_WIN_OPT == fast) set LDOPTS="$LDOPTS $GMS_WIN_TP -fast -Mipa=fast,safe" if ($GMS_WIN_OPT == testing) set LDOPTS="$LDOPTS $GMS_WIN_TP -fast -Mipa=fast,safe $GMS_WIN_FLAGS" # # For more detailed information as to which flags are being used # by the compiler during the build - uncomment the line below. # # set LDOPTS="$LDOPTS -v" # breaksw default: echo "Please spell your win64 compiler correctly." exit 4 breaksw endsw # # settings which depend on the math library: acml, blas, none # switch ($GMS_MATHLIB) case acml: # do a static link so that only compile node needs to install ACML set LIBRARIES="$LIBRARIES -Bdynamic -lacml" set BLAS=' ' breaksw case blas: if (-e $PGI\\win64\\10.4\\lib\\libblas.lib) then echo "Using PGI's 64-bit blas version 10.4" set LIBRARIES="$LIBRARIES -lblas" set BLAS=' ' breaksw endif if (-e $PGI\\win64\\10.3\\lib\\libblas.lib) then echo "Using PGI's 64-bit blas version 10.3" set LIBRARIES="$LIBRARIES -lblas" set BLAS=' ' breaksw endif if (-e $PGI\\win64\\10.2\\lib\\libblas.lib) then echo "Using PGI's 64-bit blas version 10.2" set LIBRARIES="$LIBRARIES -lblas" set BLAS=' ' breaksw endif case none: default: echo "Warning. No math library was found, you should install one." echo " MP2 calculations speed up about 2x with a math library." echo "CCSD(T) calculations speed up about 5x with a math library." set BLAS='blas.o' breaksw endsw # set VECTOR=' ' set QUICHE='zunix.o' endif # # Choose the message passing libraries, MSG_LIBRARIES. # ==================================================== # # In all cases, the Distributed Data Interface has been # compiled to a library archive, with the name ../ddi/libddi.a, # where we must look first. Depending on the machine DDI has # several implementations and may be looking for # TCP/IP sockets, SHMEM, MPI, or LAPI/MPI # so here we select the specific low level system libraries. # switch ($TARGET) # TCP/IP sockets interface (most systems) case axp64: case cray-pvp: case cray-xd1: case fuji-pp32: case fuji-pp64: case hpux32: case hpux64: case ibm32: case ibm64: case linux32: case linux64: case mac32: case mac64: case sgi32: case sun32: case sun64: # # try to set up MPI usage on 64-bit linux clusters. set MPILIBS='' if ($TARGET == linux64) then if (($GMS_DDI_COMM == mpi) || ($GMS_DDI_COMM == mixed)) then switch ($GMS_MPI_LIB) case impi: set MPILIBS="-L$GMS_MPI_PATH/lib64" set MPILIBS="$MPILIBS -lmpi -lmpigf -lmpigi -lrt" breaksw case mpich2: set MPILIBS="-L$GMS_MPI_PATH/lib" set MPILIBS="$MPILIBS -lmpich -lrt" breaksw case mvapich2: set MPILIBS="-L$GMS_MPI_PATH/lib -lmpich" set MPILIBS="$MPILIBS -L$GMS_OFED_PATH -libverbs -lrdmacm -libumad" breaksw case myrinet: # very old information, perhaps not correct anymore. set MPILIBS="/usr/local/mpich-gm/lib/libmpich.a" set MPILIBS="$MPILIBS /usr/local/gm/lib/libgm.a" breaksw case openmpi: set MPILIBS="-L$GMS_MPI_PATH/lib" set MPILIBS="$MPILIBS -lmpi" breaksw case mpt: set MPILIBS="-L$GMS_MPI_PATH/lib" set MPILIBS="$MPILIBS -lmpi" breaksw default: echo "comp script has unknown MPI software requested" exit 4 breaksw endsw endif endif # # plain old TCP/IP will have initialized MPILIBS as empty string set MSG_LIBRARIES="../ddi/libddi.a $MPILIBS -lpthread" # # Sun-like needs some extra TCP/IP library searches if (($TARGET == sun64) || \ ($TARGET == fuji-pp32) || ($TARGET == fuji-pp64)) then set MSG_LIBRARIES="$MSG_LIBRARIES -lsocket -lnsl -lrt" endif if ($TARGET == sun32) then if ($GMS_SUN_OS_VERNO < 7) then set MSG_LIBRARIES="$MSG_LIBRARIES -lsocket -lnsl -lposix4" else set MSG_LIBRARIES="$MSG_LIBRARIES -lsocket -lnsl -lrt" endif endif breaksw # # SHMEM interface, which is only partly functional at best. case cray-t3e: case cray-x1: set MSG_LIBRARIES='../ddi/libddi.a' breaksw case sgi64: set MSG_LIBRARIES='../ddi/libddi.a -lsma -lmpi' breaksw # # MPI interface, for entire XT product line case cray-xt: set MSG_LIBRARIES='../ddi/libddi.a' breaksw # # LAPI/MPI interface, for the SP product line case ibm64-sp: set MSG_LIBRARIES='../ddi/libddi.a -llapi_r -lpthread' breaksw # # BG/L and BG/P case ibm-bg: switch ($GMS_BG_MODEL) # Blue Gene/L uses DDI, ARMCI, and MPI, in that order case L: set MSG_LIBRARIES="../ddi/libddi.a" set MSG_LIBRARIES="$MSG_LIBRARIES $GMS_ARMCI_PATH/lib/BGL/libarmci.a" set MSG_LIBRARIES="$MSG_LIBRARIES -L/bgl/BlueLight/ppcfloor/bglsys/lib" set MSG_LIBRARIES="$MSG_LIBRARIES -lmpich.rts -lmsglayer.rts" set MSG_LIBRARIES="$MSG_LIBRARIES -lrts.rts -ldevices.rts" breaksw # Blue Gene/P uses 'mpixlf77_r" so it knows its MPI libs case P: set MSG_LIBRARIES="../ddi/libddi.a" breaksw default: echo Illegal BG model value $GMS_BG_MODEL exit 8 breaksw endsw # # correct stuff for NEC-SX is unknown... case necsx: set MSG_LIBRARIES='undefined' echo Please fix lked for this machine $TARGET exit 5 breaksw # # Microsoft Windows systems uses MPI (MS-MPI or MPICH2) case win32: case win64: # # Use Microsoft MPI implementation (MS-MPI) # # This flag only works with PGI compilers. Any other compiler will # have to specify the actual location of the MS-MPI libraries. # if ($GMS_MPI_LIB == msmpi) set MPILIBS="-Mmpi=msmpi" # # Use Argonne National Laboratory's MPI implementation (MPICH2) # # Assumes the mpich2 library is stored at the same directory level as the # GAMESS. # if ($GMS_MPI_LIB == mpich2) then if ($TARGET == win32) set MPILIBS="C:\Progra~1\MPICH2\lib\libmpi.a" if ($TARGET == win64) set MPILIBS="C:\Progra~1\MPICH2\lib\mpi.lib" endif # set MSG_LIBRARIES="../ddi/libddi.a $MPILIBS" breaksw # to get here must be a target typo. default: echo The lked script does not select a correct TARGET machine type. echo What you typed when editing this script was $TARGET exit 4 breaksw endsw # # It might at some times be convenient to run in serial, such # as porting to a new machine, when you might want to divide # the process of understanding new compiler/math libraries, # from understanding a new MPI. "./comp serial" to compile # a file which is purely serial, then uncomment the next line. #---set MSG_LIBRARIES=serial.o # # Final setup for linking # ======================= # unset echo set STANDARD_GAMESS_OBJ1=(aldeci.o algnci.o \ basccn.o basecp.o basext.o basg3l.o bashuz.o bashz2.o baskar.o \ basn21.o basn31.o baspcn.o bassto.o \ ccaux.o ccddi.o ccqaux.o ccquad.o ccsdt.o \ ceeis.o chgpen.o cisgrd.o cosmo.o cosprt.o \ cphf.o cpmchf.o cprohf.o \ dccc.o dcgues.o dcint2.o dclib.o dcmp2.o dcscf.o dctran.o \ ddilib.o delocl.o demrpt.o \ dft.o dftaux.o dftdis.o dftfun.o dftgrd.o dftint.o \ dftxca.o dftxcb.o dftxcc.o dftxcd.o dftxce.o dftxcf.o dftxcg.o \ dgeev.o dgesvd.o dmulti.o drc.o \ eaipcc.o ecp.o ecpder.o ecplib.o ecppot.o \ efchtr.o efdrvr.o efelec.o efgrd2.o efgrda.o efgrdb.o efgrdc.o \ efinp.o efinta.o efintb.o efmo.o efpaul.o efpcm.o efpcov.o \ efpfmo.o eftei.o \ eigen.o elglib.o elgloc.o elgscf.o eomcc.o ewald.o ffield.o \ fmo.o fmocp.o fmoesd.o fmogrd.o fmohss.o fmoint.o fmoio.o \ fmolib.o fmopbc.o fmoprp.o \ frfmt.o fsodci.o \ g3.o globop.o gmcpt.o gradex.o guess.o \ grd1.o grd2a.o grd2b.o grd2c.o \ gugdga.o gugdgb.o gugdm.o gugdm2.o gugdrt.o gugem.o gugsrt.o \ gvb.o hess.o hss1a.o hss1b.o hss2a.o hss2b.o \ inputa.o inputb.o inputc.o \ int1.o int2a.o int2b.o int2c.o int2d.o int2f.o int2g.o \ int2r.o int2s.o int2t.o int2u.o int2v.o int2w.o int2x.o \ iolib.o ivocas.o lagran.o local.o loccd.o locpol.o) set STANDARD_GAMESS_OBJ2=(mcpgrd.o mcpinp.o mcpint.o \ mcpl10.o mcpl20.o mcpl30.o mcpl40.o \ mcpl50.o mcpl60.o mcpl70.o mcpl80.o \ mccas.o mcjac.o mcqdpt.o mcqdwt.o mcqud.o mcscf.o mctwo.o \ mdefp.o mexing.o mm23.o morokm.o \ mp2.o mp2ddi.o mp2grd.o mp2gr2.o mp2ims.o \ mpcdat.o mpcgrd.o mpcint.o mpcmol.o mpcmsc.o \ mthlib.o nameio.o nmr.o \ ordint.o ormas1.o parley.o pcm.o pcmcav.o pcmcv2.o pcmder.o \ pcmdis.o pcmief.o pcmpol.o pcmvch.o \ prpamm.o prpel.o prplib.o prppop.o \ qeigen.o qfmm.o qmfm.o qrel.o \ raman.o rhfuhf.o ricab.o riint.o rimp2.o \ rohfcc.o rxncrd.o ryspol.o \ scflib.o scfmi.o scrf.o sobrt.o soffac.o solib.o sozeff.o \ statpt.o surf.o svpchg.o svpinp.o svpleb.o symorb.o symslc.o \ tddft.o tddefp.o tddfun.o tddfxc.o tddgrd.o tddint.o tddxca.o \ tddxcc.o tddxcd.o tdhf.o \ tdx.o tdxio.o tdxitr.o tdxni.o tdxprp.o \ trans.o trfdm2.o trnstn.o trudge.o umpddi.o utddft.o \ vibanl.o vscf.o vvos.o zapddi.o zheev.o zmatrx.o) # # unfortunately, the link command has become too long to show it # explicitly (full command line exceeds 2048 bytes). Show it # piecemeal, taking great care that the order matches the LDR command. # echo " " echo The name of the linker on this machine is $LDR, echo and the linker options are \"$LDOPTS\". echo " " echo Object code list begins with gamess.o unport.o, followed by echo BLAS code=\"$BLAS\", VECTOR code=\"$VECTOR\", quiche=\"$QUICHE\", echo followed by the standard GAMESS object code list, echo " " echo $STANDARD_GAMESS_OBJ1 echo $STANDARD_GAMESS_OBJ2 # echo " " echo "Choices for some optional plug-in codes are" # # Tinker is turned off with qmmm.o dummy substitute in GAMESS distribution. if ($TINKER == true) then set QMMMOBJ="Libtad.o Libteac.o Libtedl.o Libtemo.o Libterx.o Libtfi.o" set QMMMOBJ="$QMMMOBJ Libtjo.o Libtpr.o Libtsx.o Tdrive.o Tinkin.o Toys.o" echo " Tinker/SIMOMM files are $QMMMOBJ" else set QMMMOBJ='qmmm.o' echo " Using $QMMMOBJ, Tinker/SIMOMM code is not linked." endif # # VB is turned off with vbdum.o dummy substitute in GAMESS distribution. if (($VB2000 == true) || ($XMVB == true)) then if ($VB2000 == true) set VBOBJ='vb2000.o vb2gms.o' if ($XMVB == true) set VBOBJ='xmvb.o' echo " valence bond files are $VBOBJ" else set VBOBJ='vbdum.o' echo " Using $VBOBJ, neither VB program is linked." endif # # NEO is turned off with neostb.o dummy substitute in GAMESS distribution. if ($NEO == true) then set NEOOBJ="neo.o neobas.o neocas.o neoden.o neofci.o" set NEOOBJ="$NEOOBJ neog2a.o neog2b.o neog2c.o neogrd.o" set NEOOBJ="$NEOOBJ neohf.o neohss.o neoint.o neomp2.o" set NEOOBJ="$NEOOBJ neonci.o neoopt.o neopos.o neoprp.o" set NEOOBJ="$NEOOBJ neosym.o neotrn.o neovib.o" echo " Nuclear Electron Orbital code files are $NEOOBJ" else set NEOOBJ='neostb.o' echo " Using $NEOOBJ, Nuclear Electron Orbital code is not linked." endif # if ($GPUCODE == true) then echo " Using Nvidia/CUDA GPU code, for Fock matrix consruction." set GPU_LIBS="-L/home/mike/gamess/libqc/lib -lqc_gamess -lqc -lrysq" set GPU_LIBS="$GPU_LIBS -L/usr/local/cuda/lib64 -lcudart" set GPU_LIBS="$GPU_LIBS /opt/boost/lib/libboost_thread.a" set GPU_LIBS="$GPU_LIBS -lstdc++" set GPU_LIBS="$GPU_LIBS -lpthread" echo " Library list for the GPU code is:" echo "$GPU_LIBS" else set GPU_LIBS="" endif # echo " " echo Message passing libraries are $MSG_LIBRARIES echo " " echo Other libraries to be searched are $LIBRARIES echo " " echo "Linker messages (if any) follow..." # # link GAMESS, using objects/library information as collected above # ================================================================= # Insert a "set echo" line to see the full link command in the log file, # which may result in too long a line to display for some c-shells. # Hence it has been printed out piecemeal, but in order, just above. # chdir object $LDR -o ../$EXE.$VERNO.x $LDOPTS \ gamess.o unport.o $BLAS $VECTOR $QUICHE \ $STANDARD_GAMESS_OBJ1 \ $STANDARD_GAMESS_OBJ2 \ $QMMMOBJ $VBOBJ $NEOOBJ $GPU_LIBS \ $MSG_LIBRARIES $LIBRARIES # # give the installer a simple thumbs up or down on success # unset echo chdir .. if (-x $EXE.$VERNO.x) then echo " " echo The linking of GAMESS to binary $EXE.$VERNO.x was successful. else echo " " echo Unfortunately, there was an error while linking GAMESS. endif time exit