-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathregrid_simple.py
More file actions
executable file
·114 lines (96 loc) · 3.81 KB
/
regrid_simple.py
File metadata and controls
executable file
·114 lines (96 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env python
from __future__ import print_function
import sys, os
import subprocess as sp
import argparse
"""
Regrid Ocean reanalysis
"""
grid_defs_error = \
"""
Grid definitions directory {} not found.
please download it with:
wget http://s3-ap-southeast-2.amazonaws.com/dp-drop/ocean-regrid/grid_defs.tar.gz
and unzip into the same directory as this executable.
"""
def grid_defs_dir():
"""
Get path to directory where MOM, NEMO, GODAS and ORAS4 grid definitions are
found.
"""
if getattr(sys, 'frozen', False):
basedir = sys._MEIPASS
else:
basedir = os.path.dirname(os.path.realpath(__file__))
return os.path.join(basedir, 'grid_defs')
def main():
parser = argparse.ArgumentParser()
parser.add_argument('src_name', help="""
Name of src data/grid, must be GODAS or ORAS4""")
parser.add_argument('src_data_file',
help='Source data file to regrid.')
parser.add_argument('src_var', help="""
Source variable to regrid. Must be 'salt' or 'temp'""")
parser.add_argument('dest_name', help="""
Name of desintation grid, must be MOM or NEMO""")
parser.add_argument('output_file', help='Name of the destination/output file.')
args = parser.parse_args()
assert args.dest_name == 'MOM' or args.dest_name == 'MOM1' or \
args.dest_name == 'NEMO'
assert args.src_name == 'GODAS' or args.src_name == 'ORAS4'
assert args.src_var == 'salt' or args.src_var == 'temp'
# Set up the src and dest and grid definitions.
grid_defs = grid_defs_dir()
if not os.path.exists(grid_defs):
print(grid_defs_error.format(grid_defs), file=sys.stderr)
return 1
if args.src_name == 'GODAS':
src_hgrids = (os.path.join(grid_defs, 'pottmp.2016.nc'),)
src_vgrid = os.path.join(grid_defs, 'pottmp.2016.nc')
else:
src_hgrids = (os.path.join(grid_defs, 'coordinates_grid_T.nc'),
os.path.join(grid_defs, 'coordinates_grid_U.nc'),
os.path.join(grid_defs, 'coordinates_grid_V.nc'))
src_vgrid = os.path.join(grid_defs, 'coordinates_grid_T.nc')
if args.dest_name == 'MOM':
dest_hgrid = os.path.join(grid_defs, 'ocean_hgrid.nc')
dest_vgrid = os.path.join(grid_defs, 'ocean_vgrid.nc')
dest_mask = os.path.join(grid_defs, 'ocean_mask.nc')
mm_arg = ['--dest_mask', dest_mask]
elif args.dest_name == 'MOM1':
dest_hgrid = os.path.join(grid_defs, 'grid_spec.nc')
dest_vgrid = os.path.join(grid_defs, 'grid_spec.nc')
dest_mask = os.path.join(grid_defs, 'grid_spec.nc')
mm_arg = ['--dest_mask', dest_mask]
else:
dest_hgrid = os.path.join(grid_defs, 'coordinates.nc')
dest_vgrid = os.path.join(grid_defs, 'data_1m_potential_temperature_nomask.nc')
dest_mask = None
mm_arg = []
# Read in temperature and salinity data.
if args.src_name == 'ORAS4':
temp_src_var = 'thetao'
salt_src_var = 'so'
else:
temp_src_var = 'pottmp'
salt_src_var = 'salt'
if args.dest_name == 'MOM' or args.dest_name == 'MOM1':
temp_dest_var = 'temp'
salt_dest_var = 'salt'
else:
temp_dest_var = 'votemper'
salt_dest_var = 'vosaline'
if args.src_var == 'salt':
src_var = salt_src_var
dest_var = salt_dest_var
else:
src_var = temp_src_var
dest_var = temp_dest_var
# Regrid temp and salt, write out to the same file.
args = [args.src_name, src_hgrids[0], src_vgrid,
args.src_data_file, src_var, args.dest_name,
dest_hgrid, dest_vgrid, args.output_file, dest_var] + mm_arg
exe = os.path.join(os.path.dirname(__file__), 'regrid.py')
return sp.call([exe] + args)
if __name__ == '__main__':
sys.exit(main())