DOLFINx 0.12.0.0
DOLFINx C++
Loading...
Searching...
No Matches
Mesh.h
1// Copyright (C) 2006-2023 Anders Logg, Chris Richardson and Garth N. Wells
2//
3// This file is part of DOLFINx (https://www.fenicsproject.org)
4//
5// SPDX-License-Identifier: LGPL-3.0-or-later
6
7#pragma once
8
9#include "Geometry.h"
10#include <concepts>
11#include <dolfinx/common/MPI.h>
12#include <memory>
13#include <string>
14#include <type_traits>
15
16namespace dolfinx::mesh
17{
18class Topology;
19
23template <std::floating_point T>
24class Mesh
25{
26public:
29
40 template <typename V>
41 requires std::is_convertible_v<std::remove_cvref_t<V>, Geometry<T>>
42 Mesh(MPI_Comm comm, std::shared_ptr<Topology> topology, V&& geometry)
43 : _topology(std::move(topology)), _geometry(std::forward<V>(geometry)),
44 _comm(comm)
45 {
46 // Do nothing
47 }
48
52 Mesh(const Mesh& mesh) = default;
53
56 Mesh(Mesh&& mesh) = default;
57
59 ~Mesh() = default;
60
61 // Assignment operator
62 Mesh& operator=(const Mesh& mesh) = delete;
63
66 Mesh& operator=(Mesh&& mesh) = default;
67
68 // TODO: Is there any use for this? In many situations one has to get
69 // the topology of a const Mesh, which is done by
70 // Mesh::topology_mutable. Note that the python interface (calls
71 // Mesh::topology()) may still rely on it.
74 std::shared_ptr<Topology> topology() { return _topology; }
75
78 std::shared_ptr<const Topology> topology() const { return _topology; }
79
82 std::shared_ptr<Topology> topology_mutable() const { return _topology; }
83
86 Geometry<T>& geometry() { return _geometry; }
87
90 const Geometry<T>& geometry() const { return _geometry; }
91
94 MPI_Comm comm() const { return _comm.comm(); }
95
97 std::string name = "mesh";
98
99private:
100 // Mesh topology
101 // Note: This is non-const because of the current memory management
102 // within mesh::Topology. It allows to obtain a non-const Topology
103 // from a const mesh (via Mesh::topology_mutable()).
104 std::shared_ptr<Topology> _topology;
105
106 // Mesh geometry
107 Geometry<T> _geometry;
108
109 // MPI communicator
110 dolfinx::MPI::Comm _comm;
111};
112
115template <typename V>
116Mesh(MPI_Comm, std::shared_ptr<Topology>, V)
119
120} // namespace dolfinx::mesh
A duplicate MPI communicator and manage lifetime of the communicator.
Definition MPI.h:47
Geometry stores the geometry imposed on a mesh.
Definition Geometry.h:39
A Mesh consists of a set of connected and numbered mesh topological entities, and geometry data.
Definition Mesh.h:25
std::shared_ptr< Topology > topology_mutable() const
Get mesh topology if one really needs the mutable version.
Definition Mesh.h:82
const Geometry< T > & geometry() const
Get mesh geometry (const version).
Definition Mesh.h:90
std::shared_ptr< Topology > topology()
Get mesh topology.
Definition Mesh.h:74
Mesh & operator=(Mesh &&mesh)=default
Mesh(const Mesh &mesh)=default
Geometry< T > & geometry()
Get mesh geometry.
Definition Mesh.h:86
Mesh(MPI_Comm comm, std::shared_ptr< Topology > topology, V &&geometry)
Create a Mesh.
Definition Mesh.h:42
Mesh(Mesh &&mesh)=default
std::string name
Name.
Definition Mesh.h:97
Geometry< T > geometry_type
Value type.
Definition Mesh.h:28
~Mesh()=default
Destructor.
MPI_Comm comm() const
Mesh MPI communicator.
Definition Mesh.h:94
std::shared_ptr< const Topology > topology() const
Get mesh topology (const version).
Definition Mesh.h:78
Topology stores the topology of a mesh, consisting of mesh entities and connectivity (incidence relat...
Definition Topology.h:49
Mesh data structures and algorithms on meshes.
Definition DofMap.h:32