Skip to main content

Tree

Struct Tree 

Source
pub struct Tree<const N: usize> { /* private fields */ }
Expand description

An N-dimensional hypertree, which subdives each axis in two in each refinement step.

Used as a basis for axes aligned adaptive finite difference meshes. The tree is

Implementations§

Source§

impl<const N: usize> Tree<N>

Source

pub fn new(domain: HyperBox<N>) -> Self

Constructs a new tree consisting of a single root cell, covering the given domain.

Source

pub fn set_periodic(&mut self, axis: usize, periodic: bool)

Source

pub fn domain(&self) -> HyperBox<N>

Source

pub fn num_active_cells(&self) -> usize

The number of active (leaf) cells in this tree.

Source

pub fn num_cells(&self) -> usize

The total number of cells in this tree (including )

Source

pub fn num_levels(&self) -> usize

The maximum depth of this tree.

Source

pub fn level_cells( &self, level: usize, ) -> impl Iterator<Item = CellId> + ExactSizeIterator

Source

pub fn cell_indices(&self) -> impl Iterator<Item = CellId>

Source

pub fn active_cell_indices(&self) -> impl Iterator<Item = ActiveCellId>

Source

pub fn bounds(&self, cell: CellId) -> HyperBox<N>

Returns the numerical bounds of a given cell.

Source

pub fn active_bounds(&self, active: ActiveCellId) -> HyperBox<N>

Source

pub fn level(&self, cell: CellId) -> usize

Returns the level of a given cell.

Source

pub fn active_level(&self, cell: ActiveCellId) -> usize

Source

pub fn children(&self, cell: CellId) -> Option<CellId>

Returns the children of a given node. Node must not be leaf.

Source

pub fn child(&self, cell: CellId, child: Split<N>) -> Option<CellId>

Returns a child of a give node.

Source

pub fn parent(&self, cell: CellId) -> Option<CellId>

The parent node of a given node.

Source

pub fn active_zvalue(&self, active: ActiveCellId) -> &BitSlice<usize, Lsb0>

Returns the zvalue of the given active cell.

Source

pub fn active_split(&self, active: ActiveCellId, level: usize) -> Split<N>

Source

pub fn most_recent_active_split(&self, active: ActiveCellId) -> Option<Split<N>>

Source

pub fn check_refine_flags(&self, flags: &[bool]) -> bool

Checks whether the given refinement flags are balanced.

Source

pub fn balance_refine_flags(&self, flags: &mut [bool])

Balances the given refinement flags, flagging additional cells for refinement to preserve the 2:1 fine coarse ratio between every two neighbors.

Source

pub fn refine_active_index_map(&self, flags: &[bool], map: &mut [ActiveCellId])

Fills the map with updated indices after refinement is performed. If a cell is refined, this will point to the base cell in that new subdivision.

Source

pub fn refine(&mut self, flags: &[bool])

Source

pub fn check_coarsen_flags(&self, flags: &[bool]) -> bool

Checks that the given coarsening flags are balanced and valid.

Source

pub fn balance_coarsen_flags(&self, flags: &mut [bool])

Balances the given coarsening flags

Source

pub fn coarsen_active_index_map(&self, flags: &[bool], map: &mut [ActiveCellId])

Maps current cells to indices after coarsening is performed.

Source

pub fn coarsen(&mut self, flags: &[bool])

Source

pub fn build(&mut self)

Source

pub fn cell_from_active_index(&self, active: ActiveCellId) -> CellId

Computes the cell index corresponding to an active cell.

Source

pub fn active_index_from_cell(&self, cell: CellId) -> Option<ActiveCellId>

Computes active cell index from a cell, returning None if cell is not active.

Source

pub fn active_children( &self, cell: CellId, ) -> impl Iterator<Item = ActiveCellId> + ExactSizeIterator

Returns an iterator over active cells that are children of the given cell. If is_active(cell) = true then this iterator will be a singleton returning the same value as tree.active_index_from_cell(cell).

Source

pub fn is_active(&self, node: CellId) -> bool

True if a node has no children.

Source

pub fn cell_from_point(&self, point: [f64; N]) -> CellId

Returns the cell which owns the given point. Performs in O(log N).

Source

pub fn cell_from_point_cached(&self, point: [f64; N], cache: CellId) -> CellId

Returns the node which owns the given point, shortening this search with an initial guess. Rather than operating in O(log N) time, this approaches O(1) if the guess is sufficiently close.

Source

pub fn neighbor(&self, cell: CellId, face: Face<N>) -> Option<CellId>

Returns the neighboring cell along the given face. If the neighboring cell is more refined, this returns the cell index of the adjacent cell with tree.level(neighbor) == tree.level(cell). If this passes over a nonperiodic boundary then it returns None.

Source

pub fn neighbor_region(&self, cell: CellId, region: Region<N>) -> Option<CellId>

Returns the neighboring cell in the given region. If the neighboring cell is more refined, this returns the cell index of the adjacent cell with tree.level(neighbor) == tree.level(cell). If this passes over a nonperiodic boundary then it returns None.

Source

pub fn _neighbor_region2( &self, cell: CellId, region: Region<N>, ) -> Option<CellId>

Returns the neighboring cell in the given region. If the neighboring cell is more refined, this returns the cell index of the adjacent cell with tree.level(neighbor) == tree.level(cell). If this passes over a nonperiodic boundary then it returns None.

Source

pub fn active_neighbors_in_region( &self, cell: CellId, region: Region<N>, ) -> impl Iterator<Item = ActiveCellId> + '_

Iterates over

Source

pub fn active_neighborhood( &self, cell: ActiveCellId, ) -> impl Iterator<Item = ActiveCellId> + '_

Source

pub fn active_coarse_neighborhood( &self, cell: ActiveCellId, ) -> impl Iterator<Item = ActiveCellId> + '_

Source

pub fn is_boundary_face(&self, cell: CellId, face: Face<N>) -> bool

Returns true if a face lies on a boundary.

Source

pub fn boundary_region(&self, cell: CellId, region: Region<N>) -> Region<N>

Given a neighboring region to a cell, determines which global region that belongs to (usually)

Trait Implementations§

Source§

impl<const N: usize> Clone for Tree<N>

Source§

fn clone(&self) -> Tree<N>

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<const N: usize> DataSize for Tree<N>

Source§

const IS_DYNAMIC: bool = true

If true, the type has a heap size that can vary at runtime, depending on the actual value.
Source§

const STATIC_HEAP_SIZE: usize = 0

The amount of space a value of the type always occupies. If IS_DYNAMIC is false, this is the total amount of heap memory occupied by the value. Otherwise this is a lower bound.
Source§

fn estimate_heap_size(&self) -> usize

Estimates the size of heap memory taken up by this value. Read more
Source§

impl<const N: usize> Debug for Tree<N>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'de, const N: usize> Deserialize<'de> for Tree<N>

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<const N: usize> From<Tree<N>> for TreeSer<N>

Source§

fn from(value: Tree<N>) -> Self

Converts to this type from the input type.
Source§

impl<const N: usize> From<TreeSer<N>> for Tree<N>

Source§

fn from(value: TreeSer<N>) -> Self

Converts to this type from the input type.
Source§

impl<const N: usize> PartialEq for Tree<N>

Source§

fn eq(&self, other: &Tree<N>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const N: usize> Serialize for Tree<N>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<const N: usize> StructuralPartialEq for Tree<N>

Auto Trait Implementations§

§

impl<const N: usize> Freeze for Tree<N>

§

impl<const N: usize> RefUnwindSafe for Tree<N>

§

impl<const N: usize> Send for Tree<N>

§

impl<const N: usize> Sync for Tree<N>

§

impl<const N: usize> Unpin for Tree<N>

§

impl<const N: usize> UnsafeUnpin for Tree<N>

§

impl<const N: usize> UnwindSafe for Tree<N>

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

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
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> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,