41#ifndef PECLET_FLOW_COLLOCATED_VARRHO_HPP
42#define PECLET_FLOW_COLLOCATED_VARRHO_HPP
44#include <Kokkos_Core.hpp>
74 bool haveRho,
double rhoC,
double fc,
bool incr,
double scale,
long s,
75 C3 e,
int g,
double wa = 1.0) {
79 "peclet::flow::colo_face_accel",
80 MD(
space, {g, g, g}, {e.x - g + 1, e.y - g + 1, e.z - g + 1}),
82 const long i = (
long)x + (
long)y * e.x + (
long)z * (
long)e.x * e.y;
83 const double rf = haveRho ? 0.5 * (rho(i) + rho(i - s)) :
rhoC;
84 const double f = fc + (
haveFb ? 0.5 * (
fb(i) +
fb(i - s)) : 0.0) -
85 (
incr ?
wa * (P(i) - P((
long)i - s)) : 0.0);
86 af(i) = scale * f / rf;
103 bool haveRho,
double rhoC,
double sigma,
double hGrad,
double scale,
104 long s,
C3 e,
int g) {
107 Kokkos::parallel_for(
108 "peclet::flow::colo_face_csf",
MD(
space, {g, g, g}, {e.x - g + 1, e.y - g + 1, e.z - g + 1}),
110 const long i = (
long)x + (
long)y * e.x + (
long)z * (
long)e.x * e.y;
111 const double dC =
cv(i) -
cv((
long)i - s);
116 const double rf = haveRho ? 0.5 * (rho(i) + rho(i - s)) :
rhoC;
130 Kokkos::parallel_for(
131 "peclet::flow::center_to_face_mass",
132 MD(
space, {g, g, g}, {e.x - g + 1, e.y - g + 1, e.z - g + 1}),
134 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
135 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
150 double rho0,
long s,
C3 e,
int g,
double wa = 1.0) {
153 Kokkos::parallel_for(
154 "peclet::flow::colo_cell_corr_var",
MD(
space, {g, g, g}, {e.x - g, e.y - g, e.z - g}),
156 const long i = (
long)x + (
long)y * e.x + (
long)z * (
long)e.x * e.y;
157 const long j = i + s;
158 const double kLo = haveRho
159 ?
wa * (
rho0 / (0.5 * (rho(i) + rho(i - s))) * (phi(i) - phi(i - s)))
160 :
wa * (phi(i) - phi(i - s));
161 const double kHi = haveRho
162 ?
wa * (
rho0 / (0.5 * (rho(j) + rho(j - s))) * (phi(j) - phi(j - s)))
163 :
wa * (phi(j) - phi(j - s));
flow — the POINTWISE formulas of the collocated variable-density ABC pair (doc/collocated_varrho_forc...
flow — portable (Kokkos) cut-cell pressure-operator face openness from an SDF.
double faceMassWeighted(double uL, double uR, double rL, double rR)
double cellFromFaces(double aLo, double aHi, double oLo, double oHi)
double csfFaceForce(double sigma, double kf, double dC, double hGrad)
The balanced-force CSF contribution to the momentum RHS at one staggered velocity unknown,...
bool csfFaceCurvature(double k0, double b0, double k1, double b1, double &kf)
Face curvature for the balanced-force CSF, from the two cells sharing the face.
void correctCellFaceAverageVar(CCField u, CCConst phi, CCConst rho, CCConst o, bool haveRho, double rho0, long s, C3 e, int g, double wa=1.0)
void buildFaceAccelVar(CCField af, CCConst P, CCConst rho, CCConst fb, bool haveFb, bool haveRho, double rhoC, double fc, bool incr, double scale, long s, C3 e, int g, double wa=1.0)
Kokkos::View< double *, CCMem > CCField
Kokkos::DefaultExecutionSpace CCExec
void centerToFaceMassWeighted(CCField uf, CCField vf, CCField wf, CCConst U, CCConst V, CCConst W, CCConst rho, C3 e, int g)
void addFaceAccelCsf(CCField af, CCConst cv, CCConst kp, CCConst kb, CCConst rho, bool haveRho, double rhoC, double sigma, double hGrad, double scale, long s, C3 e, int g)
Kokkos::View< const double *, CCMem > CCConst
flow — the multidimensional iteration policies: iteration order follows storage.
flow — VoF rung V4 (WO-P): balanced-force continuum surface force + the capillary Δt.
static constexpr double U