Skip to content

Commit 31dd2bd

Browse files
Using particles.dt directly in sigmagrids
1 parent 5db1fbf commit 31dd2bd

1 file changed

Lines changed: 29 additions & 30 deletions

File tree

src/parcels/kernels/_sigmagrids.py

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -39,47 +39,46 @@ def AdvectionRK4_3D_CROCO(particles, fieldset): # pragma: no cover
3939
This kernel assumes the vertical velocity is the 'w' field from CROCO output and works on sigma-layers.
4040
It also uses linear interpolation of the W field, which gives much better results than the default C-grid interpolation.
4141
"""
42-
dt = particles.dt
4342
sigma = particles.z / fieldset.h[particles.t, np.zeros_like(particles.z), particles.y, particles.x]
4443

4544
sig = convert_z_to_sigma_croco(fieldset, particles.t, particles.z, particles.y, particles.x, particles)
4645
(u1, v1) = fieldset.UV[particles.t, sig, particles.y, particles.x, particles]
4746
w1 = fieldset.W[particles.t, sig, particles.y, particles.x, particles]
4847
w1 *= sigma / fieldset.h[particles.t, np.zeros_like(particles.z), particles.y, particles.x]
49-
x1 = particles.x + u1 * 0.5 * dt
50-
y1 = particles.y + v1 * 0.5 * dt
51-
sig_dep1 = sigma + w1 * 0.5 * dt
48+
x1 = particles.x + u1 * 0.5 * particles.dt
49+
y1 = particles.y + v1 * 0.5 * particles.dt
50+
sig_dep1 = sigma + w1 * 0.5 * particles.dt
5251
dep1 = sig_dep1 * fieldset.h[particles.t, np.zeros_like(particles.z), y1, x1]
5352

54-
sig1 = convert_z_to_sigma_croco(fieldset, particles.t + 0.5 * dt, dep1, y1, x1, particles)
55-
(u2, v2) = fieldset.UV[particles.t + 0.5 * dt, sig1, y1, x1, particles]
56-
w2 = fieldset.W[particles.t + 0.5 * dt, sig1, y1, x1, particles]
57-
w2 *= sig_dep1 / fieldset.h[particles.t + 0.5 * dt, np.zeros_like(particles.z), y1, x1]
58-
x2 = particles.x + u2 * 0.5 * dt
59-
y2 = particles.y + v2 * 0.5 * dt
60-
sig_dep2 = sigma + w2 * 0.5 * dt
61-
dep2 = sig_dep2 * fieldset.h[particles.t + 0.5 * dt, np.zeros_like(particles.z), y2, x2]
53+
sig1 = convert_z_to_sigma_croco(fieldset, particles.t + 0.5 * particles.dt, dep1, y1, x1, particles)
54+
(u2, v2) = fieldset.UV[particles.t + 0.5 * particles.dt, sig1, y1, x1, particles]
55+
w2 = fieldset.W[particles.t + 0.5 * particles.dt, sig1, y1, x1, particles]
56+
w2 *= sig_dep1 / fieldset.h[particles.t + 0.5 * particles.dt, np.zeros_like(particles.z), y1, x1]
57+
x2 = particles.x + u2 * 0.5 * particles.dt
58+
y2 = particles.y + v2 * 0.5 * particles.dt
59+
sig_dep2 = sigma + w2 * 0.5 * particles.dt
60+
dep2 = sig_dep2 * fieldset.h[particles.t + 0.5 * particles.dt, np.zeros_like(particles.z), y2, x2]
6261

63-
sig2 = convert_z_to_sigma_croco(fieldset, particles.t + 0.5 * dt, dep2, y2, x2, particles)
64-
(u3, v3) = fieldset.UV[particles.t + 0.5 * dt, sig2, y2, x2, particles]
65-
w3 = fieldset.W[particles.t + 0.5 * dt, sig2, y2, x2, particles]
66-
w3 *= sig_dep2 / fieldset.h[particles.t + 0.5 * dt, np.zeros_like(particles.z), y2, x2]
67-
x3 = particles.x + u3 * dt
68-
y3 = particles.y + v3 * dt
69-
sig_dep3 = sigma + w3 * dt
70-
dep3 = sig_dep3 * fieldset.h[particles.t + dt, np.zeros_like(particles.z), y3, x3]
62+
sig2 = convert_z_to_sigma_croco(fieldset, particles.t + 0.5 * particles.dt, dep2, y2, x2, particles)
63+
(u3, v3) = fieldset.UV[particles.t + 0.5 * particles.dt, sig2, y2, x2, particles]
64+
w3 = fieldset.W[particles.t + 0.5 * particles.dt, sig2, y2, x2, particles]
65+
w3 *= sig_dep2 / fieldset.h[particles.t + 0.5 * particles.dt, np.zeros_like(particles.z), y2, x2]
66+
x3 = particles.x + u3 * particles.dt
67+
y3 = particles.y + v3 * particles.dt
68+
sig_dep3 = sigma + w3 * particles.dt
69+
dep3 = sig_dep3 * fieldset.h[particles.t + particles.dt, np.zeros_like(particles.z), y3, x3]
7170

72-
sig3 = convert_z_to_sigma_croco(fieldset, particles.t + dt, dep3, y3, x3, particles)
73-
(u4, v4) = fieldset.UV[particles.t + dt, sig3, y3, x3, particles]
74-
w4 = fieldset.W[particles.t + dt, sig3, y3, x3, particles]
75-
w4 *= sig_dep3 / fieldset.h[particles.t + dt, np.zeros_like(particles.z), y3, x3]
76-
x4 = particles.x + u4 * dt
77-
y4 = particles.y + v4 * dt
78-
sig_dep4 = sigma + w4 * dt
71+
sig3 = convert_z_to_sigma_croco(fieldset, particles.t + particles.dt, dep3, y3, x3, particles)
72+
(u4, v4) = fieldset.UV[particles.t + particles.dt, sig3, y3, x3, particles]
73+
w4 = fieldset.W[particles.t + particles.dt, sig3, y3, x3, particles]
74+
w4 *= sig_dep3 / fieldset.h[particles.t + particles.dt, np.zeros_like(particles.z), y3, x3]
75+
x4 = particles.x + u4 * particles.dt
76+
y4 = particles.y + v4 * particles.dt
77+
sig_dep4 = sigma + w4 * particles.dt
7978

80-
dep4 = sig_dep4 * fieldset.h[particles.t + dt, np.zeros_like(particles.z), y4, x4]
81-
particles.dx += (u1 + 2 * u2 + 2 * u3 + u4) / 6 * dt
82-
particles.dy += (v1 + 2 * v2 + 2 * v3 + v4) / 6 * dt
79+
dep4 = sig_dep4 * fieldset.h[particles.t + particles.dt, np.zeros_like(particles.z), y4, x4]
80+
particles.dx += (u1 + 2 * u2 + 2 * u3 + u4) / 6 * particles.dt
81+
particles.dy += (v1 + 2 * v2 + 2 * v3 + v4) / 6 * particles.dt
8382
particles.dz += (
8483
(dep1 - particles.z) * 2 + 2 * (dep2 - particles.z) * 2 + 2 * (dep3 - particles.z) + dep4 - particles.z
8584
) / 6

0 commit comments

Comments
 (0)