Struct t8_cmesh

Struct Documentation

struct t8_cmesh

This structure holds the connectivity data of the coarse mesh.

It can either be replicated, then each process stores a copy of the whole mesh, or partitioned. In the latter case, each process only stores a local portion of the mesh plus information about ghost elements.

The coarse mesh is a collection of coarse trees that can be identified along faces. TODO: this description is outdated. rewrite it. The array ctrees stores these coarse trees sorted by their (global) tree_id. If the mesh if partitioned it is partitioned according to an (possible only virtually existing) underlying fine mesh. Therefore the ctrees array can store duplicated trees on different processes, if each of these processes owns elements of the same tree in the fine mesh.

Each tree stores information about its face-neighbours.

If partitioned the ghost trees are stored in a hash table that is backed up by an array. The hash value of a ghost tree is its tree_id modulo the number of ghosts on this process.

Public Members

int committed

Flag that specifies whether the cmesh is committed or not.

t8_cmesh_commit

int dimension

The dimension of the cmesh.

It is set when the first tree is inserted.

int set_partition

If nonzero the cmesh is partitioned.

If zero each process has the whole cmesh.

int face_knowledge

If partitioned the level of face knowledge that is expected.

const t8_scheme_c *set_partition_scheme

If the cmesh is to be partitioned according to a uniform level, the scheme that describes the refinement pattern.

int8_t set_partition_level

Non-negative if the cmesh should be partitioned from an already existing cmesh with an assumed level uniform mesh underneath.

struct t8_cmesh *set_from

If this cmesh shall be derived from an existing cmesh by copy or more elaborate modification, we store a pointer to this other cmesh here.

int mpirank

Number of this MPI process.

int mpisize

Number of MPI processes.

t8_refcount_t rc

The reference count of the cmesh.

t8_gloidx_t num_trees

The global number of trees.

t8_locidx_t num_local_trees

If partitioned the number of trees on this process.

Otherwise the global number of trees.

t8_locidx_t num_ghosts

If partitioned the number of neighbor trees owned by different processes.

t8_locidx_t num_local_trees_per_eclass[T8_ECLASS_COUNT]

After commit the number of local trees for each eclass.

Stores the same entries as num_trees_per_eclass, if the cmesh is replicated.

t8_gloidx_t num_trees_per_eclass[T8_ECLASS_COUNT]

After commit the number of global trees for each eclass.

t8_cmesh_trees_t trees

structure that holds all local trees and ghosts

t8_gloidx_t first_tree

The global index of the first local tree on this process.

Zero if the cmesh is not partitioned. -1 if this processor is empty. See also https://github.com/DLR-AMR/t8code/wiki/Tree-indexing

int8_t first_tree_shared

If partitioned true if the first tree on this process is also the last tree on the next process.

Always zero if num_local_trees = 0

t8_shmem_array_t tree_offsets

If partitioned for each process the global index of its first local tree or -(first local tree) - 1 if the first tree on that process is shared.

Since this is very memory consuming we only fill it when needed.

t8_geometry_handler_c *geometry_handler

Handles all geometries that are used by trees in this cmesh.

struct t8_cmesh_vertex_connectivity *vertex_connectivity

Structure that manages tree_to_vertex and vertex_to_tree connectivity.

int negative_volume_check

Whether the negative volume check will be performed.

t8_locidx_t inserted_trees

Count the number of inserted trees to check at commit if it equals the total number.

t8_locidx_t inserted_ghosts

Count the number of inserted ghosts to check at commit if it equals the total number.

t8_stash_t stash

Used as temporary storage for the trees before commit.

t8_cprofile_t *profile

Used to measure runtimes and statistics of the cmesh algorithms.