Skip to content

Commit 9457142

Browse files
authored
r.sim: Parallelize dx/dy derivatives computation using OpenMP (#7094)
1 parent 300baac commit 9457142

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

raster/r.sim/r.sim.water/testsuite/test_r_sim_water.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class TestRSimWater(TestCase):
1313
dx = "tmp_dx"
1414
dy = "tmp_dy"
1515
depth = "tmp_depth"
16+
depth2 = "tmp_depth2"
1617
discharge = "tmp_discharge"
1718
diff_depth = "tmp_diff_depth"
1819
diff_discharge = "tmp_diff_discharge"
@@ -132,6 +133,7 @@ def test_nodxdy(self):
132133
depth=self.depth,
133134
discharge=self.discharge,
134135
random_seed=1,
136+
nprocs=1,
135137
)
136138

137139
# Assert that the output rasters exist
@@ -158,6 +160,21 @@ def test_nodxdy(self):
158160
stats = tools.r_univar(map=self.diff_discharge, format="json")
159161
self.assertAlmostEqual(stats["sum"], 0, delta=1e-3)
160162

163+
# test parallelized dxdy
164+
# lower precision because parallelization affects random number generator
165+
self.assertModule(
166+
"r.sim.water",
167+
elevation=self.elevation,
168+
depth=self.depth2,
169+
random_seed=1,
170+
nprocs=2,
171+
)
172+
self.assertRastersEqual(
173+
self.depth2,
174+
reference=self.reference_depth_default,
175+
precision="0.02",
176+
)
177+
161178
def test_complex(self):
162179
"""Test r.sim.water execution with more complex inputs"""
163180
# Run the r.sim.water simulation

raster/r.sim/simlib/derivatives.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ void derivatives(const Geometry *geometry, float **elevation, double **dx,
2020
H = (geometry->stepx / geometry->conv) * 8.0;
2121
V = (geometry->stepy / geometry->conv) * 8.0;
2222

23+
#if defined(_OPENMP)
24+
#pragma omp parallel for default(none) schedule(static) \
25+
shared(geometry, elevation, dx, dy, H, V) \
26+
private(col, c1, c2, c3, c4, c5, c6, c7, c8, c9)
27+
#endif
2328
for (row = 0; row < geometry->my; row++) {
2429
for (col = 0; col < geometry->mx; col++) {
2530

0 commit comments

Comments
 (0)