@@ -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