DOLFINx 0.9.0
DOLFINx C++ interface
Loading...
Searching...
No Matches
Topology Class Reference

Topology stores the topology of a mesh, consisting of mesh entities and connectivity (incidence relations for the mesh entities). More...

#include <Topology.h>

Public Member Functions

 Topology (MPI_Comm comm, CellType cell_type)
 Empty Topology constructor.
 
 Topology (MPI_Comm comm, const std::vector< CellType > &cell_type)
 Create empty mesh topology with multiple cell types.
 
 Topology (const Topology &topology)=default
 Copy constructor.
 
 Topology (Topology &&topology)=default
 Move constructor.
 
 ~Topology ()=default
 Destructor.
 
Topologyoperator= (const Topology &topology)=delete
 Assignment.
 
Topologyoperator= (Topology &&topology)=default
 Assignment.
 
int dim () const noexcept
 Return the topological dimension of the mesh.
 
void set_index_map (int dim, std::shared_ptr< const common::IndexMap > map)
 Set the IndexMap for dimension dim.
 
void set_index_map (std::int8_t dim, std::int8_t i, std::shared_ptr< const common::IndexMap > map)
 Set the IndexMap for the ith celltype of dimension dim.
 
std::shared_ptr< const common::IndexMapindex_map (int dim) const
 Get the IndexMap that described the parallel distribution of the mesh entities.
 
std::vector< std::shared_ptr< const common::IndexMap > > index_maps (std::int8_t dim) const
 
std::shared_ptr< const graph::AdjacencyList< std::int32_t > > connectivity (int d0, int d1) const
 Return connectivity from entities of dimension d0 to entities of dimension d1. Assumes only one entity type per dimension.
 
std::shared_ptr< const graph::AdjacencyList< std::int32_t > > connectivity (std::pair< std::int8_t, std::int8_t > d0, std::pair< std::int8_t, std::int8_t > d1) const
 Return the connectivity from entities of topological dimension d0 to dimension d1. The entity type, and incident entity type are each described by a pair (dim, index). The index within a topological dimension dim, is that of the cell type given in entity_types(dim).
 
void set_connectivity (std::shared_ptr< graph::AdjacencyList< std::int32_t > > c, int d0, int d1)
 Set connectivity for given pair of topological dimensions.
 
void set_connectivity (std::shared_ptr< graph::AdjacencyList< std::int32_t > > c, std::pair< std::int8_t, std::int8_t > d0, std::pair< std::int8_t, std::int8_t > d1)
 Set connectivity for given pair of entity types, defined by dimension and index, as listed in entity_types(). General version for mixed topology. Connectivity from d0 to d1.
 
const std::vector< std::uint32_t > & get_cell_permutation_info () const
 Returns the permutation information.
 
const std::vector< std::uint8_t > & get_facet_permutations () const
 Get the numbers that encode the number of permutations to apply to facets.
 
CellType cell_type () const
 Cell type.
 
std::vector< CellTypeentity_types (std::int8_t dim) const
 Get the entity types in the topology for a given dimension.
 
std::int32_t create_entities (int dim)
 Create entities of given topological dimension.
 
void create_connectivity (int d0, int d1)
 Create connectivity between given pair of dimensions, d0 / -> d1.
 
void create_entity_permutations ()
 Compute entity permutations and reflections.
 
const std::vector< std::int32_t > & interprocess_facets () const
 List of inter-process facets.
 
const std::vector< std::int32_t > & interprocess_facets (std::int8_t index) const
 List of inter-process facets, if facet topology has been computed, for the facet type in Topology::entity_types identified by index.
 
MPI_Comm comm () const
 

Public Attributes

std::vector< std::vector< std::int64_t > > original_cell_index
 Original cell index for each cell type.
 

Detailed Description

Topology stores the topology of a mesh, consisting of mesh entities and connectivity (incidence relations for the mesh entities).

A mesh entity e may be identified globally as a pair e = (dim, i), where dim is the topological dimension and i is the index of the entity within that topological dimension.

Todo
Rework memory management and associated API. Currently, there is no clear caching policy implemented and no way of discarding cached data.

Constructor & Destructor Documentation

◆ Topology() [1/2]

Topology ( MPI_Comm comm,
CellType cell_type )

Empty Topology constructor.

Parameters
commMPI communicator
cell_typeType of cell

◆ Topology() [2/2]

Topology ( MPI_Comm comm,
const std::vector< CellType > & cell_type )

Create empty mesh topology with multiple cell types.

Parameters
commMPI communicator
cell_typeList of cell types
Warning
Experimental

Member Function Documentation

◆ cell_type()

mesh::CellType cell_type ( ) const

Cell type.

Returns
Cell type that the topology is for

◆ comm()

MPI_Comm comm ( ) const

Mesh MPI communicator

Returns
The communicator on which the topology is distributed

◆ connectivity() [1/2]

std::shared_ptr< const graph::AdjacencyList< std::int32_t > > connectivity ( int d0,
int d1 ) const

Return connectivity from entities of dimension d0 to entities of dimension d1. Assumes only one entity type per dimension.

Parameters
[in]d0
[in]d1
Returns
The adjacency list that for each entity of dimension d0 gives the list of incident entities of dimension d1. Returns nullptr if connectivity has not been computed.

◆ connectivity() [2/2]

std::shared_ptr< const graph::AdjacencyList< std::int32_t > > connectivity ( std::pair< std::int8_t, std::int8_t > d0,
std::pair< std::int8_t, std::int8_t > d1 ) const

Return the connectivity from entities of topological dimension d0 to dimension d1. The entity type, and incident entity type are each described by a pair (dim, index). The index within a topological dimension dim, is that of the cell type given in entity_types(dim).

Parameters
d0Pair of (topological dimension of entities, index of "entity type" within topological dimension)
d1Pair of (topological dimension of indicent entities, index of incident "entity type" within topological dimension)
Returns
AdjacencyList of connectivity from entity type in d0 to entity types in d1, or nullptr if not yet computed.

◆ create_connectivity()

void create_connectivity ( int d0,
int d1 )

Create connectivity between given pair of dimensions, d0 / -> d1.

Parameters
[in]d0Topological dimension
[in]d1Topological dimension

◆ create_entities()

std::int32_t create_entities ( int dim)

Create entities of given topological dimension.

Parameters
[in]dimTopological dimension
Returns
Number of newly created entities, returns -1 if entities already existed

◆ entity_types()

std::vector< CellType > entity_types ( std::int8_t dim) const

Get the entity types in the topology for a given dimension.

Parameters
dimTopological dimension
Returns
List of entity types

◆ get_facet_permutations()

const std::vector< std::uint8_t > & get_facet_permutations ( ) const

Get the numbers that encode the number of permutations to apply to facets.

The permutations are encoded so that:

  • n % 2 gives the number of reflections to apply
  • n // 2 gives the number of rotations to apply

The data is stored in a flattened 2D array, so that data[cell_index * / facets_per_cell + facet_index] contains the facet with index facet_index of the cell with index cell_index.

Returns
The encoded permutation info
Note
An exception is raised if the permutations have not been computed

◆ index_map()

std::shared_ptr< const common::IndexMap > index_map ( int dim) const

Get the IndexMap that described the parallel distribution of the mesh entities.

Parameters
[in]dimTopological dimension
Returns
Index map for the entities of dimension dim. Returns nullptr if index map has not been set.

◆ index_maps()

std::vector< std::shared_ptr< const common::IndexMap > > index_maps ( std::int8_t dim) const
Parameters
dimTopological dimension
Warning
Experimental
Returns
List of index maps, one for each cell type

◆ interprocess_facets() [1/2]

const std::vector< std::int32_t > & interprocess_facets ( ) const

List of inter-process facets.

"Inter-process" facets are facets that are connected (1) to a cell that is owned by the calling process (rank) and (2) to a cell that is owned by another process.

Precondition
Inter-process facets are available only if facet topology has been computed.

◆ interprocess_facets() [2/2]

const std::vector< std::int32_t > & interprocess_facets ( std::int8_t index) const

List of inter-process facets, if facet topology has been computed, for the facet type in Topology::entity_types identified by index.

Parameters
indexIndex of facet type

◆ set_connectivity() [1/2]

void set_connectivity ( std::shared_ptr< graph::AdjacencyList< std::int32_t > > c,
int d0,
int d1 )

Set connectivity for given pair of topological dimensions.

Todo
Merge with set_index_map

◆ set_connectivity() [2/2]

void set_connectivity ( std::shared_ptr< graph::AdjacencyList< std::int32_t > > c,
std::pair< std::int8_t, std::int8_t > d0,
std::pair< std::int8_t, std::int8_t > d1 )

Set connectivity for given pair of entity types, defined by dimension and index, as listed in entity_types(). General version for mixed topology. Connectivity from d0 to d1.

Parameters
cConnectivity AdjacencyList
d0Pair of (topological dimension of entities, index of "entity type" within topological dimension)
d1Pair of (topological dimension of indicent entities, index of incident "entity type" within topological dimension)
Warning
Experimental

◆ set_index_map() [1/2]

void set_index_map ( int dim,
std::shared_ptr< const common::IndexMap > map )

Set the IndexMap for dimension dim.

Todo
Merge with set_connectivity
Warning
This is experimental and likely to change

◆ set_index_map() [2/2]

void set_index_map ( std::int8_t dim,
std::int8_t i,
std::shared_ptr< const common::IndexMap > map )

Set the IndexMap for the ith celltype of dimension dim.

Todo
Merge with set_connectivity
Warning
This is experimental and likely to change
Parameters
dimTopological dimension
iIndex of cell type within dimension dim. Cell types for each dimension can be obtained with entity_types(dim).
mapMap to set

The documentation for this class was generated from the following files: