roms-tools 2.6.2__py3-none-any.whl → 2.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- roms_tools/__init__.py +1 -0
- roms_tools/analysis/roms_output.py +11 -77
- roms_tools/analysis/utils.py +0 -66
- roms_tools/constants.py +2 -0
- roms_tools/download.py +46 -3
- roms_tools/plot.py +22 -5
- roms_tools/setup/cdr_forcing.py +1126 -0
- roms_tools/setup/datasets.py +742 -87
- roms_tools/setup/grid.py +42 -4
- roms_tools/setup/river_forcing.py +11 -84
- roms_tools/setup/tides.py +81 -411
- roms_tools/setup/utils.py +241 -37
- roms_tools/tests/test_setup/test_cdr_forcing.py +772 -0
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zmetadata +53 -1
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/.zattrs +1 -1
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_long_name/.zarray +20 -0
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_long_name/.zattrs +6 -0
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_long_name/0 +0 -0
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_unit/.zarray +20 -0
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_unit/.zattrs +6 -0
- roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_unit/0 +0 -0
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zmetadata +53 -1
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/.zattrs +1 -1
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/.zarray +20 -0
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/.zattrs +6 -0
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/0 +0 -0
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/.zarray +20 -0
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/.zattrs +6 -0
- roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zattrs +1 -2
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zmetadata +27 -5
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ntides/.zarray +20 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ntides/.zattrs +5 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ntides/0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/omega/.zattrs +1 -3
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Im/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Re/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Im/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Re/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Im/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Re/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Im/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Re/0.0.0 +0 -0
- roms_tools/tests/test_setup/test_datasets.py +103 -1
- roms_tools/tests/test_setup/test_tides.py +112 -47
- roms_tools/utils.py +115 -1
- {roms_tools-2.6.2.dist-info → roms_tools-2.7.0.dist-info}/METADATA +1 -1
- {roms_tools-2.6.2.dist-info → roms_tools-2.7.0.dist-info}/RECORD +51 -33
- {roms_tools-2.6.2.dist-info → roms_tools-2.7.0.dist-info}/WHEEL +1 -1
- {roms_tools-2.6.2.dist-info → roms_tools-2.7.0.dist-info}/licenses/LICENSE +0 -0
- {roms_tools-2.6.2.dist-info → roms_tools-2.7.0.dist-info}/top_level.txt +0 -0
|
@@ -7,12 +7,83 @@ from pathlib import Path
|
|
|
7
7
|
from conftest import calculate_data_hash
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
@pytest.fixture
|
|
11
|
-
def
|
|
10
|
+
@pytest.fixture(scope="session")
|
|
11
|
+
def tidal_forcing_9v5a(use_dask):
|
|
12
|
+
|
|
12
13
|
grid = Grid(
|
|
13
14
|
nx=3, ny=3, size_x=1500, size_y=1500, center_lon=235, center_lat=25, rot=-20
|
|
14
15
|
)
|
|
15
|
-
|
|
16
|
+
fname_grid = Path(download_test_data("regional_grid_tpxo9v5a.nc"))
|
|
17
|
+
fname_h = Path(download_test_data("regional_h_tpxo9v5a.nc"))
|
|
18
|
+
fname_u = Path(download_test_data("regional_u_tpxo9v5a.nc"))
|
|
19
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
20
|
+
|
|
21
|
+
return TidalForcing(
|
|
22
|
+
grid=grid,
|
|
23
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
24
|
+
ntides=1,
|
|
25
|
+
use_dask=use_dask,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.fixture(scope="session")
|
|
30
|
+
def tidal_forcing_10v2a(use_dask):
|
|
31
|
+
|
|
32
|
+
grid = Grid(
|
|
33
|
+
nx=3, ny=3, size_x=1500, size_y=1500, center_lon=235, center_lat=25, rot=-20
|
|
34
|
+
)
|
|
35
|
+
fname_grid = Path(download_test_data("regional_grid_tpxo10v2a.nc"))
|
|
36
|
+
fname_h = Path(download_test_data("regional_h_tpxo10v2a.nc"))
|
|
37
|
+
fname_u = Path(download_test_data("regional_u_tpxo10v2a.nc"))
|
|
38
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
39
|
+
|
|
40
|
+
return TidalForcing(
|
|
41
|
+
grid=grid,
|
|
42
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
43
|
+
ntides=1,
|
|
44
|
+
use_dask=use_dask,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@pytest.fixture(scope="session")
|
|
49
|
+
def tidal_forcing_from_global_data(use_dask):
|
|
50
|
+
|
|
51
|
+
grid = Grid(
|
|
52
|
+
nx=3, ny=3, size_x=1800, size_y=1500, center_lon=235, center_lat=25, rot=-20
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
fname_grid = Path(download_test_data("global_grid_tpxo10.v2.nc"))
|
|
56
|
+
fname_h = Path(download_test_data("global_h_tpxo10.v2.nc"))
|
|
57
|
+
fname_u = Path(download_test_data("global_u_tpxo10.v2.nc"))
|
|
58
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
59
|
+
|
|
60
|
+
return TidalForcing(
|
|
61
|
+
grid=grid,
|
|
62
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
63
|
+
ntides=1,
|
|
64
|
+
use_dask=use_dask,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@pytest.mark.parametrize(
|
|
69
|
+
"tidal_forcing_fixture",
|
|
70
|
+
["tidal_forcing", "tidal_forcing_9v5a", "tidal_forcing_10v2a"], # 10v2
|
|
71
|
+
)
|
|
72
|
+
def test_successful_initialization(tidal_forcing_fixture, request, use_dask):
|
|
73
|
+
tidal_forcing = request.getfixturevalue(tidal_forcing_fixture)
|
|
74
|
+
|
|
75
|
+
assert isinstance(tidal_forcing.ds, xr.Dataset)
|
|
76
|
+
assert "omega" in tidal_forcing.ds
|
|
77
|
+
assert "ssh_Re" in tidal_forcing.ds
|
|
78
|
+
assert "ssh_Im" in tidal_forcing.ds
|
|
79
|
+
assert "pot_Re" in tidal_forcing.ds
|
|
80
|
+
assert "pot_Im" in tidal_forcing.ds
|
|
81
|
+
assert "u_Re" in tidal_forcing.ds
|
|
82
|
+
assert "u_Im" in tidal_forcing.ds
|
|
83
|
+
assert "v_Re" in tidal_forcing.ds
|
|
84
|
+
assert "v_Im" in tidal_forcing.ds
|
|
85
|
+
|
|
86
|
+
assert tidal_forcing.ntides == 1
|
|
16
87
|
|
|
17
88
|
|
|
18
89
|
@pytest.fixture
|
|
@@ -59,7 +130,6 @@ def grid_that_straddles_180_degree_meridian():
|
|
|
59
130
|
@pytest.mark.parametrize(
|
|
60
131
|
"grid_fixture",
|
|
61
132
|
[
|
|
62
|
-
"grid_that_lies_within_bounds_of_regional_tpxo_data",
|
|
63
133
|
"grid_that_is_out_of_bounds_of_regional_tpxo_data",
|
|
64
134
|
"grid_that_straddles_dateline",
|
|
65
135
|
"grid_that_straddles_180_degree_meridian",
|
|
@@ -67,39 +137,17 @@ def grid_that_straddles_180_degree_meridian():
|
|
|
67
137
|
)
|
|
68
138
|
def test_successful_initialization_with_global_data(grid_fixture, request, use_dask):
|
|
69
139
|
|
|
70
|
-
|
|
140
|
+
fname_grid = Path(download_test_data("global_grid_tpxo10.v2.nc"))
|
|
141
|
+
fname_h = Path(download_test_data("global_h_tpxo10.v2.nc"))
|
|
142
|
+
fname_u = Path(download_test_data("global_u_tpxo10.v2.nc"))
|
|
143
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
71
144
|
|
|
72
145
|
grid = request.getfixturevalue(grid_fixture)
|
|
73
146
|
|
|
74
147
|
tidal_forcing = TidalForcing(
|
|
75
|
-
grid=grid,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
assert isinstance(tidal_forcing.ds, xr.Dataset)
|
|
79
|
-
assert "omega" in tidal_forcing.ds
|
|
80
|
-
assert "ssh_Re" in tidal_forcing.ds
|
|
81
|
-
assert "ssh_Im" in tidal_forcing.ds
|
|
82
|
-
assert "pot_Re" in tidal_forcing.ds
|
|
83
|
-
assert "pot_Im" in tidal_forcing.ds
|
|
84
|
-
assert "u_Re" in tidal_forcing.ds
|
|
85
|
-
assert "u_Im" in tidal_forcing.ds
|
|
86
|
-
assert "v_Re" in tidal_forcing.ds
|
|
87
|
-
assert "v_Im" in tidal_forcing.ds
|
|
88
|
-
|
|
89
|
-
assert tidal_forcing.source == {"name": "TPXO", "path": fname}
|
|
90
|
-
assert tidal_forcing.ntides == 2
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def test_successful_initialization_with_regional_data(
|
|
94
|
-
grid_that_lies_within_bounds_of_regional_tpxo_data, use_dask
|
|
95
|
-
):
|
|
96
|
-
|
|
97
|
-
fname = Path(download_test_data("TPXO_regional_test_data.nc"))
|
|
98
|
-
|
|
99
|
-
tidal_forcing = TidalForcing(
|
|
100
|
-
grid=grid_that_lies_within_bounds_of_regional_tpxo_data,
|
|
101
|
-
source={"name": "TPXO", "path": fname},
|
|
102
|
-
ntides=10,
|
|
148
|
+
grid=grid,
|
|
149
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
150
|
+
ntides=1,
|
|
103
151
|
use_dask=use_dask,
|
|
104
152
|
)
|
|
105
153
|
|
|
@@ -114,20 +162,22 @@ def test_successful_initialization_with_regional_data(
|
|
|
114
162
|
assert "v_Re" in tidal_forcing.ds
|
|
115
163
|
assert "v_Im" in tidal_forcing.ds
|
|
116
164
|
|
|
117
|
-
assert tidal_forcing.
|
|
118
|
-
assert tidal_forcing.ntides == 10
|
|
165
|
+
assert tidal_forcing.ntides == 1
|
|
119
166
|
|
|
120
167
|
|
|
121
168
|
def test_unsuccessful_initialization_with_regional_data_due_to_nans(
|
|
122
169
|
grid_that_is_out_of_bounds_of_regional_tpxo_data, use_dask
|
|
123
170
|
):
|
|
124
171
|
|
|
125
|
-
|
|
172
|
+
fname_grid = Path(download_test_data("regional_grid_tpxo10v2.nc"))
|
|
173
|
+
fname_h = Path(download_test_data("regional_h_tpxo10v2.nc"))
|
|
174
|
+
fname_u = Path(download_test_data("regional_u_tpxo10v2.nc"))
|
|
175
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
126
176
|
|
|
127
177
|
with pytest.raises(ValueError, match="NaN values found"):
|
|
128
178
|
TidalForcing(
|
|
129
179
|
grid=grid_that_is_out_of_bounds_of_regional_tpxo_data,
|
|
130
|
-
source={"name": "TPXO", "path":
|
|
180
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
131
181
|
ntides=10,
|
|
132
182
|
use_dask=use_dask,
|
|
133
183
|
)
|
|
@@ -141,7 +191,10 @@ def test_unsuccessful_initialization_with_regional_data_due_to_no_overlap(
|
|
|
141
191
|
grid_fixture, request, use_dask
|
|
142
192
|
):
|
|
143
193
|
|
|
144
|
-
|
|
194
|
+
fname_grid = Path(download_test_data("regional_grid_tpxo10v2.nc"))
|
|
195
|
+
fname_h = Path(download_test_data("regional_h_tpxo10v2.nc"))
|
|
196
|
+
fname_u = Path(download_test_data("regional_u_tpxo10v2.nc"))
|
|
197
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
145
198
|
|
|
146
199
|
grid = request.getfixturevalue(grid_fixture)
|
|
147
200
|
|
|
@@ -150,7 +203,7 @@ def test_unsuccessful_initialization_with_regional_data_due_to_no_overlap(
|
|
|
150
203
|
):
|
|
151
204
|
TidalForcing(
|
|
152
205
|
grid=grid,
|
|
153
|
-
source={"name": "TPXO", "path":
|
|
206
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
154
207
|
ntides=10,
|
|
155
208
|
use_dask=use_dask,
|
|
156
209
|
)
|
|
@@ -158,12 +211,15 @@ def test_unsuccessful_initialization_with_regional_data_due_to_no_overlap(
|
|
|
158
211
|
|
|
159
212
|
def test_insufficient_number_of_consituents(grid_that_straddles_dateline, use_dask):
|
|
160
213
|
|
|
161
|
-
|
|
214
|
+
fname_grid = Path(download_test_data("global_grid_tpxo10.v2.nc"))
|
|
215
|
+
fname_h = Path(download_test_data("global_h_tpxo10.v2.nc"))
|
|
216
|
+
fname_u = Path(download_test_data("global_u_tpxo10.v2.nc"))
|
|
217
|
+
fname_dict = {"grid": fname_grid, "h": fname_h, "u": fname_u}
|
|
162
218
|
|
|
163
|
-
with pytest.raises(ValueError, match="The dataset contains
|
|
219
|
+
with pytest.raises(ValueError, match="The dataset contains tidal"):
|
|
164
220
|
TidalForcing(
|
|
165
221
|
grid=grid_that_straddles_dateline,
|
|
166
|
-
source={"name": "TPXO", "path":
|
|
222
|
+
source={"name": "TPXO", "path": fname_dict},
|
|
167
223
|
ntides=10,
|
|
168
224
|
use_dask=use_dask,
|
|
169
225
|
)
|
|
@@ -194,10 +250,16 @@ def test_tidal_forcing_save(tidal_forcing, tmp_path):
|
|
|
194
250
|
filepath.unlink()
|
|
195
251
|
|
|
196
252
|
|
|
197
|
-
|
|
253
|
+
@pytest.mark.parametrize(
|
|
254
|
+
"tidal_forcing_fixture",
|
|
255
|
+
["tidal_forcing", "tidal_forcing_from_global_data"],
|
|
256
|
+
)
|
|
257
|
+
def test_roundtrip_yaml(tidal_forcing_fixture, tmp_path, use_dask, request):
|
|
198
258
|
"""Test that creating a TidalForcing object, saving its parameters to yaml file, and
|
|
199
259
|
re-opening yaml file creates the same object."""
|
|
200
260
|
|
|
261
|
+
tidal_forcing = request.getfixturevalue(tidal_forcing_fixture)
|
|
262
|
+
|
|
201
263
|
# Create a temporary filepath using the tmp_path fixture
|
|
202
264
|
file_str = "test_yaml"
|
|
203
265
|
for filepath in [
|
|
@@ -215,15 +277,18 @@ def test_roundtrip_yaml(tidal_forcing, tmp_path, use_dask):
|
|
|
215
277
|
filepath.unlink()
|
|
216
278
|
|
|
217
279
|
|
|
218
|
-
|
|
280
|
+
@pytest.mark.parametrize(
|
|
281
|
+
"tidal_forcing_fixture",
|
|
282
|
+
["tidal_forcing", "tidal_forcing_from_global_data"],
|
|
283
|
+
)
|
|
284
|
+
def test_files_have_same_hash(tidal_forcing_fixture, tmp_path, use_dask, request):
|
|
285
|
+
|
|
286
|
+
tidal_forcing = request.getfixturevalue(tidal_forcing_fixture)
|
|
219
287
|
|
|
220
288
|
yaml_filepath = tmp_path / "test_yaml.yaml"
|
|
221
289
|
filepath1 = tmp_path / "test1.nc"
|
|
222
290
|
filepath2 = tmp_path / "test2.nc"
|
|
223
291
|
|
|
224
|
-
print(yaml_filepath)
|
|
225
|
-
print(filepath1)
|
|
226
|
-
print(filepath2)
|
|
227
292
|
tidal_forcing.to_yaml(yaml_filepath)
|
|
228
293
|
tidal_forcing.save(filepath1)
|
|
229
294
|
tidal_forcing_from_file = TidalForcing.from_yaml(yaml_filepath, use_dask=use_dask)
|
roms_tools/utils.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import xarray as xr
|
|
2
|
+
import numpy as np
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
import re
|
|
4
5
|
import glob
|
|
@@ -153,7 +154,7 @@ def _load_data(
|
|
|
153
154
|
|
|
154
155
|
# Rechunk the dataset along the tidal constituent dimension ("ntides") after loading
|
|
155
156
|
# because the original dataset does not have a chunk size of 1 along this dimension.
|
|
156
|
-
if "ntides" in dim_names:
|
|
157
|
+
if "ntides" in dim_names and "ntides" in ds.dims:
|
|
157
158
|
ds = ds.chunk({dim_names["ntides"]: 1})
|
|
158
159
|
|
|
159
160
|
else:
|
|
@@ -371,3 +372,116 @@ def get_dask_chunks(location, chunk_size):
|
|
|
371
372
|
"v": {"eta_v": chunk_size, "xi_rho": chunk_size},
|
|
372
373
|
}
|
|
373
374
|
return chunk_mapping.get(location, {})
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def _generate_coordinate_range(min, max, resolution):
|
|
378
|
+
"""Generate an array of target coordinates (e.g., latitude or longitude) within a
|
|
379
|
+
specified range, with a resolution that is rounded to the nearest value of the form
|
|
380
|
+
`1/n` (or integer).
|
|
381
|
+
|
|
382
|
+
This method generates an array of target coordinates between the provided `min` and `max`
|
|
383
|
+
values, ensuring that both `min` and `max` are included in the resulting range. The resolution
|
|
384
|
+
is rounded to the nearest fraction of the form `1/n` or an integer, based on the input.
|
|
385
|
+
|
|
386
|
+
Parameters
|
|
387
|
+
----------
|
|
388
|
+
min : float
|
|
389
|
+
The minimum value (in degrees) of the coordinate range (inclusive).
|
|
390
|
+
|
|
391
|
+
max : float
|
|
392
|
+
The maximum value (in degrees) of the coordinate range (inclusive).
|
|
393
|
+
|
|
394
|
+
resolution : float
|
|
395
|
+
The spacing (in degrees) between each coordinate in the array. The resolution will
|
|
396
|
+
be rounded to the nearest value of the form `1/n` or an integer, depending on the size
|
|
397
|
+
of the resolution value.
|
|
398
|
+
|
|
399
|
+
Returns
|
|
400
|
+
-------
|
|
401
|
+
numpy.ndarray
|
|
402
|
+
An array of target coordinates generated from the specified range, with the resolution
|
|
403
|
+
rounded to a suitable fraction (e.g., `1/n`) or integer, depending on the input resolution.
|
|
404
|
+
"""
|
|
405
|
+
|
|
406
|
+
# Find the closest fraction of the form 1/n or integer to match the resolution
|
|
407
|
+
resolution_rounded = None
|
|
408
|
+
min_diff = float("inf") # Initialize the minimum difference as infinity
|
|
409
|
+
|
|
410
|
+
# Search for the best fraction or integer approximation to the resolution
|
|
411
|
+
for n in range(1, 1000): # Try fractions 1/n, where n ranges from 1 to 999
|
|
412
|
+
if resolution <= 1:
|
|
413
|
+
fraction = (
|
|
414
|
+
1 / n
|
|
415
|
+
) # For small resolutions (<= 1), consider fractions of the form 1/n
|
|
416
|
+
else:
|
|
417
|
+
fraction = n # For larger resolutions (>1), consider integers (n)
|
|
418
|
+
|
|
419
|
+
diff = abs(
|
|
420
|
+
fraction - resolution
|
|
421
|
+
) # Calculate the difference between the fraction and the resolution
|
|
422
|
+
|
|
423
|
+
if diff < min_diff: # If the current fraction is a better approximation
|
|
424
|
+
min_diff = diff
|
|
425
|
+
resolution_rounded = fraction # Update the best fraction (or integer) found
|
|
426
|
+
|
|
427
|
+
# Adjust the start and end of the range to include integer values
|
|
428
|
+
start_int = np.floor(min) # Round the minimum value down to the nearest integer
|
|
429
|
+
end_int = np.ceil(max) # Round the maximum value up to the nearest integer
|
|
430
|
+
|
|
431
|
+
# Generate the array of target coordinates, including both the min and max values
|
|
432
|
+
target = np.arange(start_int, end_int + resolution_rounded, resolution_rounded)
|
|
433
|
+
|
|
434
|
+
# Truncate any values that exceed max (including small floating point errors)
|
|
435
|
+
target = target[target <= end_int + 1e-10]
|
|
436
|
+
|
|
437
|
+
return target.astype(np.float32)
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def _remove_edge_nans(field, xdim, layer_depth=None):
|
|
441
|
+
"""Trim NaN-only edges along a specified dimension.
|
|
442
|
+
|
|
443
|
+
Useful when a ROMS grid has been regridded to a fixed lat/lon section,
|
|
444
|
+
leaving NaN-filled edges (e.g., over land or outside the domain).
|
|
445
|
+
Removes leading/trailing slices along `xdim` where all values are NaN,
|
|
446
|
+
based on `field` or optionally `layer_depth`.
|
|
447
|
+
|
|
448
|
+
Parameters
|
|
449
|
+
----------
|
|
450
|
+
field : xr.DataArray
|
|
451
|
+
Data to trim.
|
|
452
|
+
xdim : str
|
|
453
|
+
Dimension along which to remove NaN edges.
|
|
454
|
+
layer_depth : xr.DataArray, optional
|
|
455
|
+
Optional field to determine where NaNs occur.
|
|
456
|
+
|
|
457
|
+
Returns
|
|
458
|
+
-------
|
|
459
|
+
field : xr.DataArray
|
|
460
|
+
Trimmed data.
|
|
461
|
+
layer_depth : xr.DataArray or None
|
|
462
|
+
Trimmed `layer_depth` if provided.
|
|
463
|
+
"""
|
|
464
|
+
if xdim in field.dims:
|
|
465
|
+
if layer_depth is not None:
|
|
466
|
+
nan_mask = layer_depth.isnull().sum(
|
|
467
|
+
dim=[dim for dim in layer_depth.dims if dim != xdim]
|
|
468
|
+
)
|
|
469
|
+
else:
|
|
470
|
+
nan_mask = field.isnull().sum(
|
|
471
|
+
dim=[dim for dim in field.dims if dim != xdim]
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
# Find the valid indices where the sum of the nans is 0
|
|
475
|
+
valid_indices = np.where(nan_mask.values == 0)[0]
|
|
476
|
+
|
|
477
|
+
if len(valid_indices) > 0:
|
|
478
|
+
first_valid = valid_indices[0]
|
|
479
|
+
last_valid = valid_indices[-1]
|
|
480
|
+
|
|
481
|
+
field = field.isel({xdim: slice(first_valid, last_valid + 1)})
|
|
482
|
+
if layer_depth is not None:
|
|
483
|
+
layer_depth = layer_depth.isel(
|
|
484
|
+
{xdim: slice(first_valid, last_valid + 1)}
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
return field, layer_depth
|
|
@@ -1,40 +1,43 @@
|
|
|
1
1
|
ci/environment-with-xesmf.yml,sha256=c8x2YFBBpZvy6pnlUMTO1-8myyKsVm0Y-IWPigT3PKo,217
|
|
2
2
|
ci/environment.yml,sha256=Ehxy6nYiVQXoS7EGlmNm2G0ZPHg6VFBGY1IflApIhIY,207
|
|
3
|
-
roms_tools/__init__.py,sha256=
|
|
4
|
-
roms_tools/
|
|
5
|
-
roms_tools/
|
|
3
|
+
roms_tools/__init__.py,sha256=l6oRDJLsmaGAe43x2gJigqZ4pXwvzrwD_uVtGtEeGgM,1064
|
|
4
|
+
roms_tools/constants.py,sha256=2n6CPwn716ekBxe7oZeYtY_9NV1Nkn8h7NI2nwqjHWo,121
|
|
5
|
+
roms_tools/download.py,sha256=czea1KanC0smU0ZQ1dXSe_aACkr1dO5nVoJBMdBr6jA,8373
|
|
6
|
+
roms_tools/plot.py,sha256=YJUiGB7YeN725wJbE2hExWhvHHW_opwf1GU_bzboC7k,18094
|
|
6
7
|
roms_tools/regrid.py,sha256=av9fROSNxlDeczOB544zUjFRUTiUKO42wbfZ90mpuD0,10476
|
|
7
|
-
roms_tools/utils.py,sha256=
|
|
8
|
+
roms_tools/utils.py,sha256=3iTBnedy4ZPwH8fVXnCjdQSqkObzklWwLcw-byUj21I,17752
|
|
8
9
|
roms_tools/vertical_coordinate.py,sha256=uIxZl7rwY-fSCqXWhm6TXrOsLK4pMOMXOZB8VuP9xwg,7253
|
|
9
|
-
roms_tools/analysis/roms_output.py,sha256=
|
|
10
|
-
roms_tools/analysis/utils.py,sha256=
|
|
10
|
+
roms_tools/analysis/roms_output.py,sha256=GdHH_v3V7HhIHUk8JrqGXywV0t_VPgjfR1N_EU-hy7w,33814
|
|
11
|
+
roms_tools/analysis/utils.py,sha256=BfpLIt2nYYlXqmPTVMDM_Hh1rDmjVcEwStJaWT_N_NY,4434
|
|
11
12
|
roms_tools/setup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
13
|
roms_tools/setup/boundary_forcing.py,sha256=kHH7jfGZOiUIpk9BVEQqzSqQ10WUFZWlu8BcEV0LkYY,44173
|
|
13
|
-
roms_tools/setup/
|
|
14
|
+
roms_tools/setup/cdr_forcing.py,sha256=OAKsWmhPE4bMv5M_odT7xK1M9MPi2OxStWSaCZfk4FM,42952
|
|
15
|
+
roms_tools/setup/datasets.py,sha256=xWLLuuSRSbkp4kf9FNFWPcpFUwfD4cZY69ve8LmgIg8,106383
|
|
14
16
|
roms_tools/setup/fill.py,sha256=YQes_9uADZ-XZ6dBqXyvG7OAp7UrWhX-p3pR1gD6Od4,11120
|
|
15
|
-
roms_tools/setup/grid.py,sha256=
|
|
17
|
+
roms_tools/setup/grid.py,sha256=h-CHrZTM4E6-hihLRip7a2u5w3OAoJwcmK_1ewlHPKU,50943
|
|
16
18
|
roms_tools/setup/initial_conditions.py,sha256=0_roVivlbuKvV82QhxIpYAzfsTNutiQBVVW8xLm_O98,37490
|
|
17
19
|
roms_tools/setup/mask.py,sha256=IK2SrVnMJwZjE4jNFtzMQhp1c5c8SUO45OIpCIrNSis,3413
|
|
18
20
|
roms_tools/setup/nesting.py,sha256=j8l2zVCfhxNNtN4ZiSpipSlPXYmaoZWIPw6zImafsuk,26511
|
|
19
|
-
roms_tools/setup/river_forcing.py,sha256=
|
|
21
|
+
roms_tools/setup/river_forcing.py,sha256=wrWucS9Y5ovKvSHMhodhngNBxtuu-ABHsfOP9nJ8hE4,30682
|
|
20
22
|
roms_tools/setup/surface_forcing.py,sha256=Q5WBsZN0_HAB-x9vDAl6PEDg4CPKUFK7HO38zxT-h6c,24583
|
|
21
|
-
roms_tools/setup/tides.py,sha256=
|
|
23
|
+
roms_tools/setup/tides.py,sha256=hILYCwbyIomdVHeFIaNmJYTLdptOiSDaP1ETcTysePg,16934
|
|
22
24
|
roms_tools/setup/topography.py,sha256=s1dSF0ZWCNdrZ25yv-pUcCgufxRmGgy3yr_VhdRM7LU,14126
|
|
23
|
-
roms_tools/setup/utils.py,sha256=
|
|
25
|
+
roms_tools/setup/utils.py,sha256=h9emhPknoH3ezm0lZriK-gsLQWem3CjsknWFzkdPwTU,53415
|
|
24
26
|
roms_tools/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
27
|
roms_tools/tests/test_regrid.py,sha256=-wzZ31BkUdSn81jq5NF1wnuaBRfd0aiYgQZEv5E_h9w,4682
|
|
26
28
|
roms_tools/tests/test_vertical_coordinate.py,sha256=4D2jruuxBwUYk1fSeaJKICgSjzpixhjd03Y4lyivMkQ,2348
|
|
27
29
|
roms_tools/tests/test_analysis/test_roms_output.py,sha256=EtxS9b5JHoREch99jbhs4QDg_3zmXDmVzXplbVrFocA,18811
|
|
28
30
|
roms_tools/tests/test_setup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
31
|
roms_tools/tests/test_setup/test_boundary_forcing.py,sha256=mgRcSPoqEJwaRML3iYADGUdSe-XlUXCXHM1I9ZWI7lA,23241
|
|
30
|
-
roms_tools/tests/test_setup/
|
|
32
|
+
roms_tools/tests/test_setup/test_cdr_forcing.py,sha256=hT77F5yG5LOGVOJgztE4lnHCHnigaNvmF6Wp7M6GKt0,27999
|
|
33
|
+
roms_tools/tests/test_setup/test_datasets.py,sha256=-8fpDXwVBKhJfGXwmJ2n73cLAvXOUtS6gTAz-7L7T8U,20213
|
|
31
34
|
roms_tools/tests/test_setup/test_fill.py,sha256=gDHuM58d3ECQE317ZntChYt4hWCfo4eVhkW13NiZ1V4,3735
|
|
32
35
|
roms_tools/tests/test_setup/test_grid.py,sha256=e1S8TYt21TVczaEfyeYoAU-qxUhAgiugkHA3EDAGtIQ,14095
|
|
33
36
|
roms_tools/tests/test_setup/test_initial_conditions.py,sha256=tSwxdyJjpHgsT_rqjNbwTPYFB7ahwVx-jfk8kEEBbTw,17755
|
|
34
37
|
roms_tools/tests/test_setup/test_nesting.py,sha256=WUhyP9mlMYwAJQgbgqjEU1zOyb8QD3XMgSZvHR_9LE8,18764
|
|
35
38
|
roms_tools/tests/test_setup/test_river_forcing.py,sha256=-VizUlLbhRTHAEoghgnp1bHG-6nHODLZXeLr0HjpZ68,23915
|
|
36
39
|
roms_tools/tests/test_setup/test_surface_forcing.py,sha256=rf4x1k6wvMr4r8hbapnEKiAgGvPeeAtbuSeaTs9qd78,28168
|
|
37
|
-
roms_tools/tests/test_setup/test_tides.py,sha256=
|
|
40
|
+
roms_tools/tests/test_setup/test_tides.py,sha256=4_nux4mCDGsgkzCpiilS_4A_Tfv9creN8cMquZRvFlc,10545
|
|
38
41
|
roms_tools/tests/test_setup/test_topography.py,sha256=EAF-zCHfo6XnXQfBTrSZLuZDVzegWHHlrf9oBmvY0hM,4963
|
|
39
42
|
roms_tools/tests/test_setup/test_utils.py,sha256=hvFsZqZgYiV8drkCvDNp02wBhFT3PuxfoWf3Kfskc2w,2246
|
|
40
43
|
roms_tools/tests/test_setup/test_validation.py,sha256=3dZUSq64dOAlrV4NsvW-YaxIsqAzQvPp7gWAL9DeIrM,3764
|
|
@@ -1522,7 +1525,7 @@ roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_c
|
|
|
1522
1525
|
roms_tools/tests/test_setup/test_data/initial_conditions_with_unified_bgc_from_climatology.zarr/zooC/0.0.0.0,sha256=rbMsZDg52rK24fM83EmNrUNK5n2wZMVtvBGb3_IdXXk,114
|
|
1523
1526
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zattrs,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
|
|
1524
1527
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zgroup,sha256=I4N0bme0vMJ2Kz8QDwbD-i1fFJq1qOXaXTNSFGSgGVk,24
|
|
1525
|
-
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zmetadata,sha256=
|
|
1528
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/.zmetadata,sha256=gNnLeSKplgVHJ728VS7NH5WgL4uzyw45pQ_HiCao4pU,8238
|
|
1526
1529
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/abs_time/.zarray,sha256=AVrYaEeCVeJWUi2FbvisrHwjFyifr4Vt3Yag7Q-n33g,312
|
|
1527
1530
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/abs_time/.zattrs,sha256=0hG3RGr8ZCkuViKEvgrkYvnehkAk3wndb4vesT1jYeI,177
|
|
1528
1531
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/abs_time/0,sha256=PvO30V_gimagXglEZjQSDgwcOrEIoWmt9JQbY4toiic,48
|
|
@@ -1542,17 +1545,23 @@ roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_ti
|
|
|
1542
1545
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_time/.zattrs,sha256=J7nokRiI2EVd2gRefz4l56w6Oe3stuKlZJUFtF-1al4,144
|
|
1543
1546
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_time/0,sha256=VV59hFYdbxNuBU2T_3158lNQqvL5DfHdLAAu8sQS7-Q,48
|
|
1544
1547
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/.zarray,sha256=k-V4JNHxRVz6GafZo4igAGug5unYJOftJe9lXdKEhNc,357
|
|
1545
|
-
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/.zattrs,sha256=
|
|
1548
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/.zattrs,sha256=o8-S5Hh1BlOWs3LZ2H3l5noUxb03Eeg7Tj1Fr64ESas,216
|
|
1546
1549
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_tracer/0.0.0,sha256=tYap192OPUHsMe2PkkMd2yRQXMSf1deDMbKXPmk6Cxg,73
|
|
1547
1550
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_volume/.zarray,sha256=GhgCOinMwfsGOnrm2fpUYPZCCKqM4BZusRqx1KPD6fU,335
|
|
1548
1551
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_volume/.zattrs,sha256=wF9swMjdadnDG7-CaNW8qKmlUVj_djCX2Nb7qzkGemQ,177
|
|
1549
1552
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/river_volume/0.0,sha256=QvezIP43sAUYcf8S5NYjEmll2P_sdRzpCox-I9_aiaQ,112
|
|
1553
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_long_name/.zarray,sha256=gXh-y4G__OX1bdJtHvfgREEEQXRpD-JhGx-jjy_QBOA,313
|
|
1554
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_long_name/.zattrs,sha256=RyfTxeh2VQFfbrWgUn3PeKleAvMjoQ8iWjAovKNp-Bo,92
|
|
1555
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_long_name/0,sha256=bai-Sz7-fTehZiuGcXARwyXn8pewRKGGEui6av4FcQQ,170
|
|
1550
1556
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_name/.zarray,sha256=QqQTrhjNiBCbseqzkDyBxrkQLsMIJNAV9RW72cwRH0w,312
|
|
1551
1557
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_name/.zattrs,sha256=wN1vEaPGU1JcLCImGENU-e6Ix7G1mu-sw3P3THVQZ7A,87
|
|
1552
1558
|
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_name/0,sha256=m5RTy6Ka6ScsKdL_pma6qpevroqCf8LJzuYXCFl9Mds,48
|
|
1559
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_unit/.zarray,sha256=hgnVN9U-gRIumI9-q5JtjayksxbdPqqJ_U12V-Wkq5E,313
|
|
1560
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_unit/.zattrs,sha256=p1CV8O4FD0nhNlKnchhUi0yoxs5C_LO720EgweJgrCQ,87
|
|
1561
|
+
roms_tools/tests/test_setup/test_data/river_forcing_no_climatology.zarr/tracer_unit/0,sha256=tGuBGnOtG8JuTHrnfV6m42IxxhvkqqJcWF9UOz0BcsM,136
|
|
1553
1562
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zattrs,sha256=jFoQJqWC46fw5uLFNg8B7WYcGSGnc9XJAWTk3ZKejOY,29
|
|
1554
1563
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zgroup,sha256=I4N0bme0vMJ2Kz8QDwbD-i1fFJq1qOXaXTNSFGSgGVk,24
|
|
1555
|
-
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zmetadata,sha256=
|
|
1564
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/.zmetadata,sha256=a7KFM7x96_6qZS5BsxKEHmL1B1TaunNEde6RBlplc4k,9002
|
|
1556
1565
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/.zarray,sha256=bRSAng1vaRGTtFKNWhv1GcxwVKYhRsJnjbtncEbdWNA,314
|
|
1557
1566
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/.zattrs,sha256=gDDHVjAFysUhH72DUxR7UwPLMOXFxalOA1fCWa6ImCQ,177
|
|
1558
1567
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/abs_time/0,sha256=SZIHK8deA_aE9wtgz1iLQ8ybjbVQK4Ym1FEsVryztu0,112
|
|
@@ -1575,14 +1584,20 @@ roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/.za
|
|
|
1575
1584
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/.zattrs,sha256=_mr3WpUrqvQh_z8OkdijrEoCwLj47Oightno_JgPwtY,172
|
|
1576
1585
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_time/0,sha256=P_O8S4zgVtxT-DP893R42qoA5iJIIB-FC2dSw7mNu_s,112
|
|
1577
1586
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/.zarray,sha256=4Isc0Ety5rIupAzavr-EG8fY2C9P4Jxyp_-2NYEBUKQ,361
|
|
1578
|
-
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/.zattrs,sha256=
|
|
1587
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/.zattrs,sha256=lkp5oiE6WCviah9N4Kp8LyAUAz7MOhR0nf5Te9JJVnI,222
|
|
1579
1588
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_tracer/0.0.0,sha256=xo6kYtQViGmUufHX-8RirKlGjxq11f6f7QN7sEGGpLM,160
|
|
1580
1589
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/.zarray,sha256=0EIULiiBUSrg48SznfckxE_SZYfnkktKoXzo6o51Gwk,337
|
|
1581
1590
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/.zattrs,sha256=xddPI1cBVtjZXwnxDy2tg8Or2Ie7uvcM9OEJKc7G9sY,183
|
|
1582
1591
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/river_volume/0.0,sha256=kHE275vA_K5agANjAsdDVazkJRXl5LjWUyXIyFsgeEU,302
|
|
1592
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/.zarray,sha256=iBqjS3o0pPe7DY3YUO_O1-TnoAzlDA9zW3dE4Uz9i9Q,315
|
|
1593
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/.zattrs,sha256=RyfTxeh2VQFfbrWgUn3PeKleAvMjoQ8iWjAovKNp-Bo,92
|
|
1594
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_long_name/0,sha256=W4TV8gJnpQ2ZFuB8JV5-V3qDN5H4IgLKgr354bvYMXA,1228
|
|
1583
1595
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/.zarray,sha256=QjU7SiseoLdUl2YDQy7dhjTkwNv5XOx0Tn9V8B8tRZU,315
|
|
1584
1596
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/.zattrs,sha256=wN1vEaPGU1JcLCImGENU-e6Ix7G1mu-sw3P3THVQZ7A,87
|
|
1585
1597
|
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_name/0,sha256=Ly1aLvTbSQJa2zVp1IzT3eIng1fPC9b2sINiQHgjoPM,302
|
|
1598
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/.zarray,sha256=4eWMRuJP39qkwdzO0xfA84REMZx4ux-_l_Oee0rRwh4,315
|
|
1599
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/.zattrs,sha256=p1CV8O4FD0nhNlKnchhUi0yoxs5C_LO720EgweJgrCQ,87
|
|
1600
|
+
roms_tools/tests/test_setup/test_data/river_forcing_with_bgc.zarr/tracer_unit/0,sha256=KXGjlWnIWA92xF09hBEdCnD5o_4qwob6lXTFSjHzJJw,273
|
|
1586
1601
|
roms_tools/tests/test_setup/test_data/surface_forcing.zarr/.zattrs,sha256=ezQ198RqbC3lhq6KCjYuviNNomeYUJZiIQrpp_vfyLw,354
|
|
1587
1602
|
roms_tools/tests/test_setup/test_data/surface_forcing.zarr/.zgroup,sha256=I4N0bme0vMJ2Kz8QDwbD-i1fFJq1qOXaXTNSFGSgGVk,24
|
|
1588
1603
|
roms_tools/tests/test_setup/test_data/surface_forcing.zarr/.zmetadata,sha256=ZhllbfB16Vy9rKPrfncMVk49HDSKFjQyHM0O0inCzbo,7950
|
|
@@ -1613,40 +1628,43 @@ roms_tools/tests/test_setup/test_data/surface_forcing.zarr/uwnd/0.0.0,sha256=y33
|
|
|
1613
1628
|
roms_tools/tests/test_setup/test_data/surface_forcing.zarr/vwnd/.zarray,sha256=3NmD3p3PP_3N6URTn_uBF54Ifqf6cmYUyibmWwxpohM,357
|
|
1614
1629
|
roms_tools/tests/test_setup/test_data/surface_forcing.zarr/vwnd/.zattrs,sha256=Gts2eeNE9fFfMA5fdJ7Nsvhe6Ki8ITZRrmwKedV02Ao,188
|
|
1615
1630
|
roms_tools/tests/test_setup/test_data/surface_forcing.zarr/vwnd/0.0.0,sha256=OuP8dy5b_Cq0FhQij6el5TS3MGv39zJDAsJKCloDZKs,408
|
|
1616
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zattrs,sha256=
|
|
1631
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zattrs,sha256=3zHGJR56QEasw14063X0UjlJfLlsRKpGUhRDugmui_o,172
|
|
1617
1632
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zgroup,sha256=I4N0bme0vMJ2Kz8QDwbD-i1fFJq1qOXaXTNSFGSgGVk,24
|
|
1618
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zmetadata,sha256=
|
|
1633
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/.zmetadata,sha256=FG-laVHMIfMbVQzE7AJMc2syIgmePQ9GmnC-Yh0rda8,8432
|
|
1634
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ntides/.zarray,sha256=OQvNsBJhIgBR29AWJSK6SOXYxy5BDfvmsTDw3tZIyuo,312
|
|
1635
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ntides/.zattrs,sha256=eyhQWXmWgdG4zEDZw7JnQIB9GyOtaF9OTA2xDRSFHsM,53
|
|
1636
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ntides/0,sha256=Il_bgbmovgqFzrER-C7GA32gqH4eTg8BIulbfbEP6kY,28
|
|
1619
1637
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/omega/.zarray,sha256=QJk7BbHqf7zLSgA3rDjjueflWfaOFQnLPo93setNszE,313
|
|
1620
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/omega/.zattrs,sha256=
|
|
1638
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/omega/.zattrs,sha256=eyhQWXmWgdG4zEDZw7JnQIB9GyOtaF9OTA2xDRSFHsM,53
|
|
1621
1639
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/omega/0,sha256=DaRI2juaUIrBGAqyxolkAOovXILayoFKyjIOCpUBEQs,24
|
|
1622
1640
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Im/.zarray,sha256=5eEE-ahTAT3FR10dZI-_sjtRTE8HV5UWMK12Md89Ue4,357
|
|
1623
1641
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Im/.zattrs,sha256=SgAdqj6LpCQxx7Nno_jzVs21Mqteqx1QDj3u0ZuISMw,186
|
|
1624
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Im/0.0.0,sha256=
|
|
1642
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Im/0.0.0,sha256=wPnKNkOgLx0k6sdYQSQkHGI1brYCkLn-2UieOU9O5Hk,116
|
|
1625
1643
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Re/.zarray,sha256=5eEE-ahTAT3FR10dZI-_sjtRTE8HV5UWMK12Md89Ue4,357
|
|
1626
1644
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Re/.zattrs,sha256=8pF5Schwozu2kLC6TYTSIDuWE_ScIDNvPHcfm2egWnA,183
|
|
1627
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Re/0.0.0,sha256=
|
|
1645
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/pot_Re/0.0.0,sha256=CLa34rVIppR8yfAACBrjRRzPdl_bS1M4DnUprQuyvgc,116
|
|
1628
1646
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Im/.zarray,sha256=5eEE-ahTAT3FR10dZI-_sjtRTE8HV5UWMK12Md89Ue4,357
|
|
1629
1647
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Im/.zattrs,sha256=SzfiBEjcVA92fvAUI1_rPDSnNYuAsS5sJ_dT_X83eWs,186
|
|
1630
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Im/0.0.0,sha256=
|
|
1648
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Im/0.0.0,sha256=zT6hS9Sq3GL0W58nB2D4hCQdBC4IkuAUe5TICetYE7s,116
|
|
1631
1649
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Re/.zarray,sha256=5eEE-ahTAT3FR10dZI-_sjtRTE8HV5UWMK12Md89Ue4,357
|
|
1632
1650
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Re/.zattrs,sha256=6MvCsVGA_hcmMVsbjI8CdcX9t2RbDbcaqyamdnrb8rg,183
|
|
1633
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Re/0.0.0,sha256=
|
|
1651
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/ssh_Re/0.0.0,sha256=5fZDtK3jOTdvG1iWQeYxTk1XGPILhLgld8Q6T_5n6FE,116
|
|
1634
1652
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Im/.zarray,sha256=vIn3uMjDuhnPSNz1P1xtgkKIZXESSyC4iBwtbufu3tg,357
|
|
1635
1653
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Im/.zattrs,sha256=tfP6qWLbmRA_gxUREX0A21zaW1bk4cNsNk-sEcx-Cw8,200
|
|
1636
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Im/0.0.0,sha256=
|
|
1654
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Im/0.0.0,sha256=QI1_uSLfOiuAKulV86tsg5MIDjjNTNyHehvYvTkmzT8,96
|
|
1637
1655
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Re/.zarray,sha256=vIn3uMjDuhnPSNz1P1xtgkKIZXESSyC4iBwtbufu3tg,357
|
|
1638
1656
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Re/.zattrs,sha256=asEgtvPVKm2fQ7P43rNClUix2xQPfD2UTus3QBuK2PM,197
|
|
1639
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Re/0.0.0,sha256=
|
|
1657
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/u_Re/0.0.0,sha256=knNkYTaQh68BEmHOBD-eT5dCuxQPMDR3esWuKGvplU8,96
|
|
1640
1658
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Im/.zarray,sha256=2P8kKjSgdw5-3udU-vGJ3bzhNuRn7fZmWN811qBJn34,357
|
|
1641
1659
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Im/.zattrs,sha256=Ta2jmdCDMQ-pvSaXUKkKFItX3D3XMve5DWxlESkCP3w,200
|
|
1642
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Im/0.0.0,sha256=
|
|
1660
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Im/0.0.0,sha256=mT4xxZ8j0de35MYkPMWWE_zMtWHcCu61jiYnqzCElIs,96
|
|
1643
1661
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Re/.zarray,sha256=2P8kKjSgdw5-3udU-vGJ3bzhNuRn7fZmWN811qBJn34,357
|
|
1644
1662
|
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Re/.zattrs,sha256=2z7WUPvCT9VfFs8VCBltFHLWgaGj1jcw3yZ4n0viLRg,197
|
|
1645
|
-
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Re/0.0.0,sha256=
|
|
1663
|
+
roms_tools/tests/test_setup/test_data/tidal_forcing.zarr/v_Re/0.0.0,sha256=yHtxKA81q4GxYfuxgEz5zsGM2tVp6Ytex7gV4AnZwfY,96
|
|
1646
1664
|
roms_tools/tests/test_tiling/test_partition.py,sha256=b6EepZndVDv1B6Qt5_MbDfrFF2LtR0BF7i1t30xHEvA,7977
|
|
1647
1665
|
roms_tools/tiling/partition.py,sha256=ZxDNGIKXZf_7eEzw9cxGP2XR_WBhZ4WCeIMl7_IdskA,12302
|
|
1648
|
-
roms_tools-2.
|
|
1649
|
-
roms_tools-2.
|
|
1650
|
-
roms_tools-2.
|
|
1651
|
-
roms_tools-2.
|
|
1652
|
-
roms_tools-2.
|
|
1666
|
+
roms_tools-2.7.0.dist-info/licenses/LICENSE,sha256=yiff76E4xRioW2bHhlPpyYpstmePQBx2bF8HhgQhSsg,11318
|
|
1667
|
+
roms_tools-2.7.0.dist-info/METADATA,sha256=UGJufb3n2wE4YCagKsgki5pZ1O3Pe3iH5CTWdouAU_8,4696
|
|
1668
|
+
roms_tools-2.7.0.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
|
|
1669
|
+
roms_tools-2.7.0.dist-info/top_level.txt,sha256=aAf4T4nYQSkay5iKJ9kmTjlDgd4ETdp9OSlB4sJdt8Y,19
|
|
1670
|
+
roms_tools-2.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|