DOLFINx
0.5.1
DOLFINx C++ interface
|
Mesh refinement algorithms. More...
Namespaces | |
plaza | |
Function in this namespace implement the refinement method described in Plaza and Carey "Local refinement of simplicial grids based on
the skeleton" (Applied Numerical Mathematics 32 (2000) 195-218). | |
Functions | |
mesh::Mesh | refine (const mesh::Mesh &mesh, bool redistribute=true) |
Create a uniformly refined mesh. More... | |
mesh::Mesh | refine (const mesh::Mesh &mesh, const std::span< const std::int32_t > &edges, bool redistribute=true) |
Create a locally refined mesh. More... | |
void | update_logical_edgefunction (MPI_Comm neighbor_comm, const std::vector< std::vector< std::int32_t >> &marked_for_update, std::vector< std::int8_t > &marked_edges, const common::IndexMap &map) |
Communicate edge markers between processes that share edges. More... | |
std::tuple< std::map< std::int32_t, std::int64_t >, std::vector< double >, std::array< std::size_t, 2 > > | create_new_vertices (MPI_Comm neighbor_comm, const graph::AdjacencyList< int > &shared_edges, const mesh::Mesh &mesh, const std::vector< std::int8_t > &marked_edges) |
Add new vertex for each marked edge, and create new_vertex_coordinates and global_edge->new_vertex map. More... | |
mesh::Mesh | partition (const mesh::Mesh &old_mesh, const graph::AdjacencyList< std::int64_t > &cell_topology, std::span< const double > new_coords, std::array< std::size_t, 2 > xshape, bool redistribute, mesh::GhostMode ghost_mode) |
Use vertex and topology data to partition new mesh across processes. More... | |
std::vector< std::int64_t > | adjust_indices (const common::IndexMap &map, std::int32_t n) |
Add indices to account for extra n values on this process. More... | |
mesh::MeshTags< std::int32_t > | transfer_facet_meshtag (const mesh::MeshTags< std::int32_t > &meshtag, std::shared_ptr< const mesh::Mesh > refined_mesh, const std::vector< std::int32_t > &cell, const std::vector< std::int8_t > &facet) |
Transfer facet MeshTags from coarse mesh to refined mesh. More... | |
mesh::MeshTags< std::int32_t > | transfer_cell_meshtag (const mesh::MeshTags< std::int32_t > &parent_meshtag, std::shared_ptr< const mesh::Mesh > refined_mesh, const std::vector< std::int32_t > &parent_cell) |
Transfer cell MeshTags from coarse mesh to refined mesh. More... | |
Mesh refinement algorithms.
Methods for refining meshes uniformly, or with markers, using edge bisection.
std::vector< std::int64_t > adjust_indices | ( | const common::IndexMap & | map, |
std::int32_t | n | ||
) |
Add indices to account for extra n values on this process.
This is a utility to help add new topological vertices on each process into the space of the index map.
[in] | map | Index map for the current mesh vertices |
[in] | n | Number of new entries to be accommodated on this process |
std::tuple< std::map< std::int32_t, std::int64_t >, std::vector< double >, std::array< std::size_t, 2 > > create_new_vertices | ( | MPI_Comm | neighbor_comm, |
const graph::AdjacencyList< int > & | shared_edges, | ||
const mesh::Mesh & | mesh, | ||
const std::vector< std::int8_t > & | marked_edges | ||
) |
Add new vertex for each marked edge, and create new_vertex_coordinates and global_edge->new_vertex map.
Communicate new vertices with MPI to all affected processes.
[in] | neighbor_comm | MPI Communicator for neighborhood |
[in] | shared_edges | |
[in] | mesh | Existing mesh |
[in] | marked_edges |
mesh::Mesh partition | ( | const mesh::Mesh & | old_mesh, |
const graph::AdjacencyList< std::int64_t > & | cell_topology, | ||
std::span< const double > | new_coords, | ||
std::array< std::size_t, 2 > | xshape, | ||
bool | redistribute, | ||
mesh::GhostMode | ghost_mode | ||
) |
Use vertex and topology data to partition new mesh across processes.
[in] | old_mesh | |
[in] | cell_topology | Topology of cells, (vertex indices) |
[in] | new_coords | New coordinates, row-major storage |
[in] | xshape | The shape of new_coords |
[in] | redistribute | Call graph partitioner if true |
[in] | ghost_mode | None or shared_facet |
mesh::Mesh refine | ( | const mesh::Mesh & | mesh, |
bool | redistribute = true |
||
) |
Create a uniformly refined mesh.
[in] | mesh | The mesh from which to build a refined Mesh |
[in] | redistribute | Optional argument to redistribute the refined mesh if mesh is a distributed mesh. |
mesh::Mesh refine | ( | const mesh::Mesh & | mesh, |
const std::span< const std::int32_t > & | edges, | ||
bool | redistribute = true |
||
) |
Create a locally refined mesh.
[in] | mesh | The mesh from which to build a refined Mesh |
[in] | edges | Indices of the edges that should be split by this refinement. mesh::compute_incident_entities can be used to compute the edges that are incident to other entities, e.g. incident to cells. |
[in] | redistribute | Optional argument to redistribute the refined mesh if mesh is a distributed mesh. |
mesh::MeshTags< std::int32_t > transfer_cell_meshtag | ( | const mesh::MeshTags< std::int32_t > & | parent_meshtag, |
std::shared_ptr< const mesh::Mesh > | refined_mesh, | ||
const std::vector< std::int32_t > & | parent_cell | ||
) |
Transfer cell MeshTags from coarse mesh to refined mesh.
[in] | parent_meshtag | Cell MeshTags on parent mesh |
[in] | refined_mesh | Refined mesh based on parent mesh |
[in] | parent_cell | Parent cell of each cell in refined mesh |
mesh::MeshTags< std::int32_t > transfer_facet_meshtag | ( | const mesh::MeshTags< std::int32_t > & | meshtag, |
std::shared_ptr< const mesh::Mesh > | refined_mesh, | ||
const std::vector< std::int32_t > & | cell, | ||
const std::vector< std::int8_t > & | facet | ||
) |
Transfer facet MeshTags from coarse mesh to refined mesh.
[in] | meshtag | Facet tags on parent mesh |
[in] | refined_mesh | Refined mesh based on parent mesh |
[in] | cell | Parent cell of each cell in refined mesh |
[in] | facet | Local facets of parent in each cell in refined mesh |
void update_logical_edgefunction | ( | MPI_Comm | neighbor_comm, |
const std::vector< std::vector< std::int32_t >> & | marked_for_update, | ||
std::vector< std::int8_t > & | marked_edges, | ||
const common::IndexMap & | map | ||
) |
Communicate edge markers between processes that share edges.
[in] | neighbor_comm | MPI Communicator for neighborhood |
[in] | marked_for_update | Lists of edges to be updated on each neighbor. marked_for_update[r] is the list of edge indices that are marked by the caller and are shared with local MPI rank r . |
[in,out] | marked_edges | Marker for each edge on the calling process |
[in] | map | Index map for the mesh edges |