Radiative bodies - How can I couple them via boundary conditions?

I want to solve the heat conduction problem on several bodies, which are coupled by exchanging heat across their boundaries via (diffuse) radiation.

For this, I need to specify heat fluxes at the boundaries that dependent also on boundary temperatures on other boundaries - they are thus non-local.

I already browsed the Fenics documentation but did not find an appropriate starting point. All BC expressions refer to local coordinates (x[0]…x[2]) only.

Is this possible after all?

There are different approaches to solving this. The traditional approach is to mesh the air in between the objects, solving the diffusivity in the air as well, see for instance: https://link.springer.com/content/pdf/10.1007/s10589-015-9764-2.pdf
I would say this method is most accurate, as the material in between the bodies will affect the transfer of heat.

An alternative approach is to use multi-point constraints.
I am currently developing an add-on to dolfinx for this, see dolfinx_mpc. However, note that you still need to explicitly couple degrees of freedoms together, aka.
u_i = \sum_j \beta_j u_j for u_j on the other body. In your case, if the bodies aren’t flat surfaces, the linear combination becomes non-trivial to derive.

1 Like

Hey dokken,

thanks for the answer and the literature reference. I am aware of this way. However, we focus on the coupling of the (rather remote) bodies and live with less accuracy in the near-field of the boundaries.

Basically, the coupling boundary condition I want to impose set the heat flux on
surfaces (facets) that contribute to the radiative heat exchange.

Consider an already discretized surface with N_r discrete surface/facet elements.
The heat flux density on the i-th element is defined as
q_i = \sum_{j=1}^{N_r} P_{ij} T_j^4
for i,j =1,...,N_r where T_j is some representative temperature of the j-th surface/facet and P_{ij} are some coefficients which are identified by some other means. Ideally, this is done using the same mesh as for solving the pde.

So I don’t know if setting the DOFs (temperatures) directly helps me in this case. Am I right? Moreover, the temperatures enter with the power to 4.

By the way, is there a way to know the exact element (by number) where boundary conditions with coordinates x[0...2] are currently being evaluated?

Thanks
Michael

I guess i would do this in an iterative fashion, solving the problem on each body sequentially, using the flux condition of the solution of the heat from the previous body. You can access the coordinates for the values in a function of FunctionSpace V by calling V.tabulate_dof_coordinates(), which returns the coordinates in the same order as u.vector().get_local()