|
MADNESS 0.10.1
|
#include <displacements.h>

Classes | |
| class | Iterator |
| Iterator class for lazy generation of surface points. More... | |
Public Types | |
| using | Displacement = Key< NDIM > |
| using | Point = Key< NDIM > |
| using | PointPattern = Vector< std::optional< Translation >, NDIM > |
| using | Validator = std::function< bool(Level, const PointPattern &, std::optional< Displacement > &)> |
Public Member Functions | |
| BoxSurfaceDisplacementRange (const Key< NDIM > ¢er, 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_lattice_summed, Validator validator={}) | |
| Constructs a box with different radii and thicknesses 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_lattice_summed () const |
| const Displacement & | probing_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, in half-SimulationCells. | |
| Point | center_ |
| Center point of the box. | |
| Hollowness | hollowness_ |
| does box contain non-surface points along each dimension? | |
| Periodicity | is_lattice_summed_ |
| which dimensions are lattice summed? | |
| 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, measured in boxes. Real-space surface size is thus n-dependent. | |
| Validator | validator_ |
| optional validator function | |
Friends | |
| class | Iterator |
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. N.B. "points" are really boxes in the standard MADNESS sense, which we'll call "primitive boxes" to disambiguate from box as the product of intervals mentioned above,
|
private |
|
private |
| using madness::BoxSurfaceDisplacementRange< NDIM >::Displacement = Key<NDIM> |
|
private |
|
private |
| using madness::BoxSurfaceDisplacementRange< NDIM >::Point = Key<NDIM> |
| using madness::BoxSurfaceDisplacementRange< NDIM >::PointPattern = Vector<std::optional<Translation>, NDIM> |
|
private |
| using madness::BoxSurfaceDisplacementRange< NDIM >::Validator = std::function<bool(Level, const PointPattern&, std::optional<Displacement>&)> |
this callable returns whether a given primitive box (or hyperface if only one coordinate is provided) can be filtered out. if screening a primitive box, the corresponding displacement should be provided both for further screening and for the displacement to be updated, if displacements are translated to connect two cells in the box. the validator should normally be a BoxSurfaceDisplacementFilter object. anything else is probably a hack.
|
inlineexplicit |
Constructs a box with different radii and thicknesses for each dimension.
| center | Center primitive box of the box. All displacements will share the n of this arg. |
| box_radius | Box radius in each dimension, in half-SimulationCells. Omit for dim i to signal that the bound for dim i is simply the simulation cell. |
| surface_thickness | Surface thickness in each dimension, measured in number of addl. boxes on each half of the surface box proper. Omit for dim i if and only if omitted in box_radius |
| is_lattice_summed | whether each dimension is lattice summed; along lattice summed dimensions only one side of the box is iterated over. |
| validator | Optional 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) |
surface_radius[d]>0 && surface_thickness[d]<=surface_radius[d]
|
inline |
Returns an iterator to the beginning of the surface points.
References madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Begin.
Referenced by test_gconv().
|
inline |
References madness::BoxSurfaceDisplacementRange< NDIM >::box_radius_.
|
inline |
|
inline |
Returns an iterator to the end of the surface points.
References madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::End.
Referenced by test_gconv().
|
inline |
References madness::BoxSurfaceDisplacementRange< NDIM >::is_lattice_summed_.
|
inline |
References madness::BoxSurfaceDisplacementRange< NDIM >::probing_displacement_.
|
inline |
References madness::BoxSurfaceDisplacementRange< NDIM >::surface_thickness_.
|
friend |
|
private |
box bounds in each dimension.
Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Iterator(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::next_surface_layer(), and madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::reset_along_dim().
|
private |
halved size of the box in each dimension, in half-SimulationCells.
Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Iterator(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance(), and madness::BoxSurfaceDisplacementRange< NDIM >::box_radius().
|
private |
|
private |
does box contain non-surface points along each dimension?
Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance(), and madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::next_surface_layer().
|
private |
which dimensions are lattice summed?
Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::is_lattice_summed(), and madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::reset_along_dim().
|
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().
|
private |
surface thickness in each dimension, measured in boxes. Real-space surface size is thus n-dependent.
Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Iterator(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::next_surface_layer(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::reset_along_dim(), and madness::BoxSurfaceDisplacementRange< NDIM >::surface_thickness().
|
private |