11#!/usr/bin/env python
2+ import os
3+
24import numpy
35import xarray
4- import os
56
67from mpas_tools .io import write_netcdf
7- from mpas_tools .ocean .depth import compute_depth , compute_zmid , add_depth , \
8- add_zmid , write_time_varying_zmid
8+ from mpas_tools .ocean .depth import (
9+ add_depth ,
10+ add_zmid ,
11+ compute_depth ,
12+ compute_zmid ,
13+ write_time_varying_zmid ,
14+ )
15+
16+ from .util import get_test_data_file
917
1018
1119def create_3d_mesh ():
@@ -14,19 +22,25 @@ def create_3d_mesh():
1422 dsMesh = xarray .open_dataset (outFileName )
1523 else :
1624 dsMesh = xarray .open_dataset (
17- 'mesh_tools/mesh_conversion_tools/test/mesh.QU.1920km.151026.nc' )
25+ get_test_data_file ('mesh.QU.1920km.151026.nc' )
26+ )
1827 nCells = dsMesh .sizes ['nCells' ]
1928 nVertLevels = 10
20- zmax = 1000.
21- layerThickness = zmax / nVertLevels
22- dsMesh ['refBottomDepth' ] = \
23- ('nVertLevels' , numpy .linspace (layerThickness , zmax , nVertLevels ))
24- dsMesh ['maxLevelCell' ] = \
25- ('nCells' , nVertLevels * numpy .ones (nCells , dtype = int ))
26- dsMesh ['bottomDepth' ] = ('nCells' , zmax * numpy .ones (nCells ))
27- dsMesh ['layerThickness' ] = \
28- (('Time' , 'nCells' , 'nVertLevels' ),
29- layerThickness * numpy .ones ((1 , nCells , nVertLevels )))
29+ zmax = 1000.0
30+ layerThickness = zmax / nVertLevels
31+ dsMesh ['refBottomDepth' ] = (
32+ 'nVertLevels' ,
33+ numpy .linspace (layerThickness , zmax , nVertLevels ),
34+ )
35+ dsMesh ['maxLevelCell' ] = (
36+ 'nCells' ,
37+ nVertLevels * numpy .ones (nCells , dtype = int ),
38+ )
39+ dsMesh ['bottomDepth' ] = ('nCells' , zmax * numpy .ones (nCells ))
40+ dsMesh ['layerThickness' ] = (
41+ ('Time' , 'nCells' , 'nVertLevels' ),
42+ layerThickness * numpy .ones ((1 , nCells , nVertLevels )),
43+ )
3044 write_netcdf (dsMesh , 'test_depth_mesh.nc' )
3145
3246 return dsMesh
@@ -35,23 +49,30 @@ def create_3d_mesh():
3549def test_compute_depth ():
3650 dsMesh = create_3d_mesh ()
3751 depth , depth_bnds = compute_depth (dsMesh .refBottomDepth )
38- assert numpy .all (numpy .isclose (depth , numpy .linspace (50. , 950. , 10 )))
39- assert numpy .all (numpy .isclose (depth_bnds [:, 0 ],
40- numpy .linspace (0. , 900. , 10 )))
41- assert numpy .all (numpy .isclose (depth_bnds [:, 1 ],
42- numpy .linspace (100. , 1000. , 10 )))
52+ assert numpy .all (numpy .isclose (depth , numpy .linspace (50.0 , 950.0 , 10 )))
53+ assert numpy .all (
54+ numpy .isclose (depth_bnds [:, 0 ], numpy .linspace (0.0 , 900.0 , 10 ))
55+ )
56+ assert numpy .all (
57+ numpy .isclose (depth_bnds [:, 1 ], numpy .linspace (100.0 , 1000.0 , 10 ))
58+ )
4359
4460
4561def test_compute_zmid ():
4662 dsMesh = create_3d_mesh ()
47- zMid = compute_zmid (dsMesh .bottomDepth , dsMesh .maxLevelCell ,
48- dsMesh .layerThickness , depth_dim = 'nVertLevels' )
63+ zMid = compute_zmid (
64+ dsMesh .bottomDepth ,
65+ dsMesh .maxLevelCell ,
66+ dsMesh .layerThickness ,
67+ depth_dim = 'nVertLevels' ,
68+ )
4969
5070 assert zMid .dims == ('Time' , 'nCells' , 'nVertLevels' )
5171
5272 depth = zMid .isel (Time = 0 , nCells = 0 )
53- assert numpy .all (numpy .isclose (depth .values ,
54- numpy .linspace (- 50. , - 950. , 10 )))
73+ assert numpy .all (
74+ numpy .isclose (depth .values , numpy .linspace (- 50.0 , - 950.0 , 10 ))
75+ )
5576
5677
5778def test_add_depth ():
@@ -65,15 +86,18 @@ def test_add_depth():
6586
6687 # test adding depth coordinate once to the mesh and once to the input file,
6788 # with the mesh passed in separately
68- for in_filename , coord_filename in [(mesh_filename , None ),
69- ('test_depth_in.nc' , mesh_filename )]:
89+ for in_filename , coord_filename in [
90+ (mesh_filename , None ),
91+ ('test_depth_in.nc' , mesh_filename ),
92+ ]:
7093 add_depth (in_filename , out_filename , coordFileName = coord_filename )
7194 dsOut = xarray .open_dataset (out_filename )
7295 assert 'depth' in dsOut .dims
7396
7497 depth = dsOut .depth
75- assert numpy .all (numpy .isclose (depth .values ,
76- numpy .linspace (50. , 950. , 10 )))
98+ assert numpy .all (
99+ numpy .isclose (depth .values , numpy .linspace (50.0 , 950.0 , 10 ))
100+ )
77101
78102
79103def test_add_zmid ():
@@ -87,8 +111,10 @@ def test_add_zmid():
87111
88112 # test adding zMid once to the mesh and once to the input file, with the
89113 # mesh passed in separately
90- for in_filename , coord_filename in [(mesh_filename , None ),
91- ('test_depth_in.nc' , mesh_filename )]:
114+ for in_filename , coord_filename in [
115+ (mesh_filename , None ),
116+ ('test_depth_in.nc' , mesh_filename ),
117+ ]:
92118 add_zmid (in_filename , out_filename , coordFileName = coord_filename )
93119 dsOut = xarray .open_dataset (out_filename )
94120 assert 'depth' in dsOut .dims
@@ -97,54 +123,63 @@ def test_add_zmid():
97123 assert zMid .dims == ('nCells' , 'depth' )
98124
99125 depth = zMid .isel (nCells = 0 )
100- assert numpy .all (numpy .isclose (depth .values ,
101- numpy .linspace (- 50. , - 950. , 10 )))
126+ assert numpy .all (
127+ numpy .isclose (depth .values , numpy .linspace (- 50.0 , - 950.0 , 10 ))
128+ )
102129
103130
104131def test_write_time_varying_zmid ():
105-
106132 dsMesh = create_3d_mesh ()
107133 nCells = dsMesh .sizes ['nCells' ]
108134 nVertLevels = dsMesh .sizes ['nVertLevels' ]
109135 mesh_filename = 'test_depth_mesh.nc'
110136 in_filename = 'test_depth_in.nc'
111137 out_filename = 'test_depth_out.nc'
112138
113- layerThickness = 100.
139+ layerThickness = 100.0
114140
115141 # test adding zMid once to the mesh and once to the input file, with the
116142 # mesh passed in separately, each one without and once with a prefix
117- for coord_filename , prefix in [(None , '' ),
118- (mesh_filename , '' ),
119- (None , 'timeMonthly_avg_' ),
120- (mesh_filename , 'timeMonthly_avg_' )]:
143+ for coord_filename , prefix in [
144+ (None , '' ),
145+ (mesh_filename , '' ),
146+ (None , 'timeMonthly_avg_' ),
147+ (mesh_filename , 'timeMonthly_avg_' ),
148+ ]:
121149 print (coord_filename , prefix )
122150
123151 if coord_filename is None :
124152 dsIn = dsMesh .drop_vars ('layerThickness' )
125153 else :
126154 dsIn = xarray .Dataset ()
127- layerThicknessVar = '{}layerThickness' .format (prefix )
128- dsIn [layerThicknessVar ] = \
129- (('Time' , 'nCells' , 'nVertLevels' ),
130- layerThickness * numpy .ones ((2 , nCells , nVertLevels )))
131- dsIn ['{}temperature' .format (prefix )] = \
132- xarray .ones_like (dsIn [layerThicknessVar ])
155+ layerThicknessVar = f'{ prefix } layerThickness'
156+ dsIn [layerThicknessVar ] = (
157+ ('Time' , 'nCells' , 'nVertLevels' ),
158+ layerThickness * numpy .ones ((2 , nCells , nVertLevels )),
159+ )
160+ dsIn [f'{ prefix } temperature' ] = xarray .ones_like (
161+ dsIn [layerThicknessVar ]
162+ )
133163 write_netcdf (dsIn , in_filename )
134164 dsIn .close ()
135165
136- write_time_varying_zmid (in_filename , out_filename ,
137- coordFileName = coord_filename , prefix = prefix )
166+ write_time_varying_zmid (
167+ in_filename ,
168+ out_filename ,
169+ coordFileName = coord_filename ,
170+ prefix = prefix ,
171+ )
138172
139173 dsOut = xarray .open_dataset (out_filename )
140174 assert 'depth' in dsOut .dims
141175
142- zMid = dsOut ['{ }zMid'. format ( prefix ) ]
176+ zMid = dsOut [f' { prefix } zMid' ]
143177 assert zMid .dims == ('Time' , 'nCells' , 'depth' )
144178
145179 depth = zMid .isel (Time = 0 , nCells = 0 )
146- assert numpy .all (numpy .isclose (depth .values ,
147- numpy .linspace (- 50. , - 950. , 10 )))
180+ assert numpy .all (
181+ numpy .isclose (depth .values , numpy .linspace (- 50.0 , - 950.0 , 10 ))
182+ )
148183 dsOut .close ()
149184
150185
0 commit comments