Skip to content

Commit 7f9ac6d

Browse files
committed
Add load package to compass
This package can be used to create a load script on Linux or OSX machines.
1 parent 4aebc09 commit 7f9ac6d

File tree

4 files changed

+81
-1
lines changed

4 files changed

+81
-1
lines changed

compass/load/__init__.py

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import argparse
2+
import os
3+
import subprocess
4+
import sys
5+
6+
from compass import __version__ as compass_version
7+
from jinja2 import Template
8+
from importlib import resources
9+
10+
11+
def get_conda_base_and_env():
12+
if 'CONDA_EXE' in os.environ:
13+
conda_exe = os.environ['CONDA_EXE']
14+
conda_base = os.path.abspath(
15+
os.path.join(conda_exe, '..', '..'))
16+
else:
17+
raise ValueError('No conda executable detected.')
18+
19+
if 'CONDA_DEFAULT_ENV' in os.environ:
20+
conda_env = os.environ['CONDA_DEFAULT_ENV']
21+
else:
22+
raise ValueError('No conda environment detected.')
23+
24+
return conda_base, conda_env
25+
26+
27+
def get_mpi():
28+
29+
for mpi in ['mpich', 'openmpi']:
30+
check = subprocess.check_output(
31+
['conda', 'list', 'mpich']).decode('utf-8')
32+
if mpi in check:
33+
return mpi
34+
35+
return None
36+
37+
38+
def main():
39+
parser = argparse.ArgumentParser(
40+
description='Generate a load script for a Linux or OSX machine')
41+
parser.parse_args()
42+
43+
conda_base, conda_env = get_conda_base_and_env()
44+
45+
mpi = get_mpi()
46+
47+
if mpi is None:
48+
suffix = ''
49+
else:
50+
suffix = f'_{mpi}'
51+
52+
if sys.platform == 'Linux':
53+
env_vars = 'export MPAS_EXTERNAL_LIBS="-lgomp"'
54+
else:
55+
env_vars = ''
56+
57+
script_filename = f'load_compass_{compass_version}{suffix}.sh'
58+
script_filename = os.path.abspath(script_filename)
59+
60+
template = Template(resources.read_text(
61+
'compass.load', 'load_script.template'))
62+
text = template.render(conda_base=conda_base, conda_env=conda_env,
63+
env_vars=env_vars, load_script=script_filename)
64+
65+
with open(script_filename, 'w') as handle:
66+
handle.write(text)

compass/load/load_script.template

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
source {{ conda_base }}/etc/profile.d/conda.sh
2+
conda activate {{ conda_env }}
3+
4+
export NETCDF=$(dirname $(dirname $(which nc-config)))
5+
export NETCDFF=$(dirname $(dirname $(which nf-config)))
6+
export PNETCDF=$(dirname $(dirname $(which pnetcdf-config)))
7+
8+
{{ env_vars }}
9+
export PIO={{ conda_base}}/envs/{{ conda_env }}
10+
export USE_PIO2=true
11+
export HDF5_USE_FILE_LOCKING=FALSE
12+
export LOAD_COMPASS_ENV={{ load_script }}

conda/recipe/meta.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ build:
3131
string: "{{ mpi_prefix }}_py{{ CONDA_PY }}h{{ PKG_HASH }}_{{ build }}"
3232
entry_points:
3333
- compass = compass.__main__:main
34+
- create_compass_load_script = compass.load:main
3435

3536
requirements:
3637
host:

setup.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,5 @@ def package_files(directory, prefixes, extensions):
7979
package_data={'': data_files},
8080
install_requires=install_requires,
8181
entry_points={'console_scripts':
82-
['compass = compass.__main__:main']})
82+
['compass = compass.__main__:main',
83+
'create_compass_load_script=compass.load:main']})

0 commit comments

Comments
 (0)