86 apply(
const FluxVariables& fluxVars,
87 const UpwindTermFunction& upwindTerm,
88 Scalar flux,
int phaseIdx)
93 const auto& scvf = fluxVars.scvFace();
94 const auto& elemVolVars = fluxVars.elemVolVars();
95 const auto& insideVolVars = elemVolVars[scvf.insideScvIdx()];
98 if (scvf.numOutsideScvs() > 1)
102 Scalar branchingPointUpwindTerm = 0.0;
103 Scalar sumUpwindFluxes = 0.0;
106 if (!std::signbit(flux))
107 return upwindTerm(insideVolVars)*flux;
109 sumUpwindFluxes += flux;
111 for (
unsigned int i = 0; i < scvf.numOutsideScvs(); ++i)
114 const auto& fvGeometry = fluxVars.fvGeometry();
115 const auto outsideScvIdx = scvf.outsideScvIdx(i);
116 const auto outsideElement = fvGeometry.gridGeometry().element(outsideScvIdx);
117 const auto& flippedScvf = fvGeometry.flipScvf(scvf.index(), i);
119 using AdvectionType =
typename FluxVariables::AdvectionType;
120 const auto outsideFlux = AdvectionType::flux(fluxVars.problem(),
126 fluxVars.elemFluxVarsCache());
128 if (!std::signbit(outsideFlux))
129 branchingPointUpwindTerm += upwindTerm(elemVolVars[outsideScvIdx])*outsideFlux;
131 sumUpwindFluxes += outsideFlux;
135 if (sumUpwindFluxes != 0.0)
136 branchingPointUpwindTerm /= -sumUpwindFluxes;
138 branchingPointUpwindTerm = 0.0;
143 if (std::signbit(flux))
144 return flux*branchingPointUpwindTerm;
146 return flux*upwindTerm(insideVolVars);
152 const auto& outsideVolVars = elemVolVars[scvf.outsideScvIdx()];
153 if (std::signbit(flux))
154 return flux*(upwindWeight*upwindTerm(outsideVolVars)
155 + (1.0 - upwindWeight)*upwindTerm(insideVolVars));
157 return flux*(upwindWeight*upwindTerm(insideVolVars)
158 + (1.0 - upwindWeight)*upwindTerm(outsideVolVars));
165 apply(
const FluxVariables& fluxVars,
166 const UpwindTermFunction& upwindTerm,
167 Scalar flux,
int phaseIdx)
171 const auto& scvf = fluxVars.scvFace();
172 const auto& elemVolVars = fluxVars.elemVolVars();
173 const auto& insideVolVars = elemVolVars[scvf.insideScvIdx()];
174 const auto& outsideVolVars = elemVolVars[scvf.outsideScvIdx()];
176 if (std::signbit(flux))
177 return flux*(upwindWeight*upwindTerm(outsideVolVars)
178 + (1.0 - upwindWeight)*upwindTerm(insideVolVars));
180 return flux*(upwindWeight*upwindTerm(insideVolVars)
181 + (1.0 - upwindWeight)*upwindTerm(outsideVolVars));