|
12 | 12 | from parcels._reprs import particleset_repr |
13 | 13 | from parcels.application_kernels.advection import AdvectionRK4 |
14 | 14 | from parcels.basegrid import GridType |
| 15 | +from parcels.field import Field |
15 | 16 | from parcels.interaction.interactionkernel import InteractionKernel |
16 | 17 | from parcels.kernel import Kernel |
17 | 18 | from parcels.particle import Particle, Variable |
@@ -813,14 +814,14 @@ def execute( |
813 | 814 |
|
814 | 815 | time = start_time |
815 | 816 |
|
816 | | - for fld in [self.fieldset.U, self.fieldset.V]: # TODO generalise to all fields and move to better place |
817 | | - fld._time_float = (fld.data_full.time.data - fld.time_interval.left) / np.timedelta64(1, "s") |
| 817 | + for fldname in self.fieldset.fields: |
| 818 | + field = self.fieldset.fields[fldname] |
| 819 | + if isinstance(field, Field): |
| 820 | + field._time_float = (field.data_full.time.data - field.time_interval.left) / np.timedelta64(1, "s") |
818 | 821 |
|
819 | 822 | while sign_dt * (time - end_time) < 0: |
820 | | - for fld in [self.fieldset.U, self.fieldset.V]: # TODO generalise to all fields |
821 | | - ti = np.argmin(fld._time_float <= self._data["time_nextloop"][0]) - 1 # TODO also implement dt < 0 |
822 | | - if not hasattr(fld, "data") or fld.data_full.time.data[ti] != fld.data.time.data[0]: |
823 | | - fld.data = fld.data_full.isel({"time": slice(ti, ti + 2)}).load() |
| 823 | + # Load the appropriate timesteps of the fieldset |
| 824 | + self.fieldset._load_timesteps(self._data["time_nextloop"][0]) |
824 | 825 |
|
825 | 826 | if sign_dt > 0: |
826 | 827 | next_time = min(time + dt, end_time) |
|
0 commit comments