Mesh¶
Represent explicit surfaces on the device with triangle mesh. This was designed for close surfaces.
Internal structure¶
A mirheo::Mesh
is composed of an array of vertices (it contains the coordinates of each vertex) and a list of faces.
Each entry of the faces is composed of three indices that correspond to the vertices in the corresponding triangle.
A mirheo::MembraneMesh
contains also adjacent information.
This is a mapping from one vertex index to the indices of all adjacent vertices (that share an edge with the input vertex).
Example: In the following mesh, suppose that the maximum degree is maxDegree = 7
, the adjacent lists have the entries:
1 7 8 2 3 * * 0 3 4 5 6 7 * ...
The first part is the ordered list of adjacent vertices of vertex 0
(the *
indicates that the entry will not be used).
The second part corresponds to vertex 1
.
The first entry in each list is arbitrary, only the order is important.
The list of adjacent vertices of vertex i
starts at i * maxDegree
.
![graph adjacent {
node [shape=plaintext]
{rank = same; 3; 4}
{rank = same; 2; 0; 1; 5}
{rank = same; 8; 7; 6}
2 -- 3
2 -- 0
2 -- 8
3 -- 0
3 -- 4
3 -- 1
0 -- 1
0 -- 8
0 -- 7
1 -- 4
1 -- 5
1 -- 7
1 -- 6
4 -- 5
8 -- 7
7 -- 6
6 -- 5
}](../../_images/graphviz-039e33e39c31bc5737a6a213b5ef4084fcc82595.png)
API¶
Host classes¶
-
class
Mesh
¶ A triangle mesh structure.
The topology is represented by a list of faces (three vertex indices per face).
Subclassed by mirheo::MembraneMesh
Public Functions
-
Mesh
()¶ Default constructor. no vertex and faces.
-
Mesh
(const std::string &fileName)¶ Construct a
Mesh
from a off file.- Parameters
fileName
: The name of the file (contains the extension).
-
Mesh
(const std::tuple<std::vector<real3>, std::vector<int3>> &mesh)¶ Construct a
Mesh
from a list of vertices and faces.
-
Mesh
(const std::vector<real3> &vertices, const std::vector<int3> &faces)¶ Construct a
Mesh
from a list of vertices and faces.
-
int
getNtriangles
() const¶ - Return
- the number of faces
-
int
getNvertices
() const¶ - Return
- the number of vertices
-
int
getMaxDegree
() const¶ - Return
- the maximum valence of all vertices
-
const PinnedBuffer<real4> &
getVertices
() const¶ - Return
- the list of vertices
-
const PinnedBuffer<int3> &
getFaces
() const¶ - Return
- the list of faces
-
-
class
MembraneMesh
: public mirheo::Mesh¶ A triangle mesh with face connectivity, adjacent vertices and geometric precomputed values.
This class was designed to assist MembraneInteraction.
A stress-free state can be associated to the mesh. The precomputed geometric quantities that are stored in the object are computed from the stress free state.
Additionally to the list of faces (
- See
- Mesh), this class contains a list of adjacent vertices for each vertex. The list is stored in a single array, each vertex having a contiguous chunk of length maxDegree. See developer docs for more information.
Public Functions
-
MembraneMesh
()¶ construct an empty mesh
-
MembraneMesh
(const std::string &initialMesh)¶ Construct a MembraneMesh from an off file.
- Note
- The stress free state will be the one given by
initialMesh
- Parameters
initialMesh
: File (in off format) that contains the mesh information.
-
MembraneMesh
(const std::string &initialMesh, const std::string &stressFreeMesh)¶ Construct a MembraneMesh from an off file.
- Note
initialMesh
andstressFreeMesh
must have the same topology.- Parameters
initialMesh
: File (in off format) that contains the mesh information.stressFreeMesh
: File (in off format) that contains the stress free state of the mesh.
-
MembraneMesh
(const std::vector<real3> &vertices, const std::vector<int3> &faces)¶ Construct a MembraneMesh from a list of vertices and faces.
- Note
- The stress free state is the same as the current mesh.
- Parameters
vertices
: The vertex coordinates of the meshfaces
: List of faces that contains the vertex indices.
-
MembraneMesh
(const std::vector<real3> &vertices, const std::vector<real3> &stressFreeVertices, const std::vector<int3> &faces)¶ Construct a MembraneMesh from a list of vertices and faces.
- Parameters
vertices
: The vertex coordinates of the meshstressFreeVertices
: The vertex coordinates that represent the stress free state.faces
: List of faces that contains the vertex indices.
-
MembraneMesh
(MembraneMesh&&)¶ move constructor
-
MembraneMesh &
operator=
(MembraneMesh&&)¶ move assignment operator
-
const PinnedBuffer<int> &
getAdjacents
() const¶ - Return
- The adjacency list of each vertex
-
const PinnedBuffer<int> &
getDegrees
() const¶ - Return
- The degree of each vertex
-
class
MeshDistinctEdgeSets
¶ Stores sets of edges that share the same colors as computed by computeEdgeColors().
This allows to work on edges in parallel with no race conditions.
Public Functions
-
MeshDistinctEdgeSets
(const MembraneMesh *mesh)¶ Construct a MeshDistinctEdgeSets.
- Parameters
mesh
: The input mesh with adjacency lists.
-
int
numColors
() const¶ - Return
- the number of colors in the associated mesh.
-
const PinnedBuffer<int2> &
edgeSet
(int color) const¶ - Return
- The list of edges (vertex indices pairs) that have the given color.
-
Views¶
-
struct
MeshView
¶ A device-compatible structure that represents a triangle mesh topology (.
- See
Mesh
)
Subclassed by mirheo::MembraneMeshView
-
struct
MembraneMeshView
: public mirheo::MeshView¶ A device-compatible structure that represents a data stored in a MembraneMesh additionally to its topology.
Public Functions
-
MembraneMeshView
(const MembraneMesh *m)¶ Construct a MembraneMeshView from a MembraneMesh object.
Public Members
-
int
maxDegree
¶ maximum degree of all vertices
-
int *
adjacent
¶ lists of adjacent vertices
-
int *
degrees
¶ degree of each vertex
-
real *
initialLengths
¶ lengths of edges in the stress-free state
-
real *
initialAreas
¶ areas of each face in the stress-free state
-
real *
initialDotProducts
¶ do products between adjacent edges in the stress-free state
-