Skip to content

Commit

Permalink
exposed yearly tidal components (#159)
Browse files Browse the repository at this point in the history
* exposed yearly tidal components

* updated whatsnew
  • Loading branch information
veenstrajelmer authored Oct 19, 2024
1 parent 10cf370 commit 957c07f
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 22 deletions.
1 change: 1 addition & 0 deletions docs/whats-new.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
### Feat
- expanded physical_break_dict in [#151](https://github.com/Deltares-research/kenmerkendewaarden/pull/151)
- linear fit for slotgemiddelden (no nodal) in [#157](https://github.com/Deltares-research/kenmerkendewaarden/pull/157)
- exposed yearly tidal components with `kw.calc_getijcomponenten()` in [#159](https://github.com/Deltares-research/kenmerkendewaarden/pull/159)


## 0.3.0 (2024-10-01)
Expand Down
17 changes: 4 additions & 13 deletions kenmerkendewaarden/gemiddeldgetij.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import hatyan
import logging
import matplotlib.pyplot as plt
from kenmerkendewaarden.tidalindicators import calc_HWLWtidalrange
from kenmerkendewaarden.tidalindicators import (calc_HWLWtidalrange,
calc_getijcomponenten)
from kenmerkendewaarden.havengetallen import calc_havengetallen
from kenmerkendewaarden.utils import TimeSeries_TimedeltaFormatter_improved
from matplotlib.ticker import MaxNLocator, MultipleLocator
Expand Down Expand Up @@ -370,18 +371,8 @@ def get_gemgetij_components(data_pd_meas):
# =============================================================================

# components should not be reduced, since higher harmonics are necessary
const_list = hatyan.get_const_list_hatyan("year")
hatyan_settings_ana = dict(
nodalfactors=True,
fu_alltimes=False,
xfac=True,
analysis_perperiod="Y",
return_allperiods=True,
) # RWS-default settings
comp_frommeasurements_avg, comp_frommeasurements_allyears = hatyan.analysis(
data_pd_meas, const_list=const_list, **hatyan_settings_ana
)

comp_frommeasurements_avg, _ = calc_getijcomponenten(df_meas=data_pd_meas)

# #check if all years are available
# comp_years = comp_frommeasurements_allyears['A'].columns
# expected_years = tstop_dt.year-tstart_dt.year
Expand Down
33 changes: 24 additions & 9 deletions kenmerkendewaarden/tidalindicators.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"calc_HWLWtidalrange",
"calc_hat_lat_fromcomponents",
"calc_hat_lat_frommeasurements",
"calc_getijcomponenten",
]

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -410,18 +411,32 @@ def calc_hat_lat_frommeasurements(df_meas_19y: pd.DataFrame) -> tuple:
)

# TODO: fu_alltimes=False makes the process significantly faster (default is True)
# TODO: xfac actually varies between stations (default is False), but different xfac has only very limited impact on the resulting hat/lat values
_, comp_all = hatyan.analysis(
df_meas_19y,
const_list="year",
analysis_perperiod="Y",
return_allperiods=True,
fu_alltimes=False,
)
# TODO: xfac actually varies between stations (default is False),
# but different xfac has only very limited impact on the resulting hat/lat values
_, comp_all = calc_getijcomponenten(df_meas=df_meas_19y, const_list=None)

# TODO: a frequency of 1min is better in theory, but 10min is faster and hat/lat values differ only 2mm for HOEKVHLD
# TODO: a frequency of 1min is better in theory, but 10min is faster and hat/lat
# values differ only 2mm for HOEKVHLD
df_pred = hatyan.prediction(comp_all, timestep="10min")

lat = df_pred["values"].min()
hat = df_pred["values"].max()
return hat, lat


def calc_getijcomponenten(df_meas, const_list=None):
if const_list is None:
const_list = hatyan.get_const_list_hatyan("year")
# RWS-default settings
hatyan_settings_ana = dict(
nodalfactors=True,
fu_alltimes=False,
xfac=True,
analysis_perperiod="Y",
return_allperiods=True,
)
# analysis
comp_avg, comp_all = hatyan.analysis(
df_meas, const_list=const_list, **hatyan_settings_ana
)
return comp_avg, comp_all
15 changes: 15 additions & 0 deletions tests/test_tidalindicators.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,21 @@ def test_calc_hat_lat_frommeasurements_tooshortperiod(df_meas_2010_2014):
assert "please provide a timeseries of 19 years instead of 5 years" in str(e.value)


@pytest.mark.unittest
def test_calc_getijcomponenten(df_meas_2010_2014):
comp_av, comp_all = kw.calc_getijcomponenten(df_meas_2010_2014)
assert comp_av.shape == (95, 2)
assert comp_all.shape == (95, 10)
m2_av = comp_av.loc["M2"].values
m2_av_expected = np.array([ 0.7842112 , 86.07279444])
m2_all = comp_all.loc["M2"].values
m2_all_expected = np.array([0.79855603, 0.78044153, 0.78365574, 0.77764858,
0.78078641, 85.91979015, 86.36060506, 85.71167985,
86.24874909, 86.12879046])
assert np.allclose(m2_av, m2_av_expected)
assert np.allclose(m2_all, m2_all_expected)


@pytest.mark.unittest
def test_calc_HWLWtidalrange_aggers_input(df_ext_2010):
with pytest.raises(ValueError) as e:
Expand Down

0 comments on commit 957c07f

Please sign in to comment.