Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minor update to depth- and time-dependent unit testing #65

Merged
merged 13 commits into from
Dec 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/environment_docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ dependencies:
- ipython
- numpydoc
- nbsphinx
- sphinx<6
- pandoc>3,<4
- sphinx
- pandoc
- pydata-sphinx-theme
- sphinx-autobuild
- myst-parser
Binary file added tests/test_data/test_KZ_2020-01-01.nc
Binary file not shown.
Binary file modified tests/test_data/test_KZ_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_KZ_2020-01-05.nc
Binary file not shown.
Binary file added tests/test_data/test_S_2020-01-01.nc
Binary file not shown.
Binary file modified tests/test_data/test_S_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_S_2020-01-05.nc
Binary file not shown.
Binary file added tests/test_data/test_T_2020-01-01.nc
Binary file not shown.
Binary file modified tests/test_data/test_T_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_T_2020-01-05.nc
Binary file not shown.
Binary file added tests/test_data/test_U_2020-01-01.nc
Binary file not shown.
Binary file modified tests/test_data/test_U_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_U_2020-01-05.nc
Binary file not shown.
Binary file added tests/test_data/test_V_2020-01-01.nc
Binary file not shown.
Binary file modified tests/test_data/test_V_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_V_2020-01-05.nc
Binary file not shown.
Binary file added tests/test_data/test_W_2020-01-01.nc
Binary file not shown.
Binary file modified tests/test_data/test_W_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_W_2020-01-05.nc
Binary file not shown.
Binary file modified tests/test_data/test_bathymetry_mesh_zgr.nc
Binary file not shown.
Binary file modified tests/test_data/test_bgc_mesh_hgr.nc
Binary file not shown.
Binary file modified tests/test_data/test_nppv_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_nppv_2020-01-05.nc
Binary file not shown.
Binary file modified tests/test_data/test_ocean_mesh_hgr.nc
Binary file not shown.
Binary file modified tests/test_data/test_phy2_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_phy2_2020-01-05.nc
Binary file not shown.
Binary file modified tests/test_data/test_phy_2020-01-04.nc
Binary file not shown.
Binary file added tests/test_data/test_phy_2020-01-05.nc
Binary file not shown.
Binary file modified tests/test_data/test_waves_2020-01-04.nc
Binary file not shown.
Binary file modified tests/test_data/test_wind_2020-01-04.nc
Binary file not shown.
22 changes: 17 additions & 5 deletions tests/test_kernels.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def make_standard_plastictype_settings():
# Use tiny wind percentage because test data set is not large and wind speeds are quick!
plastictype_settings = {'wind_coefficient': 0.0001, # Percentage of wind to apply to particles
'plastic_diameter': 0.001, # Plastic particle diameter (m)
'plastic_density': 1030., # Plastic particle density (kg/m^3)
'plastic_density': 1027.67, # Plastic particle density (kg/m^3)
}
return plastictype_settings

Expand All @@ -32,6 +32,14 @@ def make_standard_particleset(fieldset, settings):

return pset

def checkBelowDataDepth(particle, fieldset, time):
# The vertical mixing kernel can push particles below the test dataset depth, throwing an
# out of bounds error. This kernel will keep particles above the max depth.
if particle.depth + particle_ddepth >= fieldset.max_depth: # noqa
# move a meter above the max depth
particle_ddepth = fieldset.max_depth - particle.depth - 1.0 # noqa
particle.state = parcels.StatusCode.Success


@pytest.mark.parametrize('use_3D', [True, False])
def test_advection_only(use_3D):
Expand Down Expand Up @@ -159,7 +167,6 @@ def test_Stokes():

start_lons = pset.lon.copy()
start_lats = pset.lat.copy()
print(pset[0].dt)
pset.execute(kernels, runtime=settings['simulation']['runtime'], dt=settings['simulation']['dt'])

# Assert that the particles move from their initial location
Expand Down Expand Up @@ -216,18 +223,23 @@ def test_mixing():
settings['use_stokes'] = False

fieldset = pp.constructors.create_fieldset(settings)
fieldset.add_constant('max_depth', fieldset.U.depth[-1])

# Set the simulation runtime to just 1 day so particles aren't kicked around significantly
settings['simulation']['runtime'] = timedelta(days=1)

kernels = [parcels.application_kernels.AdvectionRK4_3D, pp.kernels.checkThroughBathymetry,
pp.kernels.checkErrorThroughSurface, pp.kernels.deleteParticle]

kernels_mixing = [parcels.application_kernels.AdvectionRK4_3D, pp.kernels.VerticalMixing,
pp.kernels.checkThroughBathymetry, pp.kernels.checkErrorThroughSurface,
pp.kernels.deleteParticle]
checkBelowDataDepth, pp.kernels.checkThroughBathymetry,
pp.kernels.checkErrorThroughSurface, pp.kernels.deleteParticle]

pset = make_standard_particleset(fieldset, settings)
pset_mixing = make_standard_particleset(fieldset, settings)

pset.execute(kernels, runtime=settings['simulation']['runtime'], dt=settings['simulation']['dt'])
pset.execute(kernels_mixing, runtime=settings['simulation']['runtime'], dt=settings['simulation']['dt'])
pset_mixing.execute(kernels_mixing, runtime=settings['simulation']['runtime'], dt=settings['simulation']['dt'])

# Assert that the particles move from their initial location
assert (np.sum(np.abs(pset.lon - pset_mixing.lon)) > 0.) & (np.sum(np.abs(pset.lat - pset_mixing.lat)) > 0.)
Loading