Inlet Boundary Conditions and Reference Point Handling
Overview
ArchiWind uses Computational Fluid Dynamics (CFD) to simulate wind flow around buildings and terrain. A critical aspect of any CFD simulation is the definition of the inlet boundary conditions: the vertical wind profile that enters the computational domain from each wind direction.
This document describes how ArchiWind constructs inlet profiles, handles reference heights and velocities across different wind data sources, and accounts for roughness mismatches between meteorological data sources and site conditions.
Wind Profile Formulation
Logarithmic wind profile
ArchiWind uses a neutrally stratified logarithmic (log-law) wind profile to define the vertical distribution of wind speed at the inlet boundaries. The formulation is:
$$ u(z) = \frac{u_*}{\kappa} \ln\left(\frac{z - d}{z_0}\right) $$
where:
| Symbol | Description | Unit |
|---|---|---|
| $u(z)$ | Wind speed at height $z$ | m/s |
| $u_*$ | Friction velocity | m/s |
| $\kappa$ | von Karman constant (0.4) | - |
| $z$ | Height above ground | m |
| $d$ | Displacement height | m |
| $z_0$ | Aerodynamic roughness length | m |
This formulation is valid within the atmospheric surface layer, which typically comprises the lowest 50 to 200 m of the atmospheric boundary layer (ABL).
Friction velocity
The friction velocity $u_*$ is derived from the reference conditions:
$$ u_* = \frac{\kappa \cdot U_{\text{ref}}}{\ln\left(\frac{z_{\text{ref}} - d}{z_0}\right)} $$
where $U_{\text{ref}}$ is the reference wind speed at height $z_{\text{ref}}$.
Turbulence quantities
At the inlet, turbulent kinetic energy ($k$) and turbulent dissipation rate ($\varepsilon$) are also prescribed using standard ABL formulations consistent with the log-law profile:
$$ k(z) = \frac{u_*^2}{\sqrt{C_\mu}} $$
$$ \varepsilon(z) = \frac{u_*^3}{\kappa (z - d)} $$
where $C_\mu = 0.09$ is the turbulence model constant for the realizable $k$-$\varepsilon$ model.
Displacement height
The displacement height $d$ represents the vertical shift of the effective ground level caused by dense obstacles such as buildings or canopy. ArchiWind uses $d = 0$ as the default for all simulations.
Rationale: In ArchiWind simulations, surrounding buildings within the domain, typically a 400 to 600 m radius, are explicitly modelled as 3D geometry. The flow disturbance caused by these obstacles is resolved directly by the CFD solver, not approximated through displacement. Setting $d = 0$ at the domain boundary is appropriate because:
- The inlet boundary is located far from the area of interest.
- The computational domain is extended beyond the modelled context with a horizontal extrusion of the terrain surface, which allows the atmospheric boundary layer to develop naturally before reaching the simulated buildings and surroundings.
- The explicitly modelled buildings dominate the near-ground flow physics within the area of interest.
For projects where the domain boundary passes through dense unmodelled urban fabric, the displacement height becomes more relevant. This parameter may be made user-configurable in a future release for advanced validation and calibration use cases.
OpenFOAM Implementation
ArchiWind uses OpenFOAM v2206 as its CFD solver. The inlet boundary conditions are implemented using the standard atmospheric boundary layer boundary conditions:
| Field | Boundary condition | Description |
|---|---|---|
| Velocity ($U$) | atmBoundaryLayerInletVelocity | Log-law velocity profile |
| Turbulent kinetic energy ($k$) | atmBoundaryLayerInletK | ABL-consistent $k$ profile |
| Turbulent dissipation ($\varepsilon$) | atmBoundaryLayerInletEpsilon | ABL-consistent $\varepsilon$ profile |
These boundary conditions are applied on the sides patch using a freestream wrapper, which allows the boundary to function as both inlet and outlet depending on the local flow direction.
All three boundary conditions share a common set of ABL parameters defined in the ABLConditions include file:
| Parameter | Symbol | Description |
|---|---|---|
Uref | $U_{\text{ref}}$ | Reference wind speed |
Zref | $z_{\text{ref}}$ | Reference height |
z0 | $z_0$ | Roughness length at domain boundary |
d | $d$ | Displacement height (default: 0.0) |
flowDir | - | Wind direction vector |
zDir | - | Vertical direction (0, 0, 1) |
These parameters are set independently for each wind direction, allowing the inlet profile to reflect the actual upstream roughness conditions.
Wall boundary conditions
At ground and terrain surfaces, the following boundary conditions are applied:
| Field | Surface | Boundary condition | Notes |
|---|---|---|---|
| Velocity ($U$) | Terrain / ground | fixedValue (0, 0, 0) | No-slip wall |
| Velocity ($U$) | Buildings / surroundings | noSlip | No-slip wall |
| $k$ | All walls | kqRWallFunction | Standard wall function |
| $\varepsilon$ | Terrain / ground | atmEpsilonWallFunction | $z_0 = 0.03$ m |
| $\varepsilon$ | Buildings / surroundings | epsilonWallFunction | Standard smooth wall |
The terrain surface inside the domain uses a fixed roughness of $z_0 = 0.03$ m (grassland equivalent) for the epsilon wall function. This is intentional: inside the simulation domain, the actual built-up elements, including buildings and surroundings, are modelled explicitly as 3D geometry with no-slip walls, so their aerodynamic effect is resolved directly by the solver. The terrain surface between buildings is treated as open ground cover, and grassland roughness ($z_0 = 0.03$ m) is a representative default for this exposed ground.
This is distinct from the inlet roughness, which reflects the actual upstream land cover, potentially including built-up areas, as determined by ESA WorldCover per wind direction.
Direction-Dependent Roughness
How upstream roughness is determined
For each wind direction, ArchiWind computes a representative roughness length ($z_0$) for the terrain upstream of the domain boundary. This is done using satellite-derived land cover data.
Data source: ESA WorldCover 10m (2021, v200), a global land cover map at 10 m resolution based on Sentinel-1 and Sentinel-2 satellite data.
Process:
- For each simulation, land cover raster tiles covering the area of interest are downloaded and reprojected to the project coordinate system.
- The area between an inner radius, the simulation domain boundary, and an outer radius, inner radius + 500 m fetch distance, is divided into angular sectors, one per simulated wind direction, typically 8 or 16 sectors.
- Within each sector, every raster pixel is mapped to an aerodynamic roughness length using a lookup table that assigns a $z_0$ value to each of the 11 ESA WorldCover land cover classes.
- The median roughness length across all pixels within the sector is used as the representative $z_0$ for that wind direction.
This per-direction roughness is then written into the ABLConditions for the corresponding wind direction, so each directional simulation receives an inlet profile shaped by its actual upstream terrain.
Land cover classes and roughness values
The 11 ESA WorldCover classes are mapped to roughness lengths as follows:
| Value | Land Cover Class | $z_0$ (m) |
|---|---|---|
| 0 | No data | 0.0002 |
| 10 | Tree cover | 0.4 |
| 20 | Shrubland | 0.07 |
| 30 | Grassland | 0.03 |
| 40 | Cropland | 0.1 |
| 50 | Built-up | 0.4 |
| 60 | Bare / sparse vegetation | 0.02 |
| 70 | Snow and ice | 0.001 |
| 80 | Permanent water bodies | 0.0002 (default) / Charnock relation |
| 90 | Herbaceous wetland | 0.1 |
| 95 | Mangroves | 0.2 |
| 100 | Moss and lichen | 0.0024 |
For permanent water bodies, the static default roughness is 0.0002 m. However, when computing sector roughness, the Charnock relation is used instead to estimate a wind-speed-dependent roughness. The same Charnock-based estimate is applied to “No data” pixels within sectors.
Charnock relation for water surfaces
Over water, aerodynamic roughness depends on wave state, which itself depends on wind speed. ArchiWind estimates water surface roughness using a fitted Charnock-type relation:
$$ z_0 = \frac{z}{\exp(B_n) - 1} $$
where $B_n$ is a blended fit between low-wind (viscous) and high-wind (wave-dominated) regimes, and $z$ is the reference height. The Charnock constant is $\alpha_{ch} = 0.018$ and the kinematic viscosity of air is $\nu = 1.5 \times 10^{-5}$ m^2/s. This computation is performed per wind direction using the sector mean wind speed, so water surface roughness varies by direction.
Normalized Simulations
ArchiWind runs CFD simulations using a normalized reference wind speed of 5 m/s at the provider-determined reference height. This normalized approach is possible because:
- At the spatial scales relevant to pedestrian wind comfort, such as building heights and street widths, flow around bluff bodies is essentially Reynolds-number-independent.
- The wind speed amplification ratios ($U_{\text{local}} / U_{\text{ref}}$) are constant regardless of the absolute inlet speed.
- Physical results, including Pedestrian Wind Comfort, Wind Safety, and Average Wind Speed, are obtained by combining the CFD amplification fields with real climate data, such as Weibull distributions per sector, in the post-processing stage.
This means the absolute wind speed at the inlet does not affect the validity of ratio-based outputs such as Wind Speed Amplification (WSA) or Pedestrian Wind Comfort (PWC) classifications.
Wind Data Sources
ArchiWind supports multiple wind data sources, each with different characteristics regarding reference height, roughness, and data format. The following sections describe how each source is handled.
1. MeteoBlue (default for subscribers)
| Property | Value |
|---|---|
| Reference height ($z_{\text{ref}}$) | 10 m AGL |
| Data type | Hourly historical records (5 years) |
| Source dataset | ERA5T reanalysis |
| Resolution | Hourly wind speed and direction |
| Roughness handling | No directional roughness correction applied |
How it works:
MeteoBlue provides hourly historical wind speed and direction data via the MeteoBlue History API. The data is retrieved for the project coordinates using the ERA5T reanalysis dataset, which delivers wind speed and direction at 10 m above ground level.
ArchiWind aggregates this hourly data into wind rose statistics: directional frequencies and Weibull distribution parameters ($A$ and $k$) per sector and per period, annual, seasonal, or monthly.
Roughness handling:
No roughness conversion is applied between the meteorological source and the site. The ERA5T reanalysis model incorporates its own terrain and roughness parameterisation, which means the 10 m wind speed already reflects the model’s representation of local surface conditions. Applying an additional roughness correction on top of this would introduce double-counting.
The per-direction roughness from ESA WorldCover is used solely to shape the vertical inlet profile, not to adjust the reference wind speed.
2. Open-Meteo (default for Explorer / free trial)
| Property | Value |
|---|---|
| Reference height ($z_{\text{ref}}$) | 10 m AGL |
| Data type | Hourly historical records (5 years) |
| Source dataset | ERA5 reanalysis (open access) |
| Roughness handling | No directional roughness correction applied |
Open-Meteo functions identically to MeteoBlue for the purposes of inlet boundary condition construction. The same reference height (10 m) and processing pipeline are used. The difference is in the upstream data source, open-access ERA5 versus premium MeteoBlue ERA5T, which affects the precision of the climate statistics but not the boundary condition methodology.
3. GovMap Wind Atlas
| Property | Value |
|---|---|
| Reference height ($z_{\text{ref}}$) | 30 m AGL |
| Data type | Long-term wind statistics (30-year simulation) |
| Source | Israeli Government GovMap Wind Atlas |
| Format | CSV with Weibull parameters per direction |
| Roughness handling | User-specified source roughness with per-direction correction |
How it works:
GovMap CSV files contain wind statistics at multiple heights (30 m, 60 m, 100 m, 150 m). ArchiWind currently ingests the 30 m data block, extracting Weibull $A$ and $k$ parameters and directional frequencies for 12 sectors.
The reference height for the inlet profile is set to $z_{\text{ref}} = 30$ m, and the normalized simulation uses $U_{\text{ref}} = 5$ m/s at this height.
Roughness correction (when source roughness is specified):
Because the GovMap wind statistics are derived from a mesoscale model with its own terrain representation, the roughness environment where the data was generated may differ from the actual roughness at the CFD domain boundary, as determined by ESA WorldCover.
When the user specifies a source roughness ($z_{0,\text{source}}$), representing the roughness conditions under which the wind data was produced, ArchiWind applies a per-direction correction factor during post-processing at the climate weighting stage, not at simulation time. All CFD simulations continue to run at the normalized 5 m/s at $z_{\text{ref}}$ for every direction.
The correction factor for each wind direction $\theta$ is:
$$ \alpha_\theta = \frac{\ln\left(\dfrac{z_{\text{ref}}}{z_{0,\theta}}\right)}{\ln\left(\dfrac{z_{\text{ref}}}{z_{0,\text{source}}}\right)} $$
where:
| Symbol | Description |
|---|---|
| $z_{\text{ref}}$ | Reference height (30 m for GovMap) |
| $z_{0,\theta}$ | ESA WorldCover median roughness for wind direction $\theta$ |
| $z_{0,\text{source}}$ | User-specified roughness of the meteorological source |
| $\alpha_\theta$ | Correction factor for direction $\theta$ |
This factor scales the effective reference wind speed when computing climate-weighted outputs such as Average Wind Speed, Pedestrian Wind Comfort, Wind Safety, and Wind Power Density. Specifically, the CFD amplification ratio for direction $\theta$ is multiplied by $\alpha_\theta$ before being combined with the Weibull distribution for that sector.
Physical interpretation: If the wind data was recorded over open terrain ($z_{0,\text{source}} = 0.03$ m) but the domain boundary in a particular direction faces dense urban terrain ($z_{0,\theta} = 0.4$ m), the wind speed at 30 m will be lower in the urban environment due to increased friction. The correction factor $\alpha_\theta < 1$ accounts for this reduction.
Why post-processing and not simulation-level: Applying the correction during post-processing rather than modifying the inlet speed per direction preserves the comparability of raw directional fields. Users can view Wind Speed and Wind Speed Amplification for individual directions on a consistent 5 m/s baseline. The correction only affects climate-weighted outputs where it is physically meaningful. This also means changing $z_{0,\text{source}}$ does not require re-running the simulation.
When source roughness is not specified, no correction is applied ($\alpha_\theta = 1$ for all directions), and the behaviour is identical to the MeteoBlue and Open-Meteo path.
4. UrbaWind TAB files (custom upload)
| Property | Value |
|---|---|
| Reference height ($z_{\text{ref}}$) | User-specified (via UI) |
| Data type | Wind distribution table |
| Source | Exported from UrbaWind or other tools |
| Format | .tab file |
| Roughness handling | User-specified source roughness with per-direction correction |
How it works:
TAB files contain tabulated wind statistics that can originate from various sources, including local mast measurements, mesoscale models, and other simulation tools. When uploading a .tab file, the user specifies the reference height at which the wind data applies.
ArchiWind reads the wind distribution from the file and sets $z_{\text{ref}}$ to the user-provided value. The normalized simulation then uses $U_{\text{ref}} = 5$ m/s at this height.
Roughness correction (when source roughness is specified):
The same per-direction roughness correction applies as for GovMap. The correction factor for each direction $\theta$ is:
$$ \alpha_\theta = \frac{\ln\left(\dfrac{z_{\text{ref}}}{z_{0,\theta}}\right)}{\ln\left(\dfrac{z_{\text{ref}}}{z_{0,\text{source}}}\right)} $$
This factor is applied during post-processing at the climate weighting stage, not at simulation time. All CFD runs use 5 m/s at $z_{\text{ref}}$ regardless of the source roughness setting.
The user specifies $z_{0,\text{source}}$ to indicate the roughness conditions under which the wind data was recorded. This is particularly important for .tab files because:
- Data may come from a measurement mast at an airport ($z_0 \approx 0.03$ m) while the project site is urban ($z_0 \approx 0.4$ m).
- The file may originate from another simulation tool with different terrain assumptions.
- Regulatory standards may require explicit documentation of the roughness conversion.
When source roughness is not specified, no correction is applied ($\alpha_\theta = 1$).
5. EPW files (EnergyPlus Weather)
| Property | Value |
|---|---|
| Reference height ($z_{\text{ref}}$) | User-specified (default: 10 m AGL) |
| Data type | Hourly time series (typically TMY) |
| Source | Weather stations, TMY generators |
| Roughness handling | User-specified source roughness with per-direction correction |
EPW files follow the same processing pipeline as MeteoBlue and Open-Meteo: hourly records are aggregated into wind rose statistics. The user can specify the reference height at which the data applies; the default is 10 m, the standard EnergyPlus convention.
The per-direction roughness correction is available when the user specifies a source roughness, following the same post-processing formula as GovMap and .tab files.
Summary of Reference Parameters by Source
| Wind Data Source | $z_{\text{ref}}$ | $U_{\text{ref}}$ (CFD) | Source roughness | Per-direction correction (post-processing) |
|---|---|---|---|---|
| MeteoBlue | 10 m | 5 m/s | Not applicable | No |
| Open-Meteo | 10 m | 5 m/s | Not applicable | No |
| GovMap CSV | 30 m | 5 m/s | User-specified (optional) | Yes, when source roughness provided |
UrbaWind .tab | User-specified | 5 m/s | User-specified (optional) | Yes, when source roughness provided |
| EPW | User-specified (default: 10 m) | 5 m/s | User-specified (optional) | Yes, when source roughness provided |
All CFD simulations run at the normalized $U_{\text{ref}} = 5$ m/s for every wind direction. The per-direction roughness correction factor $\alpha_\theta$ is applied exclusively during post-processing at the climate weighting stage, ensuring that raw directional fields remain comparable across directions.
Common Source Roughness Values
When specifying the roughness of a meteorological source, the following reference values can be used:
| Terrain Description | $z_0$ (m) | Typical Sources |
|---|---|---|
| Open sea, coastal | 0.001 | Coastal weather stations |
| Open flat terrain, airports | 0.03 | Airport METAR, open-field masts |
| Agricultural, scattered obstacles | 0.1 | Rural weather stations |
| Suburban, scattered buildings | 0.2 | Suburban measurement sites |
| Dense urban, city centres | 0.4 | Urban measurement campaigns |
Applicability and Limitations
- Neutral stratification only. ArchiWind assumes neutral atmospheric stability ($\psi = 0$). This is standard practice for pedestrian wind comfort studies, where the focus is on mean wind conditions rather than extreme convective or stable events.
- Log-law validity range. The logarithmic profile is valid within the atmospheric surface layer, approximately the lowest 10 to 15% of the ABL. For typical pedestrian wind studies, the heights of interest, from 2 m to the tops of tall buildings, fall well within this range.
- No displacement height override. The displacement height is currently fixed at $d = 0$. For most simulations where surrounding buildings are explicitly modelled, this is appropriate. Advanced users performing calibration against wind tunnel data or on-site measurements may need to adjust this parameter; this capability is planned for a future release.
- Roughness correction is a first-order approximation. The log-ratio conversion assumes the same geostrophic wind drives both the source and target environments. More rigorous methods, such as two-step gradient-height projection as in ESDU 82026 or Eurocode EN 1991-1-4, account for boundary layer depth changes with roughness. The log-ratio approach is widely accepted in engineering practice for pedestrian wind studies and provides a conservative, transparent correction.