Skip to content

Commit 2899e37

Browse files
Add test on writing particle age
1 parent c821248 commit 2899e37

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

tests/test_particlefile.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,31 @@ def SampleP(particles, fieldset): # pragma: no cover
275275
assert fieldset.U.grid.lat[yi] <= lat < fieldset.U.grid.lat[yi + 1]
276276

277277

278+
@pytest.mark.parametrize("outputdt", [np.timedelta64(1, "s"), np.timedelta64(2, "s"), np.timedelta64(3, "s")])
279+
def test_time_is_age(fieldset, tmp_zarrfile, outputdt):
280+
# Test that particle age is same as time - initial_time
281+
npart = 10
282+
283+
AgeParticle = get_default_particle(np.float64).add_variable(Variable("age", initial=0.0))
284+
285+
def IncreaseAge(particles, fieldset): # pragma: no cover
286+
particles.age += particles.dt / np.timedelta64(1, "s")
287+
288+
time = fieldset.time_interval.left + np.arange(npart) * np.timedelta64(1, "s")
289+
pset = ParticleSet(fieldset, pclass=AgeParticle, lon=npart * [0], lat=npart * [0], time=time)
290+
ofile = ParticleFile(tmp_zarrfile, outputdt=outputdt)
291+
292+
pset.execute(IncreaseAge, runtime=np.timedelta64(npart * 2, "s"), dt=np.timedelta64(1, "s"), output_file=ofile)
293+
294+
# TODO v4: Fix metadata and re-enable decode_cf
295+
ds = xr.open_zarr(tmp_zarrfile, decode_cf=False)
296+
age = ds["age"][:].values
297+
ds_time = np.zeros_like(age)
298+
for i in range(npart):
299+
ds_time[i, :] = ds.time.values[i, :] - (time[i] - fieldset.time_interval.left) / np.timedelta64(1, "s")
300+
assert np.allclose(age[~np.isnan(age)], ds_time[~np.isnan(age)])
301+
302+
278303
def test_reset_dt(fieldset, tmp_zarrfile):
279304
# Assert that p.dt gets reset when a write_time is not a multiple of dt
280305
# for p.dt=0.02 to reach outputdt=0.05 and endtime=0.1, the steps should be [0.2, 0.2, 0.1, 0.2, 0.2, 0.1], resulting in 6 kernel executions

0 commit comments

Comments
 (0)