pub struct TensorPoisson {
pub shape: [usize; 3],
pub dx: [f64; 3],
/* private fields */
}Expand description
Tensor-format Poisson solver with isolated (vacuum) boundary conditions.
The Green’s function FFT is precomputed during construction,
so repeated solves only require the convolution pipeline.
FFT plans are cached for reuse across solve() calls.
Fields§
§shape: [usize; 3]Spatial grid dimensions [N0, N1, N2] of the original (unpadded) domain.
dx: [f64; 3]Grid spacing [dx0, dx1, dx2] in each spatial direction.
Implementations§
Source§impl TensorPoisson
impl TensorPoisson
Sourcepub fn new(
shape: [usize; 3],
dx: [f64; 3],
exp_sum_accuracy: f64,
_tolerance: f64,
_max_rank: usize,
) -> Self
pub fn new( shape: [usize; 3], dx: [f64; 3], exp_sum_accuracy: f64, _tolerance: f64, _max_rank: usize, ) -> Self
Create a new TensorPoisson solver.
Builds the Braess-Hackbusch exponential sum approximation for 1/r, constructs the Green’s function on a (2N)^3 zero-padded grid, and precomputes its 3D FFT plus cached forward/inverse FFT plans.
shape: spatial grid dimensions [N0, N1, N2].dx: grid spacing in each direction.exp_sum_accuracy: target accuracy for the exponential sum decomposition._tolerance,_max_rank: reserved for future rank-adaptive modes.
Sourcepub fn from_domain(
domain: &Domain,
exp_sum_accuracy: f64,
tolerance: f64,
max_rank: usize,
) -> Self
pub fn from_domain( domain: &Domain, exp_sum_accuracy: f64, tolerance: f64, max_rank: usize, ) -> Self
Create from a Domain, extracting shape and dx automatically.
Sourcepub fn with_near_field_enabled(self, enabled: bool) -> Self
pub fn with_near_field_enabled(self, enabled: bool) -> Self
Enable or disable the near-field correction (builder pattern).
Sourcepub fn last_near_field_magnitude(&self) -> f64
pub fn last_near_field_magnitude(&self) -> f64
Return the L2 norm of the most recent near-field correction.
Returns 0.0 if no solve has been performed yet or if the correction is disabled.
Trait Implementations§
Source§impl PoissonSolver for TensorPoisson
impl PoissonSolver for TensorPoisson
Source§fn solve(&self, density: &DensityField, g: f64) -> PotentialField
fn solve(&self, density: &DensityField, g: f64) -> PotentialField
Solve the Poisson equation using dense FFT convolution with the precomputed Green’s function.
Pipeline: zero-pad rho to (2N)^3 -> 3D FFT -> pointwise multiply by Green’s FFT -> 3D IFFT -> extract N^3 subgrid -> apply near-field corrections.
Source§fn compute_acceleration(&self, potential: &PotentialField) -> AccelerationField
fn compute_acceleration(&self, potential: &PotentialField) -> AccelerationField
Compute acceleration g = -grad(Phi) via second-order centered finite differences.
Source§fn set_progress(&mut self, p: Arc<StepProgress>)
fn set_progress(&mut self, p: Arc<StepProgress>)
Auto Trait Implementations§
impl !Freeze for TensorPoisson
impl !RefUnwindSafe for TensorPoisson
impl Send for TensorPoisson
impl Sync for TensorPoisson
impl Unpin for TensorPoisson
impl UnsafeUnpin for TensorPoisson
impl !UnwindSafe for TensorPoisson
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> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
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> 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