[GRASS-dev] superfluous G_legal_filename etc calls

Markus Neteler neteler at osgeo.org
Tue Jan 27 16:45:37 EST 2009


I am running r.sun (6.4) on a massive grid and have some troubles with
the libgis libraries:
I backported the differences locally from 7 (use G_find_cell2()
instead of G_find_cell() but
the problems remain the same:

Note: I additionally locally added this debug output:
Index: lib/gis/find_file.c
===================================================================
--- lib/gis/find_file.c (revision 35659)
+++ lib/gis/find_file.c (working copy)
@@ -48,6 +48,7 @@
     /*
      * reject illegal names and mapsets
      */
+    G_debug(0, "G_legal_filename(%s)", pname);
     if (G_legal_filename(pname) == -1)
        return NULL;

A) Observation one:
 G_legal_filename (and underlying functions) are called
 a zillion times. IMHO one time per map would be sufficient:

# run:
r.sun -s --o pat_dtm_5m day=297 linkein=linke_turbidity10
numpartitions=64 horizonstep=30 horizon=pat5m_horangle
insol_time=pat_insol_time297 beam_rad=pat_beam_rad297
diff_rad=pat_diff_rad297 refl_rad=pat_refl_rad297
         glob_rad=pat_glob_rad297
Mode 2: integrated daily irradiation
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(MASK)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(MASK)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(MASK)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(MASK)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
D0/0: G_legal_filename(pat5m_horangle_02)
...   (so on for minutes)

B) Observation two:
 When running the same job (the r.sun call plus a few more lines
 are indeed in a shell script) in Grid Engine on a cluster, this
 happens:

...
Mode 2: integrated daily irradiation
   0%D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(pat_dtm_5m)
D0/0: G_legal_filename(MASK)
Illegal filename.  Cannot be '.' or 'NULL'      <- !!
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(linke_turbidity10)
D0/0: G_legal_filename(MASK)
Illegal filename.  Cannot be '.' or 'NULL'    <- !!
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(pat5m_horangle_00)
D0/0: G_legal_filename(MASK)
Illegal filename.  Cannot be '.' or 'NULL'
D0/0: G_legal_filename(pat5m_horangle_01)
D0/0: G_legal_filename(pat5m_horangle_01)
...

Interestingly "Illegal filename" appears (perhaps taking '.' -
current directory - into account?) I wasted quite some time
until I realized that the message apparently doesn't harm. :(

I suspect that r.sun (and maybe other modules) could be faster
if these superfluous calls aren't done.

Any ideas where they come from?
Markus


More information about the grass-dev mailing list