[GRASS-user] r.viewshed speed improvment

Frank David frank.david at geophom.fr
Mon May 14 03:59:39 PDT 2018


Hello Grass users,

I'm using r.viewshed to calculate the vertical height visible of object
(windturbine) from any point on my DEM. So, I iterate upto the maximum
height (from 0 to 250m) every meter. At the end, I made a r.series to
sum the maps. As I have sometimes about 300 wtg on the territory, it
takes a while (about two days) to calculate all the visibile height for
each wtg on a 80kmx80km territory with 75m resolution (1066x1066). But
it works.
Today, I need to calculate one wtg with a topo raster about 22000 rows x
22000 colums (5m resolution on about 50km radius = near 500 milions cells).
I wrote a new python script that parallelized jobs (inspired by
https://grasswiki.osgeo.org/wiki/Parallelizing_Scripts). But I notice
that the proc are running at 100% a small part of the time and the
memory not so much used. On the other hand, the hdd is very busy.

I'm using Grass 7.4 on Debian 9 with Intel i7 (8 cores) and 32Go RAM.
And I have setup 4096MB per r.viewshed and directory=/tmp

I wonder if it's not better to use only one core and put 32GB memory on
the one calculation ? What are the best settings to improve calculation
speed ?.

Or is there any other faster approach to calculate the visibility ? (I
had been thinking with r.horizon to calculate the minimum visible
height. But unfortunatly the raster mode is not able to give horizon to
a specific target coordinates, unless to do it for each cell
independently...)

See below a part of output (the script is still running)

https://grasswiki.osgeo.org/wiki/Parallelizing_Scripts
GRASS_INFO_END(13720,1)
Estimated size active structure:
(key=64, ptr=8, total node=96 B)
Total= 2103840 B
Start sweeping.
Computing events...
Nodata value set to -nan
rows=21915, cols=21915, total = 480267225
In-memory memory usage is 48026897820 B (45802 MB), 			max mem
allowed=4294967296 B(4096MB)
*****  EXTERNAL_MEMORY MODE  *****
Intermediate files will not be deleted 		              in case of
abnormal termination.
Intermediate location: /media/hdd1/temp/
To save space delete these files manually!
Estimated size active structure:
(key=64, ptr=8, total node=96 B)
Total= 2103840 B
Start sweeping.
Computing events...
Memory manager registering memory in MM_IGNORE_MEMORY_EXCEEDED mode.
Memory manager registering memory in MM_IGNORE_MEMORY_EXCEEDED mode.
Memory manager registering memory in MM_IGNORE_MEMORY_EXCEEDED mode.
Memory manager registering memory in MM_IGNORE_MEMORY_EXCEEDED mode.
Sorting events...
Sorting events...
Sorting events...
Sorting events...
Sorting events...
Sorting events...
Sorting events...
Sorting events...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...
Initialize sweepline...
Determine visibility...

the /tmp directory content is :
16 files, for 369 Go

The maps are created by series of 8 (in 4 hours), but Grass needs
between 24h upto 36h between two sets of 8 maps...

Thank you for your help.
Frank


More information about the grass-user mailing list