|
template<typename... Args> |
| MeshWithGridDataPackages (BoundingBox tentative_bounds, Real data_spacing, size_t buffer_size, Args &&...args) |
|
void | allocateMeshDataMatrix () |
|
void | deleteMeshDataMatrix () |
|
template<class DataType , typename PackageDataAddressType , PackageDataAddressType GridDataPackageType::* MemPtr> |
DataType | probeMesh (const Vecd &position) |
|
virtual Real | DataSpacing () override |
|
| Mesh (BoundingBox tentative_bounds, Real grid_spacing, size_t buffer_width) |
|
| Mesh (Vecd mesh_lower_bound, Vecu number_of_cells, Real grid_spacing) |
|
Vecu | NumberOfCells () |
|
size_t | MeshBufferSize () |
|
| BaseMesh (Vecu number_of_grid_points) |
|
| BaseMesh (Vecd mesh_lower_bound, Real grid_spacing, Vecu number_of_grid_points) |
|
| BaseMesh (BoundingBox tentative_bounds, Real grid_spacing, size_t buffer_width) |
|
Vecd | MeshLowerBound () |
|
Real | GridSpacing () |
|
Vecu | NumberOfGridPoints () |
|
Vecu | NumberOfGridPointsFromNumberOfCells (const Vecu &number_of_cells) |
|
Vecu | NumberOfCellsFromNumberOfGridPoints (const Vecu &number_of_grid_points) |
|
Vecd | GridPositionFromCellPosition (const Vecd &cell_position) |
|
Vecu | CellIndexFromPosition (const Vecd &position) |
|
Vecd | CellPositionFromIndex (const Vecu &cell_index) |
|
Vecd | GridPositionFromIndex (const Vecu &grid_index) |
|
Vecu | transfer1DtoMeshIndex (const Vecu &number_of_mesh_indexes, size_t i) |
|
size_t | transferMeshIndexTo1D (const Vecu &number_of_mesh_indexes, const Vecu &mesh_index) |
|
size_t | MortonCode (const size_t &i) |
|
size_t | transferMeshIndexToMortonOrder (const Vecu &mesh_index) |
|
|
template<typename... ConstructorArgs> |
void | initializeASingularDataPackage (ConstructorArgs &&...args) |
|
void | assignDataPackageAddress (const Vecu &cell_index, GridDataPackageType *data_pkg) |
|
GridDataPackageType * | DataPackageFromCellIndex (const Vecu &cell_index) |
|
template<typename DataType , typename PackageDataType , PackageDataType GridDataPackageType::* MemPtr> |
DataType | DataValueFromGlobalIndex (const Vecu &global_grid_index) |
|
void | initializePackageAddressesInACell (const Vecu &cell_index) |
|
std::pair< int, int > | CellShiftAndDataIndex (int data_addrs_index_component) |
|
void | copyMeshProperties (Mesh *another_mesh) |
|
template<class MeshFieldType, class GridDataPackageType>
class SPH::MeshWithGridDataPackages< MeshFieldType, GridDataPackageType >
Abstract class for mesh with data packages.
The idea is to save sparse data on a cell-based mesh. We say sparse data, it means that only in some inner mesh cells there are no trivial data. A typical example is a level set field which only has meaningful values near the interface, while the latter is in the inner region of a mesh. In this class, only some inner mesh cells are filled with data packages. Each data package is again a mesh, but grid based, where two sets of data are saved on its grid points. One is the field data of matrices with PKG_SIZE, the other is corresponding address data of matrices with ADDRS_SIZE. For two neighboring data packages, they share the data in the buffer which is in the overlap region. The filling of field data is achieved first by the data matrices by the function initializeDataInACell and then the address matrix by the function initializeAddressesInACell. All these data packages are indexed by a concurrent vector inner_data_pkgs_. Note that a data package should be not near the mesh bound, otherwise one will encounter the error "out of range".