Loading...
Searching...
No Matches
fct_advection_diffusion.hpp File Reference

Go to the source code of this file.

Classes

struct  terra::fv::hex::operators::FVFCTBuffers< ScalarType >
 All working storage for a single FCT timestep, allocated once and reused every step. More...
 
struct  terra::fv::hex::operators::ComputeDtStableKernel< ScalarT >
 Kokkos kernel that computes the local maximum stable explicit dt for each FV cell. More...
 
struct  terra::fv::hex::operators::FCTPredictorKernel< ScalarT >
 Kokkos kernel for the explicit low-order predictor and antidiffusive flux assembly. More...
 
struct  terra::fv::hex::operators::FCTLimiterKernel< ScalarT >
 Kokkos kernel that computes the Zalesak nodal correction factors \(R_i^+\) and \(R_i^-\) from the low-order predictor \(T^L\) and the antidiffusive fluxes. More...
 
struct  terra::fv::hex::operators::FCTCorrectionKernel< ScalarT >
 Kokkos kernel that applies the Zalesak-limited antidiffusive correction to \(T^L\). More...
 
struct  terra::fv::hex::operators::FCTAntidiffKernel< ScalarT >
 Kokkos kernel that computes only the pre-scaled antidiffusive fluxes from \(T^n\). More...
 

Namespaces

namespace  terra
 
namespace  terra::fv
 
namespace  terra::fv::hex
 
namespace  terra::fv::hex::operators
 
namespace  terra::fv::hex::operators::fct_detail
 

Typedefs

template<typename ScalarT >
using terra::fv::hex::operators::fct_detail::GeometryHelper = operators::detail::GeometryHelper< ScalarT >
 

Functions

template<typename ScalarT >
ScalarT terra::fv::hex::operators::compute_dt_stable (const grid::shell::DistributedDomain &domain, const linalg::VectorQ1Vec< ScalarT, 3 > &vel, const grid::Grid4DDataVec< ScalarT, 3 > &cell_centers, const grid::Grid3DDataVec< ScalarT, 3 > &grid, const grid::Grid2DDataScalar< ScalarT > &radii, const ScalarT diffusivity=ScalarT(0))
 Compute the largest explicit time step that keeps the FCT low-order predictor stable.
 
template<typename ScalarT >
void terra::fv::hex::operators::fct_predictor (const grid::shell::DistributedDomain &domain, const linalg::VectorFVScalar< ScalarT > &T_old, const linalg::VectorQ1Vec< ScalarT, 3 > &vel, const grid::Grid4DDataVec< ScalarT, 3 > &cell_centers, const grid::Grid3DDataVec< ScalarT, 3 > &grid, const grid::Grid2DDataScalar< ScalarT > &radii, const ScalarT dt, FVFCTBuffers< ScalarT > &bufs, const ScalarT diffusivity=ScalarT(0), const grid::Grid4DDataScalar< ScalarT > &source={}, const bool subtract_divergence=true)
 Stage 1: low-order predictor + antidiffusive flux computation.
 
template<typename ScalarT >
void terra::fv::hex::operators::fct_limiter (const grid::shell::DistributedDomain &domain, FVFCTBuffers< ScalarT > &bufs)
 Stage 2: compute Zalesak \(R^+\)/ \(R^-\) correction factors.
 
template<typename ScalarT >
void terra::fv::hex::operators::fct_correction (const grid::shell::DistributedDomain &domain, linalg::VectorFVScalar< ScalarT > &T_new, FVFCTBuffers< ScalarT > &bufs)
 Stage 3: apply the Zalesak-limited antidiffusive correction.
 
template<typename ScalarT >
void terra::fv::hex::operators::fct_explicit_step (const grid::shell::DistributedDomain &domain, linalg::VectorFVScalar< ScalarT > &T, const linalg::VectorQ1Vec< ScalarT, 3 > &vel, const grid::Grid4DDataVec< ScalarT, 3 > &cell_centers, const grid::Grid3DDataVec< ScalarT, 3 > &grid, const grid::Grid2DDataScalar< ScalarT > &radii, const ScalarT dt, FVFCTBuffers< ScalarT > &bufs, const ScalarT diffusivity=ScalarT(0), const grid::Grid4DDataScalar< ScalarT > &source={}, const bool subtract_divergence=true, const grid::Grid4DDataScalar< grid::shell::ShellBoundaryFlag > &boundary_mask={}, const DirichletBCs< ScalarT > &bcs={})
 One complete explicit FCT advection–diffusion timestep.
 
template<typename ScalarT >
void terra::fv::hex::operators::upwind_explicit_step (const grid::shell::DistributedDomain &domain, linalg::VectorFVScalar< ScalarT > &T, const linalg::VectorQ1Vec< ScalarT, 3 > &vel, const grid::Grid4DDataVec< ScalarT, 3 > &cell_centers, const grid::Grid3DDataVec< ScalarT, 3 > &grid, const grid::Grid2DDataScalar< ScalarT > &radii, const ScalarT dt, FVFCTBuffers< ScalarT > &bufs, const ScalarT diffusivity=ScalarT(0), const grid::Grid4DDataScalar< ScalarT > &source={}, const bool subtract_divergence=true)
 One explicit first-order upwind advection–diffusion timestep (no FCT correction).
 
template<typename ScalarT >
void terra::fv::hex::operators::fct_antidiff (const grid::shell::DistributedDomain &domain, const linalg::VectorFVScalar< ScalarT > &T_old, const linalg::VectorQ1Vec< ScalarT, 3 > &vel, const grid::Grid4DDataVec< ScalarT, 3 > &cell_centers, const grid::Grid3DDataVec< ScalarT, 3 > &grid, const grid::Grid2DDataScalar< ScalarT > &radii, const ScalarT dt, FVFCTBuffers< ScalarT > &bufs)
 Computes pre-scaled antidiffusive fluxes \(\tilde{f}_{ij}\) from \(T^n\) (semi-implicit FCT stage 1).
 
template<typename ScalarT >
void terra::fv::hex::operators::fct_semiimplicit_step (const grid::shell::DistributedDomain &domain, linalg::VectorFVScalar< ScalarT > &T, const linalg::VectorFVScalar< ScalarT > &T_L, const linalg::VectorQ1Vec< ScalarT, 3 > &vel, const grid::Grid4DDataVec< ScalarT, 3 > &cell_centers, const grid::Grid3DDataVec< ScalarT, 3 > &grid, const grid::Grid2DDataScalar< ScalarT > &radii, const ScalarT dt, FVFCTBuffers< ScalarT > &bufs)
 One semi-implicit FCT advection–diffusion timestep.