<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E2%9A%A0%EF%B8%8FSprice</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E2%9A%A0%EF%B8%8FSprice"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/%E2%9A%A0%EF%B8%8FSprice"/>
	<updated>2026-05-25T20:27:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Support&amp;diff=14958</id>
		<title>Support</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Support&amp;diff=14958"/>
		<updated>2012-02-29T17:56:17Z</updated>

		<summary type="html">&lt;p&gt;⚠️Sprice: /* Commercial support: Freelancers who offer GRASS Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS Community  ==&lt;br /&gt;
&lt;br /&gt;
To reach the community, see [[GRASS Community]].&lt;br /&gt;
&lt;br /&gt;
== Commercial support: Freelancers who offer GRASS Support  ==&lt;br /&gt;
&lt;br /&gt;
You need a person with programming skills? Check out this list:&lt;br /&gt;
&lt;br /&gt;
* Seth Price &amp;lt;seth@pricepages.org&amp;gt; - low-level raster processing, code optimization, OpenCL&lt;br /&gt;
* you&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Commercial support: Companies and Institutions which offer GRASS Support  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Country&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Competences&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Site&lt;br /&gt;
|-&lt;br /&gt;
| Germany&lt;br /&gt;
| GDF&amp;amp;nbsp;Hannover&lt;br /&gt;
| Project management, Data analysis&lt;br /&gt;
| http://www.gdf-hannover.de&lt;br /&gt;
|-&lt;br /&gt;
| Italy&lt;br /&gt;
| Fondazione Edmund Mach&lt;br /&gt;
| Project management, Data analysis, Programming&lt;br /&gt;
| http://gis.cri.fmach.it&lt;br /&gt;
|-&lt;br /&gt;
| Germany&lt;br /&gt;
| Geoinformatik Büro Dassau&lt;br /&gt;
| Project management, Training, Data analysis, Programming&lt;br /&gt;
| http://www.gbd-consult.de&lt;br /&gt;
|-&lt;br /&gt;
| your country&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>⚠️Sprice</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=R.sun&amp;diff=14027</id>
		<title>R.sun</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=R.sun&amp;diff=14027"/>
		<updated>2011-09-06T06:32:40Z</updated>

		<summary type="html">&lt;p&gt;⚠️Sprice: /* OpenCL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Help page ==&lt;br /&gt;
&lt;br /&gt;
* {{cmd|r.sun}} manual page&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
The speed of r.sun is much higher if {{cmd|r.horizon}} is used first and the resulting maps are given as input to r.sun. Background: the horizon needs to be computed only one time before, not in every step within r.sun. See the example at the end of the {{cmd|r.sun}} help page.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
Create an artificial surface containing a Gaussian mound:&lt;br /&gt;
 {{AddonCmd|r.surf.volcano}} out=gauss method=gaussian kurtosis=1&lt;br /&gt;
&lt;br /&gt;
Overlay some 200m contours to show underlying topography:&lt;br /&gt;
 r.contour in=gauss out=gauss_200m_contours step=200&lt;br /&gt;
 d.vect gauss_200m_contours color=white&lt;br /&gt;
&lt;br /&gt;
Set map's color table to highlight detail:&lt;br /&gt;
 r.colors rad_test.day355.beam col=bcyr -e&lt;br /&gt;
 d.legend rad_test.day355.beam range=1300,1500&lt;br /&gt;
&lt;br /&gt;
=== Time step ===&lt;br /&gt;
&lt;br /&gt;
The following three images demonstrate the effects of using different time '''step''' parameters.&lt;br /&gt;
&lt;br /&gt;
 r.sun -s elevin=&amp;quot;gauss&amp;quot; glob_rad=&amp;quot;rad.global.30minT&amp;quot; day=180 step=0.5&lt;br /&gt;
&lt;br /&gt;
[[File:Gauss_30min.png|400px|thumb|center|Default 30 minute time step over a Gaussian mound.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r.sun -s elevin=&amp;quot;gauss&amp;quot; glob_rad=&amp;quot;rad.global.15minT&amp;quot; day=180 step=0.25&lt;br /&gt;
&lt;br /&gt;
[[File:Gauss_15min.png|400px|thumb|center|15 minute time step over a Gaussian mound.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r.sun -s elevin=&amp;quot;gauss&amp;quot; glob_rad=&amp;quot;rad.global.03minT&amp;quot; day=180 step=0.05&lt;br /&gt;
&lt;br /&gt;
[[File:Gauss_03min.png|400px|thumb|center|3 minute time step over a Gaussian mound.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The 3 minute time step takes roughly ten times as long to run as the 30 minute timestep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Seed maps ==&lt;br /&gt;
&lt;br /&gt;
Using seed maps can greatly (?, unclear) speed up processing. This is especially important if you will batch process e.g. for every day of the year.&lt;br /&gt;
&lt;br /&gt;
* aspin= and slopein= options: create slope and aspect maps with the {{cmd|r.slope.aspect}} module.&lt;br /&gt;
: ''Caution: currently buggy''. See {{trac|498}}.&lt;br /&gt;
: Estimated speedup:  ?%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* horizon= and horizonstep= options: Pre-calculate horizon shadows by creating a series of horizon rasters with the {{cmd|r.horizon}} module.&lt;br /&gt;
: Results not as smooth as without using this option?? See {{trac|498}}.&lt;br /&gt;
: Estimated speedup:  ?%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* latin= and longin= options: Pre-calculate latitudes and longitudes for each raster cell.&lt;br /&gt;
The following script will create a raster containing latitude as the raster value:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 # create latitude map (WGS84)&lt;br /&gt;
 g.region rast=elevation.dem&lt;br /&gt;
 r.mapcalc one=1&lt;br /&gt;
 r.out.xyz one | \&lt;br /&gt;
   cut -f1,2 -d'|' | \&lt;br /&gt;
   m.proj -oed --quiet | \&lt;br /&gt;
   sed -e 's/[ \t]/|/g' | \&lt;br /&gt;
   cut -f1-4 -d'|' | \&lt;br /&gt;
   r.in.xyz in=- z=4 out=elevation.lat&lt;br /&gt;
 g.remove one&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating the longitude map is exactly the same but use column 3 of the {{cmd|m.proj}} output instead of column 4:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 # create longitude map (WGS84)&lt;br /&gt;
 g.region rast=elevation.dem&lt;br /&gt;
 r.mapcalc one=1&lt;br /&gt;
 r.out.xyz one | \&lt;br /&gt;
   cut -f1,2 -d'|' | \&lt;br /&gt;
   m.proj -oed --quiet | \&lt;br /&gt;
   sed -e 's/[ \t]/|/g' | \&lt;br /&gt;
   cut -f1-4 -d'|' | \&lt;br /&gt;
   r.in.xyz in=- z=3 out=elevation.lon&lt;br /&gt;
 g.remove one&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Estimated speedup:  1.3% (in one test).&lt;br /&gt;
: See {{trac|498}}.&lt;br /&gt;
&lt;br /&gt;
The above assumes that your projection's ellipsoid is WGS84. If it isn't,  use other proj_out= terms with m.proj as required instead of the -o flag.&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
It can be tedious to set up and run a long series of r.sun simulations for every day of the year. To automate this we can write a small shell script loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 for DAY in `seq 1 365` ; do&lt;br /&gt;
    DAY_STR=`echo $DAY | awk '{printf(&amp;quot;%.03d&amp;quot;, $1)}'`&lt;br /&gt;
    echo &amp;quot;Processing day $DAY_STR at `date` ...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    LINKE=&amp;quot;`g.linke_by_day.py $DAY`&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    r.sun -s elevin=elevation.dem day=$DAY lin=$LINKE step=0.05 \&lt;br /&gt;
        beam_rad=rad_beam.$DAY_STR diff_rad=rad_diffuse.$DAY_STR \&lt;br /&gt;
        refl_rad=rad_reflected.$DAY_STR glob_rad=rad_global.$DAY_STR \&lt;br /&gt;
        insol_time=rad_insol_time.$DAY_STR&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://trac.osgeo.org/grass/browser/grass-addons/raster/r.sun.tools g.linke_by_day.py] is a small program which will return the Linke coefficient for any day of the year, interpolated from monthly values. You need to edit the script to fill in values appropriate for your study area.&lt;br /&gt;
&lt;br /&gt;
* If you have a multi-core CPU and you'd like to speed things up, here is a small Bourne shell script implementing a poor-man's multi-processing trick:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ### r.sun mode 2 loop ###&lt;br /&gt;
 BEGIN=1&lt;br /&gt;
 END=365&lt;br /&gt;
 STEP=1&lt;br /&gt;
 NUM_CORES=4&lt;br /&gt;
&lt;br /&gt;
 for DAY in `seq $BEGIN $STEP $END` ; do&lt;br /&gt;
    DAY_STR=`echo $DAY | awk '{printf(&amp;quot;%.03d&amp;quot;, $1)}'`&lt;br /&gt;
    echo &amp;quot;Processing day $DAY_STR at `date` ...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    LINKE=&amp;quot;`g.linke_by_day.py $DAY`&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    CMD=&amp;quot;r.sun -s elevin=elevation.dem day=$DAY lin=$LINKE step=0.05 \&lt;br /&gt;
         beam_rad=rad_beam.$DAY_STR diff_rad=rad_diffuse.$DAY_STR \&lt;br /&gt;
         refl_rad=rad_reflected.$DAY_STR glob_rad=rad_global.$DAY_STR \&lt;br /&gt;
         insol_time=rad_insol_time.$DAY_STR --quiet&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    # poor man's multi-threading for a multi-core CPU&lt;br /&gt;
    MODULUS=`echo &amp;quot;$DAY $STEP $NUM_CORES&amp;quot; | awk '{print $1 % ($2 * $3)}'`&lt;br /&gt;
    if [ &amp;quot;$MODULUS&amp;quot; = &amp;quot;$STEP&amp;quot; ] ; then&lt;br /&gt;
       # stall to let the background jobs finish&lt;br /&gt;
       $CMD&lt;br /&gt;
       sleep 2&lt;br /&gt;
       #while [ `pgrep -c r.sun` -ne 0 ] ; do&lt;br /&gt;
       #   sleep 5&lt;br /&gt;
       #done&lt;br /&gt;
    else&lt;br /&gt;
       $CMD &amp;amp;&lt;br /&gt;
    fi&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* For a r.sun Mode 1 loop, see the [[OpenMP#Alternatives|OpenMP]] page.&lt;br /&gt;
&lt;br /&gt;
== Overview of monthly maps ==&lt;br /&gt;
&lt;br /&gt;
Given there are mean monthly global irradiation maps calculated, an overview map of all 12 maps can be drawn along with their legends (see also [http://grass.osgeo.org/wiki/Time_series#Common_legends_for_many_raster_maps Common legends for many raster maps]). The script assumes a common naming convention for all 12 monthly average maps (i.e. global_rad_avg.jan, global_rad_avg.feb, global_rad_avg.mar, etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bash/sh&lt;br /&gt;
 # script to draw monthly (mean) global solar irradiation maps in a 3x4 matrix&lt;br /&gt;
 &lt;br /&gt;
 # set wide aspect ratio (16:9, e.g. 1366 width x 768 height)&lt;br /&gt;
 d.monsize setm=x0 setw=1366 seth=768&lt;br /&gt;
 &lt;br /&gt;
 # split in 12 frames&lt;br /&gt;
 d.split.frame frames=12&lt;br /&gt;
 &lt;br /&gt;
 # preferred font?&lt;br /&gt;
 d.font DroidSans&lt;br /&gt;
&lt;br /&gt;
 for FRAME in &amp;quot;uno dec December&amp;quot; &amp;quot;dos jan January&amp;quot; &amp;quot;tres feb February&amp;quot; \&lt;br /&gt;
 &amp;quot;cuatro mar March&amp;quot; &amp;quot;cinco apr April&amp;quot; &amp;quot;seis may May&amp;quot; \&lt;br /&gt;
 &amp;quot;siete jun June&amp;quot; &amp;quot;ocho jul July&amp;quot; &amp;quot;nueve aug August&amp;quot; \&lt;br /&gt;
 &amp;quot;diez sep September&amp;quot; &amp;quot;once oct October&amp;quot; &amp;quot;doce nov November&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 do&lt;br /&gt;
 &lt;br /&gt;
    # parse &amp;quot;${FRAMES_STR}&amp;quot; and set positional parameters&lt;br /&gt;
    set -- $FRAME ; echo $1 $2 $3&lt;br /&gt;
    &lt;br /&gt;
    # select FRAME&lt;br /&gt;
    d.frame -s &amp;quot;${1}&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    # draw the map&lt;br /&gt;
    d.rast global_rad_avg.&amp;quot;${2}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # draw label on the left and vertically&lt;br /&gt;
    d.text text=&amp;quot;${3}&amp;quot; size=10 color=50:50:50 at=9,25 rotation=90&lt;br /&gt;
 &lt;br /&gt;
    # draw legend&lt;br /&gt;
    d.legend global_rad_avg.&amp;quot;${2}&amp;quot; -s at=10,90,89,92&lt;br /&gt;
 &lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Mean_monthly_global_rad_maps_over_a_study_area_in_central_Greece.png|400px|thumb|center|Mean monthly global irradiation maps (n=38.918, s=38.531, w=21.793, e=22.436)]]&lt;br /&gt;
Same image also [http://grass.osgeo.org/grass-wiki/images/Mean_monthly_global_rad_maps_over_a_study_area_in_central_Greece_700px_height.jpg here (a bit of higher resolution)]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing trials documented in [https://trac.osgeo.org/grass/ticket/498 trac ticket #498]&lt;br /&gt;
&lt;br /&gt;
=== OpenCL ===&lt;br /&gt;
As part of the Google Summer of Code 2010 an {{wikipedia|OpenCL}} version has been written that allows ''r.sun'' to run on {{wikipedia|GPU}}s. This provides a massive speedup in processing time. The merging of this code into GRASS 7's r.sun is forthcoming (HB).&lt;br /&gt;
* To get your hands on the code now see http://github.com/mailseth/OpenCL-integration-for-GRASS---GDAL (functional prototype now available)&lt;br /&gt;
* To use OpenCL GPU functionality you'll want a graphics card like the ATI HD5770 or nVidia GTX260 or GTX460, or newer.&lt;br /&gt;
* OpenCL also allows for running on multi-core (or multi-processor) CPUs, for systems without GPUs. You can run OpenCL via multicore *or* GPU, but not both on the same job at the same time.&lt;br /&gt;
* Seth wrote: ''The OpenCL version of r.sun runs over 20x faster than the original version on my machine (2.26 GHz Mac Pro vs. GeForce GTX 285). However, it is hampered by the low memory on your GPU, so you may need to partition your raster.''&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
&lt;br /&gt;
* Merge in OpenCL code&lt;br /&gt;
* Add support for [[OpenMP]] parallelization (if OpenCL doesn't make that redundant)&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Parallelization]]&lt;/div&gt;</summary>
		<author><name>⚠️Sprice</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=R.sun&amp;diff=11343</id>
		<title>R.sun</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=R.sun&amp;diff=11343"/>
		<updated>2010-08-27T16:13:50Z</updated>

		<summary type="html">&lt;p&gt;⚠️Sprice: /* Development */ link to OpenCL development&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Help page ==&lt;br /&gt;
&lt;br /&gt;
* {{cmd|r.sun}} manual page&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
The speed of r.sun is much higher if {{cmd|r.horizon}} is used first and the resulting maps are given as input to r.sun. Background: the horizon needs to be computed only one time before, not in every step within r.sun. See the example at the end of the {{cmd|r.sun}} help page.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
Create an artificial surface containing a Gaussian mound:&lt;br /&gt;
 {{AddonCmd|r.surf.volcano}} out=gauss method=gaussian kurtosis=1&lt;br /&gt;
&lt;br /&gt;
Overlay some 200m contours to show underlying topography:&lt;br /&gt;
 r.contour in=gauss out=gauss_200m_contours step=200&lt;br /&gt;
 d.vect gauss_200m_contours color=white&lt;br /&gt;
&lt;br /&gt;
Set map's color table to highlight detail:&lt;br /&gt;
 r.colors rad_test.day355.beam col=bcyr -e&lt;br /&gt;
 d.legend rad_test.day355.beam range=1300,1500&lt;br /&gt;
&lt;br /&gt;
=== Time step ===&lt;br /&gt;
&lt;br /&gt;
The following three images demonstrate the effects of using different time '''step''' parameters.&lt;br /&gt;
&lt;br /&gt;
 r.sun -s elevin=&amp;quot;gauss&amp;quot; glob_rad=&amp;quot;rad.global.30minT&amp;quot; day=180 step=0.5&lt;br /&gt;
&lt;br /&gt;
[[File:Gauss_30min.png|400px|thumb|center|Default 30 minute time step over a Gaussian mound.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r.sun -s elevin=&amp;quot;gauss&amp;quot; glob_rad=&amp;quot;rad.global.15minT&amp;quot; day=180 step=0.25&lt;br /&gt;
&lt;br /&gt;
[[File:Gauss_15min.png|400px|thumb|center|15 minute time step over a Gaussian mound.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 r.sun -s elevin=&amp;quot;gauss&amp;quot; glob_rad=&amp;quot;rad.global.03minT&amp;quot; day=180 step=0.05&lt;br /&gt;
&lt;br /&gt;
[[File:Gauss_03min.png|400px|thumb|center|3 minute time step over a Gaussian mound.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The 3 minute time step takes roughly ten times as long to run as the 30 minute timestep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Seed maps ==&lt;br /&gt;
&lt;br /&gt;
Using seed maps can greatly (?, unclear) speed up processing. This is especially important if you will batch process e.g. for every day of the year.&lt;br /&gt;
&lt;br /&gt;
* aspin= and slopein= options: create slope and aspect maps with the {{cmd|r.slope.aspect}} module.&lt;br /&gt;
: ''Caution: currently buggy''. See {{trac|498}}.&lt;br /&gt;
: Estimated speedup:  ?%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* horizon= and horizonstep= options: Pre-calculate horizon shadows by creating a series of horizon rasters with the {{cmd|r.horizon}} module.&lt;br /&gt;
: Results not as smooth as without using this option?? See {{trac|498}}.&lt;br /&gt;
: Estimated speedup:  ?%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* latin= and longin= options: Pre-calculate latitudes and longitudes for each raster cell.&lt;br /&gt;
The following script will create a raster containing latitude as the raster value:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 # create latitude map (WGS84)&lt;br /&gt;
 g.region rast=elevation.dem&lt;br /&gt;
 r.mapcalc one=1&lt;br /&gt;
 r.out.xyz one | \&lt;br /&gt;
   cut -f1,2 -d'|' | \&lt;br /&gt;
   m.proj -oed --quiet | \&lt;br /&gt;
   sed -e 's/[ \t]/|/g' | \&lt;br /&gt;
   cut -f1-4 -d'|' | \&lt;br /&gt;
   r.in.xyz in=- z=4 out=elevation.lat&lt;br /&gt;
 g.remove one&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating the longitude map is exactly the same but use column 3 of the {{cmd|m.proj}} output instead of column 4:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 # create longitude map (WGS84)&lt;br /&gt;
 g.region rast=elevation.dem&lt;br /&gt;
 r.mapcalc one=1&lt;br /&gt;
 r.out.xyz one | \&lt;br /&gt;
   cut -f1,2 -d'|' | \&lt;br /&gt;
   m.proj -oed --quiet | \&lt;br /&gt;
   sed -e 's/[ \t]/|/g' | \&lt;br /&gt;
   cut -f1-4 -d'|' | \&lt;br /&gt;
   r.in.xyz in=- z=3 out=elevation.lon&lt;br /&gt;
 g.remove one&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Estimated speedup:  1.3% (in one test).&lt;br /&gt;
: See {{trac|498}}.&lt;br /&gt;
&lt;br /&gt;
The above assumes that your projection's ellipsoid is WGS84. If it isn't,  use other proj_out= terms with m.proj as required instead of the -o flag.&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
It can be tedious to set up and run a long series of r.sun simulations for every day of the year. To automate this we can write a small shell script loop:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 for DAY in `seq 1 365` ; do&lt;br /&gt;
    DAY_STR=`echo $DAY | awk '{printf(&amp;quot;%.03d&amp;quot;, $1)}'`&lt;br /&gt;
    echo &amp;quot;Processing day $DAY_STR at `date` ...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    LINKE=&amp;quot;`g.linke_by_day.py $DAY`&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    r.sun -s elevin=elevation.dem day=$DAY lin=$LINKE step=0.05 \&lt;br /&gt;
        beam_rad=rad_beam.$DAY_STR diff_rad=rad_diffuse.$DAY_STR \&lt;br /&gt;
        refl_rad=rad_reflected.$DAY_STR glob_rad=rad_global.$DAY_STR \&lt;br /&gt;
        insol_time=rad_insol_time.$DAY_STR&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://trac.osgeo.org/grass/browser/grass-addons/raster/r.sun.tools g.linke_by_day.py] is a small program which will return the Linke coefficient for any day of the year, interpolated from monthly values. You need to edit the script to fill in values appropriate for your study area.&lt;br /&gt;
&lt;br /&gt;
* If you have a multi-core CPU and you'd like to speed things up, here is a small Bourne shell script implementing a poor-man's multi-processing trick:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ### r.sun mode 2 loop ###&lt;br /&gt;
 BEGIN=1&lt;br /&gt;
 END=365&lt;br /&gt;
 STEP=1&lt;br /&gt;
 NUM_CORES=4&lt;br /&gt;
&lt;br /&gt;
 for DAY in `seq $BEGIN $STEP $END` ; do&lt;br /&gt;
    DAY_STR=`echo $DAY | awk '{printf(&amp;quot;%.03d&amp;quot;, $1)}'`&lt;br /&gt;
    echo &amp;quot;Processing day $DAY_STR at `date` ...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    LINKE=&amp;quot;`g.linke_by_day.py $DAY`&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    CMD=&amp;quot;r.sun -s elevin=elevation.dem day=$DAY lin=$LINKE step=0.05 \&lt;br /&gt;
         beam_rad=rad_beam.$DAY_STR diff_rad=rad_diffuse.$DAY_STR \&lt;br /&gt;
         refl_rad=rad_reflected.$DAY_STR glob_rad=rad_global.$DAY_STR \&lt;br /&gt;
         insol_time=rad_insol_time.$DAY_STR --quiet&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    # poor man's multi-threading for a multi-core CPU&lt;br /&gt;
    MODULUS=`echo &amp;quot;$DAY $STEP $NUM_CORES&amp;quot; | awk '{print $1 % ($2 * $3)}'`&lt;br /&gt;
    if [ &amp;quot;$MODULUS&amp;quot; = &amp;quot;$STEP&amp;quot; ] ; then&lt;br /&gt;
       # stall to let the background jobs finish&lt;br /&gt;
       $CMD&lt;br /&gt;
       sleep 2&lt;br /&gt;
       #while [ `pgrep -c r.sun` -ne 0 ] ; do&lt;br /&gt;
       #   sleep 5&lt;br /&gt;
       #done&lt;br /&gt;
    else&lt;br /&gt;
       $CMD &amp;amp;&lt;br /&gt;
    fi&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* For a r.sun Mode 1 loop, see the [[OpenMP#Alternatives|OpenMP]] page.&lt;br /&gt;
&lt;br /&gt;
== Overview of monthly maps ==&lt;br /&gt;
&lt;br /&gt;
Given there are mean monthly global irradiation maps calculated, an overview map of all 12 maps can be drawn along with their legends (see also [http://grass.osgeo.org/wiki/Time_series#Common_legends_for_many_raster_maps Common legends for many raster maps]). The script assumes a common naming convention for all 12 monthly average maps (i.e. global_rad_avg.jan, global_rad_avg.feb, global_rad_avg.mar, etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bash/sh&lt;br /&gt;
 # script to draw monthly (mean) global solar irradiation maps in a 3x4 matrix&lt;br /&gt;
 &lt;br /&gt;
 # set wide aspect ratio (16:9, e.g. 1366 width x 768 height)&lt;br /&gt;
 d.monsize setm=x0 setw=1366 seth=768&lt;br /&gt;
 &lt;br /&gt;
 # split in 12 frames&lt;br /&gt;
 d.split.frame frames=12&lt;br /&gt;
 &lt;br /&gt;
 # preferred font?&lt;br /&gt;
 d.font DroidSans&lt;br /&gt;
&lt;br /&gt;
 for FRAME in &amp;quot;uno dec December&amp;quot; &amp;quot;dos jan January&amp;quot; &amp;quot;tres feb February&amp;quot; \&lt;br /&gt;
 &amp;quot;cuatro mar March&amp;quot; &amp;quot;cinco apr April&amp;quot; &amp;quot;seis may May&amp;quot; \&lt;br /&gt;
 &amp;quot;siete jun June&amp;quot; &amp;quot;ocho jul July&amp;quot; &amp;quot;nueve aug August&amp;quot; \&lt;br /&gt;
 &amp;quot;diez sep September&amp;quot; &amp;quot;once oct October&amp;quot; &amp;quot;doce nov November&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 do&lt;br /&gt;
 &lt;br /&gt;
    # parse &amp;quot;${FRAMES_STR}&amp;quot; and set positional parameters&lt;br /&gt;
    set -- $FRAME ; echo $1 $2 $3&lt;br /&gt;
    &lt;br /&gt;
    # select FRAME&lt;br /&gt;
    d.frame -s &amp;quot;${1}&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    # draw the map&lt;br /&gt;
    d.rast global_rad_avg.&amp;quot;${2}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # draw label on the left and vertically&lt;br /&gt;
    d.text text=&amp;quot;${3}&amp;quot; size=10 color=50:50:50 at=9,25 rotation=90&lt;br /&gt;
 &lt;br /&gt;
    # draw legend&lt;br /&gt;
    d.legend global_rad_avg.&amp;quot;${2}&amp;quot; -s at=10,90,89,92&lt;br /&gt;
 &lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Mean_monthly_global_rad_maps_over_a_study_area_in_central_Greece.png|400px|thumb|center|Mean monthly global irradiation maps (n=38.918, s=38.531, w=21.793, e=22.436)]]&lt;br /&gt;
Same image also [http://grass.osgeo.org/grass-wiki/images/Mean_monthly_global_rad_maps_over_a_study_area_in_central_Greece_700px_height.jpg here (a bit of higher resolution)]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing trials documented in [https://trac.osgeo.org/grass/ticket/498 trac ticket #498]&lt;br /&gt;
* Is being written in OpenCL to be run on GPUs for a massive speedup. [http://github.com/mailseth/OpenCL-integration-for-GRASS---GDAL]&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
&lt;br /&gt;
* Add support for [[OpenMP]] parallelization&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Parallelization]]&lt;/div&gt;</summary>
		<author><name>⚠️Sprice</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GPU&amp;diff=10679</id>
		<title>GPU</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GPU&amp;diff=10679"/>
		<updated>2010-04-02T17:06:00Z</updated>

		<summary type="html">&lt;p&gt;⚠️Sprice: more float usage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Comments from the mailing list concerning GRASS and GPU parallelization:&lt;br /&gt;
&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2008-March/thread.html#36083 Discussion] - GPU Parallelization (follow thread)&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2009-September/thread.html#46072 Discussion] - OpenCL Parallelization (follow thread)&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2008-March/036109.html Comment]&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-user/2009-December/053476.html Comment]&lt;br /&gt;
&lt;br /&gt;
* As I understand it, CUDA is 100% dependent on the closed-source binary driver from nVidia and works on their video cards alone. Which is fine for today for people with nVidia hardware using their binary video card driver. If nVidia decides in a couple of years to stop supporting CUDA, your old card, your specific OS or distro, your OS or distro version+cpu type, or if they go out of business or are bought/sold to another company who is not interested, any code based on it becomes useless. For this reason code written for an open platform such as OpenCL, even if less advanced, seems to have a brighter long-term future. -- ''HB''&lt;br /&gt;
&lt;br /&gt;
* Support for double precision floating point values must be retained for calculations which deal with positional data. For elevation and radiometric data floating point precision may be enough.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* LINUX Magazine March 10th, 2010&lt;br /&gt;
: &amp;quot;''GP-GPUs: OpenCL Is Ready For The Heavy Lifting''&amp;quot;&lt;br /&gt;
: http://www.linux-mag.com/id/7725&lt;br /&gt;
&lt;br /&gt;
* http://www.hpcwire.com/offthewire/Khronos-Demonstrates-OpenCL-Momentum-at-SC09-70243307.html&lt;br /&gt;
&lt;br /&gt;
* See the &amp;quot;'''Parallelization'''&amp;quot; category listing at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
* OpenCL podcasts: http://www.macresearch.org/opencl&lt;br /&gt;
&lt;br /&gt;
== Interesting Hardware ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.nvidia.com/object/product_geforce_gtx_480_us.html NVIDIA GeForce 480], packed with 3 billion transistors, 480 visual processing cores, 16 geometry units and 4 raster units. Multi-card SLI provides additional 90% performance boost.&lt;br /&gt;
&lt;br /&gt;
== Modules of interest to be parallelized ==&lt;br /&gt;
&lt;br /&gt;
The target version will be GRASS 7 (alias SVN trunk).&lt;br /&gt;
&lt;br /&gt;
* {{cmd|v.in.ogr}} or &amp;lt;u&amp;gt;underlying vector library functions to build topology and spatial index&amp;lt;/u&amp;gt;&lt;br /&gt;
* {{cmd|v.surf.rst}}&lt;br /&gt;
* {{cmd|v.vol.rst}}&lt;br /&gt;
** (''probably best to focus on the RST library first'')&lt;br /&gt;
* {{AddonCmd|r.viewshed}}&lt;br /&gt;
* {{cmd|r.sun}}&lt;br /&gt;
* {{cmd|r.proj}}&lt;br /&gt;
* {{cmd|v.proj}}&lt;br /&gt;
* {{cmd|v.net}}.* ???&lt;br /&gt;
* raster library&lt;br /&gt;
* ...&lt;br /&gt;
* &amp;lt;strike&amp;gt;{{cmd|r.mapcalc}}&amp;lt;/strike&amp;gt; (already has pthreads support; probably I/O-bound)&lt;br /&gt;
* &amp;lt;strike&amp;gt;{{cmd|r.los}}&amp;lt;/strike&amp;gt; (to be replaced by r.viewshed after last few bugs are fixed)&lt;br /&gt;
* &amp;lt;strike&amp;gt;{{cmd|i.rectify}}&amp;lt;/strike&amp;gt; (internal code to be replaced by GDALwarp API)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Parallelization]]&lt;/div&gt;</summary>
		<author><name>⚠️Sprice</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GPU&amp;diff=10678</id>
		<title>GPU</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GPU&amp;diff=10678"/>
		<updated>2010-04-02T17:04:31Z</updated>

		<summary type="html">&lt;p&gt;⚠️Sprice: /* Further reading */ added podcasts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Comments from the mailing list concerning GRASS and GPU parallelization:&lt;br /&gt;
&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2008-March/thread.html#36083 Discussion] - GPU Parallelization (follow thread)&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2009-September/thread.html#46072 Discussion] - OpenCL Parallelization (follow thread)&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-dev/2008-March/036109.html Comment]&lt;br /&gt;
* [http://lists.osgeo.org/pipermail/grass-user/2009-December/053476.html Comment]&lt;br /&gt;
&lt;br /&gt;
* As I understand it, CUDA is 100% dependent on the closed-source binary driver from nVidia and works on their video cards alone. Which is fine for today for people with nVidia hardware using their binary video card driver. If nVidia decides in a couple of years to stop supporting CUDA, your old card, your specific OS or distro, your OS or distro version+cpu type, or if they go out of business or are bought/sold to another company who is not interested, any code based on it becomes useless. For this reason code written for an open platform such as OpenCL, even if less advanced, seems to have a brighter long-term future. -- ''HB''&lt;br /&gt;
&lt;br /&gt;
* Support for double precision floating point values must be retained for calculations which deal with positional data. For elevation data floating point precision may be enough.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* LINUX Magazine March 10th, 2010&lt;br /&gt;
: &amp;quot;''GP-GPUs: OpenCL Is Ready For The Heavy Lifting''&amp;quot;&lt;br /&gt;
: http://www.linux-mag.com/id/7725&lt;br /&gt;
&lt;br /&gt;
* http://www.hpcwire.com/offthewire/Khronos-Demonstrates-OpenCL-Momentum-at-SC09-70243307.html&lt;br /&gt;
&lt;br /&gt;
* See the &amp;quot;'''Parallelization'''&amp;quot; category listing at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
* OpenCL podcasts: http://www.macresearch.org/opencl&lt;br /&gt;
&lt;br /&gt;
== Interesting Hardware ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.nvidia.com/object/product_geforce_gtx_480_us.html NVIDIA GeForce 480], packed with 3 billion transistors, 480 visual processing cores, 16 geometry units and 4 raster units. Multi-card SLI provides additional 90% performance boost.&lt;br /&gt;
&lt;br /&gt;
== Modules of interest to be parallelized ==&lt;br /&gt;
&lt;br /&gt;
The target version will be GRASS 7 (alias SVN trunk).&lt;br /&gt;
&lt;br /&gt;
* {{cmd|v.in.ogr}} or &amp;lt;u&amp;gt;underlying vector library functions to build topology and spatial index&amp;lt;/u&amp;gt;&lt;br /&gt;
* {{cmd|v.surf.rst}}&lt;br /&gt;
* {{cmd|v.vol.rst}}&lt;br /&gt;
** (''probably best to focus on the RST library first'')&lt;br /&gt;
* {{AddonCmd|r.viewshed}}&lt;br /&gt;
* {{cmd|r.sun}}&lt;br /&gt;
* {{cmd|r.proj}}&lt;br /&gt;
* {{cmd|v.proj}}&lt;br /&gt;
* {{cmd|v.net}}.* ???&lt;br /&gt;
* raster library&lt;br /&gt;
* ...&lt;br /&gt;
* &amp;lt;strike&amp;gt;{{cmd|r.mapcalc}}&amp;lt;/strike&amp;gt; (already has pthreads support; probably I/O-bound)&lt;br /&gt;
* &amp;lt;strike&amp;gt;{{cmd|r.los}}&amp;lt;/strike&amp;gt; (to be replaced by r.viewshed after last few bugs are fixed)&lt;br /&gt;
* &amp;lt;strike&amp;gt;{{cmd|i.rectify}}&amp;lt;/strike&amp;gt; (internal code to be replaced by GDALwarp API)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Parallelization]]&lt;/div&gt;</summary>
		<author><name>⚠️Sprice</name></author>
	</entry>
</feed>