using FluxVariables = GetPropType<TypeTag, Properties::FluxVariables>;
auto upwindTerm = [](const auto& volVars) { return volVars.mobility(Indices::conti0EqIdx); };
auto fvGeometry = localView(gridGeometry);
auto elemVolVars = localView(gridVariables.curGridVolVars());
auto elemFluxVars = localView(gridVariables.gridFluxVarsCache());
for (const auto& element : elements(gridGeometry.gridView()))
{
fvGeometry.bind(element);
elemVolVars.bind(element, fvGeometry, solutionVector);
elemFluxVars.bind(element, fvGeometry, elemVolVars);
for (const auto& scvf : scvfs(fvGeometry))
{
if (!scvf.boundary())
{
FluxVariables fluxVars;
fluxVars.init(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVars);
auto innerFlux = fluxVars.advectiveFlux(Indices::conti0EqIdx, upwindTerm);
}
else
{
const auto bcTypes = boundaryTypes(element, scvf);
if (bcTypes.hasOnlyDirichlet())
{
FluxVariables fluxVars;
fluxVars.init(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVars);
auto boundaryFluxD = fluxVars.advectiveFlux(Indices::conti0EqIdx, upwindTerm);
}
else
{
auto boundaryFluxNM = problem.neumann(element, fvGeometry, elemVolVars, 0.0, scvf)[Indices::pressureIdx]
* scvf.area() * elemVolVars[0].extrusionFactor()
/ elemVolVars[0].density();
}
}
}
}