Inlet Boundary Conditions and Reference Point Handling

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:

SymbolDescriptionUnit
$u(z)$Wind speed at height $z$m/s
$u_*$Friction velocitym/s
$\kappa$von Karman constant (0.4)-
$z$Height above groundm
$d$Displacement heightm
$z_0$Aerodynamic roughness lengthm

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:

FieldBoundary conditionDescription
Velocity ($U$)atmBoundaryLayerInletVelocityLog-law velocity profile
Turbulent kinetic energy ($k$)atmBoundaryLayerInletKABL-consistent $k$ profile
Turbulent dissipation ($\varepsilon$)atmBoundaryLayerInletEpsilonABL-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:

ParameterSymbolDescription
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:

FieldSurfaceBoundary conditionNotes
Velocity ($U$)Terrain / groundfixedValue (0, 0, 0)No-slip wall
Velocity ($U$)Buildings / surroundingsnoSlipNo-slip wall
$k$All wallskqRWallFunctionStandard wall function
$\varepsilon$Terrain / groundatmEpsilonWallFunction$z_0 = 0.03$ m
$\varepsilon$Buildings / surroundingsepsilonWallFunctionStandard 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:

  1. For each simulation, land cover raster tiles covering the area of interest are downloaded and reprojected to the project coordinate system.
  2. 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.
  3. 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.
  4. 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:

ValueLand Cover Class$z_0$ (m)
0No data0.0002
10Tree cover0.4
20Shrubland0.07
30Grassland0.03
40Cropland0.1
50Built-up0.4
60Bare / sparse vegetation0.02
70Snow and ice0.001
80Permanent water bodies0.0002 (default) / Charnock relation
90Herbaceous wetland0.1
95Mangroves0.2
100Moss and lichen0.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)

PropertyValue
Reference height ($z_{\text{ref}}$)10 m AGL
Data typeHourly historical records (5 years)
Source datasetERA5T reanalysis
ResolutionHourly wind speed and direction
Roughness handlingNo 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)

PropertyValue
Reference height ($z_{\text{ref}}$)10 m AGL
Data typeHourly historical records (5 years)
Source datasetERA5 reanalysis (open access)
Roughness handlingNo 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

PropertyValue
Reference height ($z_{\text{ref}}$)30 m AGL
Data typeLong-term wind statistics (30-year simulation)
SourceIsraeli Government GovMap Wind Atlas
FormatCSV with Weibull parameters per direction
Roughness handlingUser-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:

SymbolDescription
$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)

PropertyValue
Reference height ($z_{\text{ref}}$)User-specified (via UI)
Data typeWind distribution table
SourceExported from UrbaWind or other tools
Format.tab file
Roughness handlingUser-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)

PropertyValue
Reference height ($z_{\text{ref}}$)User-specified (default: 10 m AGL)
Data typeHourly time series (typically TMY)
SourceWeather stations, TMY generators
Roughness handlingUser-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 roughnessPer-direction correction (post-processing)
MeteoBlue10 m5 m/sNot applicableNo
Open-Meteo10 m5 m/sNot applicableNo
GovMap CSV30 m5 m/sUser-specified (optional)Yes, when source roughness provided
UrbaWind .tabUser-specified5 m/sUser-specified (optional)Yes, when source roughness provided
EPWUser-specified (default: 10 m)5 m/sUser-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, coastal0.001Coastal weather stations
Open flat terrain, airports0.03Airport METAR, open-field masts
Agricultural, scattered obstacles0.1Rural weather stations
Suburban, scattered buildings0.2Suburban measurement sites
Dense urban, city centres0.4Urban measurement campaigns

Applicability and Limitations

  1. 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.
  2. 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.
  3. 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.
  4. 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.