[GRASS5] r.sun bug

Paul Kelly paul-grass at stjohnspoint.co.uk
Fri Feb 21 07:21:53 EST 2003


Hello
The latest version of r.sun contains the inline keyword in front of 3
function definitions in main.c . But as far as I can make out this is a
C++ keyword and doesn't work in C. It won't compile on IRIX anyway. I had
a look at this and thought seeing the aim is probably to make it run
faster it could use macros instead.

So the following patch seems to work and it still should run quickly. At
least it compiles again anyway. But I can't really test it. If there are
no objections I will add it to CVS in a day or two then.

Paul

Index: local_proto.h
===================================================================
RCS file: /grassrepository/grass/src/raster/r.sun/local_proto.h,v
retrieving revision 1.2
diff -u -r1.2 local_proto.h
--- local_proto.h	19 Feb 2003 12:36:51 -0000	1.2
+++ local_proto.h	21 Feb 2003 12:11:19 -0000
@@ -1,8 +1,6 @@
 /* main.c */
 int INPUT(void);
 int OUTGR(void);
-double amax1(double, double);
-double amin1(double, double);
 int min(int, int);
 int max(int, int);
 void com_par(void);
Index: main.c
===================================================================
RCS file: /grassrepository/grass/src/raster/r.sun/main.c,v
retrieving revision 1.8
diff -u -r1.8 main.c
--- main.c	19 Feb 2003 12:36:51 -0000	1.8
+++ main.c	21 Feb 2003 12:11:19 -0000
@@ -44,6 +44,10 @@
 #define DSKY	  1.0
 #define DIST     "1.0"

+#define AMAX1(arg1, arg2) ((arg1) >= (arg2) ? (arg1) : (arg2))
+#define AMIN1(arg1, arg2) ((arg1) <= (arg2) ? (arg1) : (arg2))
+#define DISTANCE2(x00, y00) ((xx0 - x00)*(xx0 - x00) + (yy0 - y00)*(yy0 - y00))
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
@@ -83,8 +87,6 @@

 int INPUT(void);
 int OUTGR(void);
-double amax1(double, double);
-double amin1(double, double);
 int min(int, int);
 int max(int, int);
 void com_par(void);
@@ -99,7 +101,6 @@
 void line_x(int, int);
 void line_y(int, int);
 void cube(int, int);
-double distance2(double, double);
 void (*func)(int, int);

 void calculate(void);
@@ -133,36 +134,6 @@
 double cbh, cdh;
 double TOLER;

-inline double amax1(arg1,arg2)
- double arg1;
- double arg2;
-{
- double res;
- if (arg1>=arg2) {
-   res = arg1;
- }
- else  {
-   res = arg2;
- }
- return res;
-}
-
-
-inline double amin1(arg1,arg2)
- double arg1;
- double arg2;
-{
- double res;
- if (arg1<=arg2) {
-   res = arg1;
- }
- else  {
-   res = arg2;
- }
- return res;
-}
-
-
 int
 main(int argc, char *argv[])
 {
@@ -619,7 +590,7 @@
   {
 	  for (j = 0; j < n; j++)
 	  {
-		zmax = amax1(zmax,z[i][j]);
+		zmax = AMAX1(zmax,z[i][j]);
 		if ( o[i][j] != 0. ) {
 		   if( o[i][j] < 90. )
 			   o[i][j] = 90. - o[i][j];
@@ -921,10 +892,10 @@
 		  ypom = lum_Ly * lum_Ly;
 		  pom = sqrt(xpom + ypom);

-		sr_min = amin1(sr_min,sunrise_time);
-		sr_max = amax1(sr_max,sunrise_time);
-		ss_min = amin1(ss_min,sunset_time);
-                ss_max = amax1(ss_max,sunset_time);
+		sr_min = AMIN1(sr_min,sunrise_time);
+		sr_max = AMAX1(sr_max,sunrise_time);
+		ss_min = AMIN1(ss_min,sunset_time);
+                ss_max = AMAX1(ss_max,sunset_time);

 		  if (fabs(pom) > EPS) {
 			A0 = lum_Ly / pom;
@@ -1207,7 +1178,7 @@
                 }

                 if (dist > 1.0)
-                zp = amax1(c1,c2);
+                zp = AMAX1(c1,c2);
         }
         else
                   func = NULL;
@@ -1234,7 +1205,7 @@
 		}

 		if (dist > 1.0)
-		zp = amax1(c1,c2);
+		zp = AMAX1(c1,c2);

         }
         else
@@ -1242,18 +1213,6 @@

 }

-inline double distance2(x00, y00)
-double x00, y00;
-{
-        double dx, dy;
-
-        dx = xx0 - x00; dx *= dx;
-        dy = yy0 - y00; dy *= dy;
-
-/*        return (sqrt(dx + dy));*/
-        return (dx + dy);
-}
-
 void cube(jmin, imin)
 int jmin, imin;
 {
@@ -1268,14 +1227,14 @@
         y1 = (double)jmin * stepy;
 		y2 = y1+stepy;

-        v[0] = distance2(x1, y1);
+        v[0] = DISTANCE2(x1, y1);

 		if(v[0]<vmin)
 			{
 			ig=0;
 			vmin=v[0];
 			}
-	v[1] = distance2(x2, y1);
+	v[1] = DISTANCE2(x2, y1);

 		if(v[1]<vmin)
 			{
@@ -1283,14 +1242,14 @@
 			vmin=v[1];
 			}

-        v[2] = distance2(x2, y2);
+        v[2] = DISTANCE2(x2, y2);
 		if(v[2]<vmin)
 			{
 			ig=2;
 			vmin=v[2];
 			}

-	v[3] = distance2(x1, y2);
+	v[3] = DISTANCE2(x1, y2);
 		if(v[3]<vmin)
 			{
 			ig=3;
@@ -1314,7 +1273,7 @@
 	if (dist > 1.0) {
 		for (i = 0; i < 4; i++) {
 		if (c[i] != UNDEFZ) {
-			cmax = amax1(cmax,c[i]);
+			cmax = AMAX1(cmax,c[i]);
 			zp = cmax;
 			}
 			else
@@ -1454,18 +1413,18 @@
 				 slope = s[j][i] * DEG;
 			if(linkein!=NULL) {
 				linke = li[j][i];
-				li_max = amax1(li_max,linke);
-				li_min = amin1(li_min,linke);
+				li_max = AMAX1(li_max,linke);
+				li_min = AMIN1(li_min,linke);
 				}
 			if (albedo != NULL) {
 				alb = a[j][i];
-				al_max = amax1(al_max,alb);
-				al_min = amin1(al_min,alb);
+				al_max = AMAX1(al_max,alb);
+				al_min = AMIN1(al_min,alb);
 				}
                         if (latin != NULL) {
 			latitude = la[j][i];
-            la_max = amax1(la_max,latitude);
-            la_min = amin1(la_min,latitude);
+            la_max = AMAX1(la_max,latitude);
+            la_min = AMIN1(la_min,latitude);
             latitude = - latitude * DEG;
 			}
 	if (latin == NULL && lt == NULL) {
@@ -1498,14 +1457,14 @@
 	                exit(0);
 	        }

-                        la_max = amax1(la_max,latitude);
-                        la_min = amin1(la_min,latitude);
+                        la_max = AMAX1(la_max,latitude);
+                        la_min = AMIN1(la_min,latitude);
                         latitude = - latitude * DEG;
 	     } else
 		{ /* ll projection */
 			latitude = yp;
-		        la_max = amax1(la_max,latitude);
-                        la_min = amin1(la_min,latitude);
+                        la_max = AMAX1(la_max,latitude);
+                        la_min = AMIN1(la_min,latitude);
                         latitude = - latitude * DEG;
 		}
 	}




More information about the grass-dev mailing list