Skip to main content

FluidGrid

Struct FluidGrid 

Source
pub struct FluidGrid {
Show 20 fields pub width: usize, pub height: usize, pub dx: f32, pub vx: Vec<f32>, pub vy: Vec<f32>, pub density: Vec<f32>, pub temp: Vec<f32>, pub color_r: Vec<f32>, pub color_g: Vec<f32>, pub color_b: Vec<f32>, pub pressure: Vec<f32>, pub obstacle: Vec<f32>, pub viscosity: f32, pub diffusion: f32, pub buoyancy: f32, pub ambient_temp: f32, pub vorticity_strength: f32, pub gravity: Vec2, pub decay: f32, pub time: f32, /* private fields */
}
Expand description

2D Eulerian fluid simulation grid.

Fields§

§width: usize

Grid width in cells.

§height: usize

Grid height in cells.

§dx: f32

Physical size of one cell (world units).

§vx: Vec<f32>

Velocity X component (cell-centered).

§vy: Vec<f32>

Velocity Y component (cell-centered).

§density: Vec<f32>

Density / smoke field.

§temp: Vec<f32>

Temperature field (buoyancy driving).

§color_r: Vec<f32>

Color R channel for multi-fluid visualization.

§color_g: Vec<f32>

Color G channel.

§color_b: Vec<f32>

Color B channel.

§pressure: Vec<f32>

Pressure field (intermediate, used in projection).

§obstacle: Vec<f32>

Obstacle / solid mask: 1.0 = fluid, 0.0 = solid.

§viscosity: f32

Kinematic viscosity (m^2/s). Default 1e-4.

§diffusion: f32

Density diffusion coefficient.

§buoyancy: f32

Buoyancy lift coefficient (hot gas rises).

§ambient_temp: f32

Ambient temperature. Cells above this experience upward force.

§vorticity_strength: f32

Vorticity confinement strength (adds swirl detail). Default 0.3.

§gravity: Vec2

Gravity direction and magnitude.

§decay: f32

Global density decay per second (smoke dissipation).

§time: f32

Seconds elapsed since creation.

Implementations§

Source§

impl FluidGrid

Source

pub fn new(width: usize, height: usize, dx: f32) -> Self

Create a new fluid grid of given dimensions and cell size.

Source

pub fn idx(&self, x: usize, y: usize) -> usize

Source

pub fn add_velocity(&mut self, cx: usize, cy: usize, dvx: f32, dvy: f32)

Add velocity impulse at cell (cx, cy).

Source

pub fn add_density(&mut self, cx: usize, cy: usize, amount: f32)

Add density at cell.

Source

pub fn add_temperature(&mut self, cx: usize, cy: usize, dt: f32)

Add temperature at cell.

Source

pub fn add_color(&mut self, cx: usize, cy: usize, r: f32, g: f32, b: f32)

Add colored smoke/fluid at cell.

Source

pub fn add_obstacle_circle(&mut self, cx: f32, cy: f32, radius: f32)

Paint a circular solid obstacle.

Source

pub fn add_obstacle_rect(&mut self, x0: usize, y0: usize, x1: usize, y1: usize)

Paint a rectangular solid obstacle.

Source

pub fn step(&mut self, dt: f32)

Advance the simulation by dt seconds.

Source

pub fn sample_velocity(&self, wx: f32, wy: f32) -> Vec2

Sample velocity at world position (bilinear).

Source

pub fn sample_density(&self, wx: f32, wy: f32) -> f32

Sample density at world position.

Source

pub fn sample_color(&self, wx: f32, wy: f32) -> (f32, f32, f32)

Sample color at world position.

Source

pub fn max_velocity(&self) -> f32

Maximum velocity magnitude in the grid.

Source

pub fn total_density(&self) -> f32

Total density integral (conservation check).

Source

pub fn clear(&mut self)

Clear all velocity, density, and color fields.

Source

pub fn splash(&mut self, cx: f32, cy: f32, radius: f32, strength: f32)

Apply a circular velocity splash (radial outward impulse).

Source

pub fn swirl(&mut self, cx: f32, cy: f32, radius: f32, strength: f32)

Apply a swirl vortex impulse (clockwise tangential velocity).

Source

pub fn resize(&mut self, new_width: usize, new_height: usize)

Resize the grid (clears all data).

Source

pub fn to_rgba_density(&self, tint: (u8, u8, u8)) -> Vec<u8>

Render the density field as a flat RGBA byte buffer (width × height × 4). Useful for debug visualization.

Source

pub fn to_rgba_velocity(&self) -> Vec<u8>

Render the velocity field as a flat RGBA byte buffer (speed-encoded).

Trait Implementations§

Source§

impl Clone for FluidGrid

Source§

fn clone(&self) -> FluidGrid

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FluidGrid

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,