|
[Sponsors] |
externalWallHeatFluxTemperature when combining radiation and conduction |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
April 9, 2020, 19:34 |
externalWallHeatFluxTemperature when combining radiation and conduction
|
#1 |
New Member
Mohamed el Abbassi
Join Date: Oct 2016
Location: Delft, the Netherlands
Posts: 9
Rep Power: 10 |
Hi foamers,
There is a problem when applying both external radiation and solid heat resistance when using externalWallHeatFluxTemperature. I'm simulating a combustion process in a horizontal cylindrical furnace using chtMultiRegionFoam in OpenFOAM-v5.0. This furnace is located outside and the wall of the furnace loses its heat to the environment via thermal radiation and convection. Since the solid wall region surrounds the cylindrical gas region, the solid could be replaced by the advanced boundary condition externalWallHeatFluxTemperature, and then you only have to simulate the gas region. So with a solid region the BC for the outer wall patch is: Code:
wallExternal { type externalWallHeatFluxTemperature; mode coefficient; kappaMethod solidThermo; h uniform 1; Ta constant 293; emissivity 0.85; qr none; value 600; } And without the solid region (but wall thermal resistance included), the BC at the inner wall patch is: Code:
wallInternal { type externalWallHeatFluxTemperature; mode coefficient; kappaMethod fluidThermo; h uniform 1; Ta constant 293; emissivity 0.85; qr qr; thicknessLayers List<scalar> 1(0.19); kappaLayers List<scalar> 1(2.1); value 1200; } However, for the case without the solid region. The gas temperature increases dramatically compared to the case with solid region, which doesn't make sense at all. I attached two plots of temperature against # of iterations for both cases to illustrate the difference in average outlet temperature. When looking at the source code I find it difficult to understand how the solid thermal resistance is incorporated when thermal radiation is activated. Can someone please explain to me what is happening here (second if-scope)? I think that something is wrong here. Code:
if (emissivity_ > 0) { // Evaluate the radiative flux to the environment // from the surface temperature ... if (totalSolidRes > 0) { // ... including the effect of the solid wall thermal // resistance scalarField TpLambda(h_/(h_ + 1/totalSolidRes)); scalarField Ts(TpLambda*Tp + (1 - TpLambda)*Ta); scalarField lambdaTa4(pow4((1 - TpLambda)*Ta)); hp += emissivity_*sigma.value()*(pow4(Ts) - lambdaTa4)/Tp; hpTa += emissivity_*sigma.value()*(lambdaTa4 + pow4(Ta)); } else { // ... if there is no solid wall thermal resistance use // the current wall temperature hp += emissivity_*sigma.value()*pow3(Tp); hpTa += emissivity_*sigma.value()*pow4(Ta); } } Mohamed Last edited by melabbassi; April 10, 2020 at 04:35. |
|
April 12, 2020, 11:32 |
|
#2 |
New Member
Mohamed el Abbassi
Join Date: Oct 2016
Location: Delft, the Netherlands
Posts: 9
Rep Power: 10 |
If I exclude radiation (emissivity = 0) and make the convective heat transfer coefficient big enough (say h = 20), then I get the same result with and without the solid region. Also in the source code it makes sense and we see the familiar composition of convection and conduction to determine the overall heat transfer coefficient hp.
Code:
case fixedHeatTransferCoeff: { scalar totalSolidRes = 0; if (thicknessLayers_.size()) { forAll(thicknessLayers_, iLayer) { const scalar l = thicknessLayers_[iLayer]; if (kappaLayers_[iLayer] > 0) { totalSolidRes += l/kappaLayers_[iLayer]; } } } scalarField hp(1/(1/h_ + totalSolidRes)); const scalar Ta = Ta_->value(this->db().time().timeOutputValue()); scalarField hpTa(hp*Ta); |
|
October 19, 2020, 21:01 |
|
#3 |
New Member
Vitor Geraldes
Join Date: Dec 2009
Location: Lisbon, Portugal
Posts: 26
Rep Power: 16 |
I had the same problem with OpenFOAM-8. The radiation term of the BC seem to not work well. I used the classic approach of considering that the heat transfer coefficient from radiation if given by:
qrad = h_rad (Ta-Tp), where h_rad = sigma*emissivity*(Ta^4-Tp^4)/(Ta-Tp) The total heat flux is then given by: q = h (Ta-Tp) + h_rad (Ta-Tp) = (h + h_rad)*(Ta-Tp) We can then replace h by (h+h_rad). This approach should work fine if the difference between Ta and Tp is no very high. Using this approach, I have replaced the following code: // scalarField hp(1/(1/h_ + totalSolidRes)); // // const scalar Ta = //Ta_->value(this->db().time().timeOutputValue()); // scalarField hpTa(hp*Ta); // if (emissivity_ > 0) // { // // Evaluate the radiative flux to the environment // // from the surface temperature ... // if (totalSolidRes > 0) // { // // ... including the effect of the solid wall thermal // // resistance // scalarField TpLambda(h_/(h_ + 1/totalSolidRes)); // scalarField Ts(TpLambda*Tp + (1 - TpLambda)*Ta); // scalarField lambdaTa4(pow4((1 - TpLambda)*Ta)); // // hp += emissivity_*sigma.value()*(pow4(Ts) - lambdaTa4)/Tp; // hpTa += emissivity_*sigma.value()*(lambdaTa4 + pow4(Ta)); // } // else // { // // ... if there is no solid wall thermal resistance use // // the current wall temperature // hp += emissivity_*sigma.value()*pow3(Tp); // hpTa += emissivity_*sigma.value()*pow4(Ta); // } // } by const scalar Ta = Ta_->value(this->db().time().timeOutputValue()); scalarField hp(1/( 1/( h_+emissivity_*sigma.value()*(pow4(Ta)-pow4(Tp))/(Ta-Tp+VSMALL) ) + totalSolidRes ) ); scalarField hpTa(hp*Ta); |
|
December 1, 2020, 11:44 |
externaWallHeatFluxtemperature problem
|
#4 |
New Member
Join Date: Mar 2015
Posts: 1
Rep Power: 0 |
from my experience with openFoam7, it is impossible to submit radiative flux and convective flux at the same time on a patch with externaWallHeatFluxtemperature.
it's a pity. Such a BC corresponds to a standard case: A heated solid in air exchanging both with radiation and convection. With such BC , it would be possible to calculate the exchange with air without meshing the air region |
|
August 20, 2024, 09:09 |
|
#5 |
New Member
Theo Firelli
Join Date: Aug 2024
Posts: 4
Rep Power: 2 |
This seems to have been solved in the latest versions of OpenFOAM (I've checked versions 11 and 12). The radiative heat transfer coefficient is calculated according to the method mentioned by vitor.geraldes and added to h:
const scalarField hp ( 1 /( 1 /( (emissivity_ > 0) ? ( h_ + emissivity_*sigma.value() *((pow3(Ta) + pow3(Tp)) + Ta*Tp*(Ta + Tp)) )() : h_ ) + totalSolidRes ) ); Explanation : The heat flow (in W) between the wall (p) and the ambient (a) is calculated as: Q_rad = emissivity * sigma * A * (Tp^4-Ta^4) But we want to express it in the same form as a convective heat transfer, so that we can sum up the coefficients: Q_rad = h_rad * A * (Tp-Ta) We use the identity: a^4 - b^4 = (a-b)(a^3 + a^2 * b + a * b^2 + b^3) = (a-b)(a^3 + b^3 + a*b*(a+b)) Replacing a with Tp and b with Ta, and setting both previous equations for Q_rad to be equal, we get: h_rad = emissivity * sigma * (Tp^3 + Ta^3 + Tp*Ta*(Tp+Ta)) And this is the formula used in openfoam, as shown in the code above (externalTemperatureFvPatchScalarField.c from src/ThermophysicalTransportModels/coupledThermophysicalTransportModels/externalTemperature), we have: 1/hp = 1/(h+h_rad) + totalSolidRes h accounts for convection between the wall and the ambient, h_rad for radiation between wall and ambient, and totalSolidRes for the conductive resistance of the wall. So the externalWallHeatFluxTemperature BC should work fine. |
|
|
|