Skip to content

Commit

Permalink
Flexpart packages updated (#823)
Browse files Browse the repository at this point in the history
  • Loading branch information
victoria-cherkas authored Sep 8, 2023
1 parent d4638d0 commit e911cec
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 60 deletions.
50 changes: 0 additions & 50 deletions repos/c2sm/packages/fdb-flexpart/package.py

This file was deleted.

3 changes: 3 additions & 0 deletions repos/c2sm/packages/fdb/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ class Fdb(CMakePackage):

maintainers = ["skosukhin"]

version("5.11.17",
sha256=
"375c6893c7c60f6fdd666d2abaccb2558667bd450100817c0e1072708ad5591e")
version("5.10.8",
sha256=
"6a0db8f98e13c035098dd6ea2d7559f883664cbf9cba8143749539122ac46099")
Expand Down
82 changes: 82 additions & 0 deletions repos/c2sm/packages/flexpart-fdb/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
from spack import *
from distutils.dir_util import copy_tree
import shutil


class FlexpartFdb(MakefilePackage):
"""Flexpart is a Lagrangian dispersion model"""

homepage = 'https://github.com/MeteoSwiss/flexpart'
git = 'https://github.com/MeteoSwiss/flexpart.git'

version('fdb', branch='fdb')

variant('mch', default=False)

depends_on('eccodes +fortran')
depends_on('netcdf-fortran')
depends_on('fdb-fortran')
depends_on('flexpart-opr', when='+mch')
depends_on('jasper')

conflicts('%nvhpc')
conflicts('%pgi')

build_directory = 'src'

@property
def build_targets(self):
return ['ncf=yes', 'VERBOSE=1', 'serial']

def edit(self, spec, prefix):
if '+mch' in spec:
copy_tree(self.spec['flexpart-opr'].prefix + '/flexpartOpr/src',
'src')
shutil.rmtree('options')
copy_tree(
self.spec['flexpart-opr'].prefix + '/flexpartOpr/options',
'options')
mkdir('test')
copy_tree(self.spec['flexpart-opr'].prefix + '/flexpartOpr/test',
'test')
copy('src/makefile.meteoswiss', 'src/makefile')

else:
# Patch makefile if not using meteoswiss.makefile as no CURL_INCLUDES variable.
#with working_dir(self.build_directory):
makefile = FileFilter('src/makefile')
# CURL_INCLUDES only in makefile.meteoswiss
makefile.filter(
r'^\s*INCPATH2\s*=.*',
'INCPATH2 = ' + self.spec['fdb-fortran'].prefix +
'/include/fortran/fdb/modules -I' + self.spec['fdb'].prefix +
'/include')
# -fopenmp and JASPER_LD_FLAGS only in makefile.meteoswiss
makefile.filter(
r'^\s*LIBPATH2\s*=.*', 'LIBPATH2 = -Wl,--no-relax -L' +
self.spec['fdb'].prefix + '/lib -lfdb5 -L' +
self.spec['fdb-fortran'].prefix + '/lib -lfdbf -fopenmp')

def setup_build_environment(self, env):
env.set('ECCODESROOT', self.spec['eccodes'].prefix)
env.set(
'ECCODES_LD_FLAGS', '-L' + self.spec['eccodes'].prefix +
'/lib64 -leccodes_f90 -leccodes')
env.set('EBROOTNETCDFMINFORTRAN', self.spec['netcdf-fortran'].prefix)
env.set(
'JASPER_LD_FLAGS', '-Wl,--no-relax -L' + self.spec['fdb'].prefix +
'/lib -lfdb5 -L' + self.spec['fdb-fortran'].prefix + '/lib -lfdbf')
env.set(
'CURL_INCLUDES', self.spec['fdb-fortran'].prefix +
'/include/fortran/fdb/modules -I' + self.spec['fdb'].prefix +
'/include')

def install(self, spec, prefix):
mkdir(prefix.bin)
mkdir(prefix.share)
mkdir(prefix.share + '/test/')
mkdir(prefix.share + '/options/')
copy_tree('options/', prefix.share + '/options/')
install('src/FLEXPART', prefix.bin)
if '+mch' in spec:
install('test/*', prefix.share + '/test/')
25 changes: 25 additions & 0 deletions repos/c2sm/packages/flexpart-opr/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2013-2020 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 FlexpartOpr(Package):
"""flexpart is a Lagrangian dispersion model"""

homepage = 'https://github.com/MeteoSwiss-APN/flexpart-opr'
git = 'ssh://[email protected]/MeteoSwiss-APN/flexpart-opr.git'

version('fdb', branch='fdb')

def install(self, spec, prefix):
mkdir(prefix.flexpartOpr)
mkdir(prefix.flexpartOpr + '/options')
mkdir(prefix.flexpartOpr + '/src')
mkdir(prefix.flexpartOpr + '/test')
install_tree('options', prefix.flexpartOpr + '/options')
install_tree('src', prefix.flexpartOpr + '/src')
install_tree('test', prefix.flexpartOpr + '/test')
18 changes: 12 additions & 6 deletions test/integration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,18 @@ def test_fckit(self):
def test_fdb(self):
spack_info('fdb')

def test_fdb_flexpart(self):
spack_info('fdb-flexpart')

def test_fdb_fortran(self):
spack_info('fdb-fortran')

def test_flexpart_fdb(self):
spack_info('flexpart-fdb')

def test_flexpart_ifs(self):
spack_info('flexpart-ifs')

def test_flexpart_opr(self):
spack_info('flexpart-opr')

def test_gridtools(self):
spack_info('gridtools')

Expand Down Expand Up @@ -272,15 +275,18 @@ def test_fckit(self):
def test_fdb(self):
spack_spec('fdb')

def test_fdb_flexpart(self):
spack_spec('fdb-flexpart')

def test_fdb_fortran(self):
spack_spec('fdb-fortran')

def test_flexpart_fdb(self):
spack_spec('flexpart-fdb')

def test_flexpart_ifs(self):
spack_spec('flexpart-ifs')

def test_flexpart_opr(self):
spack_spec('flexpart-opr')

def test_gridtools(self):
spack_spec('gridtools')
spack_spec('gridtools ~cuda')
Expand Down
19 changes: 15 additions & 4 deletions test/system_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,14 @@ def spack_env_dev_install_and_test(spack_env: str,
'daint': 'mpich',
'tsa': 'openmpi',
'balfrin': 'cray-mpich',
'unknown': '',
}[machine_name()]

nvidia_compiler: str = {
'daint': 'nvhpc',
'tsa': 'pgi',
'balfrin': 'nvhpc',
'unknown': '',
}[machine_name()]


Expand Down Expand Up @@ -337,16 +339,25 @@ def test_install_5_10_8_nvhpc(self):
spack_install(f'fdb @5.10.8 %{nvidia_compiler}')


class FdbFlexpartTest(unittest.TestCase):
class FdbFortranTest(unittest.TestCase):

def test_install(self):
spack_install_and_test('fdb-flexpart')
spack_install_and_test('fdb-fortran @0.1.0')


class FdbFortranTest(unittest.TestCase):
class FlexpartOprTest(unittest.TestCase):

def test_install(self):
spack_install_and_test('fdb-fortran @0.1.0')
spack_install_and_test('flexpart-opr')


class FlexpartFdbTest(unittest.TestCase):

def test_wo_mch(self):
spack_install_and_test('flexpart-fdb ~mch')

def test_w_mch(self):
spack_install_and_test('flexpart-fdb +mch')


class FlexpartIfsTest(unittest.TestCase):
Expand Down

0 comments on commit e911cec

Please sign in to comment.