32 static Scalar
flux(
const Problem& problem,
33 const Element& element,
34 const FVElementGeometry& fvGeometry,
35 const ElementVolumeVariables& elemVolVars,
36 const typename FVElementGeometry::SubControlVolumeFace& scvf,
37 const ElementFluxVariablesCache& elemFluxVarsCache)
39 const auto& insideScv = fvGeometry.scv(scvf.insideScvIdx());
40 const auto& outsideScv = fvGeometry.scv(scvf.outsideScvIdx());
41 const auto& insideVolVars = elemVolVars[insideScv];
42 const auto& outsideVolVars = elemVolVars[outsideScv];
43 const auto& fluxVarsCache = elemFluxVarsCache[scvf];
45 const Scalar topSideLength = 2.0*fluxVarsCache.throatInscribedRadius();
49 const Scalar insideHeight = insideVolVars.poreInscribedRadius();
50 const Scalar outsideHeight = outsideVolVars.poreInscribedRadius();
52 auto getPyramidBaseLengthFromVolume = [&](
const Scalar v,
const Scalar h)
57 const Scalar b = topSideLength;
59 return 0.5*sqrt(3.0) * sqrt(-(b*b*h-4.0*v)/h) -0.5*b;
63 const Scalar insideBaseSideLength = [&]()
65 static const bool useAdaptedVolume =
getParamFromGroup<bool>(problem.paramGroup(),
"FouriersLaw.UseVolumeEqualPyramid",
false);
68 return getPyramidBaseLengthFromVolume(0.5*insideVolVars.poreVolume(), insideHeight);
70 return 2.0 * insideVolVars.poreInscribedRadius();
74 const Scalar outsideBaseSideLength = [&]()
76 static const bool useAdaptedVolume =
getParamFromGroup<bool>(problem.paramGroup(),
"FouriersLaw.UseVolumeEqualPyramid",
false);
79 return getPyramidBaseLengthFromVolume(0.5*outsideVolVars.poreVolume(), outsideHeight);
81 return 2.0 * outsideVolVars.poreInscribedRadius();
84 auto insideThermalConducitivity = insideVolVars.solidThermalConductivity();
85 auto outsideThermalConducitivity = outsideVolVars.solidThermalConductivity();
87 const Scalar gInside = 4.0*insideThermalConducitivity * 0.5*topSideLength * 0.5*insideBaseSideLength / insideHeight;
88 const Scalar gOutside = 4.0*outsideThermalConducitivity * 0.5*topSideLength * 0.5*outsideBaseSideLength / outsideHeight;
89 const Scalar gThroat =
Dumux::harmonicMean(insideThermalConducitivity, outsideThermalConducitivity)
90 * fluxVarsCache.grainContactArea() / fluxVarsCache.throatLength();
92 const Scalar g = 1.0 / (1.0/gInside + 1.0/gOutside + 1.0/gThroat);
95 const Scalar deltaT = insideVolVars.temperature() - outsideVolVars.temperature();