[GRASS-SVN] r49653 - grass/trunk/lib/gmath
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Dec 11 20:51:42 EST 2011
Author: hamish
Date: 2011-12-11 17:51:42 -0800 (Sun, 11 Dec 2011)
New Revision: 49653
Modified:
grass/trunk/lib/gmath/lu.c
Log:
OpenMP pragma useful for v.surf.rst, doxygenize
Modified: grass/trunk/lib/gmath/lu.c
===================================================================
--- grass/trunk/lib/gmath/lu.c 2011-12-12 01:37:38 UTC (rev 49652)
+++ grass/trunk/lib/gmath/lu.c 2011-12-12 01:51:42 UTC (rev 49653)
@@ -5,26 +5,43 @@
#define TINY 1.0e-20;
-
+/*!
+ * \brief LU decomposition
+ *
+ * \param a double **
+ * \param n int
+ * \param indx int *
+ * \param d double *
+ *
+ * \retrun 0 on singular matrix, 1 on success
+ */
int G_ludcmp(double **a, int n, int *indx, double *d)
{
int i, imax = 0, j, k;
double big, dum, sum, temp;
double *vv;
+ int is_singular = FALSE;
vv = G_alloc_vector(n);
*d = 1.0;
+/* this pragma works, but doesn't really help speed things up */
+/* #pragma omp parallel for private(i, j, big, temp) shared(n, a, vv, is_singular) */
for (i = 0; i < n; i++) {
big = 0.0;
for (j = 0; j < n; j++)
if ((temp = fabs(a[i][j])) > big)
big = temp;
- if (big == 0.0) {
- *d = 0.0;
- return 0; /* Singular matrix */
- }
+
+ if (big == 0.0)
+ is_singular = TRUE;
+
vv[i] = 1.0 / big;
}
+ if (is_singular) {
+ *d = 0.0;
+ return 0; /* Singular matrix */
+ }
+
for (j = 0; j < n; j++) {
for (i = 0; i < j; i++) {
sum = a[i][j];
@@ -32,7 +49,10 @@
sum -= a[i][k] * a[k][j];
a[i][j] = sum;
}
+
big = 0.0;
+/* not very efficent, but this pragma helps speed things up a bit */
+#pragma omp parallel for private(i, k, sum, dum) shared(j, n, a, vv, big, imax)
for (i = j; i < n; i++) {
sum = a[i][j];
for (k = 0; k < j; k++)
@@ -68,6 +88,17 @@
#undef TINY
+
+/*!
+ * \brief LU backward substitution
+ *
+ * \param a double **
+ * \param n int
+ * \param indx int *
+ * \param b double []
+ *
+ * \retrun void
+ */
void G_lubksb(double **a, int n, int *indx, double b[])
{
int i, ii, ip, j;
More information about the grass-commit
mailing list