diff --git a/DAMASK_env.sh b/DAMASK_env.sh index 04e46723d..8ac45b04f 100644 --- a/DAMASK_env.sh +++ b/DAMASK_env.sh @@ -25,24 +25,25 @@ if [ ! -z "$PS1" ]; then echo Using environment with ... echo "DAMASK installation in $DAMASK_ROOT" echo "DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" - echo "F90=$F90" - echo "FFTW_ROOT=$FFTW_ROOT" + echo "Compiler: F90=$F90" if [ "x$LAPACK_ROOT" != "x" ]; then - echo "LAPACK_ROOT=$LAPACK_ROOT" + echo "LAPACK libaries located in $LAPACK_ROOT" fi if [ "x$ACML_ROOT" != "x" ]; then - echo "ACML_ROOT=$ACML_ROOT" + echo "ACML libaries located in $ACML_ROOT" fi if [ "x$IMKL_ROOT" != "x" ]; then - echo "IMKL_ROOT=$IMKL_ROOT" + echo "IMKL libaries located in $IMKL_ROOT" fi - echo "MARC_ROOT=$MARC_ROOT" - echo "HDF5_ROOT=$HDF5_ROOT (future use)" + echo "MSC.Marc root $MARC_ROOT" + echo "FFTW libaries located in $FFTW_ROOT" + echo "HDF5 libaries located in $HDF5_ROOT (future use)" fi ulimit -s unlimited ulimit -c 0 ulimit -v unlimited ulimit -m unlimited export PYTHONPATH=$PYTHONPATH:$DAMASK_ROOT/lib -unset DAMASK_ROOT +unset DAMASK_ROOT LAPACK_ROOT ACML_ROOT IMKL_ROOT MARC_ROOT FFTW_ROOT HDF5_ROOT + diff --git a/Makefile b/Makefile index a048419ea..4d6673f45 100755 --- a/Makefile +++ b/Makefile @@ -2,6 +2,13 @@ SHELL = /bin/sh ######################################################################################## # Makefile for the installation of DAMASK ######################################################################################## +.PHONY: all +all: + spectral + marc + processing + install + .PHONY: spectral spectral: @$(MAKE) clean -C code >/dev/null diff --git a/code/Makefile b/code/Makefile index 51265ccf0..2efc0f967 100644 --- a/code/Makefile +++ b/code/Makefile @@ -41,12 +41,12 @@ else include /etc/damask.conf endif - COMPILERNAME ?= $(F90) INCLUDE_DIRS :=-I../lib LIBRARIES :=-lfftw3 -LIB_DIRS :=-L$$FFTW_ROOT/lib +LIB_DIRS :=-L$(FFTW_ROOT)/lib +RUN_PATH :=-Wl,-rpath,$(FFTW_ROOT)/lib ifeq "$(FASTBUILD)" "YES" OPENMP := OFF @@ -94,29 +94,30 @@ IMKL_ARCH =_sequential endif ifneq "x$(IMKL_ROOT)" "x" -LIB_DIRS :=-L$$IMKL_ROOT/lib/intel64 +LIB_DIRS :=-L$(IMKL_ROOT)/lib/intel64 +RUN_PATH +=$(RUNPATH) -Wl,-rpath,$(IMKL_ROOT)/lib/intel64 INCLUDE_DIRS +=-I$(IMKL_ROOT)/include LIBRARIES +=-lmkl_intel_lp64 -lmkl_core -lmkl$(ACML_ARCH) -lm -lpthread -liomp5 else ifneq "x$(ACML_ROOT)" "x" -LIB_DIRS +=-L$$ACML_ROOT/$(F90)64$(ACML_ARCH)/lib +LIB_DIRS +=-L$(ACML_ROOT)/$(F90)64$(ACML_ARCH)/lib +RUN_PATH +=$(RUNPATH) -Wl,-rpath,$(ACML_ROOT)/$(F90)64$(ACML_ARCH)/lib LIBRARIES +=-lacml$(ACML_ARCH) else ifneq "x$(LAPACK_ROOT)" "x" -LIB_DIRS +=-L$$LAPACK_ROOT/lib64 -L$$LAPACK_ROOT/lib +LIB_DIRS +=-L$(LAPACK_ROOT)/lib64 -L$(LAPACK_ROOT)/lib +RUN_PATH +=$(RUN_PATH) -Wl,-rpath,$(LAPACK_ROOT)/lib64 -Wl,-rpath,$(LAPACK_ROOT)/lib LIBRARIES +=-llapack endif endif endif - - - #hdf5 ifeq "$(HDF5)" "ON" LIBRARIES +=-lhdf5hl_fortran -lhdf5_hl -lhdf5_fortran -lhdf5 -LIB_DIRS +=-L$$HDF5ROOT/lib -INCLUDE_DIRS +=-I$(HDF5ROOT)/include -DHDF +LIB_DIRS +=-L$(HDF5_ROOT)/lib +RUN_PATH +=$(RUNPATH) -Wl,-rpath,$(HDF5_ROOT)/lib +INCLUDE_DIRS +=-I$(HDF5_ROOT)/include -DHDF endif ifdef PETSC_DIR @@ -360,7 +361,7 @@ endif DAMASK_spectral.exe: DAMASK_spectral_driver.o $(PREFIX) $(COMPILERNAME) $(OPENMP_FLAG_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) $(STANDARD_CHECK_$(F90)) \ -o DAMASK_spectral.exe DAMASK_spectral_driver.o \ - $(COMPILED_FILES) $(LIB_DIRS) $(LIBRARIES) $(SUFFIX) + $(COMPILED_FILES) $(LIB_DIRS) $(LIBRARIES) $(RUN_PATH) $(SUFFIX) DAMASK_spectral_driver.o: DAMASK_spectral_driver.f90 DAMASK_spectral_solverBasic.o $(PETSC_FILES) $(PREFIX) $(COMPILERNAME) $(COMPILE_MAXOPTI) -c DAMASK_spectral_driver.f90 $(SUFFIX) diff --git a/configure b/configure index fb3ad8605..b92173290 100755 --- a/configure +++ b/configure @@ -142,7 +142,7 @@ if options.compiler not in ['ifort','gfortran']: if not subprocess.call(['which', options.compiler],stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0: print('Compiler Warning: executable %s not found!'%options.compiler) -for lib in ['libfftw3.a','libfftw3.a']: +for lib in ['libfftw3.so','libfftw3.a']: if not os.path.isfile(os.path.join(options.fftwRoot,'lib/%s'%lib)): print('FFTW Warning: %s not found in %s!'%(lib,os.path.join(options.fftwRoot,'lib'))) @@ -154,16 +154,16 @@ if options.blasType == 'LAPACK': blasLocation = os.path.join(options.blasRoot,'lib64') else: blasLocation=os.path.join(options.blasRoot,'lib') - for lib in ['liblapack.a','liblapack.a']: + for lib in ['liblapack.so','liblapack.a']: if not os.path.isfile(os.path.join(blasLocation,lib)): print('LAPACK Warning: %s not found in %s!'%(lib,blasLocation)) elif options.blasType == 'ACML': blasLocationSerial=os.path.join(options.blasRoot,'%s64/lib'%options.compiler) - for lib in ['libacml.a','libacml.a']: + for lib in ['libacml.so','libacml.a']: if not os.path.isfile(os.path.join(blasLocationSerial,lib)): print('ACML Warning: %s not found in %s!'%(lib,blasLocationSerial)) blasLocationParallel=os.path.join(options.blasRoot,'%s64_mp/lib'%options.compiler) - for lib in ['libacml_mp.a','libacml_mp.a']: + for lib in ['libacml_mp.so','libacml_mp.a']: if not os.path.isfile(os.path.join(blasLocationParallel,lib)): print('ACML Warning: %s not found in %s!'%(lib,blasLocationParallel)) elif options.blasType == 'IMKL': @@ -173,6 +173,7 @@ elif options.blasType == 'IMKL': blasLocation=os.path.join(options.blasRoot,'lib/intel64') for lib in ['libmkl_core.so','libmkl_core.a',\ 'libmkl_sequential.so','libmkl_sequential.a',\ + 'libmkl_intel_thread.so','libmkl_intel_thread.a',\ 'libmkl_intel_lp64.so','libmkl_intel_lp64.a']: if not os.path.isfile(os.path.join(blasLocation,lib)): print('IMKL Warning: %s not found in %s!'%(lib,blasLocation)) diff --git a/installation/compile_CoreModule.py b/installation/compile_CoreModule.py index 92cb0a1db..5130d3e81 100755 --- a/installation/compile_CoreModule.py +++ b/installation/compile_CoreModule.py @@ -23,20 +23,29 @@ compilers = ['ifort','gfortran'] if options['F90'] not in compilers: sys.exit('compiler "F90" (in installation/options or as Shell variable) has to be one out of: %s'%(', '.join(compilers))) -compileCommand = { - 'gfortran': 'gnu95 --f90flags="-fPIC -fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics'+\ - ' -DSpectral -fdefault-real-8 -fdefault-double-8 -DFLOAT=8 -DINT=4 -I%s/lib"'%damaskEnv.rootDir(), - 'ifort': 'intelem --f90flags="-fPIC -fpp -stand f08 -diag-disable 5268 -assume byterecl'+\ - ' -DSpectral -real-size 64 -integer-size 32 -DFLOAT=8 -DINT=4 -I%s/lib"'%damaskEnv.rootDir(), +compiler = { + 'gfortran': '--fcompiler=gnu95 --f90flags="-fPIC -fno-range-check -xf95-cpp-input -std=f2008 -fall-intrinsics'+\ + ' -fdefault-real-8 -fdefault-double-8"', + 'ifort': '--fcompiler=intelem --f90flags="-fPIC -fpp -stand f08 -diag-disable 5268 -assume byterecl'+\ + ' -real-size 64 -integer-size 32"', }[options['F90']] +# option not depending on compiler +compileOptions =' -DSpectral -DFLOAT=8 -DINT=4 -I%s/lib'%damaskEnv.rootDir() + +# this saves the path of libraries during runtime +LDFLAGS ='-Wl,-rpath,%s/lib'%(options['FFTW_ROOT']) + # see http://cens.ioc.ee/pipermail/f2py-users/2003-December/000621.html if options['IMKL_ROOT'] != '' and options['F90'] != 'gfortran': - lib_lapack = '-L$IMKL_ROOT/lib/intel64 -I%s/include -lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lpthread -lm -liomp5'%options['IMKL_ROOT'] + lib_lapack = '-L%s/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lpthread -lm -liomp5'%options['IMKL_ROOT'] + LDFLAGS +=' -Wl,-rpath,%s/lib/intel64'%(options['IMKL_ROOT']) elif options['ACML_ROOT'] != '': - lib_lapack = '-L$ACML/%s64/lib -lacml'%options['F90'] + lib_lapack = '-L%s/%s64/lib -lacml'%(options['ACML_ROOT'],options['F90']) + LDFLAGS +=' -Wl,-rpath,%s/%s64/lib'%(options['ACML_ROOT'],options['F90']) elif options['LAPACK_ROOT'] != '': - lib_lapack = '-L$LAPACK_ROOT/lib -L$LAPACK_ROOT/lib64 -llapack' + lib_lapack = '-L%s/lib -L%s/lib64 -llapack'%(options['LAPACK_ROOT'],options['LAPACK_ROOT']) + LDFLAGS +=' -Wl,-rpath,%s/lib -Wl,-rpath,%s/lib64'%(options['LAPACK_ROOT'],options['LAPACK_ROOT']) os.chdir(codeDir) # needed for compilation with gfortran and f2py try: @@ -55,7 +64,8 @@ except OSError, e: #' --overwrite-signature --no-lower prec.f90 DAMASK_spectral_interface.f90 math.f90 mesh.f90,...' ########################################################################### cmd = 'f2py damask.core.pyf' +\ - ' -c --no-lower --fcompiler=%s'%(compileCommand) +\ + ' -c --no-lower %s'%(compiler) +\ + compileOptions+\ ' prec.f90'+\ ' DAMASK_spectral_interface.f90'+\ ' IO.f90'+\ @@ -66,12 +76,16 @@ cmd = 'f2py damask.core.pyf' +\ ' FEsolving.f90'+\ ' mesh.f90'+\ ' core_quit.f90'+\ - ' -L$FFTW_ROOT/lib -lfftw3'+\ + ' -L%s/lib -lfftw3'%(options['FFTW_ROOT'])+\ ' %s'%lib_lapack +# f2py does not (yet) support setting of special flags for the linker, hence they must be set via +# environment variable +my_env = os.environ +my_env["LDFLAGS"] = LDFLAGS print('Executing: '+cmd) try: - subprocess.call(shlex.split(cmd)) + subprocess.call(shlex.split(cmd),env=my_env) except subprocess.CalledProcessError: print('build failed') except OSError: diff --git a/installation/mods_MarcMentat/apply_DAMASK_modifications.sh b/installation/mods_MarcMentat/apply_DAMASK_modifications.sh index 0489f46cb..9498dfeca 100755 --- a/installation/mods_MarcMentat/apply_DAMASK_modifications.sh +++ b/installation/mods_MarcMentat/apply_DAMASK_modifications.sh @@ -60,13 +60,13 @@ BLASDIR=${BLASDIR%/} # remove trailing slash case $BLASTYPE in IMKL | imkl) - BLAS=" -mkl" + BLAS=" -mkl=sequential -lpthread -lm -rpath=$BLASDIR/lib/intel64" #rpoath ;; ACML | acml) - BLAS=" -L$BLASDIR/ifort64_mp/lib -lacml_mp" + BLAS=" -L$BLASDIR/ifort64/lib -lacml -rpath=$BLASDIR/ifort64/lib" ;; LAPACK | lapack) - BLAS=" -L$BLASDIR/lib64 -L$BLASDIR/lib -llapack" + BLAS=" -L$BLASDIR/lib64 -L$BLASDIR/lib -llapack -rpath=$BLASDIR/lib64 -rpath$BLASDIR/lib" ;; *) echo "error, BLAS type must be IMKL, ACML, or LAPACK"