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 bandrayli2
: A second Rayli MonteCarlo simulation to approximate noisetenstr_3_10
: TenStream with 3 direct and 10 diffuse streamstenstr_8_10
: TenStream with 8 direct and 10 diffuse streamstwostr
: 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:
while the MonteCarlo result from RayLi is considered the truth.