Skip to content

Commit e0d59c7

Browse files
authored
Fix: Handle unnamed index/dimension in wave.resource.surface_elevation (#341)
* Fix: If unnamed, set spectrum dim_0 name to "Frequency" * Test: input spectrum without index name defined * Fix: Use found frequency dimension name * Test: input wave spectrum with unnamed index
1 parent 09b9d7f commit e0d59c7

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

mhkit/tests/wave/test_resource_spectrum.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,27 @@ def test_surface_elevation_rmse(self):
149149

150150
self.assertLess(rmse_sum, 0.02)
151151

152+
def test_mhkit_spectrum_without_frequency_index_name_defined(self):
153+
S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs)
154+
S.index.name = None
155+
156+
eta_ifft_xr = wave.resource.surface_elevation(S, self.t, seed=1, method="ifft")
157+
eta_sos_xr = wave.resource.surface_elevation(
158+
S, self.t, seed=1, method="sum_of_sines"
159+
)
160+
161+
assert_allclose(eta_ifft_xr, eta_sos_xr)
162+
163+
def test_user_spectrum_without_frequency_index_name_defined(self):
164+
spectra = pd.DataFrame({"magnitude": [1.0, 2.0, 3.0]}, index=[0.0, 1.0, 2.0])
165+
time = [0.0, 1.0, 2.0]
166+
167+
result = wave.resource.surface_elevation(spectra, time, seed=1)
168+
169+
expected_magnitude = [-0.983917, 1.274248, -2.129812]
170+
171+
assert_allclose(result["magnitude"], expected_magnitude, atol=1e-6)
172+
152173
def test_ifft_sum_of_sines(self):
153174
S = wave.resource.jonswap_spectrum(self.f, self.Tp, self.Hs)
154175

mhkit/wave/resource.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ def surface_elevation(
304304

305305
if frequency_dimension == "":
306306
frequency_dimension = list(S.coords)[0]
307+
307308
elif frequency_dimension not in list(S.dims):
308309
raise ValueError(
309310
f"frequency_dimension is not a dimension of S ({list(S.dims)}). Got: {frequency_dimension}."
@@ -366,8 +367,8 @@ def surface_elevation(
366367
np.random.seed(seed)
367368
phase = xr.DataArray(
368369
data=2 * np.pi * np.random.rand(S[var].size),
369-
dims="Frequency",
370-
coords={"Frequency": f},
370+
dims=frequency_dimension,
371+
coords={frequency_dimension: f},
371372
)
372373
else:
373374
phase = phases[var]
@@ -392,8 +393,8 @@ def surface_elevation(
392393
B = B.reshape((len(time_index), len(omega)))
393394
B = xr.DataArray(
394395
data=B,
395-
dims=["Time", "Frequency"],
396-
coords={"Time": time_index, "Frequency": f},
396+
dims=["Time", frequency_dimension],
397+
coords={"Time": time_index, frequency_dimension: f},
397398
)
398399

399400
# wave elevation

0 commit comments

Comments
 (0)