Implementation of Buildings into PPRTS

Tue 29 September 2020

The main task for us in the Mosaik-2 project is to implement immersive buildings into the TenStream and think about how to handle resolved canopies. This article is status report on the first task and is a follow up on Solar Reflection of a Diagonal vs a Zigzagged Street.

The current implementation needs to have solid buildings blocks, i.e. we cannot have infinitely thin walls that reflect to each side. Rather, a building block is defined on cells and always has 6 sides/faces. This is a rather technical requisite. While we can easily implement the above mentioned thin walls, it would need more degrees of freedom(dof) per face. Currently we have two dof on each face or stream. One for each direction radiation can travel. On buildings this would be radiation hitting the wall from the outside and one for the reflected radiation. If we wanted to describe radiation that is coming from inside the building and being reflected on that same face, we would need two additional dof. While possible, we currently don’t see the need and opted for the simple solution of defining that there is no radiation transport inside building cells.

The technical steps to implement it in the TenStream are as follows:

  • blocking of direct radiation: in each building cell, there cannot be further transport of radiation
  • source term for diffuse radiation: direct radiation is reflected on building faces and emit planck radiation with B(T) * (1 - albedo)
  • diffuse radiation: buildings faces have to block the normal propagation through the box and reflect the incoming radiation
  • return results: collect, average over stream and return the fluxes on each buildings face

The current implementation provides additional structures that can be passed to Tenstream calls which hold information about the location of the buildings cells, the albedo, temperature etc. To save memory if there are only a handful of building cells, the struct holds a list of faces which are raveled 1D indices into pprts dmda size offset with a leading dimension of 6 faces or in the case of PlexRT just the face indices in plex%[fStart, fEnd].

Apart from some simple single cell tests I want to present a minimal test case with 6 cells setup as a pyramid. I.e. we have a 5-pt stencil in the center bottom of the domain and one box aloft the dead center.

The example is present git-rev@09c843aa2f2a729118cedae5517524262c2c68e2 examples/pprts/ex_pprts_rrtm_buildings.F90

Fig: Visualization with a RayLi virtual camera of the Pyramid test case with six cells. Solar azimuth is \(-55^\circ\), zenith angle \(40^\circ\) and a ground albedo \(15\%\) and building faces have an albedo of \(25\%\)

The benchmark results have been done with the coupled MonteCarlo Raytracer RayLi and are compared to Tenstream.3.10 results.

The following table summarizes the results for direct radiation (Edir) and diffuse incoming and outgoing fluxes on building faces for various computations

  • rayli: Rayli MonteCarlo simulation with 1e6 photons per spectral band
  • rayli2: A second Rayli MonteCarlo simulation to approximate noise
  • tenstr_3_10: TenStream with 3 direct and 10 diffuse streams
  • tenstr_8_10: TenStream with 8 direct and 10 diffuse streams
  • twostr: 1D Twostream
Mean abs. deviation [W/m2] Edir Eincoming Eoutgoing
rayli 0.00 0.00 0.00
rayli2 0.34 0.41 0.10
tenstr_3_10 0.38 2.37 0.59
tenstr_8_10 0.50 2.55 0.64
twostr 110.06 149.48 37.37
RMSE [W/m2] Edir Eincoming Eoutgoing
rayli 0.00 0.00 0.00
rayli2 0.70 0.73 0.18
tenstr_3_10 0.77 3.73 0.93
tenstr_8_10 1.00 3.94 0.99
twostr 216.48 262.24 65.56
Rel. RMSE [%] Edir Eincoming Eoutgoing
rayli 0.00 0.00 0.00
rayli2 0.37 0.31 0.31
tenstr_3_10 0.41 1.58 1.58
tenstr_8_10 0.53 1.67 1.67
twostr 114.30 111.24 111.24

Err functions defined as:

$$ mad(x,truth): mean(abs(x-truth)) $$
$$ rmse(x,truth): sqrt(mean((x-truth)^2)) $$
$$ rel.rmse(x,truth): rmse(x,truth) / mean(truth) $$

while the MonteCarlo result from RayLi is considered the truth.