Skip to content

Features

Ivan Pađen edited this page Aug 27, 2024 · 16 revisions

This page explains the basic functionalities of City4CFD. Conceptually, features can be decomposed into:

  • Buildings
  • Terrain
  • Surface layers
  • Reconstruction regions and domain boundaries

Buildings

Buildings can be created in different ways:

  • Reconstruction using the combination of 2D polygons and a point cloud
  • Reconstruction using 2D polygons containing height or number of floors attributes
  • Importing existing 3D building models

Different methods can be combined.

Building reconstruction can be done in LoD1.2, LoD1.3, and LoD2.2 (more information on LoDs).

For reconstruction in LoD1.3 and LoD2.2, you can control the overall complexity of the building using the complexity parameter:

For reconstruction in LoD1.3, you can define the minimum step height:

High density point cloud is necessary for high-quality LoD1.3 and LoD2.2 reconstructions. Ideally, horizontal point cloud density should be more than 15 points/m^2. Therefore, we do not recommend strong thinning for building points. Furthermore, the point cloud should have the building points classified -- noise generated by the automatic cloth simulation filter (CSF) might affect the reconstruction quality.

To visually inspect the typical LoD2.2 and LoD1.3 reconstruction results using this approach, you can check the 3DBAG website.

For reconstruction in LoD1.2, you can choose which percentile of building points is defined as a building height, as seen in the figure below.

Buildings are seamlessly integrated into the terrain, leaving no gaps at their intersection.

We integrated the geometry validator val3dity to check the geometric validity of buildings. The parameter check_validity reports invalid buildings to the log file, check here for error codes. If the geometric validity is necessary, you can use the enforce_validity to fall back to LoD1.2 reconstruction or surface wrapping (check configuration file for details. You can control the resolution of surface wrap using the relative_alpha and relative_offset parameters. You can read more about these parameters here and use wrapwrap tool to find desired parameters. Notice that surface wrapping results in the following effect at concave edges:

The LoD1.3 and LoD2.2 reconstruction are explained in more detail here.

(back to top)

Terrain

The terrain is generated from a point cloud (LAS/LAZ, PLY, or TXT/XYZ format) as a triangulated irregular network (TIN).

Terrain can be thinned (points removed to increase efficiency) and smoothed. The intensity of thinning and smoothing can be controlled with parameters. You can see a terrain example before and after 5 smoothing iterations below.

By not including the point cloud, the terrain will be approximated as a flat surface.

(back to top)

Surface layers

Surface layers are 2D polygons representing different surfaces (e.g. paved surfaces, water, low vegetation) that can be used to impose roughness values. They are imprinted into terrain and can be extracted as separate surfaces. They do not overlap with each other and their integration to the terrain is also seamless.

Sometimes, it is beneficial to force a flat surface. This is especially true when handling water surfaces -- due to the lack of LiDAR points in water, resulting triangulation can end up having zigzagged triangles. Flattening the surface layer solves that issue, see the figure below.

avg

(back to top)

Reconstruction regions and domain boundaries

We refer to the reconstruction regions as the regions where buildings are explicitly reconstructed. Both the reconstruction regions and the domain extent can be defined in three ways:

  • With the point of interest and prescribed radius
  • With an imported polygon or manually added polygon coordinates
  • Automatically, using the best practice guidelines (BPGs)

The first method is pretty straightforward. All buildings that fall into the circle or those that are on the border of the circle with prescribed origin (i.e. point of interest) and radius are reconstructed, while the others are not. This method for the domain extent creates a round (circular) domain.

An example of the second method with manually defined polygons can be seen in the figure below.

The third method uses BPGs to automatically define the influence region and domain extent, respectively.

BGPs for the reconstruction region are based on the work of Liu et. al (2018). The algorithm reconstructs the building of interest (defined by the point of interest) and defines the influence region as the multiplier of the largest building dimension. By default, the multiplier is set to 3.

bpginflu

From Liu et. al (2018)

BPGs for the domain extent use typical guidelines found in works such as COST Action 732, Franke et. al (2007) and Tominaga et. al (2008). The first condition is the multiplier of the highest building in the influence region, away from the influence region. The second condition is the blockage ratio of the buildings depending on the flow direction. Three types of domains can be set this way: rectangular, round, and oval. A schematic representation of BPGs and types of domains are shown in the figure below.

You can create multiple reconstruction regions, each with different settings. For example, you can set the first region with LoD2.2 and a high complexity parameter for the buildings, the second with LoD2.2 a low complexity parameter that extends further out of the first region, and then third region with LoD1.2 reconstruction, again further away from the second region. Regions are relative to the point of interest:

In the example above, the first region was reconstructed with the radius of 500 m and the complexity factor 0.7, the second region was reconstructed using a 1000 m radius and the complexity factor 0.3, and the third region was reconstructed using the manually defined polygon in LoD1.2. The reconstruction part of the file for the example above looks like this:

  "reconstruction_regions": [
    {
      "influence_region": 500,
      "lod": "2.2",
      "complexity_factor": 0.7
    },
    {
      "influence_region": 1000,
      "lod": "2.2",
      "complexity_factor": 0.3
    },
    {
      "influence_region": "polygons/bounds_smaller.geojson",
      "lod": "1.2"
    }
  ]

The output geometry is shown below (left) with a detail outlining the border between LoD2.2 and LoD1.3 (right):

(back to top)

Domain buffer

A buffer of the domain boundary replaces the non-flat terrain near the domain boundaries with a nearly flat surface. The idea is to remove perturbations near boundaries that can cause numerical stability issues in simulations.

(back to top)