74 const Element& element,
75 const FVElementGeometry& fvGeometry,
76 const ElementVolumeVariables& elemVolVars,
77 const SubControlVolume &scv)
80 const auto& volVars = elemVolVars[scv];
81 const auto& fs = volVars.fluidState() ;
82 const Scalar characteristicLength = volVars.characteristicLength() ;
86 const Scalar as = volVars.fluidSolidInterfacialArea();
89 const Scalar TFluid = volVars.temperatureFluid(0);
90 const Scalar TSolid = volVars.temperatureSolid();
92 const Scalar satW = fs.saturation(0) ;
93 const Scalar satN = fs.saturation(1) ;
95 const Scalar eps = 1e-6 ;
96 Scalar solidToFluidEnergyExchange ;
98 Scalar fluidConductivity ;
100 fluidConductivity = volVars.fluidThermalConductivity(1) ;
101 else if (satW >= 1.0 - eps)
102 fluidConductivity = volVars.fluidThermalConductivity(0) ;
104 DUNE_THROW(Dune::NotImplemented,
"wrong range");
106 const Scalar factorEnergyTransfer = volVars.factorEnergyTransfer() ;
108 solidToFluidEnergyExchange = factorEnergyTransfer * (TSolid - TFluid) / characteristicLength * as * fluidConductivity ;
109 const Scalar epsRegul = 1e-3 ;
111 if (satW < (0 + eps) )
113 solidToFluidEnergyExchange *= volVars.nusseltNumber(1) ;
115 else if ( (satW >= 0 + eps) and (satW < 1.0-eps) )
117 solidToFluidEnergyExchange *= (volVars.nusseltNumber(1) * satN );
126 qBoil = sp.
eval(satW);
129 else if (satW>= (1.0-epsRegul) )
132 Spline sp(1.0-epsRegul, 1.0,
136 qBoil = sp.
eval(satW) ;
143 solidToFluidEnergyExchange += qBoil;
145 else if (satW >= 1.0-eps)
147 solidToFluidEnergyExchange *= volVars.nusseltNumber(0) ;
150 DUNE_THROW(Dune::NotImplemented,
"wrong range");
153 if (!isfinite(solidToFluidEnergyExchange))
154 DUNE_THROW(
NumericalProblem,
"Calculated non-finite source, " <<
"TFluid="<< TFluid <<
" TSolid="<< TSolid);
156 for(
int energyEqIdx =0; energyEqIdx<numEnergyEqFluid+numEnergyEqSolid; ++energyEqIdx)
161 source[energyEq0Idx + energyEqIdx] += solidToFluidEnergyExchange;
164 source[energyEq0Idx + energyEqIdx] -= solidToFluidEnergyExchange;
167 DUNE_THROW(Dune::NotImplemented,
179 static Scalar
QBoilFunc(
const VolumeVariables & volVars,
184 const auto& fs = volVars.fluidState();
185 const Scalar g( 9.81 );
186 const Scalar gamma(0.0589);
187 const Scalar TSolid = volVars.temperatureSolid();
189 const Scalar as = volVars.fluidSolidInterfacialArea();
190 const Scalar mul = fs.viscosity(0);
191 const Scalar deltahv = fs.enthalpy(1) - fs.enthalpy(0);
192 const Scalar deltaRho = fs.density(0) - fs.density(1);
193 const Scalar firstBracket = pow(g * deltaRho / gamma, 0.5);
194 const Scalar cp = FluidSystem::heatCapacity(fs, 0);
197 const Scalar Tsat = FluidSystem::vaporTemperature(fs, 1 ) ;
198 const Scalar deltaT = TSolid - Tsat;
199 const Scalar secondBracket = pow( (cp *deltaT / (0.006 * deltahv) ) , 3.0 );
200 const Scalar Prl = volVars.prandtlNumber(0);
201 const Scalar thirdBracket = pow( 1/Prl , (1.7/0.33));
202 const Scalar QBoil = satW * as * mul * deltahv * firstBracket * secondBracket * thirdBracket;