58 const Element& element,
59 const FVElementGeometry& fvGeometry,
60 const ElementVolumeVariables& elemVolVars,
61 const ElementFaceVariables& elemFaceVars,
62 const SubControlVolumeFace& scvf,
63 const FluxVariablesCache& fluxVarsCache)
65 CellCenterPrimaryVariables flux(0.0);
67 const auto diffusiveFluxes = MolecularDiffusionType::flux(problem, element, fvGeometry, elemVolVars, scvf);
69 static constexpr auto referenceSystemFormulation = MolecularDiffusionType::referenceSystemFormulation();
71 for (
int compIdx = 0; compIdx < numComponents; ++compIdx)
73 auto upwindTerm = [compIdx](
const auto& volVars)
75 const auto density = useMoles ? volVars.molarDensity() : volVars.density();
76 const auto fraction = useMoles ? volVars.moleFraction(compIdx) : volVars.massFraction(compIdx);
77 return density * fraction;
80 flux[compIdx] = ParentType::advectiveFluxForCellCenter(problem, fvGeometry, elemVolVars, elemFaceVars, scvf, upwindTerm);
85 flux[compIdx] += useMoles ? diffusiveFluxes[compIdx]/FluidSystem::molarMass(compIdx) : diffusiveFluxes[compIdx];
88 flux[compIdx] += useMoles ? diffusiveFluxes[compIdx] : diffusiveFluxes[compIdx]*FluidSystem::molarMass(compIdx);
90 DUNE_THROW(Dune::NotImplemented,
"other reference systems than mass and molar averaged are not implemented");
95 if (ModelTraits::replaceCompEqIdx() < numComponents)
98 Scalar totalMassFlux = 0.0;
99 for (
int compIdx = 0; compIdx < numComponents; ++compIdx)
100 totalMassFlux += useMoles ? flux[compIdx]*FluidSystem::molarMass(compIdx) : flux[compIdx];
102 flux[ModelTraits::replaceCompEqIdx()] = totalMassFlux;