From bc9d6f3ce264e8ce7825a364d94dd0202da94f4f Mon Sep 17 00:00:00 2001 From: Xin Kai Lee Date: Wed, 3 Jan 2024 11:54:36 -0500 Subject: [PATCH 1/2] Fix index calculation for periodic boundary conditions --- .../lagrangian_particle_advection.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl b/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl index 000bb65e6a..615c58f2d9 100644 --- a/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl +++ b/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl @@ -99,9 +99,9 @@ given `velocities`, time-step `Δt, and coefficient of `restitution`. Nx, Ny, Nz = size(grid) # Find index of the "rightmost" cell interface - iᴿ = length(f, tx, Nx) - jᴿ = length(f, ty, Ny) - kᴿ = length(f, tz, Nz) + iᴿ = length(f, tx, Nx) + ifelse(tx == Periodic(), 1, 0) + jᴿ = length(f, ty, Ny) + ifelse(ty == Periodic(), 1, 0) + kᴿ = length(f, tz, Nz) + ifelse(tz == Periodic(), 1, 0) xᴸ = xnode(1, j, k, grid, f, f, f) yᴸ = ynode(i, 1, k, grid, f, f, f) From f46640667957e88b2cf64332ce23d36832e1bf11 Mon Sep 17 00:00:00 2001 From: Xin Kai Lee Date: Wed, 19 Jun 2024 13:53:49 -0400 Subject: [PATCH 2/2] Update index calculation for rightmost cell interface --- .../lagrangian_particle_advection.jl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl b/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl index 615c58f2d9..d974b85df6 100644 --- a/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl +++ b/src/Models/LagrangianParticleTracking/lagrangian_particle_advection.jl @@ -64,6 +64,15 @@ bouncing the particle off the immersed boundary with a coefficient or `restituti return x⁺, y⁺, z⁺ end +""" + rightmost_interface_index(topology, N) + +Return the index of the rightmost cell interface for a grid with `topology` and `N` cells. +""" +rightmost_interface_index(::Bounded, N) = N + 1 +rightmost_interface_index(::Periodic, N) = N + 1 +rightmost_interface_index(::Flat, N) = N + """ advect_particle((x, y, z), p, restitution, grid, Δt, velocities) @@ -99,9 +108,9 @@ given `velocities`, time-step `Δt, and coefficient of `restitution`. Nx, Ny, Nz = size(grid) # Find index of the "rightmost" cell interface - iᴿ = length(f, tx, Nx) + ifelse(tx == Periodic(), 1, 0) - jᴿ = length(f, ty, Ny) + ifelse(ty == Periodic(), 1, 0) - kᴿ = length(f, tz, Nz) + ifelse(tz == Periodic(), 1, 0) + iᴿ = rightmost_interface_index(tx, Nx) + jᴿ = rightmost_interface_index(ty, Ny) + kᴿ = rightmost_interface_index(tz, Nz) xᴸ = xnode(1, j, k, grid, f, f, f) yᴸ = ynode(i, 1, k, grid, f, f, f)