Difference between revisions of "CLSVOF"

From PHASTA Wiki
Jump to: navigation, search
Line 24: Line 24:
  
 
3.c.  Use established interface to compute φ at each node and tag those nodes as reconstructed
 
3.c.  Use established interface to compute φ at each node and tag those nodes as reconstructed
 +
  At each node, φ is the distance to the nearest point, unless two points are equidistant.
 +
  Need a tag for nodal completeness/reconstruction
  
 
3.d.  If any node has already been reconstructed, φ is min (other element reconstruction, this element reconstruction) (ensure that φ is min to interface everywhere)
 
3.d.  If any node has already been reconstructed, φ is min (other element reconstruction, this element reconstruction) (ensure that φ is min to interface everywhere)
Line 30: Line 32:
  
 
3.f.  Loop over elements adjacent by shared faces - If it’s not marked as complete and not an interface element, add it to the reconstruction list
 
3.f.  Loop over elements adjacent by shared faces - If it’s not marked as complete and not an interface element, add it to the reconstruction list
 +
  Need reconstruction list
 +
  Need data structure of each element's faces
 +
  Need data structure of which two elements are adjacent to each face
  
 
While reconstruction list is not empty, loop over the reconstruction list (establish and walk out φ)
 
While reconstruction list is not empty, loop over the reconstruction list (establish and walk out φ)
 +
 
N_fixed  = 0
 
N_fixed  = 0
 +
 
If at least 3 nodes are tagged as reconstructed
 
If at least 3 nodes are tagged as reconstructed
 +
 
Compute gradient of φ for the element using the three smallest values of reconstructed φ
 
Compute gradient of φ for the element using the three smallest values of reconstructed φ
 +
 
If computed gradient is very different from advected gradient (nearest interface is not the one walked out from)
 
If computed gradient is very different from advected gradient (nearest interface is not the one walked out from)
 +
 
Skip the element and move on to next in the list
 
Skip the element and move on to next in the list
 +
 
Else
 
Else
 +
 
Compute φ at all other nodes  
 
Compute φ at all other nodes  
 +
 
If a node is tagged as reconstructed, φ = min (current value, new computed value)
 
If a node is tagged as reconstructed, φ = min (current value, new computed value)
 +
 
Else φ = computed value, node is tagged as reconstructed
 
Else φ = computed value, node is tagged as reconstructed
 +
 
Mark the element as complete  
 
Mark the element as complete  
 +
 
Loop over elements adjacent by shared faces
 
Loop over elements adjacent by shared faces
 +
 
If the adjacent element is not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it to the list (stop adding nodes when > nε from interface)
 
If the adjacent element is not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it to the list (stop adding nodes when > nε from interface)
 +
 
Remove the element from the reconstruction list
 
Remove the element from the reconstruction list
 +
 
N_fixed = N_fixed + 1
 
N_fixed = N_fixed + 1
 +
 
Else (element has only 1 or 2 reconstructed nodes)
 
Else (element has only 1 or 2 reconstructed nodes)
 +
 
Skip the element and move on to next in list
 
Skip the element and move on to next in list
 +
 
If N_fixed ≠ 0, go to start of loop
 
If N_fixed ≠ 0, go to start of loop
 +
 
Else N_fixed = 0 and list is not empty, loop again through the list (less accurate method)
 
Else N_fixed = 0 and list is not empty, loop again through the list (less accurate method)
 +
 
If reconstructed nodes ≤ 2
 
If reconstructed nodes ≤ 2
 +
 
For each node not yet reconstructed, φ = min (distance to adjacent node + reconstructed φ of that node)
 
For each node not yet reconstructed, φ = min (distance to adjacent node + reconstructed φ of that node)
 +
 
(Do we typically have full nodal adjacency(all nodes that share an edge or element with a node)?)
 
(Do we typically have full nodal adjacency(all nodes that share an edge or element with a node)?)
 +
 
Mark the element as complete  
 
Mark the element as complete  
 +
 
Loop over elements adjacent by shared faces
 
Loop over elements adjacent by shared faces
If it’s not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it to the list (stop adding nodes when > nε from interface)
+
 
 +
If it’s not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it  
 +
to the list (stop adding nodes when > nε from interface)
 +
 
 
Remove the element from the reconstruction list
 
Remove the element from the reconstruction list
 +
 
N_fixed = N_fixed + 1
 
N_fixed = N_fixed + 1
 +
 
Else (at least 3 nodes are tagged as reconstructed)
 
Else (at least 3 nodes are tagged as reconstructed)
Handle element as above? Or
+
 
Keep the nodes with the two smallest values of φ
+
Handle element as above
Compute φ for other nodes as φ = min (distance to adjacent node + reconstructed φ of that node)
+
 
If node is already tagged as reconstructed, φ = min (computed φ, already reconstructed φ)
 
Else
 
φ = computed φ
 
Tag node as reconstructed
 
Mark the element as complete
 
Loop over elements adjacent by shared faces
 
If it’s not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it to the list (stop adding nodes when > nε from interface)
 
Remove the element from the reconstruction list
 
 
N_fixed = N_fixed + 1
 
N_fixed = N_fixed + 1
 +
 
When list is empty, for all elements not tagged as reconstructed, φ = nε for all nodes not tagged as reconstructed
 
When list is empty, for all elements not tagged as reconstructed, φ = nε for all nodes not tagged as reconstructed
 
  
 
== Parallel Algorithm ==
 
== Parallel Algorithm ==

Revision as of 11:24, 5 August 2013

A coupled level set volume of fluid method is being implemented in the incompressible code for interface tracking.


Serial Algorithm

Loop over elements (find the elements containing interface pieces)

1. Tag each element as incomplete

 Need a tag for elemental completeness

2. Truncate volume fractions so they’re 0 ≤ F ≤ 1

 Volume fraction is the second scalar
 

3. If 0 < F < 1 (element contains interface)

3.a. Use advected φ at element nodes to find interface slope for the element

 For tetrahedra, find the points at which the interface intersects the edges
 Use those three points (defining the plane) to find the interface normal

3.b. Move interface along normal until computed F = advected F

 Depending on which side of the interface is a tetrahedron, F is either the volume of the interface tetrahedron or the volume of the element minus the interface tetrahedron.
 

For a tetrahedron with vertices a, b, c, and d, the volume is: <math>V = \frac { |(\mathbf{a}-\mathbf{d}) \cdot ((\mathbf{b}-\mathbf{d}) \times (\mathbf{c}-\mathbf{d}))| } {6}.</math>

3.c. Use established interface to compute φ at each node and tag those nodes as reconstructed

 At each node, φ is the distance to the nearest point, unless two points are equidistant.
 Need a tag for nodal completeness/reconstruction

3.d. If any node has already been reconstructed, φ is min (other element reconstruction, this element reconstruction) (ensure that φ is min to interface everywhere)

3.e. Mark the element as complete

3.f. Loop over elements adjacent by shared faces - If it’s not marked as complete and not an interface element, add it to the reconstruction list

 Need reconstruction list
 Need data structure of each element's faces
 Need data structure of which two elements are adjacent to each face

While reconstruction list is not empty, loop over the reconstruction list (establish and walk out φ)

N_fixed = 0

If at least 3 nodes are tagged as reconstructed

Compute gradient of φ for the element using the three smallest values of reconstructed φ

If computed gradient is very different from advected gradient (nearest interface is not the one walked out from)

Skip the element and move on to next in the list

Else

Compute φ at all other nodes

If a node is tagged as reconstructed, φ = min (current value, new computed value)

Else φ = computed value, node is tagged as reconstructed

Mark the element as complete

Loop over elements adjacent by shared faces

If the adjacent element is not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it to the list (stop adding nodes when > nε from interface)

Remove the element from the reconstruction list

N_fixed = N_fixed + 1

Else (element has only 1 or 2 reconstructed nodes)

Skip the element and move on to next in list

If N_fixed ≠ 0, go to start of loop

Else N_fixed = 0 and list is not empty, loop again through the list (less accurate method)

If reconstructed nodes ≤ 2

For each node not yet reconstructed, φ = min (distance to adjacent node + reconstructed φ of that node)

(Do we typically have full nodal adjacency(all nodes that share an edge or element with a node)?)

Mark the element as complete

Loop over elements adjacent by shared faces

If it’s not marked as complete, and not in the reconstruction list, and reconstructed φ of shared nodes is < nε add it to the list (stop adding nodes when > nε from interface)

Remove the element from the reconstruction list

N_fixed = N_fixed + 1

Else (at least 3 nodes are tagged as reconstructed)

Handle element as above

N_fixed = N_fixed + 1

When list is empty, for all elements not tagged as reconstructed, φ = nε for all nodes not tagged as reconstructed

Parallel Algorithm