This is a distributed grid. More...
#include <grid_dist_id.hpp>
Inheritance diagram for grid_dist_id< dim, St, T, Decomposition, Memory, device_grid >:Public Types | |
| typedef device_grid | d_grid |
| Which kind of grid the structure store. | |
| typedef Decomposition | decomposition |
| Decomposition used. | |
| typedef T | value_type |
| value_type | |
| typedef St | stype |
| Type of space. | |
| typedef Memory | memory_type |
| Type of Memory. | |
| typedef device_grid | device_grid_type |
| Type of device grid. | |
Public Member Functions | |
| const Box< dim, St > | getDomain () const |
| Get the domain where the grid is defined. More... | |
| openfpm::vector< device_grid > & | getLocalGrid () |
| Get the local grid. More... | |
| Point< dim, St > | getOffset (size_t i) |
| Get the point where it start the origin of the grid of the sub-domain i. More... | |
| St | spacing (size_t i) const |
| Get the spacing of the grid in direction i. More... | |
| size_t | size () const |
| Return the total number of points in the grid. More... | |
| void | setBackgroundValue (T &bv) |
| set the background value More... | |
| template<unsigned int p> | |
| void | setBackgroundValue (const typename boost::mpl::at< typename T::type, boost::mpl::int_< p >>::type &bv) |
| set the background value More... | |
| size_t | size_local_inserted () const |
| Return the local total number of points inserted in the grid. More... | |
| size_t | size (size_t i) const |
| Return the total number of points in the grid. More... | |
| grid_dist_id (const grid_dist_id< dim, St, T, Decomposition, Memory, device_grid > &g) | |
| Copy constructor. More... | |
| template<typename H > | |
| grid_dist_id (const grid_dist_id< dim, St, H, typename Decomposition::base_type, Memory, grid_cpu< dim, H >> &g, const Ghost< dim, long int > &gh, Box< dim, size_t > ext) | |
| This constructor is special, it construct an expanded grid that perfectly overlap with the previous. More... | |
| template<typename Decomposition2 > | |
| grid_dist_id (const Decomposition2 &dec, const size_t(&g_sz)[dim], const Ghost< dim, St > &ghost) | |
| grid_dist_id (Decomposition &&dec, const size_t(&g_sz)[dim], const Ghost< dim, St > &ghost) | |
| grid_dist_id (const Decomposition &dec, const size_t(&g_sz)[dim], const Ghost< dim, long int > &g) | |
| template<typename Decomposition2 > | |
| grid_dist_id (const Decomposition2 &dec, const size_t(&g_sz)[dim], const Ghost< dim, long int > &g) | |
| grid_dist_id (Decomposition &&dec, const size_t(&g_sz)[dim], const Ghost< dim, long int > &g) | |
| grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, St > &g, size_t opt=0) | |
| grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, long int > &g, size_t opt=0) | |
| grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, St > &g, const periodicity< dim > &p, size_t opt=0) | |
| grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, long int > &g, const periodicity< dim > &p, size_t opt=0, const grid_sm< dim, void > &g_dec=grid_sm< dim, void >()) | |
| grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, long int > &g, const periodicity< dim > &p, openfpm::vector< Box< dim, long int >> &bx_def) | |
| It construct a grid on the full domain restricted to the set of boxes specified. More... | |
| const grid_sm< dim, T > & | getGridInfo () const |
| Get an object containing the grid informations. More... | |
| const grid_sm< dim, void > & | getGridInfoVoid () const |
| Get an object containing the grid informations without type. More... | |
| Decomposition & | getDecomposition () |
| Get the object that store the information about the decomposition. More... | |
| const Decomposition & | getDecomposition () const |
| Get the object that store the information about the decomposition. More... | |
| const CellDecomposer_sm< dim, St, shift< dim, St > > & | getCellDecomposer () const |
| Return the cell decomposer. More... | |
| bool | isInside (const grid_key_dx< dim > &gk) const |
| Check that the global grid key is inside the grid domain. More... | |
| size_t | getLocalDomainSize () const |
| Get the total number of grid points for the calling processor. More... | |
| size_t | getLocalDomainWithGhostSize () const |
| Get the total number of grid points with ghost for the calling processor. More... | |
| const openfpm::vector< GBoxes< device_grid::dims > > & | getLocalGridsInfo () const |
| It return the informations about the local grids. More... | |
| void | getGlobalGridsInfo (openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_global) const |
| It gathers the information about local grids for all of the processors. More... | |
| grid_dist_iterator< dim, device_grid, decltype(device_grid::type_of_subiterator()), FREE > | getOldDomainIterator () const |
| It return an iterator that span the full grid domain (each processor span its local domain) More... | |
| grid_dist_id_iterator_dec< Decomposition > | getGridIterator (const grid_key_dx< dim > &start, const grid_key_dx< dim > &stop) |
| grid_dist_id_iterator_dec< Decomposition, true > | getGridGhostIterator (const grid_key_dx< dim > &start, const grid_key_dx< dim > &stop) |
| grid_dist_id_iterator_dec< Decomposition > | getGridIterator () |
| grid_dist_iterator< dim, device_grid, decltype(device_grid::type_of_subiterator()), FREE > | getDomainIterator () const |
| It return an iterator that span the full grid domain (each processor span its local domain) More... | |
| template<unsigned int Np> | |
| grid_dist_iterator< dim, device_grid, decltype(device_grid::template type_of_subiterator< stencil_offset_compute< dim, Np >>()), FREE, stencil_offset_compute< dim, Np > > | getDomainIteratorStencil (const grid_key_dx< dim >(&stencil_pnt)[Np]) const |
| It return an iterator that span the full grid domain (each processor span its local domain) More... | |
| grid_dist_iterator< dim, device_grid, decltype(device_grid::type_of_iterator()), FIXED > | getDomainGhostIterator () const |
| It return an iterator that span the grid domain + ghost part. More... | |
| grid_dist_iterator_sub< dim, device_grid > | getSubDomainIterator (const grid_key_dx< dim > &start, const grid_key_dx< dim > &stop) const |
| It return an iterator that span the grid domain only in the specified part. More... | |
| grid_dist_iterator_sub< dim, device_grid > | getSubDomainIterator (const long int(&start)[dim], const long int(&stop)[dim]) const |
| It return an iterator that span the grid domain only in the specified part. More... | |
| ~grid_dist_id () | |
| Destructor. | |
| Vcluster & | getVC () |
| Get the Virtual Cluster machine. More... | |
| void | removeUnusedBuffers () |
| Eliminate many internal temporary buffer you can use this between flushes if you get some out of memory. | |
| bool | is_staggered () const |
| Indicate that this grid is not staggered. More... | |
| template<typename bg_key > | |
| void | remove (const grid_dist_key_dx< dim, bg_key > &v1) |
| remove an element in the grid More... | |
| template<typename bg_key > | |
| void | remove_no_flush (const grid_dist_key_dx< dim, bg_key > &v1) |
| remove an element in the grid More... | |
| template<typename ... v_reduce> | |
| void | flush (flush_type opt=flush_type::FLUSH_ON_HOST) |
| void | flush_remove () |
| remove an element in the grid More... | |
| template<unsigned int p, typename bg_key > | |
| auto | insert (const grid_dist_key_dx< dim, bg_key > &v1) -> decltype(loc_grid.get(v1.getSub()).template insert< p >(v1.getKey())) |
| insert an element in the grid More... | |
| template<unsigned int p, typename bg_key > | |
| auto | insertFlush (const grid_dist_key_dx< dim, bg_key > &v1) -> decltype(loc_grid.get(v1.getSub()).template insertFlush< p >(v1.getKey())) |
| insert an element in the grid More... | |
| template<typename bg_key > | |
| auto | insertFlush (const grid_dist_key_dx< dim, bg_key > &v1) -> decltype(loc_grid.get(v1.getSub()).insertFlush(v1.getKey())) |
| insert an element in the grid More... | |
| template<unsigned int p, typename bg_key > | |
| auto | get (const grid_dist_key_dx< dim, bg_key > &v1) const -> typename std::add_lvalue_reference< decltype(loc_grid.get(v1.getSub()).template get< p >(v1.getKey()))>::type |
| Get the reference of the selected element. More... | |
| template<unsigned int p, typename bg_key > | |
| auto | get (const grid_dist_key_dx< dim, bg_key > &v1) -> decltype(loc_grid.get(v1.getSub()).template get< p >(v1.getKey())) |
| Get the reference of the selected element. More... | |
| template<unsigned int p = 0> | |
| auto | get (const grid_dist_g_dx< device_grid > &v1) const -> decltype(v1.getSub() ->template get< p >(v1.getKey())) |
| Get the reference of the selected element. More... | |
| template<unsigned int p = 0> | |
| auto | get (const grid_dist_g_dx< device_grid > &v1) -> decltype(v1.getSub() ->template get< p >(v1.getKey())) |
| Get the reference of the selected element. More... | |
| template<unsigned int p = 0> | |
| auto | get (const grid_dist_lin_dx &v1) const -> decltype(loc_grid.get(v1.getSub()).template get< p >(v1.getKey())) |
| Get the reference of the selected element. More... | |
| template<unsigned int p = 0> | |
| auto | get (const grid_dist_lin_dx &v1) -> decltype(loc_grid.get(v1.getSub()).template get< p >(v1.getKey())) |
| Get the reference of the selected element. More... | |
| template<typename bg_key > | |
| Point< dim, St > | getPos (const grid_dist_key_dx< dim, bg_key > &v1) |
| Get the reference of the selected element. More... | |
| template<typename bg_key > | |
| bool | existPoint (const grid_dist_key_dx< dim, bg_key > &v1) const |
| Check if the point exist. More... | |
| template<unsigned int p = 0, typename bgkey > | |
| auto | getProp (const grid_dist_key_dx< dim, bgkey > &v1) const -> decltype(this->template get< p >(v1)) |
| Get the reference of the selected element. More... | |
| template<unsigned int p = 0, typename bgkey > | |
| auto | getProp (const grid_dist_key_dx< dim, bgkey > &v1) -> decltype(this->template get< p >(v1)) |
| Get the reference of the selected element. More... | |
| template<int... prp> | |
| void | ghost_get (size_t opt=0) |
| It synchronize the ghost parts. More... | |
| template<template< typename, typename > class op, int... prp> | |
| void | ghost_put () |
| It synchronize the ghost parts. More... | |
| grid_dist_id< dim, St, T, Decomposition, Memory, device_grid > & | copy (grid_dist_id< dim, St, T, Decomposition, Memory, device_grid > &g, bool use_memcpy=true) |
| Copy the give grid into this grid. More... | |
| grid_dist_id< dim, St, T, Decomposition, Memory, device_grid > & | copy_sparse (grid_dist_id< dim, St, T, Decomposition, Memory, device_grid > &g, bool use_memcpy=true) |
| Copy the give grid into this grid. More... | |
| Point< dim, St > | getSpacing () |
| Get the spacing on each dimension. More... | |
| grid_key_dx< dim > | getGKey (const grid_dist_key_dx< dim > &k) const |
| Convert a g_dist_key_dx into a global key. More... | |
| template<typename Model > | |
| void | addComputationCosts (Model md=Model(), size_t ts=1) |
| Add the computation cost on the decomposition using a resolution function. More... | |
| template<unsigned int prop_src, unsigned int prop_dst, unsigned int stencil_size, unsigned int N, typename lambda_f , typename ... ArgsT> | |
| void | conv (int(&stencil)[N][dim], grid_key_dx< 3 > start, grid_key_dx< 3 > stop, lambda_f func, ArgsT ... args) |
| apply a convolution using the stencil N | |
| template<unsigned int prop_src, unsigned int prop_dst, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv_cross (grid_key_dx< 3 > start, grid_key_dx< 3 > stop, lambda_f func, ArgsT ... args) |
| apply a convolution using the stencil N | |
| template<unsigned int prop_src, unsigned int prop_dst, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv_cross_b (grid_key_dx< 3 > start, grid_key_dx< 3 > stop, lambda_f func, ArgsT ... args) |
| apply a convolution using the stencil N | |
| template<unsigned int stencil_size, typename v_type , typename lambda_f , typename ... ArgsT> | |
| void | conv_cross_ids (grid_key_dx< 3 > start, grid_key_dx< 3 > stop, lambda_f func, ArgsT ... args) |
| apply a convolution using the stencil N | |
| template<unsigned int prop_src1, unsigned int prop_src2, unsigned int prop_dst1, unsigned int prop_dst2, unsigned int stencil_size, unsigned int N, typename lambda_f , typename ... ArgsT> | |
| void | conv2 (int(&stencil)[N][dim], grid_key_dx< dim > start, grid_key_dx< dim > stop, lambda_f func, ArgsT ... args) |
| apply a convolution using the stencil N | |
| template<unsigned int prop_src1, unsigned int prop_src2, unsigned int prop_dst1, unsigned int prop_dst2, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv2 (grid_key_dx< dim > start, grid_key_dx< dim > stop, lambda_f func, ArgsT ... args) |
| apply a convolution on 2 property on GPU | |
| template<unsigned int prop_src1, unsigned int prop_dst1, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv (grid_key_dx< dim > start, grid_key_dx< dim > stop, lambda_f func, ArgsT ... args) |
| apply a convolution on GPU | |
| template<unsigned int prop_src1, unsigned int prop_src2, unsigned int prop_dst1, unsigned int prop_dst2, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv2_b (grid_key_dx< dim > start, grid_key_dx< dim > stop, lambda_f func, ArgsT ... args) |
| apply a convolution on 2 property on GPU | |
| template<unsigned int prop_src1, unsigned int prop_src2, unsigned int prop_src3, unsigned int prop_dst1, unsigned int prop_dst2, unsigned int prop_dst3, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv3_b (grid_key_dx< dim > start, grid_key_dx< dim > stop, lambda_f func, ArgsT ... args) |
| apply a convolution on 2 property on GPU | |
| template<typename NNtype > | |
| void | findNeighbours () |
| template<unsigned int prop_src1, unsigned int prop_src2, unsigned int prop_dst1, unsigned int prop_dst2, unsigned int stencil_size, typename lambda_f , typename ... ArgsT> | |
| void | conv_cross2 (grid_key_dx< 3 > start, grid_key_dx< 3 > stop, lambda_f func, ArgsT ... args) |
| apply a convolution using the stencil N | |
| bool | write (std::string output, size_t opt=VTK_WRITER|FORMAT_BINARY) |
| Write the distributed grid information. More... | |
| bool | write_debug (std::string output) |
| Write all grids indigually. More... | |
| bool | write_frame (std::string output, size_t i, size_t opt=VTK_WRITER|FORMAT_ASCII) |
| Write the distributed grid information. More... | |
| device_grid & | get_loc_grid (size_t i) |
| Get the i sub-domain grid. More... | |
| const device_grid & | get_loc_grid (size_t i) const |
| Get the i sub-domain grid. More... | |
| grid_key_dx_iterator_sub< dim, no_stencil > | get_loc_grid_iterator (size_t i) |
| Get the i sub-domain grid. More... | |
| template<unsigned int Np> | |
| grid_key_dx_iterator_sub< dim, stencil_offset_compute< dim, Np >, typename device_grid::linearizer_type > | get_loc_grid_iterator_stencil (size_t i, const grid_key_dx< dim >(&stencil_pnt)[Np]) |
| Get the i sub-domain grid. More... | |
| size_t | getN_loc_grid () const |
| Return the number of local grid. More... | |
| void | debugPrint () |
| It print the internal ghost boxes and external ghost boxes in global unit. | |
| void | setPropNames (const openfpm::vector< std::string > &names) |
| Set the properties names. More... | |
| const openfpm::vector< std::string > & | getPropNames () |
| Set the properties names. More... | |
| void | clear () |
| It delete all the points. More... | |
| void | construct_link (self &grid_up, self &grid_dw) |
| construct link between levels More... | |
| void | construct_link_dw (self &grid_dw, openfpm::vector< offset_mv< dim >> &mvof) |
| construct link between current and the level down More... | |
| void | construct_link_up (self &grid_up, openfpm::vector< offset_mv< dim >> &mvof) |
| construct link between current and the level up More... | |
| template<typename stencil_type > | |
| void | tagBoundaries () |
| construct link between current and the level up More... | |
| void | map (size_t opt=0) |
| It move all the grid parts that do not belong to the local processor to the respective processor. | |
| void | save (const std::string &filename) const |
| Save the grid state on HDF5. More... | |
| void | load (const std::string &filename) |
| Reload the grid from HDF5 file. More... | |
| const openfpm::vector< i_lbox_grid< dim > > & | get_loc_ig_box () |
| Get the internal local ghost box. More... | |
| const openfpm::vector< i_lbox_grid< dim > > & | get_ig_box () |
| Get the internal ghost box. More... | |
| void | print_stats () |
| void | clear_stats () |
Public Member Functions inherited from grid_dist_id_comm< dim, St, T, CartDecomposition< dim, St >, HeapMemory, grid_cpu< dim, T > > | |
| void | grids_reconstruct (openfpm::vector< openfpm::vector< aggregate< grid_cpu< dim, T >, Box< dim, long int >>>> &m_oGrid_recv, openfpm::vector< grid_cpu< dim, T > > &loc_grid, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm) |
| Reconstruct the local grids. More... | |
| void | labelIntersectionGridsProcessor_and_pack (CartDecomposition< dim, St > &dec, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm, openfpm::vector< grid_cpu< dim, T > > &loc_grid_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_global, size_t p_id_cur, lambda_t f) |
| Label intersection grids for mappings. More... | |
| void | unpack_buffer_to_local_grid (openfpm::vector< grid_cpu< dim, T > > &loc_grid, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, ExtPreAlloc< HeapMemory > &send_buffer, size_t sz) |
| Unpack. | |
| void | map_ (CartDecomposition< dim, St > &dec, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm, openfpm::vector< grid_cpu< dim, T > > &loc_grid, openfpm::vector< grid_cpu< dim, T > > &loc_grid_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_old, openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext_global, size_t opt) |
| Moves all the grids that does not belong to the local processor to the respective processor. More... | |
| void | ghost_get_ (const openfpm::vector< ip_box_grid< dim >> &ig_box, const openfpm::vector< ep_box_grid< dim >> &eg_box, const openfpm::vector< i_lbox_grid< dim >> &loc_ig_box, const openfpm::vector< e_lbox_grid< dim >> &loc_eg_box, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, const openfpm::vector< e_box_multi< dim >> &eb_gid_list, bool use_bx_def, openfpm::vector< grid_cpu< dim, T > > &loc_grid, const grid_sm< dim, void > &ginfo, std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box, size_t opt) |
| It fill the ghost part of the grids. More... | |
| void | ghost_put_ (CartDecomposition< dim, St > &dec, const openfpm::vector< ip_box_grid< dim >> &ig_box, const openfpm::vector< ep_box_grid< dim >> &eg_box, const openfpm::vector< i_lbox_grid< dim >> &loc_ig_box, const openfpm::vector< e_lbox_grid< dim >> &loc_eg_box, const openfpm::vector< GBoxes< device_grid::dims >> &gdb_ext, openfpm::vector< grid_cpu< dim, T > > &loc_grid, openfpm::vector< std::unordered_map< size_t, size_t >> &g_id_to_internal_ghost_box) |
| It merge the information in the ghost with the real information. More... | |
| grid_dist_id_comm () | |
| Constructor. | |
| grid_dist_id_comm (const grid_dist_id_comm< dim, St, T, CartDecomposition< dim, St >, HeapMemory, grid_cpu< dim, T > > &gc) | |
| Copy constructor. More... | |
Static Public Member Functions | |
| template<typename stencil = no_stencil> | |
| static grid_dist_iterator_sub< dim, device_grid > | type_of_subiterator () |
| This is a meta-function return which type of sub iterator a grid produce. More... | |
Static Public Attributes | |
| static const unsigned int | dims = dim |
| Number of dimensions. | |
Protected Member Functions | |
| Box< dim, size_t > | getDomain (size_t i) |
| Given a local sub-domain i with a local grid Domain + ghost return the part of the local grid that is domain. More... | |
| void | setDecompositionGranularity (size_t n_sub) |
| Set the minimum number of sub-domain per processor. More... | |
| void | reset_ghost_structures () |
Static Protected Member Functions | |
| static Ghost< dim, St > | convert_ghost (const Ghost< dim, long int > &gd, const CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm) |
| Convert a ghost from grid point units into continus space. More... | |
Private Types | |
| typedef grid_dist_id< dim, St, T, Decomposition, Memory, device_grid > | self |
Private Member Functions | |
| void | set_for_adjustment (size_t sub_id, const Box< dim, St > &sub_domain_other, const comb< dim > &cmb, Box< dim, long int > &ib, Ghost< dim, long int > &g) |
| this function is for optimization of the ghost size More... | |
| void | create_ig_box () |
| Create per-processor internal ghost boxes list in grid units and g_id_to_external_ghost_box. | |
| void | create_eg_box () |
| Create per-processor internal ghost box list in grid units. | |
| void | create_local_ig_box () |
| Create local internal ghost box in grid units. | |
| void | create_local_eg_box () |
| Create per-processor external ghost boxes list in grid units. | |
| void | check_size (const size_t(&g_sz)[dim]) |
| Check the grid has a valid size. More... | |
| void | check_domain (const Box< dim, St > &dom) |
| Check the domain is valid. More... | |
| void | Create (openfpm::vector< Box< dim, long int >> &bx_def, const Ghost< dim, long int > &g, bool use_bx_def) |
| Create the grids on memory. More... | |
| void | InitializeCellDecomposer (const CellDecomposer_sm< dim, St, shift< dim, St >> &cd_old, const Box< dim, size_t > &ext) |
| Initialize the Cell decomposer of the grid enforcing perfect overlap of the cells. More... | |
| void | InitializeCellDecomposer (const size_t(&g_sz)[dim], const size_t(&bc)[dim]) |
| Initialize the Cell decomposer of the grid. More... | |
| void | InitializeDecomposition (const size_t(&g_sz)[dim], const size_t(&bc)[dim], const grid_sm< dim, void > &g_dist=grid_sm< dim, void >()) |
| Initialize the grid. More... | |
| void | InitializeStructures (const size_t(&g_sz)[dim]) |
| Initialize the grid. More... | |
| void | InitializeStructures (const size_t(&g_sz)[dim], openfpm::vector< Box< dim, long int >> &bx, const Ghost< dim, long int > &g, bool use_bx_def) |
| Initialize the grid. More... | |
Static Private Member Functions | |
| static void * | msg_alloc_external_box (size_t msg_i, size_t total_msg, size_t total_p, size_t i, size_t ri, void *ptr) |
| Call-back to allocate buffer to receive incoming objects (external ghost boxes) More... | |
Private Attributes | |
| Box< dim, St > | domain |
| Domain. | |
| Ghost< dim, St > | ghost |
| Ghost expansion. | |
| Ghost< dim, long int > | ghost_int |
| Ghost expansion. | |
| openfpm::vector< device_grid > | loc_grid |
| Local grids. | |
| openfpm::vector< device_grid > | loc_grid_old |
| Old local grids. | |
| Decomposition | dec |
| Space Decomposition. | |
| openfpm::vector< size_t > | gdb_ext_markers |
| openfpm::vector< GBoxes< device_grid::dims > > | gdb_ext |
| Extension of each grid: Domain and ghost + domain. | |
| openfpm::vector< GBoxes< device_grid::dims > > | gdb_ext_global |
| Global gdb_ext. | |
| openfpm::vector< GBoxes< device_grid::dims > > | gdb_ext_old |
| Extension of each old grid (old): Domain and ghost + domain. | |
| size_t | g_sz [dim] |
| Size of the grid on each dimension. | |
| CellDecomposer_sm< dim, St, shift< dim, St > > | cd_sm |
| Structure that divide the space into cells. | |
| size_t | gpu_n_insert_thread |
| number of insert each GPU thread does | |
| Vcluster & | v_cl |
| Communicator class. | |
| openfpm::vector< std::string > | prp_names |
| properties names | |
| std::unordered_map< size_t, size_t > | g_id_to_external_ghost_box |
| openfpm::vector< e_box_multi< dim > > | eb_gid_list |
| openfpm::vector< std::unordered_map< size_t, size_t > > | g_id_to_internal_ghost_box |
| openfpm::vector< size_t > | recv_sz |
| Receiving size. | |
| openfpm::vector< HeapMemory > | recv_mem_gg |
| Receiving buffer for particles ghost get. | |
| grid_sm< dim, T > | ginfo |
| Grid informations object. | |
| grid_sm< dim, void > | ginfo_v |
| Grid informations object without type. | |
| openfpm::vector< Box< dim, long int > > | bx_def |
| Set of boxes that define where the grid is defined. | |
| bool | use_bx_def = false |
| Indicate if we have to use bx_def to define the grid. | |
| bool | init_local_i_g_box = false |
| Indicate if the local internal ghost box has been initialized. | |
| bool | init_local_e_g_box = false |
| Indicate if the local external ghost box has been initialized. | |
| bool | init_e_g_box = false |
| Flag that indicate if the external ghost box has been initialized. | |
| bool | init_i_g_box = false |
| Flag that indicate if the internal ghost box has been initialized. | |
| bool | init_fix_ie_g_box = false |
| Flag that indicate if the internal and external ghost box has been fixed. | |
| openfpm::vector< ip_box_grid< dim > > | ig_box |
| Internal ghost boxes in grid units. | |
| openfpm::vector< ep_box_grid< dim > > | eg_box |
| External ghost boxes in grid units. | |
| openfpm::vector< i_lbox_grid< dim > > | loc_ig_box |
| Local internal ghost boxes in grid units. | |
| openfpm::vector< e_lbox_grid< dim > > | loc_eg_box |
| Local external ghost boxes in grid units. | |
| size_t | v_sub_unit_factor = 64 |
| Number of sub-sub-domain for each processor. | |
| Ghost< dim, long int > | gint = Ghost<dim,long int>(0) |
This is a distributed grid.
Implementation of a distributed grid the decomposition is geometrical, grid is splitted across several processor
| dim | Dimensionality of the grid |
| St | Type of space where the grid is living |
| T | object the grid is storing |
| Decomposition | Class that decompose the grid for example CartDecomposition |
| Mem | Is the allocator |
| device | type of base structure is going to store the data |
Definition at line 278 of file grid_dist_id.hpp.
|
inline |
|
inline |
This constructor is special, it construct an expanded grid that perfectly overlap with the previous.
The key-word here is "perfectly overlap". Using the default constructor you could create something similar, but because of rounding-off error it can happen that it is not perfectly overlapping
| g | previous grid |
| gh | Ghost part in grid units |
| ext | extension of the grid (must be positive on every direction) |
Definition at line 1457 of file grid_dist_id.hpp.
|
inline |
It constructs a grid of a specified size, defined on a specified Box space, forcing to follow a specified decomposition and with a specified ghost size
| dec | Decomposition |
| g_sz | grid size on each dimension |
| ghost | Ghost part |
Definition at line 1511 of file grid_dist_id.hpp.
|
inline |
It constructs a grid of a specified size, defined on a specified Box space, forcing to follow a specified decomposition and with a specified ghost size
| dec | Decomposition |
| g_sz | grid size on each dimension |
| ghost | Ghost part |
Definition at line 1535 of file grid_dist_id.hpp.
|
inline |
It constructs a grid of a specified size, defined on a specified Box space, forcing to follow a specified decomposition, and having a specified ghost size
| dec | Decomposition |
| g_sz | grid size on each dimension |
| g | Ghost part (given in grid units) |
Definition at line 1560 of file grid_dist_id.hpp.
|
inline |
It constructs a grid of a specified size, defined on a specified Box space, forcing to follow a specified decomposition, and having a specified ghost size
| dec | Decomposition |
| g_sz | grid size on each dimension |
| g | Ghost part (given in grid units) |
Definition at line 1587 of file grid_dist_id.hpp.
|
inline |
It construct a grid of a specified size, defined on a specified Box space, forcing to follow a specified decomposition, and having a specified ghost size
| dec | Decomposition |
| g_sz | grid size on each dimension |
| g | Ghost part (given in grid units) |
Definition at line 1613 of file grid_dist_id.hpp.
|
inline |
It construct a grid of a specified size, defined on a specified Box space, and having a specified ghost size
| g_sz | grid size on each dimension |
| domain | Box that contain the grid |
| g | Ghost part (given in grid units) |
Definition at line 1642 of file grid_dist_id.hpp.
|
inline |
It construct a grid of a specified size, defined on a specified Box space, having a specified ghost size and periodicity
| g_sz | grid size on each dimension |
| domain | Box that contain the grid |
| g | Ghost part of the domain (given in grid units) |
Definition at line 1656 of file grid_dist_id.hpp.
|
inline |
It construct a grid of a specified size, defined on a specified Box space, having a specified ghost size, and specified periodicity
| g_sz | grid size on each dimension |
| domain | Box that contain the grid |
| g | Ghost part (given in grid units) |
| p | Boundary conditions |
Definition at line 1671 of file grid_dist_id.hpp.
|
inline |
It construct a grid of a specified size, defined on a specified Box space, having a specified ghost size and periodicity
| g_sz | grid size on each dimension |
| domain | Box that contain the grid |
| g | Ghost part of the domain (given in grid units) |
| p | periodicity |
Definition at line 1698 of file grid_dist_id.hpp.
|
inline |
It construct a grid on the full domain restricted to the set of boxes specified.
In particular the grid is defined in the space equal to the domain intersected the boxes defined by bx
| g_sz | grid size on each dimension |
| domain | where the grid is constructed |
| g | ghost size |
| p | periodicity of the grid |
| bx | set of boxes where the grid is defined |
Definition at line 1737 of file grid_dist_id.hpp.
|
inline |
Add the computation cost on the decomposition using a resolution function.
| md | Model to use |
| ts | It is an optional parameter approximately should be the number of ghost get between two rebalancing at first decomposition this number can be ignored (default = 1) because not used |
Definition at line 2801 of file grid_dist_id.hpp.
|
inlineprivate |
Check the domain is valid.
| dom | domain is valid |
Definition at line 1058 of file grid_dist_id.hpp.
|
inlineprivate |
Check the grid has a valid size.
| g_sz | size of the grid |
Definition at line 1044 of file grid_dist_id.hpp.
|
inline |
It delete all the points.
This function on dense does nothing in case of dense grid but in case of sparse_grid it kills all the points
Definition at line 3357 of file grid_dist_id.hpp.
|
inline |
construct link between levels
\praram grid_up grid level up
| grid_dw | grid level down |
Definition at line 3369 of file grid_dist_id.hpp.
|
inline |
construct link between current and the level down
| grid_dw | grid level down |
Definition at line 3383 of file grid_dist_id.hpp.
|
inline |
construct link between current and the level up
| grid_dw | grid level down |
Definition at line 3401 of file grid_dist_id.hpp.
|
inlinestaticprotected |
Convert a ghost from grid point units into continus space.
| gd | Ghost in continuous space |
| cd_sm | CellDecomposer of the grid |
Definition at line 1231 of file grid_dist_id.hpp.
|
inline |
Copy the give grid into this grid.
It copy the first grid into the given grid (No ghost)
| g | Grid to copy |
| use_memcpy | use memcpy function if possible |
Definition at line 2684 of file grid_dist_id.hpp.
|
inline |
Copy the give grid into this grid.
It copy the first grid into the given grid (No ghost)
| g | Grid to copy |
| use_memcpy | use memcpy function if possible |
Definition at line 2742 of file grid_dist_id.hpp.
|
inlineprivate |
Create the grids on memory.
| bx_def | Where the grid is defined |
| use_bx_def | use the array that define where the grid is defined |
Definition at line 1073 of file grid_dist_id.hpp.
|
inline |
Check if the point exist.
| v1 | grid_key that identify the element in the grid |
Definition at line 2569 of file grid_dist_id.hpp.
|
inline |
remove an element in the grid
In case of dense grid this function print a warning, in case of sparse grid this function remove a grid point.
| v1 | grid_key that identify the element in the grid |
Definition at line 2346 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2495 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2477 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2459 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2440 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2529 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2512 of file grid_dist_id.hpp.
|
inline |
Get the internal ghost box.
Definition at line 3566 of file grid_dist_id.hpp.
|
inline |
Get the i sub-domain grid.
| i | sub-domain |
Definition at line 3229 of file grid_dist_id.hpp.
|
inline |
Get the i sub-domain grid.
| i | sub-domain |
Definition at line 3241 of file grid_dist_id.hpp.
|
inline |
Get the i sub-domain grid.
| i | sub-domain |
Definition at line 3253 of file grid_dist_id.hpp.
|
inline |
Get the i sub-domain grid.
| i | sub-domain |
Definition at line 3269 of file grid_dist_id.hpp.
|
inline |
Get the internal local ghost box.
Definition at line 3556 of file grid_dist_id.hpp.
|
inline |
Return the cell decomposer.
Definition at line 1816 of file grid_dist_id.hpp.
|
inline |
Get the object that store the information about the decomposition.
Definition at line 1790 of file grid_dist_id.hpp.
|
inline |
Get the object that store the information about the decomposition.
Definition at line 1803 of file grid_dist_id.hpp.
|
inline |
Get the domain where the grid is defined.
Definition at line 1306 of file grid_dist_id.hpp.
|
inlineprotected |
Given a local sub-domain i with a local grid Domain + ghost return the part of the local grid that is domain.
| i | sub-domain |
Definition at line 1218 of file grid_dist_id.hpp.
|
inline |
It return an iterator that span the grid domain + ghost part.
Definition at line 2187 of file grid_dist_id.hpp.
|
inline |
It return an iterator that span the full grid domain (each processor span its local domain)
Definition at line 2130 of file grid_dist_id.hpp.
|
inline |
It return an iterator that span the full grid domain (each processor span its local domain)
| stencil_pnt | stencil points |
Definition at line 2160 of file grid_dist_id.hpp.
|
inline |
Convert a g_dist_key_dx into a global key.
| k | grid_dist_key_dx point (in general returned by the iterators) |
Definition at line 2777 of file grid_dist_id.hpp.
|
inline |
It gathers the information about local grids for all of the processors.
| gdb_ext_global | where to store the grid infos |
Definition at line 1904 of file grid_dist_id.hpp.
|
inline |
/brief Get a grid Iterator running on domain and ghost area
In case of dense grid getGridIterator is equivalent to getDomainIterator in case if sparse distributed grid getDomainIterator go across all the inserted point get grid iterator run across all grid points independently that the point has been insert or not
Definition at line 2093 of file grid_dist_id.hpp.
|
inline |
Get an object containing the grid informations.
Definition at line 1764 of file grid_dist_id.hpp.
|
inline |
Get an object containing the grid informations without type.
Definition at line 1777 of file grid_dist_id.hpp.
|
inline |
/brief Get a grid Iterator
In case of dense grid getGridIterator is equivalent to getDomainIterator in case if sparse distributed grid getDomainIterator go across all the inserted point get grid iterator run across all grid points independently that the point has been insert or not
Definition at line 2109 of file grid_dist_id.hpp.
|
inline |
/brief Get a grid Iterator
In case of dense grid getGridIterator is equivalent to getDomainIterator in case of sparse grid getDomainIterator go across all the inserted point get grid iterator run across all grid points independently that the point has been insert or not
Definition at line 1980 of file grid_dist_id.hpp.
|
inline |
Get the total number of grid points for the calling processor.
Definition at line 1850 of file grid_dist_id.hpp.
|
inline |
Get the total number of grid points with ghost for the calling processor.
Definition at line 1870 of file grid_dist_id.hpp.
|
inline |
Get the local grid.
Definition at line 1317 of file grid_dist_id.hpp.
|
inline |
It return the informations about the local grids.
Definition at line 1891 of file grid_dist_id.hpp.
|
inline |
Return the number of local grid.
Definition at line 3282 of file grid_dist_id.hpp.
|
inline |
Get the point where it start the origin of the grid of the sub-domain i.
| i | sub-domain |
Definition at line 1329 of file grid_dist_id.hpp.
|
inline |
It return an iterator that span the full grid domain (each processor span its local domain)
Definition at line 1952 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2546 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2597 of file grid_dist_id.hpp.
|
inline |
Get the reference of the selected element.
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2583 of file grid_dist_id.hpp.
|
inline |
Set the properties names.
It is useful to specify name for the properties in vtk writers
| names | set of properties names |
Definition at line 3346 of file grid_dist_id.hpp.
|
inline |
Get the spacing on each dimension.
Definition at line 2762 of file grid_dist_id.hpp.
|
inline |
It return an iterator that span the grid domain only in the specified part.
The key spanned are the one inside the box spanned by the start point and the end point included
| start | point |
| stop | point |
Definition at line 2216 of file grid_dist_id.hpp.
|
inline |
It return an iterator that span the grid domain only in the specified part.
The key spanned are the one inside the box spanned by the start point and the end point included
| start | point |
| stop | point |
Definition at line 2239 of file grid_dist_id.hpp.
|
inline |
Get the Virtual Cluster machine.
Definition at line 2260 of file grid_dist_id.hpp.
|
inline |
It synchronize the ghost parts.
| prp... | Properties to synchronize |
Definition at line 2607 of file grid_dist_id.hpp.
|
inline |
It synchronize the ghost parts.
| prp... | Properties to synchronize |
Definition at line 2643 of file grid_dist_id.hpp.
|
inlineprivate |
Initialize the Cell decomposer of the grid enforcing perfect overlap of the cells.
| cd_old | the CellDecomposer we are trying to mach |
| ext | extension of the domain |
Definition at line 1113 of file grid_dist_id.hpp.
|
inlineprivate |
Initialize the Cell decomposer of the grid.
| g_sz | Size of the grid |
| bc | boundary conditions |
Definition at line 1125 of file grid_dist_id.hpp.
|
inlineprivate |
Initialize the grid.
| g_sz | Global size of the grid |
| bc | boundary conditions |
Definition at line 1144 of file grid_dist_id.hpp.
|
inlineprivate |
Initialize the grid.
| g_sz | Global size of the grid |
Definition at line 1176 of file grid_dist_id.hpp.
|
inlineprivate |
Initialize the grid.
| g_sz | Global size of the grid |
| g | ghost extension of the grid in integer unit |
| bx | set of boxes that define where is defined the grid |
Definition at line 1194 of file grid_dist_id.hpp.
|
inline |
insert an element in the grid
In case of dense grid this function is equivalent to get, in case of sparse grid this function insert a grid point. When the point already exist it return a reference to the already existing point. In case of massive insert Sparse grids it give a reference to the inserted element in the insert buffer
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2368 of file grid_dist_id.hpp.
|
inline |
insert an element in the grid
In case of dense grid this function is equivalent to get, in case of sparse grid this function insert a grid point. When the point already exist it return a reference to the already existing point. In case of massive insert Sparse grids The point is inserted immediately and a reference to the inserted element is returned
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2421 of file grid_dist_id.hpp.
|
inline |
insert an element in the grid
In case of dense grid this function is equivalent to get, in case of sparse grid this function insert a grid point. When the point already exist it return a reference to the already existing point. In case of massive insert Sparse grids The point is inserted immediately and a reference to the inserted element is returned
| p | property to get (is an integer) |
| v1 | grid_key that identify the element in the grid |
Definition at line 2395 of file grid_dist_id.hpp.
|
inline |
Indicate that this grid is not staggered.
Definition at line 2285 of file grid_dist_id.hpp.
|
inline |
Check that the global grid key is inside the grid domain.
| gk | point to check |
Definition at line 1831 of file grid_dist_id.hpp.
|
inline |
Reload the grid from HDF5 file.
| filename | output filename |
Definition at line 3489 of file grid_dist_id.hpp.
|
inlinestaticprivate |
Call-back to allocate buffer to receive incoming objects (external ghost boxes)
| msg_i | message size required to receive from i |
| total_msg | message size to receive from all the processors |
| total_p | the total number of processor want to communicate with you |
| i | processor id |
| ri | request id (it is an id that goes from 0 to total_p, and is unique every time message_alloc is called) |
| ptr | void pointer parameter for additional data to pass to the call-back |
Definition at line 472 of file grid_dist_id.hpp.
|
inline |
remove an element in the grid
In case of dense grid this function print a warning, in case of sparse grid this function remove a grid point.
| v1 | grid_key that identify the element in the grid |
Definition at line 2300 of file grid_dist_id.hpp.
|
inline |
remove an element in the grid
In case of dense grid this function print a warning, in case of sparse grid this function remove a grid point.
| v1 | grid_key that identify the element in the grid |
Definition at line 2318 of file grid_dist_id.hpp.
|
inline |
Save the grid state on HDF5.
| filename | output filename |
Definition at line 3477 of file grid_dist_id.hpp.
|
inlineprivate |
this function is for optimization of the ghost size
Because the decomposition work in continuum and discrete ghost is converted in continuum, in some case continuum ghost because of rounding-off error can produce ghost bigger than the discrete selected one. This function adjust for this round-off error
| sub_id | sub-domain id |
| sub_domain_other | the other sub-domain |
| ib | internal ghost box to adjust |
Definition at line 501 of file grid_dist_id.hpp.
|
inline |
set the background value
You can use this function make sense in case of sparse in case of dense it does nothing
Definition at line 1375 of file grid_dist_id.hpp.
|
inline |
set the background value
You can use this function make sense in case of sparse in case of dense it does nothing
Definition at line 1362 of file grid_dist_id.hpp.
|
inlineprotected |
Set the minimum number of sub-domain per processor.
| n_sub |
Definition at line 1256 of file grid_dist_id.hpp.
|
inline |
Set the properties names.
It is useful to specify name for the properties in vtk writers
| names | set of properties names |
Definition at line 3334 of file grid_dist_id.hpp.
|
inline |
Return the total number of points in the grid.
Definition at line 1351 of file grid_dist_id.hpp.
|
inline |
Return the total number of points in the grid.
| i | direction |
Definition at line 1406 of file grid_dist_id.hpp.
|
inline |
Return the local total number of points inserted in the grid.
in case of dense grid it return the number of local points, in case of sparse it return the number of inserted points
Definition at line 1389 of file grid_dist_id.hpp.
|
inline |
Get the spacing of the grid in direction i.
| i | dimension |
Definition at line 1341 of file grid_dist_id.hpp.
|
inline |
construct link between current and the level up
| grid_dw | grid level down |
Definition at line 3420 of file grid_dist_id.hpp.
|
inlinestatic |
This is a meta-function return which type of sub iterator a grid produce.
Definition at line 3546 of file grid_dist_id.hpp.
|
inline |
Write the distributed grid information.
| output | directory where to put the files + prefix |
| opt | options |
Definition at line 3136 of file grid_dist_id.hpp.
|
inline |
Write all grids indigually.
| output | files |
Definition at line 3168 of file grid_dist_id.hpp.
|
inline |
Write the distributed grid information.
| output | directory where to put the files + prefix |
| i | frame number |
| opt | options |
Definition at line 3198 of file grid_dist_id.hpp.
|
private |
Link a received external ghost box to the linked eg_box. When the grid is defined everywhere for each received external ghost box exists one eg_box linked to it that contain the information on how to transfer the information to the associated sub-domain grid. Unfortunately when we specify where the grid is defined, a received external ghost box can be linked to multiple sub-domain grids (one sub-domain can have multiple sub grids). So in standard situation (grid defined everywhere) a received external ghost box is linked to a single eg_box entry and eb_gid_list play mainly no role. (play no role but must be filled ghost_get expect this structure to be filled consistently, it will be clear later how to do it in this case). When the grid is not defined everywhere a received ghost box can be linked to multiple external ghost boxes. (Like in figure)
+--------------------------------------------+------
| Sub-domain | Another sub-domain
| +------+ +---------+ |
| | | | | |
| | | | | |
| | | | | |
| | 3 | | 4 | |
| empty | | empty | | |
| | | | | |
| | | | | |
| | | | | | 1
| | | | | |
+-+-----+----+------+-----------+---------+----+-----+----- Processor bound
|***##########*********#############****|****|
| | 0
| |
| |
| 9 |
| |
| |
| |
+--------------------------------------------+
* As we can see here the grid number 9 on processo 0 has an internal ghost box The internal ghost-box is sent to processor 1 and is a received external ghost box. This external ghost box is partially shared in two separated grids. It is important to note that 3 and 4 are grid defined externally and are not defined by the sub-domain border. It is important also to note that the sub-domain granularity in processor 1 define the granularity of the internal ghost box in processor 0 and consequently every external ghost box in processor 1 is linked uniquely with one internal ghost box in processor 0. On the other hand if we have a secondary granularity define by external boxes like 3 and 4 this is not anymore true and one internal ghost box in 0 can be linked with multiple grids. The granularity of the space division is different from the granularity of where the grid is defined. Space decomposition exist independently from the data-structure and can be shared across multiple data-structure this mean that cannot be redefined based on where is the grid definitions. The internal ghost box could be redefined in order to respect the granularity. We do not do this for 3 main reason.
1) The definition box must be communicated across processors. 2) An interprocessor global-id link must be established with lower sub-domain granularty 3) Despite the points * are not linked, but must be anyway sent to processor 1, this mean that make not too much sense to increase the granularity in advance on processor 0, but it is better receive the information an than solve the lower granularity locally on processor 1
Definition at line 407 of file grid_dist_id.hpp.
|
private |
It map a global ghost id (g_id) to the external ghost box information It is unique across all the near processor
Definition at line 337 of file grid_dist_id.hpp.
|
private |
It map a global ghost id (g_id) to the internal ghost box information (is unique for processor), it is not unique across all the near processor
Definition at line 411 of file grid_dist_id.hpp.
|
private |
gdb_ext markers In the case where the grid is defined everywhere gdb_ext_marker is useless and so is empty in the case we have a grid defined on a smaller set of boxes gbd_ext_markers indicate the division across subdomains. For example Sub-domain 0 produce 2 grid Sub-domain 1 produce 3 grid Sub-domain 2 produce 2 grid Sub-domain 3 produce 1 grid gdb_ext_markers contain 0,2,5,7,8
Definition at line 309 of file grid_dist_id.hpp.