Implementation of the staggered grid. More...
Implementation of the staggered grid.
dim | Dimensionality of the staggered grid |
ele | elements object on each dimensional objects, must be a stag_elements |
+--#--+--#--+--#--+--#--+--#--+--#--+ | | | | | | | # * # * # * # * # * # * # | | | | | | | +--#--+--#--+--#--+--#--+--#--+--#--+ | | | | | | | # * # * # * # * # * # * # | | | | | | | +--#--+--#--+--#--+--#--+--#--+--#--+ | | | | | | | # * # * # * # * # * # * # | | | | | | | +--#--+--#--+--#--+--#--+--#--+--#--+ | | | | | | | # * # * # * # * # * # * # | | | | | | | +--#--+--#--+--#--+--#--+--#--+--#--+ | | | | | | | # * # * # * # * # * # * # | | | | | | | +--#--+--#--+--#--+--#--+--#--+--#--+
In the case of a 2D staggered grid we have 3 (in general dim+1 ) elements + = vertex # = edge = volume ele = stag_ele<scalar<float>,Point_test<float>,scalar<float>> It place a scalar on (*) an object Point_test<float> on (#) and an object scalar<float> on (+)
Definition at line 63 of file staggered_dist_grid.hpp.
#include <staggered_dist_grid.hpp>
Public Types | |
typedef T | value_type |
Properties for each grid point. | |
![]() | |
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 | |
template<typename H > | |
staggered_grid_dist (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... | |
staggered_grid_dist (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, St > &ghost) | |
Constructor. More... | |
template<unsigned int p> | |
void | setStagPosition (openfpm::vector< comb< dim >> &cmb) |
set the staggered positions of the properties More... | |
void | setDefaultStagPosition () |
It set all the properties defined to be staggered on the default location. More... | |
template<typename Grid_dst , unsigned int... pos> | |
bool | to_normal (Grid_dst &g_dst, const Padding< dim > &pd, const long int(&start)[dim], const long int(&stop)[dim]) |
Copy the staggered grid into a normal one. More... | |
const | openfpm::vector (&getStagPositions())[T |
Get the staggered positions. More... | |
void | write (std::string str) |
Write a vtk file with the information of the staggered grid. More... | |
bool | is_staggered_prop (size_t prp) |
Return if the properties is a staggered property or not. More... | |
bool | is_staggered () |
Return if the grid is staggered. More... | |
![]() | |
const Box< dim, St > | getDomain () const |
Get the domain where the grid is defined. 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... | |
size_t | size (size_t i) const |
Return the total number of points in the grid. 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... | |
grid_dist_id (const Decomposition &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) | |
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) | |
grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, 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, const periodicity< dim > &p) | |
grid_dist_id (const size_t(&g_sz)[dim], const Box< dim, St > &domain, const Ghost< dim, long int > &g, const periodicity< dim > &p) | |
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 () |
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, FREE > | getOldDomainIterator () const |
It return an iterator that span the full grid domain (each processor span its local domain) More... | |
grid_dist_iterator< dim, device_grid, 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, 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, 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... | |
bool | is_staggered () |
Indicate that this grid is not staggered. More... | |
template<unsigned int p = 0> | |
auto | get (const grid_dist_key_dx< dim > &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 = 0> | |
auto | get (const grid_dist_key_dx< dim > &v1) -> 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 = 0> | |
auto | get (grid_dist_g_dx< device_grid > &v1) const -> typename std::add_lvalue_reference< decltype(v1.getSub() ->template get< p >(v1.getKey()))>::type |
Get the reference of the selected element. More... | |
template<unsigned int p = 0> | |
auto | get (grid_dist_g_dx< device_grid > &v1) -> typename std::add_lvalue_reference< decltype(v1.getSub() ->template get< p >(v1.getKey()))>::type |
Get the reference of the selected element. More... | |
template<unsigned int p = 0> | |
auto | get (const grid_dist_lin_dx &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 = 0> | |
auto | get (const grid_dist_lin_dx &v1) -> 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 = 0> | |
auto | getProp (const grid_dist_key_dx< dim > &v1) const -> decltype(this->template get< p >(v1)) |
Get the reference of the selected element. More... | |
template<unsigned int p = 0> | |
auto | getProp (const grid_dist_key_dx< dim > &v1) -> decltype(this->template get< p >(v1)) |
Get the reference of the selected element. More... | |
template<int... prp> | |
void | ghost_get () |
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... | |
Point< dim, St > | getSpacing () |
Get the spacing on each dimension. More... | |
grid_key_dx< dim > | getGKey (const grid_dist_key_dx< dim > &k) |
Convert a g_dist_key_dx into a global key. More... | |
bool | write (std::string output, size_t opt=VTK_WRITER|FORMAT_ASCII) |
Write the distributed grid information. 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... | |
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 > > | 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 () |
Return the number of local grid. More... | |
long int | who () |
It return the id of structure in the allocation list. More... | |
void | debugPrint () |
It print the internal ghost boxes and external ghost boxes in global unit. More... | |
void | setPropNames (const openfpm::vector< std::string > &names) |
Set the properties names. More... | |
void | map () |
It move all the grid parts that do not belong to the local processor to the respective processor. More... | |
void | save (const std::string &filename) const |
void | load (const std::string &filename) |
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 | grids_reconstruct (openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int >>>> &m_oGrid_recv, openfpm::vector< device_grid > &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 (Decomposition &dec, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm, openfpm::vector< device_grid > &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, openfpm::vector< openfpm::vector< aggregate< device_grid, SpaceBox< dim, long int >>>> &lbl_b, openfpm::vector< size_t > &prc_sz) |
Label intersection grids for mappings. More... | |
void | map_ (Decomposition &dec, CellDecomposer_sm< dim, St, shift< dim, St >> &cd_sm, openfpm::vector< device_grid > &loc_grid, openfpm::vector< device_grid > &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) |
Moves all the grids that does not belong to the local processor to the respective processor. More... | |
template<int... prp> | |
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, openfpm::vector< device_grid > &loc_grid, std::unordered_map< size_t, size_t > &g_id_to_external_ghost_box) |
It fill the ghost part of the grids. More... | |
template<template< typename, typename > class op, int... prp> | |
void | ghost_put_ (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< device_grid > &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. More... | |
Static Public Attributes | |
static const unsigned int | dims = dim |
Number of dimensions. | |
![]() | |
static const unsigned int | dims = dim |
Number of dimensions. | |
Private Attributes | |
openfpm::vector< comb< dim > > | c_prp [T::max_prop_real] |
position of the properties in the grid cell | |
Friends | |
class | stag_create_and_add_grid< dim, staggered_grid_dist< dim, St, T, Decomposition, Memory, device_grid >, St > |
Additional Inherited Members | |
![]() | |
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. | |
![]() | |
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... | |
![]() | |
static Ghost< dim, float > | 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... | |
|
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 86 of file staggered_dist_grid.hpp.
|
inline |
Constructor.
g_sz | size of the staggered grid |
domain | domain |
ghost | part |
Definition at line 101 of file staggered_dist_grid.hpp.
|
inline |
Return if the grid is staggered.
Definition at line 234 of file staggered_dist_grid.hpp.
|
inline |
Return if the properties is a staggered property or not.
prp | property to check |
Definition at line 224 of file staggered_dist_grid.hpp.
|
inline |
Get the staggered positions.
Definition at line 200 of file staggered_dist_grid.hpp.
|
inline |
It set all the properties defined to be staggered on the default location.
Definition at line 126 of file staggered_dist_grid.hpp.
|
inline |
set the staggered positions of the properties
property | p |
cmb | a vector containing for each component the position in the cell-grid |
Definition at line 114 of file staggered_dist_grid.hpp.
|
inline |
Copy the staggered grid into a normal one.
Grid_dst | type of the destination Grid |
pos | destination grid properties to fill |
g_dst | destination grid |
pd | padding of the grid compared to the destination grid |
start | starting point |
stop | stop point |
Definition at line 147 of file staggered_dist_grid.hpp.
|
inline |
Write a vtk file with the information of the staggered grid.
str | vtk output file |
Definition at line 210 of file staggered_dist_grid.hpp.