Regression Tests
The regression test suite is located in regtest/ and uses CMake’s
ctest infrastructure. Each test runs the wind_solver executable with
a pre-prepared inputs.i file and terrain CSV, verifying that the solver
completes without error.
Running the Tests
After building, run all regression tests from the build directory:
ctest --test-dir build -L regtest --output-on-failure
Or use the custom CMake target:
cmake --build build --target regtest
To run a single named test:
ctest --test-dir build -R flat_terrain --output-on-failure
Test Descriptions
flat_terrain
Location: regtest/flat_terrain/
Purpose: Verifies that the MLMG Poisson solver converges on the simplest possible geometry — a flat domain with all terrain elevations set to z = 0.
Terrain: A 3 × 3 grid of points spanning 0–100 m in x and y, all at z = 0 m.
Grid: 2 × 2 × 2 cells (dx = dy = dz = 50 m, domain_height = 100 m).
Wind: U_ref = 5 m/s (westerly), z_ref = 10 m, z₀ = 0.1 m.
Expected behaviour: On a flat domain the initial log-law field is horizontally uniform, so ∇·**u**₀ ≈ 0 everywhere. The MLMG solve converges immediately and the post-correction divergence should be negligible.
Key input parameters:
terrain_file = terrain.csv
U_ref = 5.0
V_ref = 0.0
z_ref = 10.0
z0 = 0.1
dx = 50.0
dy = 50.0
dz = 50.0
domain_height = 100.0
mlmg_verbose = 0
plot_file = plt_flat_terrain
gaussian_hill
Location: regtest/gaussian_hill/
Purpose: Verifies terrain-following wind initialisation and mass-consistent correction on a realistic hill geometry.
Terrain: An 11 × 11 point cloud over a 300 × 300 m domain with a Gaussian hill of peak elevation 50 m at the domain centre (σ = 60 m).
Grid: 10 × 10 × 6 cells (dx = dy = 30 m, dz = 25 m, domain_height = 100 m).
Wind: U_ref = 10 m/s (westerly), z_ref = 10 m, z₀ = 0.03 m (short grass).
Expected behaviour: The log-law profile accelerates over the hill crest and decelerates in the lee. The mass-consistent correction adjusts the vertical velocity to enforce ∇·u = 0, producing a physically consistent flow. The test also writes a terrain-aligned CSV extract at 15 m AGL.
Key input parameters:
terrain_file = terrain.csv
U_ref = 10.0
V_ref = 0.0
z_ref = 10.0
z0 = 0.03
dx = 30.0
dy = 30.0
dz = 25.0
domain_height = 100.0
alpha_h = 1.0
alpha_v = 1.0
mlmg_verbose = 0
extract_agl = 15.0
extract_file = wind_extract.csv
plot_file = plt_gaussian_hill
Adding New Tests
Create a new sub-directory under
regtest/, e.g.regtest/my_test/.Add a terrain file
terrain.csv(X Y Z columns).Write an
inputs.iwith the desired solver parameters.Register the test in
regtest/CMakeLists.txt:add_regression_test(my_test my_test)
Re-run CMake to pick up the new test:
cmake -S . -B build ctest --test-dir build -R my_test --output-on-failure
CI Integration
The Linux and macOS builds in .github/workflows/cmake_build.yml run the full regression suite automatically after each successful build:
ctest --test-dir build -L regtest --output-on-failure
This ensures that every push and pull request verifies both compilation and solver correctness on multiple operating systems.