Skip to content

Commit 76b59c2

Browse files
committed
[JTH] little change in binwaves swan example
1 parent 612f188 commit 76b59c2

File tree

1 file changed

+6
-245
lines changed

1 file changed

+6
-245
lines changed

bluemath_tk/wrappers/swan/swan_example.py

Lines changed: 6 additions & 245 deletions
Original file line numberDiff line numberDiff line change
@@ -5,177 +5,10 @@
55
import xarray as xr
66
from wavespectra.construct import construct_partition
77

8-
from bluemath_tk.waves.binwaves import (
9-
generate_swan_cases,
10-
process_kp_coefficients,
11-
reconstruc_spectra,
12-
)
8+
from bluemath_tk.waves.binwaves import generate_swan_cases
139
from bluemath_tk.wrappers.swan.swan_wrapper import SwanModelWrapper
1410

1511
example_directions = [
16-
1.5,
17-
4.5,
18-
7.5,
19-
10.5,
20-
13.5,
21-
16.5,
22-
19.5,
23-
22.5,
24-
25.5,
25-
28.5,
26-
31.5,
27-
34.5,
28-
37.5,
29-
40.5,
30-
43.5,
31-
46.5,
32-
49.5,
33-
52.5,
34-
55.5,
35-
58.5,
36-
61.5,
37-
64.5,
38-
67.5,
39-
70.5,
40-
73.5,
41-
76.5,
42-
79.5,
43-
82.5,
44-
85.5,
45-
88.5,
46-
91.5,
47-
94.5,
48-
97.5,
49-
100.5,
50-
103.5,
51-
106.5,
52-
109.5,
53-
112.5,
54-
115.5,
55-
118.5,
56-
121.5,
57-
124.5,
58-
127.5,
59-
130.5,
60-
133.5,
61-
136.5,
62-
139.5,
63-
142.5,
64-
145.5,
65-
148.5,
66-
151.5,
67-
154.5,
68-
157.5,
69-
160.5,
70-
163.5,
71-
166.5,
72-
169.5,
73-
172.5,
74-
175.5,
75-
178.5,
76-
181.5,
77-
184.5,
78-
187.5,
79-
190.5,
80-
193.5,
81-
196.5,
82-
199.5,
83-
202.5,
84-
205.5,
85-
208.5,
86-
211.5,
87-
214.5,
88-
217.5,
89-
220.5,
90-
223.5,
91-
226.5,
92-
229.5,
93-
232.5,
94-
235.5,
95-
238.5,
96-
241.5,
97-
244.5,
98-
247.5,
99-
250.5,
100-
253.5,
101-
256.5,
102-
259.5,
103-
262.5,
104-
265.5,
105-
268.5,
106-
271.5,
107-
274.5,
108-
277.5,
109-
280.5,
110-
283.5,
111-
286.5,
112-
289.5,
113-
292.5,
114-
295.5,
115-
298.5,
116-
301.5,
117-
304.5,
118-
307.5,
119-
310.5,
120-
313.5,
121-
316.5,
122-
319.5,
123-
322.5,
124-
325.5,
125-
328.5,
126-
331.5,
127-
334.5,
128-
337.5,
129-
340.5,
130-
343.5,
131-
346.5,
132-
349.5,
133-
352.5,
134-
355.5,
135-
358.5,
136-
]
137-
example_frequencies = [
138-
0.03,
139-
0.033,
140-
0.0363,
141-
0.0399,
142-
0.0438,
143-
0.0482,
144-
0.053,
145-
0.0582,
146-
0.064,
147-
0.0704,
148-
0.0774,
149-
0.0851,
150-
0.0935,
151-
0.1028,
152-
0.1131,
153-
0.1243,
154-
0.1367,
155-
0.1503,
156-
0.1652,
157-
0.1816,
158-
0.1997,
159-
0.2195,
160-
0.2413,
161-
0.2653,
162-
0.2917,
163-
0.3207,
164-
0.3526,
165-
0.3876,
166-
0.4262,
167-
0.4685,
168-
0.5151,
169-
0.5663,
170-
0.6226,
171-
0.6845,
172-
0.7525,
173-
0.8273,
174-
0.9096,
175-
1.0,
176-
]
177-
178-
laura_directions = [
17912
262.5,
18013
247.5,
18114
232.5,
@@ -201,7 +34,7 @@
20134
292.5,
20235
277.5,
20336
]
204-
laura_frequencies = [
37+
example_frequencies = [
20538
0.03500004,
20639
0.03850004,
20740
0.04234991,
@@ -234,55 +67,6 @@
23467
]
23568

23669

237-
def transform_CAWCR_WS(
238-
cawcr_dataset: xr.Dataset,
239-
subset_parameters: dict,
240-
available_case_num: np.ndarray,
241-
) -> xr.Dataset:
242-
"""
243-
Transform the wave spectra from CAWCR format to binwaves format.
244-
245-
Parameters
246-
----------
247-
cawcr_dataset : xr.Dataset
248-
The wave spectra dataset in CAWCR format.
249-
subset_parameters : dict
250-
A dictionary containing parameters for the subset processing.
251-
available_case_num : np.ndarray
252-
The available case numbers.
253-
254-
Returns
255-
-------
256-
xr.Dataset
257-
The wave spectra dataset in binwaves format.
258-
"""
259-
260-
# First, reproject the wave spectra to the binwaves format
261-
ds = cawcr_dataset.rename({"frequency": "freq", "direction": "dir"})
262-
ds["efth"] = ds["efth"] * np.pi / 180.0
263-
ds["dir"] = ds["dir"] - 180.0
264-
ds["dir"] = np.where(ds["dir"] < 0, ds["dir"] + 360, ds["dir"])
265-
ds = ds.sortby("dir").sortby("freq")
266-
267-
# Second, reproject into the available case numbers dimension
268-
case_num_spectra = []
269-
for case_num, case_dir, case_freq in zip(
270-
available_case_num,
271-
np.array(subset_parameters.get("dir"))[available_case_num],
272-
np.array(subset_parameters.get("freq"))[available_case_num],
273-
):
274-
case_num_spectra.append(
275-
ds.efth.sel(freq=case_freq, dir=case_dir, method="nearest").expand_dims(
276-
{"case_num": [case_num]}
277-
)
278-
)
279-
ds_case_num = (
280-
xr.concat(case_num_spectra, dim="case_num").drop_vars("dir").drop_vars("freq")
281-
)
282-
283-
return ds, ds_case_num
284-
285-
28670
class BinWavesWrapper(SwanModelWrapper):
28771
"""
28872
Wrapper example for the BinWaves model.
@@ -292,13 +76,13 @@ def build_case(self, case_dir: str, case_context: dict):
29276
input_spectrum = construct_partition(
29377
freq_name="jonswap",
29478
freq_kwargs={
295-
"freq": laura_frequencies,
79+
"freq": example_frequencies,
29680
"fp": 1.0 / case_context.get("tp"),
29781
"hs": case_context.get("hs"),
29882
},
29983
dir_name="cartwright",
30084
dir_kwargs={
301-
"dir": laura_directions,
85+
"dir": example_directions,
30286
"dm": case_context.get("dir"),
30387
"dspr": case_context.get("spr"),
30488
},
@@ -339,8 +123,8 @@ def build_cases(self, mode="one_by_one"):
339123
# Generate swan model parameters
340124
model_parameters = (
341125
generate_swan_cases(
342-
directions_array=laura_directions,
343-
frequencies_array=laura_frequencies,
126+
directions_array=example_directions,
127+
frequencies_array=example_frequencies,
344128
)
345129
.astype(float)
346130
.to_dataframe()
@@ -366,26 +150,3 @@ def build_cases(self, mode="one_by_one"):
366150
# postprocessed_ds = swan_wrapper.postprocess_cases()
367151
# postprocessed_ds.to_netcdf(op.join(swan_wrapper.output_dir, "waves_part.nc"))
368152
# print(postprocessed_ds)
369-
# Get input and ouput spectra files from self.cases_dirs
370-
input_files = [op.join(d, "input_spectra.bnd") for d in swan_wrapper.cases_dirs]
371-
output_files = [op.join(d, "output.spec") for d in swan_wrapper.cases_dirs]
372-
# Extract binwaves kp coeffs
373-
kp_coeffs = process_kp_coefficients(
374-
list_of_input_spectra=input_files,
375-
list_of_output_spectra=output_files,
376-
)
377-
# Load interest spectra
378-
_, offshore_spectra = transform_CAWCR_WS(
379-
cawcr_dataset=xr.open_dataset(
380-
"/home/tausiaj/GitHub-GeoOcean/BlueMath/test_data/ERA5_full.nc"
381-
),
382-
subset_parameters=model_parameters,
383-
available_case_num=kp_coeffs.case_num.values,
384-
)
385-
# Reconstruct spectra
386-
onshore_spectra = reconstruc_spectra(
387-
offshore_spectra=offshore_spectra,
388-
kp_coeffs=kp_coeffs,
389-
)
390-
onshore_spectra.to_netcdf(op.join(swan_wrapper.output_dir, "onshore_spectra.nc"))
391-
print(onshore_spectra)

0 commit comments

Comments
 (0)