User Guide: Pedestrian Comfort Using the LBM Solver


The LBM solver has the ability to deal with many CAD types and is generally more robust than many solvers in terms of cleanliness of the geometry, where open geometry, poor faces and small faces don’t really matter. That said in the odd occasion you have issues or error, if you inspect the geometry and don’t find anything fundamentally wrong, an STL can normally be uploaded which may mitigate any issues you are experiencing.


The geometry can be uploaded in the same way as you would normally upload a geometry to the SimScale platform, simply click the plus sign next to geometry in the item tree in the left hand panel.

From here the user can upload a geometry from their local machine or import from OnShape directly.

Creating a simulation

To create a simulation using the LBM (Lattice Boltzmann) method, the user simply needs to create a new simulation selecting the Incompressible LBM simulation type. First, select the plus in the item tree next to simulations and select the Incompressible LBM simulation type.

This simulation can then be re-named appropriately, and the turbulence model selected. More about the selection of unsteady turbulence models available in this simulation type can be read in the documentation.

Boundary Conditions

To define how air is entering and exiting the ‘domain’ or the ‘fluid region’, we need to define boundary conditions. This consists of an inlet face, and outlet face and other faces, usually a combination of no-slip walls or slip walls for non-interfering boundaries. The first task in this process is to define the size of the fluid domain, and this is done in the geometry section.

Geometry primitives can be added to be used later as mesh refinements or export regions, however there will always be a geometry primitive called ‘External Fluid Domain’ which can be edited to control the size of the fluid region.


The next step in the process is to go to the boundary condition section and setup the velocity inlet, pressure outlet and other conditions.

As default the ‘X min’ face on the external domain will be defined as the inlet, and the ‘X max’ boundary as the pressure outlet, all other faces are defined as slip walls with the exception of the floor as ‘Z min’ which is defined to have a no-slip wall condition.


These can all be changed and modified with your desired setup, however if you need to define wind angled in a non-cartesian manner you can set a wind direction in the bounding box geometry primitive, more on this can be read in the documentation <insert link>.


An atmospheric boundary layer can also be uploaded via CSV for both velocity as a function of height and intensity or kinetic energy as a function of height. This is discussed in greater detail a post here:


Typically for an LBM mesh, you will need 3 main things in your mesh setup, the finesse of the background box, a surface refinement on the buildings and a region refinement to properly capture the turbulence and flow physics in the near field. The following steps will guide you as to how these 3 definitions can be set.

The above image shows the setting of the background mesh fineness. This can be altered freely, however, it is advised to start coarse and work your way up.

Refinements to the mesh can be made by adding the refinement, where in LBM, options for surface and region refinements exist.

One a surface refinement has been made, it can be appropriately named and assigned. In this case right clicking and assigning all visible faces was used, and a refinement of 3m was used as the target resolution and a step of three cells between each level was given. This makes sure the refinement graduation isn’t too sudden.


For a region refinement, a new geometry primitive needs to be defined, assigned to a refinement and a target resolution specified.

Once the region has been defined, it can be assigned to a region refinement.

Result Control

The final part of simulation setup is to tell the solver what results are needed, and is discussed extensively in the documentation, however, for this exercise we will define a slice transient export, a statistical average results on the export region and a snapshot of the solution at the end of the same region. In addition we will define some probe points that read the velocities at pedestrian level, exported at a high resolution, this is useful for operations such as mean velocity, turbulent intensity and peak velocities at pedestrian level.


Starting with statistically averaged results, this takes the transient simulation and find the mean results for all fields. The statistical averaging is done from a defined time (in percentage) and in defined intervals (in seconds) to define the frequency in which the averaging takes place. Furthermore, the result control can export just surface data, just fluid region data or both.

The above example has been defined to export both surface and fluid data, averaging the results every 0.001s starting at 50% (0.5) in total simulation time. Also, if the time steps are bigger than 0.001s then the averaging will just happen every timestep, so if your unsure about the time step size but know you want all data considered, simply select a small number as demonstrated.

Snapshots take the last timestep of the simulation and export the instantaneous result fields for either fluid volume or surface data, or both. The above has used the export region again as the region to export, and has exported only the fluid data.


For transient exporting, the exportation of a region at every defined interval is allowed for either fluid volume or surface data or both. The thing to highlight here is that this happens at every interval defined and the size of the solution export may quickly become too big, this is discussed extensively in the documentation here <insert link>,  however, this can easily be avoided by exporting with moderation and smaller regions.

To ensure that the most information about the simulation is obtained without running out of machine storage slice regions can be defined for transient export. The above example shows how one can be defined for the pedestrian level flow.


The above example shows the pedestrian slice being output every 0.1s for fluid only results.

Probe plots can be defined by uploading a CSV file in the format ‘probe name, x-ordinate, y-ordinate, z-ordinate’. The probe name will be used to represent the probe in the plot, whereas the others will define its location in the domain.


Simulation Control

To define run time for both the simulation and maximum physical time, the simulation control item in the tree can be used.

The end time is the time in which you want the simulation to run for, for example 200s will simulate 200s of flow time. The maximum run time will cap the simulation to a maximum time in real time, for example setting a low number will stop the simulation midway if it goes beyond this physical time.

It is recommended that a simulation is run for 5 refreshes of the flow, that means that a particle of air can go from 1 side of the domain to the other 5 time before termination. The domain was approximately 2000m long in this setup, with the average speed of 10m/s, therefore a single pass will be 200s and 5 passes is 1000s.

Creating a Simulation Run

After these steps are done, the user is free to start a simulation run, at this point and errors or warnings will be displayed, if none, then the user will be asked to name the run and start it. If warnings are present the user can choose to continue regardless or cancel and amend the issue. If errors are present the user is asked to make the corrections before continuing.