@@ -41,15 +41,20 @@ compute_w_from_continuity!(velocities, arch, grid; parameters = w_kernel_paramet
41
41
@kernel function _compute_w_from_continuity! (U, grid)
42
42
i, j = @index (Global, NTuple)
43
43
44
- @inbounds U. w[i, j, 1 ] = 0
45
- for k in 2 : grid. Nz+ 1
46
- δh_u = flux_div_xyᶜᶜᶜ (i, j, k- 1 , grid, U. u, U. v) / Azᶜᶜᶜ (i, j, k- 1 , grid)
47
- ∂tσ = Δrᶜᶜᶜ (i, j, k- 1 , grid) * ∂t_σ (i, j, k- 1 , grid)
44
+ u, v, w = U
45
+ wᵏ = zero (eltype (w))
46
+ @inbounds w[i, j, 1 ] = wᵏ
48
47
49
- immersed = immersed_cell (i, j, k- 1 , grid)
50
- Δw = δh_u + ifelse (immersed, zero (grid), ∂tσ) # We do not account for grid changes in immersed cells
48
+ Nz = size (grid, 3 )
49
+ for k in 2 : Nz+ 1
50
+ δ = flux_div_xyᶜᶜᶜ (i, j, k- 1 , grid, u, v) / Azᶜᶜᶜ (i, j, k- 1 , grid)
51
51
52
- @inbounds U. w[i, j, k] = U. w[i, j, k- 1 ] - Δw
52
+ # We do not account for grid changes in immersed cells
53
+ not_immersed = ! immersed_cell (i, j, k- 1 , grid)
54
+ w̃ = Δrᶜᶜᶜ (i, j, k- 1 , grid) * ∂t_σ (i, j, k- 1 , grid) * not_immersed
55
+
56
+ wᵏ -= (δ + w̃)
57
+ @inbounds w[i, j, k] = wᵏ
53
58
end
54
59
end
55
60
0 commit comments