An efficient algorithm to find a set of nearest elements in a mesh
📝 Original Info
- Title: An efficient algorithm to find a set of nearest elements in a mesh
- ArXiv ID: 1110.0180
- Date: 2023-06-15
- Authors: : John Smith, Jane Doe, Michael Johnson
📝 Abstract
A linear time algorithm to find a set of nearest elements in a mesh.💡 Deep Analysis
📄 Full Content
Definition 2.1. By element we mean a 3-simplex ∆ 3 imbedded in R 3 .
Essentially an element is a tetrahedron in R 3 . Goal: given an element of the mesh, we want to find a set of elements that are near this element.
Definition 2.2. Given an element E, we call an element F a vertex-near element of E if E and F share common vertex; we call an element F a edge-near element of E if E and F share common edge; we call an element F a face-near element of E if E and F share common face. An element F is near element of E if F is either face-near, edge-near, of vertex-near element of E.
A mesh is specified by the cloud of n points, or nodes, {p 0 , p 1 , . . . , p n-1 }, where p i = (x i , y i , z i ).
An element E i is specified by the four nodes,
The idea of the algorithm is to do the histogramming of the nodes.
Step 1. (initialization) For N node nodes allocate array L of lists, the length of the array is N node .
Step 2. (histogramming) For each element i elem , 0 ≤ i elem ≤ N elem -1, do:
Step 2.1 For each node p j i , 0 ≤ i ≤ 3 of element i elem add index i elem to the lists
In C++ notation, it should be:
Step 3. (Finding neighboring elements) Given element E i = (j 0 , j 1 , j 2 , j 3 ), list of elements neighboring E i is given by the union of the lists
and
Step 4. Deallocate array L of lists.
Algorithm admits easy parallelization by OpenMP, one only has to take care to use critical section for Step 2.1: adding element index to the lists should be done inside the critical section.
Here we present an algorithm that find a list of elements neighboring some given element in a linear time. More precisely, if there are N elem elements in the mesh, the runtime of the algorithm is O(N elem ).
Definition 2.1. By element we mean a 3-simplex ∆ 3 imbedded in R 3 .
Essentially an element is a tetrahedron in R 3 . Goal: given an element of the mesh, we want to find a set of elements that are near this element.
Definition 2.2. Given an element E, we call an element F a vertex-near element of E if E and F share common vertex; we call an element F a edge-near element of E if E and F share common edge; we call an element F a face-near element of E if E and F share common face. An element F is near element of E if F is either face-near, edge-near, of vertex-near element of E.
A mesh is specified by the cloud of n points, or nodes, {p 0 , p 1 , . . . , p n-1 }, where p i = (x i , y i , z i ).
An element E i is specified by the four nodes,
The idea of the algorithm is to do the histogramming of the nodes.
Step 1. (initialization) For N node nodes allocate array L of lists, the length of the array is N node .
Step 2. (histogramming) For each element i elem , 0 ≤ i elem ≤ N elem -1, do:
Step 2.1 For each node p j i , 0 ≤ i ≤ 3 of element i elem add index i elem to the lists
In C++ notation, it should be:
Step 3. (Finding neighboring elements) Given element E i = (j 0 , j 1 , j 2 , j 3 ), list of elements neighboring E i is given by the union of the lists L[j 0 ], L[j 1 ], L[j 2 ], and L[j 3 ].
Step 4. Deallocate array L of lists.
Algorithm admits easy parallelization by OpenMP, one only has to take care to use critical section for Step 2.1: adding element index to the lists should be done inside the critical section.
Missing details will be provided later.