radiation modeling in vacuum
As famously said, in space no-one can hear your scream. But seriously ...
The short question is:
how are field values on patches updated? For example, in laplacianFoam, it is obvious when the fields are calculated. But it is not clear when the patch boundary conditions are applied.
I need to apply patch boundary conditions without calculating the fields.
The long of the story follows:
I need to do a simulation of radiative heat transfer between solids in vacuum.
I have hacked the existing chtMultiRegion solver to create a much simpler solver that involves radiation and conduction only. However, just as vacuum does not carry sound, it does not conduct heat.
I can set the head conductivity to a very low number, but the solver will still solve for the temperature field. And for very large meshes, the CPU cost will add up. I would like to avoid that.
So, I need to model a region with radiation only.
I looked at regionProperties.H/C, and it seems straightforward to extend that code to include a region property of type vacuum.
The next item on the agenda is to introduce boundary conditions, steady state for now: solidToVacuum and vacuumToSolid. I think I can manage that.
My main question is the calculation of radiation flux in the vacuum region. From studying existing solvers (see http://foam.sourceforge.net/docs/cpp/a02314_source.html), the procedure is to
For the vacuum solver, I would need to skip step 1. I need to update the patch temperature and solve for radiation.
But I don't know how to trigger the calls to the boundary condition updates.
I'm not entirely sure what exactly would suit your needs... so here's what comes to mind:
fvPatchField::evaluate() looks like it updates the boundary field values.
fvPatchField::initEvaluate() looks related, but I think it has to do with parallel.
fvPatchField::updateCoeffs() looks like it updates matrix coefficients, intended to be used after evaluate(). Do you use an fvMatrix in your solution?
If you are using evaluate(), I'm not clear on how it will work... boundary values typically depend on the neighbouring cell in the internal field. Not sure how that works with your vacuum... but I don't deal with vacuums, so I defer to you.
If you are using an fvMatrix, and need the matrix coefficients to "absorb" the boundary conditions, that's a little more complicated. Boundary conditions affecting the diagonal of the matrix are updated with addBoundaryDiag - see fvMatrixSolve.C. Boundary conditions that require out-of-core multiplication, such as cyclic or processor, these require different treatment by different matrix solvers, and therefore, rather than trying to generically absorb them into the matrix, we have to build a set of boundary and internal coeffs, one for each boundary cell... and then let the solver handle them. Again, see fvMatrixSolve.C.
Hope that helps.
Follow me on Twitter @DavidGaden
I'll look into it
laplacianFoam with radiation ?
I need something similar, a simple laplacian solver (I added extra heat deposition) with radiation capabilities.
I am simultaneously working on chtMultiRegionFoam (it is one week since I am trying to understand how it works - is there any manual on this example ?), and I do not know what will be simpler, to get to understand chtMultiRegionFoam and add extra heat deposition or to somehow include radiation in laplacianFoam (including extraheat was really easy, but radiation is quite a problem). Any recommendations ?
|All times are GMT -4. The time now is 02:21.|