Skip to content

Commit 7c47912

Browse files
Using particle.dt in advection kernel Field evaluations
1 parent 445ab60 commit 7c47912

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

parcels/application_kernels/advection.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ def AdvectionRK4(particle, fieldset, time): # pragma: no cover
1919
dt = particle.dt / np.timedelta64(1, "s") # noqa TODO improve API for converting dt to seconds
2020
(u1, v1) = fieldset.UV[particle]
2121
lon1, lat1 = (particle.lon + u1 * 0.5 * dt, particle.lat + v1 * 0.5 * dt)
22-
(u2, v2) = fieldset.UV[time + 0.5 * dt, particle.depth, lat1, lon1, particle]
22+
(u2, v2) = fieldset.UV[time + 0.5 * particle.dt, particle.depth, lat1, lon1, particle]
2323
lon2, lat2 = (particle.lon + u2 * 0.5 * dt, particle.lat + v2 * 0.5 * dt)
24-
(u3, v3) = fieldset.UV[time + 0.5 * dt, particle.depth, lat2, lon2, particle]
24+
(u3, v3) = fieldset.UV[time + 0.5 * particle.dt, particle.depth, lat2, lon2, particle]
2525
lon3, lat3 = (particle.lon + u3 * dt, particle.lat + v3 * dt)
26-
(u4, v4) = fieldset.UV[time + dt, particle.depth, lat3, lon3, particle]
26+
(u4, v4) = fieldset.UV[time + particle.dt, particle.depth, lat3, lon3, particle]
2727
particle_dlon += (u1 + 2 * u2 + 2 * u3 + u4) / 6.0 * dt # noqa
2828
particle_dlat += (v1 + 2 * v2 + 2 * v3 + v4) / 6.0 * dt # noqa
2929

@@ -35,15 +35,15 @@ def AdvectionRK4_3D(particle, fieldset, time): # pragma: no cover
3535
lon1 = particle.lon + u1 * 0.5 * dt
3636
lat1 = particle.lat + v1 * 0.5 * dt
3737
dep1 = particle.depth + w1 * 0.5 * dt
38-
(u2, v2, w2) = fieldset.UVW[time + 0.5 * dt, dep1, lat1, lon1, particle]
38+
(u2, v2, w2) = fieldset.UVW[time + 0.5 * particle.dt, dep1, lat1, lon1, particle]
3939
lon2 = particle.lon + u2 * 0.5 * dt
4040
lat2 = particle.lat + v2 * 0.5 * dt
4141
dep2 = particle.depth + w2 * 0.5 * dt
42-
(u3, v3, w3) = fieldset.UVW[time + 0.5 * dt, dep2, lat2, lon2, particle]
42+
(u3, v3, w3) = fieldset.UVW[time + 0.5 * particle.dt, dep2, lat2, lon2, particle]
4343
lon3 = particle.lon + u3 * dt
4444
lat3 = particle.lat + v3 * dt
4545
dep3 = particle.depth + w3 * dt
46-
(u4, v4, w4) = fieldset.UVW[time + dt, dep3, lat3, lon3, particle]
46+
(u4, v4, w4) = fieldset.UVW[time + particle.dt, dep3, lat3, lon3, particle]
4747
particle_dlon += (u1 + 2 * u2 + 2 * u3 + u4) / 6 * dt # noqa
4848
particle_dlat += (v1 + 2 * v2 + 2 * v3 + v4) / 6 * dt # noqa
4949
particle_ddepth += (w1 + 2 * w2 + 2 * w3 + w4) / 6 * dt # noqa
@@ -63,21 +63,21 @@ def AdvectionRK4_3D_CROCO(particle, fieldset, time): # pragma: no cover
6363
sig_dep1 = sig_dep + w1 * 0.5 * dt
6464
dep1 = sig_dep1 * fieldset.H[time, 0, lat1, lon1]
6565

66-
(u2, v2, w2) = fieldset.UVW[time + 0.5 * dt, dep1, lat1, lon1, particle]
66+
(u2, v2, w2) = fieldset.UVW[time + 0.5 * particle.dt, dep1, lat1, lon1, particle]
6767
w2 *= sig_dep1 / fieldset.H[time, 0, lat1, lon1]
6868
lon2 = particle.lon + u2 * 0.5 * dt
6969
lat2 = particle.lat + v2 * 0.5 * dt
7070
sig_dep2 = sig_dep + w2 * 0.5 * dt
7171
dep2 = sig_dep2 * fieldset.H[time, 0, lat2, lon2]
7272

73-
(u3, v3, w3) = fieldset.UVW[time + 0.5 * dt, dep2, lat2, lon2, particle]
73+
(u3, v3, w3) = fieldset.UVW[time + 0.5 * particle.dt, dep2, lat2, lon2, particle]
7474
w3 *= sig_dep2 / fieldset.H[time, 0, lat2, lon2]
7575
lon3 = particle.lon + u3 * dt
7676
lat3 = particle.lat + v3 * dt
7777
sig_dep3 = sig_dep + w3 * dt
7878
dep3 = sig_dep3 * fieldset.H[time, 0, lat3, lon3]
7979

80-
(u4, v4, w4) = fieldset.UVW[time + dt, dep3, lat3, lon3, particle]
80+
(u4, v4, w4) = fieldset.UVW[time + particle.dt, dep3, lat3, lon3, particle]
8181
w4 *= sig_dep3 / fieldset.H[time, 0, lat3, lon3]
8282
lon4 = particle.lon + u4 * dt
8383
lat4 = particle.lat + v4 * dt
@@ -127,27 +127,27 @@ def AdvectionRK45(particle, fieldset, time): # pragma: no cover
127127

128128
(u1, v1) = fieldset.UV[particle]
129129
lon1, lat1 = (particle.lon + u1 * A[0][0] * dt, particle.lat + v1 * A[0][0] * dt)
130-
(u2, v2) = fieldset.UV[time + c[0] * dt, particle.depth, lat1, lon1, particle]
130+
(u2, v2) = fieldset.UV[time + c[0] * particle.dt, particle.depth, lat1, lon1, particle]
131131
lon2, lat2 = (
132132
particle.lon + (u1 * A[1][0] + u2 * A[1][1]) * dt,
133133
particle.lat + (v1 * A[1][0] + v2 * A[1][1]) * dt,
134134
)
135-
(u3, v3) = fieldset.UV[time + c[1] * dt, particle.depth, lat2, lon2, particle]
135+
(u3, v3) = fieldset.UV[time + c[1] * particle.dt, particle.depth, lat2, lon2, particle]
136136
lon3, lat3 = (
137137
particle.lon + (u1 * A[2][0] + u2 * A[2][1] + u3 * A[2][2]) * dt,
138138
particle.lat + (v1 * A[2][0] + v2 * A[2][1] + v3 * A[2][2]) * dt,
139139
)
140-
(u4, v4) = fieldset.UV[time + c[2] * dt, particle.depth, lat3, lon3, particle]
140+
(u4, v4) = fieldset.UV[time + c[2] * particle.dt, particle.depth, lat3, lon3, particle]
141141
lon4, lat4 = (
142142
particle.lon + (u1 * A[3][0] + u2 * A[3][1] + u3 * A[3][2] + u4 * A[3][3]) * dt,
143143
particle.lat + (v1 * A[3][0] + v2 * A[3][1] + v3 * A[3][2] + v4 * A[3][3]) * dt,
144144
)
145-
(u5, v5) = fieldset.UV[time + c[3] * dt, particle.depth, lat4, lon4, particle]
145+
(u5, v5) = fieldset.UV[time + c[3] * particle.dt, particle.depth, lat4, lon4, particle]
146146
lon5, lat5 = (
147147
particle.lon + (u1 * A[4][0] + u2 * A[4][1] + u3 * A[4][2] + u4 * A[4][3] + u5 * A[4][4]) * dt,
148148
particle.lat + (v1 * A[4][0] + v2 * A[4][1] + v3 * A[4][2] + v4 * A[4][3] + v5 * A[4][4]) * dt,
149149
)
150-
(u6, v6) = fieldset.UV[time + c[4] * dt, particle.depth, lat5, lon5, particle]
150+
(u6, v6) = fieldset.UV[time + c[4] * particle.dt, particle.depth, lat5, lon5, particle]
151151

152152
lon_4th = (u1 * b4[0] + u2 * b4[1] + u3 * b4[2] + u4 * b4[3] + u5 * b4[4]) * dt
153153
lat_4th = (v1 * b4[0] + v2 * b4[1] + v3 * b4[2] + v4 * b4[3] + v5 * b4[4]) * dt

0 commit comments

Comments
 (0)