pub struct LbmGpuSolver {
pub nx: u32,
pub ny: u32,
pub nz: u32,
pub omega: f32,
pub step_count: u64,
/* private fields */
}Expand description
GPU-accelerated D3Q19 BGK LBM solver (requires wgpu-backend feature).
Uses WgpuBackendReal to dispatch the lbm_bgk_d3q19.wgsl shader with
ping-pong buffers. Falls back gracefully when no GPU adapter is available.
§Buffer layout
f_buf_a and f_buf_b are each sized 19 × nx × ny × nz × sizeof(f32).
The params buffer holds [nx, ny, nz, omega_bits, 0u32] (5 × 4 bytes).
step() alternates which buffer is read (f_in) vs written (f_out).
Fields§
§nx: u32Number of cells in X, Y, Z.
ny: u32Number of cells in Y.
nz: u32Number of cells in Z.
omega: f32BGK relaxation frequency ω = 1/τ.
step_count: u64Number of steps executed so far.
Implementations§
Source§impl LbmGpuSolver
impl LbmGpuSolver
Sourcepub fn new(nx: u32, ny: u32, nz: u32, omega: f32) -> Self
pub fn new(nx: u32, ny: u32, nz: u32, omega: f32) -> Self
Create a new solver. Attempts to use a real GPU adapter; if none is
available, falls back to the CPU LbmSimulation.
omega = 1/tau (e.g. 1.5 for τ = 2/3, giving ν = 1/18 in lattice units).
Sourcepub fn new_cpu(nx: u32, ny: u32, nz: u32, omega: f32) -> Self
pub fn new_cpu(nx: u32, ny: u32, nz: u32, omega: f32) -> Self
Create directly with a CPU fallback (useful for testing without GPU).
Sourcepub fn read_density(&self) -> Vec<f32>
pub fn read_density(&self) -> Vec<f32>
Download per-cell density ρ = Σᵢ fᵢ from the current read buffer.
Returns a Vec<f32> of length nx * ny * nz.
Sourcepub fn read_velocity(&self) -> Vec<[f32; 3]>
pub fn read_velocity(&self) -> Vec<[f32; 3]>
Download per-cell velocity [ux, uy, uz] from the current read buffer.
Returns a Vec<[f32; 3]> of length nx * ny * nz.
Auto Trait Implementations§
impl !Freeze for LbmGpuSolver
impl !RefUnwindSafe for LbmGpuSolver
impl Send for LbmGpuSolver
impl Sync for LbmGpuSolver
impl Unpin for LbmGpuSolver
impl UnsafeUnpin for LbmGpuSolver
impl !UnwindSafe for LbmGpuSolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more