An efficient algorithm to find a set of nearest elements in a mesh

Reading time: 4 minute
...

📝 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

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

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.

Reference

This content is AI-processed based on open access ArXiv data.

Start searching

Enter keywords to search articles

↑↓
ESC
⌘K Shortcut