55import xarray as xr
66from 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
139from bluemath_tk .wrappers .swan .swan_wrapper import SwanModelWrapper
1410
1511example_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 ,
20134 292.5 ,
20235 277.5 ,
20336]
204- laura_frequencies = [
37+ example_frequencies = [
20538 0.03500004 ,
20639 0.03850004 ,
20740 0.04234991 ,
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-
28670class 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