MADNESS 0.10.1
Classes | Public Types | Public Member Functions | Private Types | Private Attributes | Friends | List of all members
madness::BoxSurfaceDisplacementRange< NDIM > Class Template Reference

#include <displacements.h>

Collaboration diagram for madness::BoxSurfaceDisplacementRange< NDIM >:
Collaboration graph
[legend]

Classes

class  Iterator
 Iterator class for lazy generation of surface points. More...
 

Public Types

using Displacement = Key< NDIM >
 
using Filter = std::function< bool(Level, const PointPattern &, std::optional< Displacement > &)>
 this callable filters out points and/or displacements; note that the displacement is optional (this use case supports filtering based on point pattern onlu) and non-const to make it possible for the filter function to update the displacement (e.g. to map it back to the simulation cell)
 
using Point = Key< NDIM >
 
using PointPattern = Vector< std::optional< Translation >, NDIM >
 

Public Member Functions

 BoxSurfaceDisplacementRange (const Key< NDIM > &center, const std::array< std::optional< std::int64_t >, NDIM > &box_radius, const std::array< std::optional< std::int64_t >, NDIM > &surface_thickness, const array_of_bools< NDIM > &is_periodic, Filter filter={})
 Constructs a box with different sizes for each dimension.
 
auto begin () const
 Returns an iterator to the beginning of the surface points.
 
const std::array< std::optional< int64_t >, NDIM > & box_radius () const
 
const Key< NDIM > & center () const
 
auto end () const
 Returns an iterator to the end of the surface points.
 
const array_of_bools< NDIM > & is_periodic () const
 
const Displacementprobing_displacement () const
 
const std::array< std::optional< int64_t >, NDIM > & surface_thickness () const
 

Private Types

using Box = std::array< std::pair< Translation, Translation >, NDIM >
 
using BoxRadius = std::array< std::optional< Translation >, NDIM >
 
using Hollowness = std::array< bool, NDIM >
 
using Periodicity = array_of_bools< NDIM >
 
using SurfaceThickness = std::array< std::optional< Translation >, NDIM >
 

Private Attributes

Box box_
 box bounds in each dimension
 
BoxRadius box_radius_
 halved size of the box in each dimension
 
Point center_
 Center point of the box.
 
Filter filter_
 optional filter function
 
Hollowness hollowness_
 does box contain non-surface points along each dimension?
 
Periodicity is_periodic_
 which dimensions are periodic?
 
Displacement probing_displacement_
 displacement to a nearby point on the surface; it may not be able to pass the filter, but is sufficiently representative of the surface displacements to allow screening with isotropic kernels
 
SurfaceThickness surface_thickness_
 surface thickness in each dimension
 

Friends

class Iterator
 

Detailed Description

template<std::size_t NDIM>
class madness::BoxSurfaceDisplacementRange< NDIM >

Generates points at the finite-thickness surface of an N-dimensional box [C1-L1,C1+L1]x...x[CN-LN,CN+LN] centered at point {C1,...CN} in Z^N. For finite thickness T={T1,...,TN} point {x1,...,xN} is at the surface face perpendicular to axis i xi>=Ci-Li-Ti and xi<=Ci-Li+Ti OR xi>=Ci+Li-Ti and xi<=Ci+Li+Ti. For dimensions with unlimited size the point coordinates are limited to [0,2^n], with n being the level of the box.

Member Typedef Documentation

◆ Box

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Box = std::array<std::pair<Translation, Translation>, NDIM>
private

◆ BoxRadius

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::BoxRadius = std::array<std::optional<Translation>, NDIM>
private

◆ Displacement

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Displacement = Key<NDIM>

◆ Filter

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Filter = std::function<bool(Level, const PointPattern&, std::optional<Displacement>&)>

this callable filters out points and/or displacements; note that the displacement is optional (this use case supports filtering based on point pattern onlu) and non-const to make it possible for the filter function to update the displacement (e.g. to map it back to the simulation cell)

◆ Hollowness

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Hollowness = std::array<bool, NDIM>
private

◆ Periodicity

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Periodicity = array_of_bools<NDIM>
private

◆ Point

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Point = Key<NDIM>

◆ PointPattern

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::PointPattern = Vector<std::optional<Translation>, NDIM>

◆ SurfaceThickness

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::SurfaceThickness = std::array<std::optional<Translation>, NDIM>
private

Constructor & Destructor Documentation

◆ BoxSurfaceDisplacementRange()

template<std::size_t NDIM>
madness::BoxSurfaceDisplacementRange< NDIM >::BoxSurfaceDisplacementRange ( const Key< NDIM > &  center,
const std::array< std::optional< std::int64_t >, NDIM > &  box_radius,
const std::array< std::optional< std::int64_t >, NDIM > &  surface_thickness,
const array_of_bools< NDIM > &  is_periodic,
Filter  filter = {} 
)
inlineexplicit

Constructs a box with different sizes for each dimension.

Parameters
centerCenter of the box
box_radiusBox radius in each dimension
surface_thicknessSurface thickness in each dimension
is_periodicwhether each dimension is periodic; along periodic range-restricted dimensions only one side of the box is iterated over.
filterOptional filter function (if returns false, displacement is dropped; default: no filter); it may update the displacement to make it valid as needed (e.g. map displacement to the simulation cell)
Precondition
box_radius[d]>0 && surface_thickness[d]<=box_radius[d]

Member Function Documentation

◆ begin()

template<std::size_t NDIM>
auto madness::BoxSurfaceDisplacementRange< NDIM >::begin ( ) const
inline

Returns an iterator to the beginning of the surface points.

Returns
Iterator pointing to the first surface point

References madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Begin.

Referenced by test_gconv().

◆ box_radius()

template<std::size_t NDIM>
const std::array< std::optional< int64_t >, NDIM > & madness::BoxSurfaceDisplacementRange< NDIM >::box_radius ( ) const
inline
Returns
the radius of the box in each dimension

References madness::BoxSurfaceDisplacementRange< NDIM >::box_radius_.

◆ center()

template<std::size_t NDIM>
const Key< NDIM > & madness::BoxSurfaceDisplacementRange< NDIM >::center ( ) const
inline

◆ end()

template<std::size_t NDIM>
auto madness::BoxSurfaceDisplacementRange< NDIM >::end ( ) const
inline

Returns an iterator to the end of the surface points.

Returns
Iterator indicating the end of iteration

References madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::End.

Referenced by test_gconv().

◆ is_periodic()

template<std::size_t NDIM>
const array_of_bools< NDIM > & madness::BoxSurfaceDisplacementRange< NDIM >::is_periodic ( ) const
inline
Returns
flags indicating whether each dimension is periodic

References madness::BoxSurfaceDisplacementRange< NDIM >::is_periodic_.

◆ probing_displacement()

template<std::size_t NDIM>
const Displacement & madness::BoxSurfaceDisplacementRange< NDIM >::probing_displacement ( ) const
inline
Returns
'probing" displacement to a nearby point on the surface; it may not necessarily be in the range of iteration (e.g., it may not be able to pass the filter) but is representative of the surface displacements for the purposes of screening

References madness::BoxSurfaceDisplacementRange< NDIM >::probing_displacement_.

◆ surface_thickness()

template<std::size_t NDIM>
const std::array< std::optional< int64_t >, NDIM > & madness::BoxSurfaceDisplacementRange< NDIM >::surface_thickness ( ) const
inline
Returns
the surface thickness in each dimension

References madness::BoxSurfaceDisplacementRange< NDIM >::surface_thickness_.

Friends And Related Symbol Documentation

◆ Iterator

template<std::size_t NDIM>
friend class Iterator
friend

Member Data Documentation

◆ box_

template<std::size_t NDIM>
Box madness::BoxSurfaceDisplacementRange< NDIM >::box_
private

◆ box_radius_

template<std::size_t NDIM>
BoxRadius madness::BoxSurfaceDisplacementRange< NDIM >::box_radius_
private

◆ center_

template<std::size_t NDIM>
Point madness::BoxSurfaceDisplacementRange< NDIM >::center_
private

◆ filter_

template<std::size_t NDIM>
Filter madness::BoxSurfaceDisplacementRange< NDIM >::filter_
private

◆ hollowness_

template<std::size_t NDIM>
Hollowness madness::BoxSurfaceDisplacementRange< NDIM >::hollowness_
private

◆ is_periodic_

template<std::size_t NDIM>
Periodicity madness::BoxSurfaceDisplacementRange< NDIM >::is_periodic_
private

◆ probing_displacement_

template<std::size_t NDIM>
Displacement madness::BoxSurfaceDisplacementRange< NDIM >::probing_displacement_
private

displacement to a nearby point on the surface; it may not be able to pass the filter, but is sufficiently representative of the surface displacements to allow screening with isotropic kernels

Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::probing_displacement().

◆ surface_thickness_

template<std::size_t NDIM>
SurfaceThickness madness::BoxSurfaceDisplacementRange< NDIM >::surface_thickness_
private

The documentation for this class was generated from the following file: