diff options
-rw-r--r-- | var/spack/repos/builtin/packages/warpx/package.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/warpx/package.py b/var/spack/repos/builtin/packages/warpx/package.py new file mode 100644 index 0000000000..7be45eb37c --- /dev/null +++ b/var/spack/repos/builtin/packages/warpx/package.py @@ -0,0 +1,78 @@ +# 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 Warpx(MakefilePackage): + """WarpX is an advanced electromagnetic Particle-In-Cell code. It supports + many features including Perfectly-Matched Layers (PML) and mesh refinement. + In addition, WarpX is a highly-parallel and highly-optimized code and + features hybrid OpenMP/MPI parallelization, advanced vectorization + techniques and load balancing capabilities. + """ + + homepage = "https://ecp-warpx.github.io/index.html" + url = "https://github.com/ECP-WarpX/WarpX" + + version('master', git='https://github.com/ECP-WarpX/WarpX.git', tag='master') + version('dev', git='https://github.com/ECP-WarpX/WarpX.git', tag='dev') + + depends_on('mpi', when='+mpi') + + variant('dims', + default='3', + values=('1', '2', '3'), + multi=False, + description='Number of spatial dimensions') + + variant('psatd', default=False, description='Enable PSATD solver') + variant('do_electrostatic', default=False, description='Include electrostatic solver') + variant('debug', default=False, description='Enable debugging features') + variant('tprof', default=False, description='Enable tiny profiling features') + variant('openmp', default=True, description='Enable OpenMP features') + + resource(name='amrex', + git='https://github.com/AMReX-Codes/amrex.git', + tag='development', + destination='.') + + resource(name='picsar', + git='https://bitbucket.org/berkeleylab/picsar.git', + tag='master', + destination='.') + + def edit(self, spec, prefix): + + comp = 'gcc' + vendors = {'%gcc': 'gcc', '%intel': 'intel'} + for key, value in vendors.items(): + if self.spec.satisfies(key): + comp = value + + def torf(s): + "Returns the string TRUE or FALSE" + return repr(s in spec).upper() + + makefile = FileFilter('GNUmakefile') + makefile.filter('AMREX_HOME .*', 'AMREX_HOME = amrex') + makefile.filter('PICSAR_HOME .*', 'PICSAR_HOME = picsar') + makefile.filter('COMP .*', 'COMP = {0}'.format(comp)) + makefile.filter('DIM .*', + 'DIM = {0}'.format(int(spec.variants['dims'].value))) + makefile.filter('USE_PSATD .*', + 'USE_PSATD = {0}'.format(torf('+psatd'))) + makefile.filter('DO_ELECTROSTATIC .*', + 'DO_ELECTROSTATIC = %s' % torf('+do_electrostatic')) + makefile.filter('USE_OMP .*', + 'USE_OMP = {0}'.format(torf('+openmp'))) + makefile.filter('DEBUG .*', + 'DEBUG = {0}'.format(torf('+debug'))) + makefile.filter('TINY_PROFILE .*', + 'TINY_PROFILE = {0}'.format(torf('+tprof'))) + makefile.filter('EBASE .*', 'EBASE = warpx') + + def install(self, spec, prefix): + make('WarpxBinDir = {0}'.format(prefix.bin), 'all') |