diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/channelflow/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/channelflow/package.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/channelflow/package.py b/var/spack/repos/builtin/packages/channelflow/package.py new file mode 100644 index 0000000000..1a396f0600 --- /dev/null +++ b/var/spack/repos/builtin/packages/channelflow/package.py @@ -0,0 +1,85 @@ +# Copyright 2013-2018 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack import * + + +class Channelflow(CMakePackage): + """Channelflow is a software system for numerical analysis of the + incompressible fluid flow in channel geometries, written in C++. + """ + + homepage = 'https://github.com/epfl-ecps/channelflow' + url = 'https://github.com/epfl-ecps/channelflow.git' + + version( + 'develop', + git='https://github.com/epfl-ecps/channelflow.git', + branch='master' + ) + + variant('shared', default=True, description='Build shared libs') + variant('mpi', default=True, description='Enable MPI parallelism') + variant('hdf5', default=True, description='Enable support for HDF5 I/O') + variant( + 'netcdf', default='serial', values=('none', 'serial', 'parallel'), + multi=False, description='Level of support for NetCDF I/O' + ) + variant('python', default=False, description='Build python bindings') + + depends_on('eigen') + depends_on('fftw') + + # MPI related constraints + depends_on('mpi', when='+mpi') + depends_on('fftw+mpi', when='+mpi') + + # Support for different I/O formats + depends_on('hdf5+cxx', when='+hdf5') + depends_on('netcdf', when='netcdf=serial') + depends_on('netcdf+mpi', when='netcdf=parallel') + + # Python bindings + depends_on('boost+python', when='+python') + + conflicts('~mpi', when='netcdf=parallel', msg='Parallel NetCDF requires MPI') + conflicts( + '+mpi', when='+python', + msg='Building python bindings is possible only for the serial code' + ) + conflicts('~mpi', when='^mpi', + msg='There should be no MPI in the DAG when ~mpi is active') + + def cmake_args(self): + spec = self.spec + + on_or_off = lambda predicate: 'ON' if predicate else 'OFF' + + args = [ + '-DBUILD_SHARED_LIBS:BOOL={0}'.format( + on_or_off('+shared' in spec) + ), + '-DUSE_MPI:BOOL={0}'.format(on_or_off('+mpi' in spec)), + '-DWITH_HDF5CXX:BOOL={0}'.format(on_or_off('+hdf5' in spec)), + '-DWITH_PYTHON:BOOL={0}'.format(on_or_off('+python' in spec)) + ] + + netcdf_str = { + 'none': 'OFF', + 'serial': 'Serial', + 'parallel': 'Parallel' + } + + args.append('-DWITH_NETCDF:STRING={0}'.format( + netcdf_str[spec.variants['netcdf'].value] + )) + + # Set an MPI compiler for parallel builds + if '+mpi' in spec: + args.append( + '-DCMAKE_CXX_COMPILER:PATH={0}'.format(spec['mpi'].mpicxx) + ) + + return args |