Mesh

class Mesh

Class representing a mesh.

A mesh is a collection of points and elements. Each element is a collection of points. A point has 3 coordinates (x, y, z). Cell sets, side sets, and node sets can be defined on the mesh. Boundary edges and faces can be computed and obtained via API. Simple operations like scaling, and translation are supported. General transformations can be applied to the mesh as well. They are based on homogeneous coordinates and supported by Trsf class.

This class should be used for procedural mesh generation.

Public Functions

Mesh()

Construct empty mesh.

Mesh(std::vector<Point> points, std::vector<Element> elements)

Construct mesh from set of points and elements (useful for reading meshes from files)

Parameters:
  • points – Points

  • elements – Elements

std::size_t num_points() const

Get number of points.

Returns:

Number of points

std::size_t num_elements() const

Get number of elements.

Returns:

Number of elements

Span<const Point> points() const

Get mesh points.

Returns:

Mesh points

const Point &point(Index idx) const

Get a point by index.

Parameters:

idx – Index of the point

Returns:

Point

Span<const Element> elements() const

Get elements.

Returns:

Mesh elements

const Element &element(Index idx) const

Get element of the mesh.

Parameters:

idx – Index of the element

Returns:

Element

Ptr<Mesh> scaled(double factor) const

Scale mesh by a factor (isotropic)

Parameters:

factor – Scaling factor

Returns:

Scaled mesh

Mesh &scale(double factor)

Scale mesh by a factor (isotropic)

Parameters:

factor – Scaling factor

Returns:

Reference to this mesh which is scaled

Ptr<Mesh> scaled(double factor_x, double factor_y, double factor_z = 1.) const

Scale mesh by a factor (unisotropic)

Parameters:
  • factor_x – Scaling factor in x-direction

  • factor_y – Scaling factor in y-direction

  • factor_z – Scaling factor in z-direction

Returns:

Scaled mesh

Mesh &scale(double factor_x, double factor_y, double factor_z = 1.)

Scale mesh by a factor (unisotropic)

Parameters:
  • factor_x – Scaling factor in x-direction

  • factor_y – Scaling factor in y-direction

  • factor_z – Scaling factor in z-direction

Returns:

Reference to this mesh which is scaled

Ptr<Mesh> translated(double tx, double ty = 0., double tz = 0.) const

Translate mesh.

Parameters:
  • tx – Translation in x-direction

  • ty – Translation in y-direction

  • tz – Translation in z-direction

Returns:

Translated mesh

Mesh &translate(double tx, double ty = 0., double tz = 0.)

Translate mesh.

Parameters:
  • tx – Translation in x-direction

  • ty – Translation in y-direction

  • tz – Translation in z-direction

Returns:

Reference to this mesh which is translated

Ptr<Mesh> transformed(const Trsf &tr) const

Transform mesh.

Parameters:

tr – Transformation

Returns:

Transformed mesh

Mesh &transform(const Trsf &tr)

Transform mesh.

Parameters:

tr – Transformation

Returns:

Reference to this mesh which is transformed

Mesh &add(const Mesh &other)

Add another mesh to this mesh.

Parameters:

otherMesh to add

Returns:

Reference to this mesh

Mesh &remove_duplicate_points(double tolerance = 1e-12)

Remove duplicate points.

Parameters:

tolerance – Tolerance for point comparison

Returns:

Reference to this mesh

Ptr<Mesh> duplicate() const

Duplicate mesh.

Returns:

Duplicated mesh

Mesh &set_cell_set_name(Marker cell_set_id, const std::string &name)

Set cell set name.

Parameters:
  • cell_set_id – Cell set ID (marker)

  • name – Cell set name

Returns:

Reference to this mesh

std::string cell_set_name(Marker cell_set_id) const

Get cell set name.

Parameters:

cell_set_id – Cell set ID (marker)

Returns:

Cell set name

std::vector<Marker> cell_set_ids() const

Get cell set IDs.

Span<const Index> cell_set(Marker id) const

Get cell set.

Parameters:

id – Cell set ID

Returns:

Cell set

Mesh &set_cell_set(Marker id, const std::vector<Index> &cell_ids)

Set cell set.

Parameters:
  • id – Cell set ID

  • cell_ids – Cell IDs

Returns:

Reference to this mesh

Mesh &remove_cell_sets()

Remove cell sets.

Returns:

Reference to this mesh

Mesh &set_side_set_name(Marker side_set_id, const std::string &name)

Set side set name.

Parameters:
  • side_set_id – Side set ID (marker)

  • name – Side set name

Returns:

Reference to this mesh

std::string side_set_name(Marker side_set_id) const

Get side set name.

Parameters:

side_set_id – Side set ID (marker)

Returns:

Side set name

std::vector<Marker> side_set_ids() const

Get side set IDs.

Span<const SideEntry> side_set(Marker id) const

Get side set.

Parameters:

id – Side set ID

Returns:

Side set

Mesh &set_side_set(Marker id, const std::vector<SideEntry> &side_set)

Set side set.

Parameters:
  • id – Side set ID

  • side_set – Side set

Returns:

Reference to this mesh

Mesh &remove_side_sets()

Remove side sets.

Returns:

Reference to this mesh

Mesh &set_node_set_name(Marker id, const std::string &name)

Set node set name.

Parameters:
  • id – Node set ID

  • name – Node set name

Returns:

Reference to this mesh

std::string node_set_name(Marker id) const

Get node set name.

Parameters:

id – Node set ID

Returns:

Node set name

std::vector<Marker> node_set_ids() const

Get node set IDs.

Returns:

Node set IDs

Span<const Index> node_set(Marker id) const

Get node set.

Parameters:

id – Node set ID

Returns:

Node set

Mesh &set_node_set(Marker id, const std::vector<Index> &node_ids)

Set node set.

Parameters:
  • id – Node set ID

  • node_ids – Node IDs

Returns:

Reference to this mesh

Mesh &remove_node_sets()

Remove node sets.

Returns:

Reference to this mesh

Mesh &remap_block_ids(const std::map<Marker, Marker> &block_map)

Remap block IDs.

Parameters:

block_map – Map of old block IDs to new block IDs

Returns:

Reference to this mesh

ElementType element_type(Index index) const

Get element type.

Parameters:

index – Index of the element

Returns:

Element type

void set_up()

Prepare mesh.

std::vector<Index> boundary_edges() const

Get all boundary edge IDs.

Returns:

Boundary edge IDs

std::vector<Index> boundary_faces() const

Get all boundary face IDs.

Returns:

Boundary face IDs

Point compute_centroid(Index index) const

Compute centroid.

Parameters:

index – Index of the element

Returns:

Centroid

Vector outward_normal(Index index) const

Compute outward normal.

Parameters:

index – Index of the edge/face

Returns:

Outward normal