Use new openmp_flag and mpi attributes

This commit is contained in:
Adam J. Stewart 2016-05-10 16:08:58 -05:00
parent e7ced54369
commit e2e72b14b2

View file

@ -25,6 +25,7 @@
from spack import * from spack import *
import spack import spack
class Elk(Package): class Elk(Package):
'''An all-electron full-potential linearised augmented-plane wave '''An all-electron full-potential linearised augmented-plane wave
(FP-LAPW) code with many advanced features.''' (FP-LAPW) code with many advanced features.'''
@ -58,34 +59,29 @@ def configure(self, spec):
# Dictionary of configuration options # Dictionary of configuration options
config = { config = {
'MAKE': 'make', 'MAKE': 'make',
'F90': join_path(spack.build_env_path, 'f90'), 'AR': 'ar'
'F77': join_path(spack.build_env_path, 'f77'),
'AR': 'ar',
'LIB_FFT': 'fftlib.a',
'SRC_MPI': 'mpi_stub.f90',
'SRC_OMP': 'omp_stub.f90',
'SRC_libxc': 'libxcifc_stub.f90',
'SRC_FFT': 'zfftifc.f90'
} }
# Compiler-specific flags # Compiler-specific flags
flags = '' flags = ''
if self.compiler.name == 'intel': if self.compiler.name == 'intel':
flags = '-O3 -ip -unroll -no-prec-div -openmp' flags = '-O3 -ip -unroll -no-prec-div'
elif self.compiler.name == 'gcc': elif self.compiler.name == 'gcc':
flags = '-O3 -ffast-math -funroll-loops -fopenmp' flags = '-O3 -ffast-math -funroll-loops'
elif self.compiler.name == 'pgi': elif self.compiler.name == 'pgi':
flags = '-O3 -mp -lpthread' flags = '-O3 -lpthread'
elif self.compiler.name == 'g95': elif self.compiler.name == 'g95':
flags = '-O3 -fno-second-underscore' flags = '-O3 -fno-second-underscore'
elif self.compiler.name == 'nag': elif self.compiler.name == 'nag':
flags = '-O4 -kind=byte -dusty -dcfuns' flags = '-O4 -kind=byte -dusty -dcfuns'
elif self.compiler.name == 'xl': elif self.compiler.name == 'xl':
flags = '-O3 -qsmp=omp' flags = '-O3'
config['F90_OPTS'] = flags config['F90_OPTS'] = flags
config['F77_OPTS'] = flags config['F77_OPTS'] = flags
# BLAS/LAPACK support # BLAS/LAPACK support
# Note: BLAS/LAPACK must be compiled with OpenMP support
# if the +openmp variant is chosen
blas = 'blas.a' blas = 'blas.a'
lapack = 'lapack.a' lapack = 'lapack.a'
if '+blas' in spec: if '+blas' in spec:
@ -98,16 +94,25 @@ def configure(self, spec):
if '+fft' in spec: if '+fft' in spec:
config['LIB_FFT'] = join_path(spec['fftw'].prefix.lib, 'libfftw3.so') config['LIB_FFT'] = join_path(spec['fftw'].prefix.lib, 'libfftw3.so')
config['SRC_FFT'] = 'zfftifc_fftw.f90' config['SRC_FFT'] = 'zfftifc_fftw.f90'
else:
config['LIB_FFT'] = 'fftlib.a'
config['SRC_FFT'] = 'zfftifc.f90'
# MPI support # MPI support
if '+mpi' in spec: if '+mpi' in spec:
config.pop('SRC_MPI') config['F90'] = join_path(spec['mpi'].mpifc)
config['F90'] = join_path(spec['mpi'].prefix.bin, 'mpif90') config['F77'] = join_path(spec['mpi'].mpif77)
config['F77'] = join_path(spec['mpi'].prefix.bin, 'mpif77') else:
config['F90'] = join_path(spack.build_env_path, 'f90'),
config['F77'] = join_path(spack.build_env_path, 'f77'),
config['SRC_MPI'] = 'mpi_stub.f90'
# OpenMP support # OpenMP support
if '+openmp' in spec: if '+openmp' in spec:
config.pop('SRC_OMP') config['F90_OPTS'] += ' ' + self.compiler.openmp_flag
config['F77_OPTS'] += ' ' + self.compiler.openmp_flag
else:
config['SRC_OMP'] = 'omp_stub.f90'
# Libxc support # Libxc support
if '+libxc' in spec: if '+libxc' in spec:
@ -120,6 +125,8 @@ def configure(self, spec):
'libxc.f90', 'libxc.f90',
'libxcifc.f90' 'libxcifc.f90'
]) ])
else:
config['SRC_libxc'] = 'libxcifc_stub.f90'
# Write configuration options to include file # Write configuration options to include file
with open('make.inc', 'w') as inc: with open('make.inc', 'w') as inc: