pub struct TileKernelGrid {
pub width: u32,
pub height: u32,
pub params: AcousticParams,
/* private fields */
}Expand description
A simulation grid using tile actors with K2K messaging.
Fields§
§width: u32Grid dimensions in cells.
height: u32§params: AcousticParamsAcoustic simulation parameters.
Implementations§
Source§impl TileKernelGrid
impl TileKernelGrid
Sourcepub async fn new(
width: u32,
height: u32,
params: AcousticParams,
backend: Backend,
) -> Result<Self>
pub async fn new( width: u32, height: u32, params: AcousticParams, backend: Backend, ) -> Result<Self>
Create a new tile-based kernel grid.
Sourcepub async fn with_tile_size(
width: u32,
height: u32,
params: AcousticParams,
backend: Backend,
tile_size: u32,
) -> Result<Self>
pub async fn with_tile_size( width: u32, height: u32, params: AcousticParams, backend: Backend, tile_size: u32, ) -> Result<Self>
Create a new tile-based kernel grid with custom tile size.
Sourcepub async fn step(&mut self) -> Result<()>
pub async fn step(&mut self) -> Result<()>
Perform one simulation step using tile actors with K2K messaging.
Sourcepub fn enable_cuda_persistent(&mut self) -> Result<()>
pub fn enable_cuda_persistent(&mut self) -> Result<()>
Enable GPU-persistent CUDA compute.
This mode keeps pressure state GPU-resident and only transfers halos for K2K communication. Much faster than upload/download per step.
Sourcepub fn is_gpu_persistent_enabled(&self) -> bool
pub fn is_gpu_persistent_enabled(&self) -> bool
Check if GPU-persistent mode is enabled.
Sourcepub fn gpu_persistent_backend(&self) -> Option<GpuPersistentBackend>
pub fn gpu_persistent_backend(&self) -> Option<GpuPersistentBackend>
Get which GPU-persistent backend is active.
Sourcepub fn step_cuda_persistent(&mut self) -> Result<()>
pub fn step_cuda_persistent(&mut self) -> Result<()>
Perform one simulation step using GPU-persistent CUDA compute.
State stays GPU-resident. Only halos are transferred for K2K messaging.
Sourcepub fn read_pressure_from_cuda(&self) -> Result<Vec<Vec<f32>>>
pub fn read_pressure_from_cuda(&self) -> Result<Vec<Vec<f32>>>
Read pressure grid from CUDA for visualization.
Sourcepub fn inject_impulse_cuda(
&mut self,
x: u32,
y: u32,
amplitude: f32,
) -> Result<()>
pub fn inject_impulse_cuda( &mut self, x: u32, y: u32, amplitude: f32, ) -> Result<()>
Upload a pressure impulse to CUDA GPU-persistent state.
Sourcepub fn inject_impulse(&mut self, x: u32, y: u32, amplitude: f32)
pub fn inject_impulse(&mut self, x: u32, y: u32, amplitude: f32)
Inject an impulse at the given global grid position.
Sourcepub fn get_pressure_grid(&self) -> Vec<Vec<f32>>
pub fn get_pressure_grid(&self) -> Vec<Vec<f32>>
Get the pressure grid for visualization.
Sourcepub fn max_pressure(&self) -> f32
pub fn max_pressure(&self) -> f32
Get the maximum absolute pressure in the grid.
Sourcepub fn total_energy(&self) -> f32
pub fn total_energy(&self) -> f32
Get total energy in the system.
Sourcepub fn cell_count(&self) -> usize
pub fn cell_count(&self) -> usize
Get the number of cells.
Sourcepub fn tile_count(&self) -> usize
pub fn tile_count(&self) -> usize
Get the number of tile actors.
Sourcepub fn set_speed_of_sound(&mut self, speed: f32)
pub fn set_speed_of_sound(&mut self, speed: f32)
Update acoustic parameters.
Sourcepub fn set_cell_size(&mut self, size: f32)
pub fn set_cell_size(&mut self, size: f32)
Update cell size.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TileKernelGrid
impl !RefUnwindSafe for TileKernelGrid
impl Send for TileKernelGrid
impl Sync for TileKernelGrid
impl Unpin for TileKernelGrid
impl !UnwindSafe for TileKernelGrid
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
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 moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more