Skip to main content

TensorPoisson

Struct TensorPoisson 

Source
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

Source

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.
Source

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.

Source

pub fn with_near_field_enabled(self, enabled: bool) -> Self

Enable or disable the near-field correction (builder pattern).

Source

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

Source§

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

Compute acceleration g = -grad(Phi) via second-order centered finite differences.

Source§

fn set_progress(&mut self, p: Arc<StepProgress>)

Attach shared progress state for intra-phase cell-level reporting.

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> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

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

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,