87 apply(
const FluxVariables& fluxVars,
88 const UpwindTermFunction& upwindTerm,
89 Scalar flux,
int phaseIdx)
95 const auto& scvf = fluxVars.scvFace();
96 const auto& elemVolVars = fluxVars.elemVolVars();
97 const auto& insideVolVars = elemVolVars[scvf.insideScvIdx()];
100 if (scvf.numOutsideScvs() > 1)
104 Scalar branchingPointUpwindTerm = 0.0;
105 Scalar sumUpwindFluxes = 0.0;
109 return upwindTerm(insideVolVars)*flux;
111 sumUpwindFluxes += flux;
113 for (
unsigned int i = 0; i < scvf.numOutsideScvs(); ++i)
116 const auto& fvGeometry = fluxVars.fvGeometry();
117 const auto outsideScvIdx = scvf.outsideScvIdx(i);
118 const auto outsideElement = fvGeometry.gridGeometry().element(outsideScvIdx);
119 const auto& flippedScvf = fvGeometry.flipScvf(scvf.index(), i);
121 using AdvectionType =
typename FluxVariables::AdvectionType;
122 const auto outsideFlux = AdvectionType::flux(fluxVars.problem(),
128 fluxVars.elemFluxVarsCache());
130 if (!signbit(outsideFlux))
131 branchingPointUpwindTerm += upwindTerm(elemVolVars[outsideScvIdx])*outsideFlux;
133 sumUpwindFluxes += outsideFlux;
137 if (sumUpwindFluxes != 0.0)
138 branchingPointUpwindTerm /= -sumUpwindFluxes;
140 branchingPointUpwindTerm = 0.0;
146 return flux*branchingPointUpwindTerm;
148 return flux*upwindTerm(insideVolVars);
154 const auto& outsideVolVars = elemVolVars[scvf.outsideScvIdx()];
156 return flux*(upwindWeight*upwindTerm(outsideVolVars)
157 + (1.0 - upwindWeight)*upwindTerm(insideVolVars));
159 return flux*(upwindWeight*upwindTerm(insideVolVars)
160 + (1.0 - upwindWeight)*upwindTerm(outsideVolVars));
167 apply(
const FluxVariables& fluxVars,
168 const UpwindTermFunction& upwindTerm,
169 Scalar flux,
int phaseIdx)
173 const auto& scvf = fluxVars.scvFace();
174 const auto& elemVolVars = fluxVars.elemVolVars();
175 const auto& insideVolVars = elemVolVars[scvf.insideScvIdx()];
176 const auto& outsideVolVars = elemVolVars[scvf.outsideScvIdx()];
180 return flux*(upwindWeight*upwindTerm(outsideVolVars)
181 + (1.0 - upwindWeight)*upwindTerm(insideVolVars));
183 return flux*(upwindWeight*upwindTerm(insideVolVars)
184 + (1.0 - upwindWeight)*upwindTerm(outsideVolVars));