38 static auto flux(
const Problem& problem,
39 const Element& element,
40 const FVElementGeometry& fvGeometry,
41 const ElementVolumeVariables& elemVolVars,
42 const typename FVElementGeometry::SubControlVolumeFace& scvf,
43 const ElementFluxVariablesCache& elemFluxVarsCache)
45 const auto& insideScv = fvGeometry.scv(scvf.insideScvIdx());
46 const auto& outsideScv = fvGeometry.scv(scvf.outsideScvIdx());
47 const auto& insideVolVars = elemVolVars[insideScv];
48 const auto& outsideVolVars = elemVolVars[outsideScv];
49 const auto& fluxVarsCache = elemFluxVarsCache[scvf];
51 static constexpr auto numPhases = ElementVolumeVariables::VolumeVariables::numFluidPhases();
52 using Scalar =
typename ElementVolumeVariables::VolumeVariables::PrimaryVariables::value_type;
55 for (
int phaseIdx = 0; phaseIdx < numPhases; phaseIdx++)
57 auto insideThermalConducitivity = insideVolVars.fluidThermalConductivity(phaseIdx);
58 auto outsideThermalConducitivity = outsideVolVars.fluidThermalConductivity(phaseIdx);
60 auto thermalConductivity =
Dumux::harmonicMean(insideThermalConducitivity, outsideThermalConducitivity);
61 auto area = fluxVarsCache.throatCrossSectionalArea(phaseIdx);
64 const Scalar deltaT = insideVolVars.temperature() - outsideVolVars.temperature();
65 const Scalar gradT = deltaT/fluxVarsCache.throatLength();
67 heatflux += thermalConductivity*gradT*area;
69 if constexpr (!std::is_same_v<MolecularDiffusionType, Detail::NoDiffusionType>)
70 heatflux += componentEnthalpyFlux_(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVarsCache, phaseIdx);
90 const auto diffusiveFlux = MolecularDiffusionType::flux(problem, element, fvGeometry, elemVolVars, scvf, phaseIdx, elemFluxVarsCache);
95 const Scalar componentEnthalpy = FluidSystem::componentEnthalpy(upstreamVolVars.fluidState(), phaseIdx, compIdx);