Team-based matrix-free unsteady advection-diffusion with SUPG stabilization, with the fused-arithmetic optimizations transferred from EpsilonDivDivKerngen and DivergenceKerngen/GradientKerngen. More...
#include "../../quadrature/quadrature.hpp"#include "communication/shell/communication.hpp"#include "communication/shell/communication_plan.hpp"#include "fe/wedge/operators/shell/unsteady_advection_diffusion_supg.hpp"#include "dense/vec.hpp"#include "fe/wedge/integrands.hpp"#include "fe/wedge/kernel_helpers.hpp"#include "grid/shell/spherical_shell.hpp"#include "linalg/operator.hpp"#include "linalg/vector.hpp"#include "linalg/vector_q1.hpp"#include "util/timer.hpp"Go to the source code of this file.
Classes | |
| class | terra::fe::wedge::operators::shell::UnsteadyAdvectionDiffusionSUPGKerngen< ScalarT, VelocityVecDim > |
Namespaces | |
| namespace | terra |
| namespace | terra::fe |
| namespace | terra::fe::wedge |
| Features for wedge elements. | |
| namespace | terra::fe::wedge::operators |
| namespace | terra::fe::wedge::operators::shell |
Team-based matrix-free unsteady advection-diffusion with SUPG stabilization, with the fused-arithmetic optimizations transferred from EpsilonDivDivKerngen and DivergenceKerngen/GradientKerngen.
Math identical to UnsteadyAdvectionDiffusionSUPG, but the 6×6 local mass matrix M and operator matrix A (advection + diffusion + streamline-diffusion) are never materialised. The standard bilinear form
dst_i = Σⱼ (M_ij + dt·A_ij) · src_j
with M_ij = Σ_q w_q |det J_q| · m · φ_i(q) · φ_j(q) A_ij = Σ_q w_q |det J_q| · [ κ · ∇φ_i(q)·∇φ_j(q)
collapses to dst_i = Σ_q w_q |det J_q| · { φ_i(q) · A_scalar(q)
τ is kept exact: volume-averaged over all 6 quadrature points (matching the legacy code) via a pre-pass that reuses the u(q) values.
Dirichlet boundary handling:
Lumped mass: mass term replaced by row-sum diagonal M_ii T_i, where M_ii = m · Σ_q w_q |det J_q| · φ_i(q) (because Σⱼ φ_j ≡ 1 for a partition-of-unity basis).
Diagonal mode: full diagonal-only of (M + dt·A).
Transferred structural optimisations:
template<bool LumpedMass, bool Diagonal, bool TreatBoundary> so the compiler dead-eliminates unused branches.ShellBoundaryCommPlan for halo exchange.