Skip to content

Commit 880a4e7

Browse files
added sea level check on units and general level
1 parent 399febe commit 880a4e7

2 files changed

Lines changed: 46 additions & 4 deletions

File tree

test_suite/conftest.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ def pytest_addoption(parser):
99
"--sim_dir",
1010
action="store",
1111
default=".",
12-
help="Home directory of run (where param.nml sits)" "--sea_level",
12+
help="Home directory of run (where param.nml sits)",
13+
),
14+
parser.addoption(
15+
"--sea_level",
1316
action="store",
1417
default=0.97,
1518
help="Expected sea level (0.97 m is default)",
@@ -19,11 +22,16 @@ def pytest_addoption(parser):
1922
@pytest.fixture(scope="module")
2023
def sim_dir(request):
2124
loc = request.config.getoption("--sim_dir")
25+
loc = "/scratch/tomkovic/schism_repos/bdschism_pytest"
2226
return os.path.abspath(loc)
2327

28+
2429
@pytest.fixture(scope="module")
2530
def params(sim_dir):
26-
fname = os.path.join(sim_dir,"param.nml")
31+
fname = os.path.join(sim_dir, "param.nml")
2732
return parms.read_params(fname)
28-
29-
33+
34+
35+
@pytest.fixture(scope="module")
36+
def sea_level(request):
37+
return request.config.getoption("--sea_level")

test_suite/test_elev2d.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44
import os
55
import xarray as xr
6+
import numpy as np
67
import datetime
78

89

@@ -19,3 +20,36 @@ def test_elev2d_time(sim_dir, params):
1920
assert (
2021
elev_start == param_start
2122
), f"elev2D.th.nc file start time {elev_start.strftime('%Y-%m-%d %H:%M')} does not match the param.nml start time {param_start.strftime('%Y-%m-%d %H:%M')}"
23+
24+
25+
@pytest.mark.prerun
26+
def test_sea_level(sim_dir, sea_level):
27+
elev_df = xr.open_dataset(
28+
os.path.join(sim_dir, "elev2D.th.nc")
29+
) # shape is elev_df.time_series[timesteps, openboundarynodes, nlevels]
30+
31+
mean_sea_level = elev_df.time_series[:, :, :].mean().item()
32+
33+
nmon = int(
34+
((elev_df.time.values[-1] - elev_df.time.values[0]) / np.timedelta64(1, "D"))
35+
/ 30.44
36+
)
37+
38+
sigma = min(0.4, 0.1 + 0.25 / nmon)
39+
40+
assert (
41+
abs(sea_level - mean_sea_level) < sigma
42+
), f"Mean sea level {mean_sea_level:.2f} is not within {sigma:.2f} of expected sea level {sea_level:.2f}"
43+
44+
45+
@pytest.mark.prerun
46+
def test_sea_level_units(sim_dir):
47+
elev_df = xr.open_dataset(
48+
os.path.join(sim_dir, "elev2D.th.nc")
49+
) # shape is elev_df.time_series[timesteps, openboundarynodes, nlevels]
50+
51+
std_dev = elev_df.time_series.std(dim=("nOpenBndNodes", "nLevels"))
52+
53+
assert (
54+
std_dev.max().item() < 1.0
55+
), f"Standard deviation of sea level is too high for units of meters, check download data for possible use of feet. Max standard deviation: {std_dev:.2f}"

0 commit comments

Comments
 (0)