|
peclet.voro 1.0.4
Device-native moving-particle Voronoi dynamics
|
Track C, rung C2a (Voronoi methods plan, verdict V4): the staggered COVOLUME Navier–Stokes solver on the Voronoi face mesh — face-normal fluxes u_f as the velocity unknown, cell pressures, exact projection with the two-point Laplacian L of C1. More...
#include <cstdio>#include <functional>#include <Kokkos_Core.hpp>#include <type_traits>#include <vector>#include "peclet/core/common/view.hpp"#include "peclet/core/solver/graph_amg_device.hpp"#include "peclet/voro/fv/dec.hpp"#include "peclet/voro/fv/mesh.hpp"#include "peclet/voro/fv/operators.hpp"

Go to the source code of this file.
Classes | |
| struct | peclet::voro::fv::PressureSolver< Real > |
| struct | peclet::voro::fv::CovolumeNS< Real > |
| The covolume NS solver state: face fluxes u, cell pressure p (from the last projection). More... | |
Namespaces | |
| namespace | peclet |
| namespace | peclet::voro |
| Device-native Voronoi tessellation, geometry and finite-volume physics. | |
| namespace | peclet::voro::fv |
Functions | |
| template<class Real > | |
| void | peclet::voro::fv::perotTranspose (const FaceMesh< Real > &m, const DV< Real > &acell, const DV< Real > &out) |
| Transpose of the Perot reconstruction: face-normal tendency from cell tendencies (3N). | |
| template<class Real > | |
| void | peclet::voro::fv::cellTendency (const FaceMesh< Real > &m, const DV< Real > &u, const DV< Real > &U, Real nu, const DV< Real > &out, const DV< Real > &force=DV< Real >{}, Real convScale=Real(1), const DV< Real > &Uwall=DV< Real >{}, const DV< Real > &wallGrad=DV< Real >{}) |
Track C, rung C2a (Voronoi methods plan, verdict V4): the staggered COVOLUME Navier–Stokes solver on the Voronoi face mesh — face-normal fluxes u_f as the velocity unknown, cell pressures, exact projection with the two-point Laplacian L of C1.
Momentum on the faces is the TRANSPOSE of the Perot reconstruction R (fluxes → cell vectors): R: V_i U_i = Σ_{f∈i} s_if u_f A_f (c_f − x_i) Rᵀ: d_f a_f = (c_f − x_A)·a_A − (c_f − x_B)·a_B (interior faces) so that ⟨R u, a⟩_V = ⟨u, Rᵀ a⟩_F to round-off (⟨a,b⟩_F = Σ A_f d_f a_f b_f). The cell-centred tendency a_i is the finite-volume convection of the reconstructed field with the ARITHMETIC face mean (on a Voronoi mesh the face is the bisector, h_A = h_B, so this is also the distance-weighted mean) — skew-symmetric in ⟨·,·⟩_V for a divergence-free flux — plus the two-point viscous term, which is symmetric negative. Hence, semi-discretely, d/dt ½⟨u,u⟩_F = −ν Σ_f A_f/d_f |U_B − U_A|² ≤ 0, exactly zero in the inviscid limit, on ANY Voronoi mesh (skewness included: the centroid offsets are carried by R and Rᵀ). The projection u ← u − Δt grad φ, L φ = div u/Δt, is exact to the Poisson tolerance and is orthogonal to the divergence-free fluxes in ⟨·,·⟩_F (adjointness of div and grad, C1), so it does not touch the energy either.
Time integration: SSP-RK3, projection after every stage (the skew-symmetry needs div-free stage fluxes). Pressure Poisson: unpreconditioned CG (C1) or PCG with core's smoothed-aggregation GraphAMGDevice on the symmetric form −V L (the OT optimiser's graph Laplacian).
Boundary faces (walls; C3): no-slip — zero flux, U = 0 at distance h_A for the viscous term.