Skip to content

gspat

src

gspat is an algorithm that speeds up gs. The algorithm is based on the paper by Plasencia et al. (Plasencia et al., 2020).

gspat(
&NalgebraBackend,
&geometry,
&foci,
wavelength,
&option,
&mut dst,
)?;
Parameter Type Description
geometry &Geometry Device layout
foci &[AmplitudeTarget] Sequence of focal points (position and target amplitude)
wavelength Length Wavelength
option &GspatOption Additional options (see below)
dst &mut [[Emission; _]] Output buffer

The parameters are the same as gs.

GspatOption {
repeat,
constraint,
directivity,
mask,
parallel,
}
Field Type Default
repeat NonZeroUsize 100
constraint EmissionConstraint Clamp(MIN, MAX)
directivity Directivity Sphere
mask TransducerMask AllEnabled
parallel bool true

The options are the same as gs.

parallel decides whether the quantization of the result is spread over several host threads (a GPU backend ignores it).

use std::num::NonZeroUsize;
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{m, mm, s};
use autd3_rs::value::Intensity;
use autd3_rs_pattern::wavelength;
use autd3_rs_pattern_holo::{
AmplitudeTarget, Directivity, EmissionConstraint, GspatOption, NalgebraBackend, Pa,
TransducerMask, gspat,
};
let geometry = Geometry::new(vec![Autd3::default()]);
let mut dst = geometry.pattern_buffer();
gspat(
&NalgebraBackend,
&geometry,
&[
AmplitudeTarget {
point: geometry.center() + offset(-30.0 * mm, 0.0 * mm, 150.0 * mm),
amplitude: 2.5e3 * Pa,
},
AmplitudeTarget {
point: geometry.center() + offset(30.0 * mm, 0.0 * mm, 150.0 * mm),
amplitude: 2.5e3 * Pa,
},
],
wavelength(340.0 * m / s),
&GspatOption {
repeat: NonZeroUsize::new(100).unwrap(),
constraint: EmissionConstraint::Clamp(Intensity::MIN, Intensity::MAX),
directivity: Directivity::Sphere,
mask: TransducerMask::AllEnabled,
parallel: true,
},
&mut dst,
)?;