@@ -150,6 +150,45 @@ def test_particleset_endtime_type(fieldset, endtime, expectation):
150150 pset .execute (endtime = endtime , dt = np .timedelta64 (10 , "m" ), pyfunc = DoNothing )
151151
152152
153+ def test_particleset_run_to_endtime (fieldset ):
154+ starttime = fieldset .time_interval .left
155+ endtime = fieldset .time_interval .right
156+
157+ def SampleU (particles , fieldset ): # pragma: no cover
158+ _ = fieldset .U [particles ]
159+
160+ pset = ParticleSet (fieldset , lon = [0.2 ], lat = [5.0 ], time = [starttime ])
161+ pset .execute (SampleU , endtime = endtime , dt = np .timedelta64 (1 , "D" ))
162+ assert pset [0 ].time == endtime
163+
164+
165+ def test_particleset_interpolate_on_domainedge (zonal_flow_fieldset ):
166+ fieldset = zonal_flow_fieldset
167+
168+ MyParticle = Particle .add_variable (Variable ("var" ))
169+
170+ def SampleU (particles , fieldset ): # pragma: no cover
171+ particles .var = fieldset .U [particles ]
172+
173+ print (fieldset .U .grid .lon )
174+ pset = ParticleSet (fieldset , pclass = MyParticle , lon = fieldset .U .grid .lon [- 1 ], lat = fieldset .U .grid .lat [- 1 ])
175+ pset .execute (SampleU , runtime = np .timedelta64 (1 , "D" ), dt = np .timedelta64 (1 , "D" ))
176+ np .testing .assert_equal (pset [0 ].var , 1 )
177+
178+
179+ def test_particleset_interpolate_outside_domainedge (zonal_flow_fieldset ):
180+ fieldset = zonal_flow_fieldset
181+
182+ def SampleU (particles , fieldset ): # pragma: no cover
183+ particles .dlon = fieldset .U [particles ]
184+
185+ dlat = 1e-3
186+ pset = ParticleSet (fieldset , lon = fieldset .U .grid .lon [- 1 ], lat = fieldset .U .grid .lat [- 1 ] + dlat )
187+
188+ with pytest .raises (FieldOutOfBoundError ):
189+ pset .execute (SampleU , runtime = np .timedelta64 (1 , "D" ), dt = np .timedelta64 (1 , "D" ))
190+
191+
153192@pytest .mark .parametrize (
154193 "dt" , [np .timedelta64 (1 , "s" ), np .timedelta64 (1 , "ms" ), np .timedelta64 (10 , "ms" ), np .timedelta64 (1 , "ns" )]
155194)
@@ -329,7 +368,6 @@ def MoveRight(particles, fieldset): # pragma: no cover
329368
330369 def MoveLeft (particles , fieldset ): # pragma: no cover
331370 inds = np .where (particles .state == StatusCode .ErrorOutOfBounds )
332- print (inds , particles .state )
333371 particles [inds ].dlon -= 1.0
334372 particles [inds ].state = StatusCode .Success
335373
0 commit comments