Remeshing
The sheet mesh must maintain resolution and element quality as it deforms under Lagrangian motion. Without remeshing, vortex sheets become bent and contorted, losing accuracy. This page describes the edge-splitting and node-merging algorithms based on Stock (2006), §3.4–3.5.
Why Remeshing is Essential
The proposed discretization method has ideal conservation properties under planar strain. However, in real flows the mesh degrades as elements stretch, fold, and rotate with the Lagrangian motion.
The proposed discretization method has ideal conservation properties under planar strain—even if triangle nodes become separated beyond the grid scale. However, in real flows:
- Vortex sheets fold and roll up
- Elements experience non-uniform strain
- Triangle aspect ratios degrade
- Resolution becomes insufficient in high-curvature regions
Two complementary operations address these issues:
- Edge Splitting: Inserts nodes in long edges, maintaining resolution
- Node Merging: Removes close nodes, simplifying the mesh
Edge Splitting Algorithm
When triangle edges become too long (> $\Delta_{\text{split}} \approx \delta$), they are split to maintain resolution.
Splitting Procedure
At every time step:
- Reset all node and element flags, recompute surface normal vectors
- Flag all elements whose longest edge exceeds $\Delta_{\text{split}}$
- Sort flagged edges by length (longest first)
- For each flagged edge:
- Find all elements sharing that edge
- Create a new node at the edge midpoint
- Split each sharing element into two new elements
- Assign vortex sheet strength to new elements (see below)
- Remove original elements
This produces a valid connected mesh with no under-resolved regions.
Midpoint Selection Methods
Use geometric midpoint for volume conservation, cubic spline for curved surfaces, and cylindrical projection for roll-up regions where accuracy in high-curvature areas is critical.
Three methods for positioning new nodes:
1. Geometric Midpoint (Default)
Simply average the endpoint positions:
\[\mathbf{x}_3 = \frac{\mathbf{x}_1 + \mathbf{x}_2}{2}\]
- Pros: Exactly conserves enclosed volume
- Cons: Poor at capturing curvature
2. Cubic Spline Fit
Fits a cubic spline between endpoints using surface normal information:
- Calculate surface normal at each endpoint $\hat{\mathbf{n}}_j$ as weighted average of adjacent element normals:
\[\hat{\mathbf{n}}_j = \text{norm}\left(\sum_{e=1}^{N_j} \hat{\mathbf{n}}_e \phi_{j,e}\right)\]
where $\phi_{j,e}$ is the angle subtended at node $j$ by element $e$.
Compute tangential projection $\mathbf{P}_j = \mathbf{I} - \hat{\mathbf{n}}_j\hat{\mathbf{n}}_j^T$
Build spline coefficients and evaluate at midpoint
- Pros: Better approximation of curved surfaces
- Cons: More computation
3. Cylindrical Projection
Fits a cylinder to the edge using endpoint normals:
\[\mathbf{x}_3 = \frac{\mathbf{x}_1 + \mathbf{x}_2}{2} + d\,\frac{\hat{\mathbf{n}}_1 + \hat{\mathbf{n}}_2}{\|\hat{\mathbf{n}}_1 + \hat{\mathbf{n}}_2\|}\]
where $d$ is computed from the angle between normals and the projected edge length:
\[\theta = \frac{1}{2}\cos^{-1}(\hat{\mathbf{n}}_1 \cdot \hat{\mathbf{n}}_2), \quad d = \frac{l}{2}\left(\frac{1}{\sin\theta} - \frac{1}{\tan\theta}\right)\]
- Pros: Excellent for roll-up regions
- Cons: Cannot be used across disconnected sheets
Circulation Assignment to Split Elements
When using spline or cylindrical midpoints, child elements are not coplanar. Special care is needed to preserve circulation during the split operation.
When splitting an edge, the child elements must receive appropriate vortex sheet strength. For coplanar children:
\[\boldsymbol{\gamma}_{\text{parent}} = \boldsymbol{\gamma}_{\text{child1}} = \boldsymbol{\gamma}_{\text{child2}}\]
For non-coplanar children (spline/cylindrical midpoints):
- Create new node at geometric midpoint first
- Apply circulation assignment to coplanar children
- Move node to perturbed position (stretches vortex lines without changing circulation)
Baseline pass (VortexMethod.Remeshing.remesh_pass!)
Call signature:
tri_new, eleGma_new, changed = VortexMethod.Remeshing.remesh_pass!(
nodeX, nodeY, nodeZ, tri, eleGma, ds_max, ds_min; domain
)- Detect long edges and perform 1→4 splits using periodic midpoints on all three edges of any marked triangle (and its neighbor sharing an edge).
- Perform edge flips to remove very short edges and reduce anisotropy.
- Optionally collapse edges persistently below
ds_minby inserting a periodic midpoint and replacing both endpoints. - Compact node indices (optional) and finally wrap all nodes to the periodic domain using
wrap_nodes!.
Inputs are derived from grid spacing: ds_max ≈ O(max(dx,dy)), ds_min ≈ O(0.05 max(dx,dy)).
Node Merging Algorithm
Edge splitting alone can produce numerous thin, low-quality triangles. Node merging simplifies the mesh by combining close node pairs, maintaining element quality.
Edge splitting alone can produce numerous thin, low-quality triangles. Node merging simplifies the mesh by combining close node pairs.
Types of Merging
- In-Sheet Merge: Only merges nodes that share at least one element (same connected sheet)
- Full Merge: Merges any close node pairs, regardless of connectivity (can connect separate sheets)
Merging Procedure
Node merging operates in conjunction with edge splitting:
- Reset all node and element flags, recompute surface normals
- Build list of node pairs within distance $\Delta_{\text{merge}}$
- Sort by distance (closest first)
- For each node pair (node 1 and node 2):
- Skip if either node was recently modified
- Compute new node position
- Create lists of:
- Elements containing only node 1
- Elements containing only node 2
- Elements containing both (will be collapsed and removed)
- Element pairs that will become coincident
- Save vortex sheet strengths from affected elements
- Remove collapsed elements
- Replace node 2 with node 1 in all elements
- Delete node 2
- Relocate node 1 to computed position
- Redistribute saved vorticity to remaining elements
Effect on Element Count
| Remeshing Mode | Element Count Scaling | Notes |
|---|---|---|
| No remeshing | $N \sim t^3$ | Unsustainable |
| Split only | $N \sim t^3$ (thin triangles) | Many poor-quality elements |
| In-sheet merge | $N \sim A_{\text{sheet}} \sim t^2$ | Good quality maintenance |
| Full merge | $N \sim A_{\text{sheet}}$ | Can reconnect sheets |
The in-sheet merging case shows that element count increases proportionally to surface area—indicating consistent element sizes are maintained.
Advanced, thesis-style refinement (VortexMethod.Remeshing.flow_adaptive_remesh!)
Uses strict thresholds designed to match the thesis:
tri_new, eleGma_new, changed = VortexMethod.Remeshing.flow_adaptive_remesh!(
nodeX, nodeY, nodeZ, tri, eleGma, velocity_field, domain;
max_aspect_ratio=3.0,
max_skewness=0.8,
min_angle_quality=0.4,
min_jacobian_quality=0.4,
grad_threshold=0.2,
curvature_threshold=0.6,
)Periodic Quality Metrics (Minimum Image)
- Max aspect ratio:
aspect_ratio ≤ max_aspect_ratio(default 3.0) - Max skewness:
skewness ≤ max_skewness(default 0.8) - Min angle quality:
angle_quality ≥ min_angle_quality(default 0.4), where 1 = perfect 60° minimum angle - Min Jacobian quality:
jacobian_quality ≥ min_jacobian_quality(default 0.4)
Flow-Based Indicators
- Velocity gradient magnitude: $\|\nabla\mathbf{U}\|_F \geq$
grad_threshold(default 0.2) ⇒ refine - Curvature (dihedral angle): angle between adjacent triangle normals ≥
curvature_threshold(default 0.6 rad) ⇒ refine
Any single criterion marks an element for refinement. Refinement uses 1→4 splitting with periodic midpoints. After refinement the node coordinates are wrapped.
Curvature-/Anisotropy-based passes
curvature_based_remesh!(nodeX,nodeY,nodeZ, tri, eleGma, domain; ...)targets high-dihedral-angle regions to preserve sharp roll-up fronts.anisotropic_remesh!(nodeX,nodeY,nodeZ, tri, eleGma, velocity_field, domain; ...)probes a suppliedvelocity_field(x,y,z)and refines where gradients are strong.
Conservation of circulation across remesh
Topology-changing remeshing APIs accept eleGma and return eleGma_new so element circulation is carried through the remesh.
Splits copy the parent sheet strength onto child elements. Collapses and topology cleanup redistribute the circulation from removed or modified elements onto the surviving connectivity. For standalone transport experiments, the helpers node_circulation_from_ele_gamma and ele_gamma_from_node_circ remain available in VortexMethod.Circulation, but the main remeshing paths now carry circulation directly.
Figures from the thesis
Add quality metrics illustrations and sheet roll-up examples from the thesis PDF into docs/src/assets/ and reference them here.
- Figure 3.26 (remeshing/quality illustration; suggested filename:
fig_3_26.png):
Figure 3.26: Remeshing and mesh-quality metrics (aspect ratio, skewness, angle and Jacobian quality) used to trigger refinement.
Expected asset path: docs/src/assets/fig_3_26.png.
- Figure 3.52 (curvature/flow-adaptive example; suggested filename:
fig_3_52.png):
Figure 3.52: Curvature- and flow-adaptive refinement highlighting high-dihedral-angle regions and strong velocity-gradient zones.
Expected asset path: docs/src/assets/fig_3_52.png.
Add brief captions describing what each figure illustrates once extracted.