From 5c06e1e32283901ab4ddbf68a057a8f8bc402ce8 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Wed, 21 Jun 2017 17:13:17 +0200
Subject: [PATCH] Remove 1D and 2 laplacian generator to make a single one, and
 add the alpha/beta parameters

---
 drivers/laplacian.c | 126 ++++++++++--------
 drivers/laplacian.h |  22 +---
 z_spm_laplacian.c   | 307 +++++++++-----------------------------------
 3 files changed, 140 insertions(+), 315 deletions(-)

diff --git a/drivers/laplacian.c b/drivers/laplacian.c
index 5d06576d..6113357c 100644
--- a/drivers/laplacian.c
+++ b/drivers/laplacian.c
@@ -33,17 +33,21 @@ static inline void
 laplacian_usage(void)
 {
     fprintf(stderr,
-            "Usage: genLaplacian( \"[<type>:]<dim1>[:<dim2>[:<dim3>]]\" )\n"
+            "Usage: genLaplacian( \"[<type>:]<dim1>[:<dim2>[:<dim3>[:<alpha>[:<beta>]]]]\" )\n"
+            "   Generate a Laplacian matrix M, of the form alpha * D - beta * A,\n"
+            "   where D is the degree matrix, and A the adjacency matrix.\n"
             "   <type> p = pattern only\n"
             "          s = real simple\n"
             "          d = real double [default]\n"
             "          c = complex simple\n"
             "          z = complex double\n"
-            "   <dim1> size of the first dimension of the 1D|2D|3D laplacian\n"
-            "   <dim2> size of the second dimension of the 2D|3D laplacian\n"
-            "   <dim3> size of the third dimension of the 3D laplacian\n"
+            "   <dim1> size of the first dimension of the laplacian\n"
+            "   <dim2> size of the second dimension of the laplacian\n"
+            "   <dim3> size of the third dimension of the laplacian\n"
             "   Example:\n"
-            "     genLaplacian( \"z:10:20\" ) generates a 2D complex laplacian matrix of size 200.\n"
+            "     genLaplacian( \"z:10:20\" )        generates a 2D complex double laplacian matrix of size 200.\n"
+            "     genLaplacian( \"10:1:10:2.:0.5\" ) generates a 2D real double laplacian matrix of size 100 where M = 2. * D - 0.5 * A.\n"
+            "     genLaplacian( \"s:10\" )           generates a 1D real single laplacian matrix of size 10.\n"
             );
 }
 
@@ -52,8 +56,13 @@ laplacian_usage(void)
  *
  * @ingroup pastix_spm_driver
  *
- * laplacian_parse_info - Parse information given through the filename string to
- * configure the laplacian matrix to generate.
+ * @brief Parse information given through the filename string to configure the
+ * laplacian matrix to generate.
+ *
+ * The laplacian will be of size dim1 * dim2 * dim3, and will be equal to
+ *     \[ M = \alpha * D - \beta * A \]
+ *
+ * where D is the degree matrix, and A the adjacency matrix.
  *
  *******************************************************************************
  *
@@ -67,11 +76,25 @@ laplacian_usage(void)
  *          At exit, the fields of the spm are initialized and especially the
  *          type, symmetry and number of unknows are setup.
  *
+ * @param[out] dim1
+ *          The first dimension of the laplacian
+ *
+ * @param[out] dim2
+ *          The second dimension of the laplacian
+ *
+ * @param[out] dim3
+ *          The third dimension of the laplacian
+ *
+ * @param[out] alpha
+ *          The alpha coefficient for the degree matrix
+ *
+ * @param[out] beta
+ *          The beta coefficient for the adjacency matrix
+ *
  *******************************************************************************
  *
- * @return
- *      \retval PASTIX_SUCCESS if the matrix has been generated successfully
- *      \retval PASTIX_ERR_BADPARAMETER if the configuration string is incorrect
+ * @retval PASTIX_SUCCESS if the matrix has been generated successfully
+ * @retval PASTIX_ERR_BADPARAMETER if the configuration string is incorrect
  *
  *******************************************************************************/
 static inline int
@@ -79,14 +102,20 @@ laplacian_parse_info( const char   *filename,
                       pastix_spm_t *spm,
                       pastix_int_t *dim1,
                       pastix_int_t *dim2,
-                      pastix_int_t *dim3 )
+                      pastix_int_t *dim3,
+                      double       *alpha,
+                      double       *beta )
 {
+    double val1, val2;
     long tmp1, tmp2, tmp3;
     spm->colptr   = NULL;
     spm->rowptr   = NULL;
     spm->values   = NULL;
     spm->loc2glob = NULL;
 
+    *alpha = 1.;
+    *beta = 1.;
+
     /* Look for the datatype */
     {
         char flt;
@@ -152,7 +181,22 @@ laplacian_parse_info( const char   *filename,
     /* Scan the dimensions */
     *dim1 = *dim2 = *dim3 = 0;
 
-    if ( sscanf( filename, "%ld:%ld:%ld", &tmp1, &tmp2, &tmp3 ) == 3 ) {
+    if ( sscanf( filename, "%ld:%ld:%ld:%lf:%lf", &tmp1, &tmp2, &tmp3, &val1, &val2 ) == 5 ) {
+        *dim1 = (pastix_int_t)tmp1;
+        *dim2 = (pastix_int_t)tmp2;
+        *dim3 = (pastix_int_t)tmp3;
+        *alpha = val1;
+        *beta  = val2;
+        spm->gN = (*dim1)*(*dim2)*(*dim3);
+    }
+    else if ( sscanf( filename, "%ld:%ld:%ld:%lf", &tmp1, &tmp2, &tmp3, &val1 ) == 4 ) {
+        *dim1 = (pastix_int_t)tmp1;
+        *dim2 = (pastix_int_t)tmp2;
+        *dim3 = (pastix_int_t)tmp3;
+        *alpha = val1;
+        spm->gN = (*dim1)*(*dim2)*(*dim3);
+    }
+    else if ( sscanf( filename, "%ld:%ld:%ld", &tmp1, &tmp2, &tmp3 ) == 3 ) {
         *dim1 = (pastix_int_t)tmp1;
         *dim2 = (pastix_int_t)tmp2;
         *dim3 = (pastix_int_t)tmp3;
@@ -178,43 +222,26 @@ laplacian_parse_info( const char   *filename,
         return PASTIX_ERR_BADPARAMETER;
     }
 
+    fprintf(stderr, "x=%ld, y=%ld, z=%ld, alpha=%lf, beta=%lf\n",
+            *dim1, *dim2, *dim3, *alpha, *beta );
+
     spm->n = spm->gN;
     return PASTIX_SUCCESS;
 }
 
-static void (*laplacian_table1D[6])(pastix_spm_t *, pastix_int_t) =
-{
-    p_spmLaplacian1D,
-    NULL,
-    s_spmLaplacian1D,
-    d_spmLaplacian1D,
-    c_spmLaplacian1D,
-    z_spmLaplacian1D
-};
-
-static void (*laplacian_table2D[6])(pastix_spm_t *, pastix_int_t, pastix_int_t) =
+static void (*laplacian_7points[6])(pastix_spm_t *, pastix_int_t, pastix_int_t, pastix_int_t, pastix_fixdbl_t, pastix_fixdbl_t) =
 {
-    p_spmLaplacian2D,
+    p_spmLaplacian_7points,
     NULL,
-    s_spmLaplacian2D,
-    d_spmLaplacian2D,
-    c_spmLaplacian2D,
-    z_spmLaplacian2D
-};
-
-static void (*laplacian_table3D[6])(pastix_spm_t *, pastix_int_t, pastix_int_t, pastix_int_t) =
-{
-    p_spmLaplacian3D,
-    NULL,
-    s_spmLaplacian3D,
-    d_spmLaplacian3D,
-    c_spmLaplacian3D,
-    z_spmLaplacian3D
+    s_spmLaplacian_7points,
+    d_spmLaplacian_7points,
+    c_spmLaplacian_7points,
+    z_spmLaplacian_7points
 };
 
 static void (*extended_laplacian_table2D[6])(pastix_spm_t *, pastix_int_t, pastix_int_t) =
 {
-    p_spmLaplacian2D,
+    p_spmExtendedLaplacian2D,
     NULL,
     s_spmExtendedLaplacian2D,
     d_spmExtendedLaplacian2D,
@@ -269,21 +296,15 @@ genLaplacian( const char    *filename,
               pastix_spm_t  *spm )
 {
     pastix_int_t dim1, dim2, dim3;
+    double alpha = 1.;
+    double beta = 1.;
     int rc;
 
-    rc = laplacian_parse_info(filename, spm, &dim1, &dim2, &dim3);
+    rc = laplacian_parse_info(filename, spm, &dim1, &dim2, &dim3, &alpha, &beta );
     if (rc != PASTIX_SUCCESS)
         return rc;
 
-    if( dim3 > 0 ) {
-        laplacian_table3D[spm->flttype](spm, dim1, dim2, dim3);
-    }
-    else if (dim2 > 0) {
-        laplacian_table2D[spm->flttype](spm, dim1, dim2);
-    }
-    else {
-        laplacian_table1D[spm->flttype](spm, dim1);
-    }
+    laplacian_7points[spm->flttype](spm, dim1, dim2, dim3, alpha, beta);
 
     return PASTIX_SUCCESS;
 }
@@ -325,9 +346,11 @@ genExtendedLaplacian( const char    *filename,
                       pastix_spm_t  *spm )
 {
     pastix_int_t dim1, dim2, dim3;
+    double alpha = 1.;
+    double beta = 1.;
     int rc;
 
-    rc = laplacian_parse_info(filename, spm, &dim1, &dim2, &dim3);
+    rc = laplacian_parse_info(filename, spm, &dim1, &dim2, &dim3, &alpha, &beta);
     if (rc != PASTIX_SUCCESS)
         return rc;
 
@@ -337,9 +360,6 @@ genExtendedLaplacian( const char    *filename,
     else if (dim2 > 0) {
         extended_laplacian_table2D[spm->flttype](spm, dim1, dim2);
     }
-    else {
-        laplacian_table1D[spm->flttype](spm, dim1);
-    }
 
     return PASTIX_SUCCESS;
 }
diff --git a/drivers/laplacian.h b/drivers/laplacian.h
index 2e1fe9ed..dc513a98 100644
--- a/drivers/laplacian.h
+++ b/drivers/laplacian.h
@@ -12,23 +12,11 @@
 #ifndef _LAPLACIAN_H_
 #define _LAPLACIAN_H_
 
-void z_spmLaplacian1D( pastix_spm_t *spm, pastix_int_t dim1 );
-void c_spmLaplacian1D( pastix_spm_t *spm, pastix_int_t dim1 );
-void d_spmLaplacian1D( pastix_spm_t *spm, pastix_int_t dim1 );
-void s_spmLaplacian1D( pastix_spm_t *spm, pastix_int_t dim1 );
-void p_spmLaplacian1D( pastix_spm_t *spm, pastix_int_t dim1 );
-
-void z_spmLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
-void c_spmLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
-void d_spmLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
-void s_spmLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
-void p_spmLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
-
-void z_spmLaplacian3D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3 );
-void c_spmLaplacian3D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3 );
-void d_spmLaplacian3D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3 );
-void s_spmLaplacian3D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3 );
-void p_spmLaplacian3D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3 );
+void z_spmLaplacian_7points( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3, pastix_fixdbl_t alpha, pastix_fixdbl_t beta );
+void c_spmLaplacian_7points( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3, pastix_fixdbl_t alpha, pastix_fixdbl_t beta );
+void d_spmLaplacian_7points( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3, pastix_fixdbl_t alpha, pastix_fixdbl_t beta );
+void s_spmLaplacian_7points( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3, pastix_fixdbl_t alpha, pastix_fixdbl_t beta );
+void p_spmLaplacian_7points( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2, pastix_int_t dim3, pastix_fixdbl_t alpha, pastix_fixdbl_t beta );
 
 void z_spmExtendedLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
 void c_spmExtendedLaplacian2D( pastix_spm_t *spm, pastix_int_t dim1, pastix_int_t dim2 );
diff --git a/z_spm_laplacian.c b/z_spm_laplacian.c
index 11066bac..05926ca5 100644
--- a/z_spm_laplacian.c
+++ b/z_spm_laplacian.c
@@ -24,207 +24,8 @@
  *
  * @ingroup spm_dev_driver
  *
- * z_spmLaplacian1D - Generate a 1D laplacian matrix.
- *
- * Example:
- * >  1 -1  0  0
- * > -1  2 -1  0
- * >  0 -1  2 -1
- * >  0  0 -1  1
- *
- *******************************************************************************
- *
- * @param[inout] spm
- *          At start, an allocated spm structure.
- *          Contains the size of the laplacian in spm->n.
- *          At exit, contains the matrix in csc format.
- *
- * @param[in] dim1
- *          contains the dimension of the 1D laplacian.
- *
- *******************************************************************************/
-void
-z_spmLaplacian1D( pastix_spm_t  *spm,
-                  pastix_int_t   dim1 )
-{
-    pastix_complex64_t *valptr;
-    pastix_int_t *colptr, *rowptr;
-    pastix_int_t i, j;
-    pastix_int_t nnz = 2*(spm->gN) - 1;
-
-    spm->mtxtype  = PastixSymmetric;
-    spm->flttype  = PastixComplex64;
-    spm->fmttype  = PastixCSC;
-    spm->gnnz     = nnz;
-    spm->nnz      = nnz;
-    spm->dof      = 1;
-
-    assert( spm->gN == dim1 );
-
-    /* Allocating */
-    spm->colptr = malloc((spm->n+1)*sizeof(pastix_int_t));
-    spm->rowptr = malloc(nnz       *sizeof(pastix_int_t));
-    assert( spm->colptr );
-    assert( spm->rowptr );
-
-#if !defined(PRECISION_p)
-    spm->values = malloc(nnz       *sizeof(pastix_complex64_t));
-    assert( spm->values );
-#endif
-
-    /* Building ia, ja and values*/
-    colptr = spm->colptr;
-    rowptr = spm->rowptr;
-    valptr = (pastix_complex64_t*)(spm->values);
-
-    j = 0;
-    *colptr = 1; colptr++; /* baseval */
-    for (i=0; i<dim1; i++, colptr++)
-    {
-        *rowptr = i+1;
-#if !defined(PRECISION_p)
-        if ( (i == 0) || (i == dim1-1) ) {
-            *valptr = (pastix_complex64_t)1.;
-        }
-        else {
-            *valptr = (pastix_complex64_t)2.;
-        }
-#endif
-
-        j++; valptr++; rowptr++;
-
-        if (i < spm->gN-1) {
-            *rowptr = i+2;
-
-#if defined(PRECISION_z) || defined(PRECISION_c)
-            *valptr = -1. + 2. * _Complex_I;
-#elif defined(PRECISION_d) || defined(PRECISION_s)
-            *valptr = -1.;
-#endif
-            j++; rowptr++; valptr++;
-        }
-
-        *colptr = j+1;
-    }
-
-    assert( (spm->colptr[ dim1 ] - spm->colptr[0]) == nnz );
-}
-
-/**
- *******************************************************************************
- *
- * @ingroup spm_dev_driver
- *
- * z_spmLaplacian2D - Generate a 2D laplacian matrix.
- *
- * Example:
- * >  2 -1  0 -1  0  0
- * > -1  3 -1  0 -1  0
- * >  0 -1  2  0  0 -1
- * > -1  0  0  2 -1  0
- * >  0 -1  0 -1  3 -1
- * >  0  0 -1  0 -1  2
- *
- *******************************************************************************
- *
- * @param[inout] spm
- *          At start, an allocated spm structure.
- *          Contains the size of the laplacian in spm->n.
- *          At exit, contains the matrix in csc format.
- *
- * @param[in] dim1
- *          contains the first dimension of the 2D grid of the laplacian.
- *
- * @param[in] dim2
- *          contains the second dimension of the 2D grid of the laplacian.
- *
- *******************************************************************************/
-void
-z_spmLaplacian2D( pastix_spm_t  *spm,
-                  pastix_int_t   dim1,
-                  pastix_int_t   dim2 )
-{
-    pastix_complex64_t *valptr;
-    pastix_int_t *colptr, *rowptr;
-    pastix_int_t i, j, k;
-    pastix_int_t nnz = (2*(dim1)-1)*dim2 + (dim2-1)*dim1;
-
-    spm->mtxtype  = PastixHermitian;
-    spm->flttype  = PastixComplex64;
-    spm->fmttype  = PastixCSC;
-    spm->gnnz     = nnz;
-    spm->nnz      = nnz;
-    spm->dof      = 1;
-
-    assert( spm->gN == dim1*dim2 );
-
-    /* Allocating */
-    spm->colptr = malloc((spm->n+1)*sizeof(pastix_int_t));
-    spm->rowptr = malloc(nnz       *sizeof(pastix_int_t));
-    assert( spm->colptr );
-    assert( spm->rowptr );
-
-#if !defined(PRECISION_p)
-    spm->values = malloc(nnz       *sizeof(pastix_complex64_t));
-    assert( spm->values );
-#endif
-
-    /* Building ia, ja and values*/
-    colptr = spm->colptr;
-    rowptr = spm->rowptr;
-    valptr = (pastix_complex64_t*)(spm->values);
-
-    /* Building ia, ja and values*/
-    *colptr = 1;
-    k = 1; /* Column index in the matrix ((i-1) * dim1 + j-1) */
-    for(i=1; i<=dim2; i++)
-    {
-        for(j=1; j<=dim1; j++)
-        {
-            colptr[1] = colptr[0];
-
-            /* Diagonal value */
-            *rowptr = k;
-#if !defined(PRECISION_p)
-            *valptr = (pastix_complex64_t) 4.;
-            if (j == dim1 || j == 1)
-                *valptr -= (pastix_complex64_t) 1.;
-            if (i == dim2 || i == 1)
-                *valptr -= (pastix_complex64_t) 1.;
-#endif
-            valptr++; rowptr++; colptr[1]++;
-
-            /* Connexion along dimension 1 */
-            if (j < dim1) {
-                *rowptr = k+1;
-#if !defined(PRECISION_p)
-                *valptr = (pastix_complex64_t)-1.;
-#endif
-                valptr++; rowptr++; colptr[1]++;
-            }
-
-            /* Connexion along dimension 2 */
-            if (i < dim2) {
-                *rowptr = k+dim1;
-#if !defined(PRECISION_p)
-                *valptr = (pastix_complex64_t)-1.;
-#endif
-                valptr++; rowptr++; colptr[1]++;
-            }
-
-            colptr++; k++;
-        }
-    }
-
-    assert( (spm->colptr[ spm->gN ] - spm->colptr[0]) == nnz );
-}
-
-/**
- *******************************************************************************
- *
- * @ingroup spm_dev_driver
- *
- * z_spmLaplacian3D - Generate a 3D laplacian matrix.
+ * @brief Generate a laplacian matrix for a 7-points stencil
+ * \[ M = \alpha * D - \beta * A \]
  *
  * Example:
  * >  3 -1 -1  0 -1  0  0  0
@@ -244,20 +45,28 @@ z_spmLaplacian2D( pastix_spm_t  *spm,
  *          At exit, contains the matrix in csc format.
  *
  * @param[in] dim1
- *          contains the first dimension of the 3D grid of the laplacian.
+ *          contains the first dimension of the grid of the laplacian.
  *
  * @param[in] dim2
- *          contains the second dimension of the 3D grid of the laplacian.
+ *          contains the second dimension of the grid of the laplacian.
  *
  * @param[in] dim3
- *          contains the third dimension of the 3D grid of the laplacian.
+ *          contains the third dimension of the grid of the laplacian.
+ *
+ * @param[in] alpha
+ *          The alpha coefficient for the degree matrix
+ *
+ * @param[in] beta
+ *          The beta coefficient for the adjacency matrix
  *
  *******************************************************************************/
 void
-z_spmLaplacian3D( pastix_spm_t  *spm,
-                  pastix_int_t   dim1,
-                  pastix_int_t   dim2,
-                  pastix_int_t   dim3 )
+z_spmLaplacian_7points( pastix_spm_t   *spm,
+                        pastix_int_t    dim1,
+                        pastix_int_t    dim2,
+                        pastix_int_t    dim3,
+                        pastix_fixdbl_t alpha,
+                        pastix_fixdbl_t beta )
 {
 
     pastix_complex64_t *valptr;
@@ -299,19 +108,24 @@ z_spmLaplacian3D( pastix_spm_t  *spm,
         {
             for(k=1; k<=dim1; k++)
             {
-
                 colptr[1] = colptr[0];
 
                 /* Diagonal value */
                 *rowptr = l;
 #if !defined(PRECISION_p)
-                *valptr = (pastix_complex64_t) 6.;
-                if (k == dim1 || k == 1)
-                    *valptr -= (pastix_complex64_t) 1.;
-                if (j == dim2 || j == 1)
-                    *valptr -= (pastix_complex64_t) 1.;
-                if (i == dim3 || i == 1)
-                    *valptr -= (pastix_complex64_t) 1.;
+                *valptr = 6. * alpha;
+                if (k == 1)
+                    *valptr -= alpha;
+                if (k == dim1)
+                    *valptr -= alpha;
+                if (j == 1)
+                    *valptr -= alpha;
+                if (j == dim2)
+                    *valptr -= alpha;
+                if (i == 1)
+                    *valptr -= alpha;
+                if (i == dim3)
+                    *valptr -= alpha;
 #endif
                 valptr++; rowptr++; colptr[1]++;
 
@@ -319,7 +133,7 @@ z_spmLaplacian3D( pastix_spm_t  *spm,
                 if (k < dim1) {
                     *rowptr = l+1;
 #if !defined(PRECISION_p)
-                    *valptr = (pastix_complex64_t)-1.;
+                    *valptr = -beta;
 #endif
                     valptr++; rowptr++; colptr[1]++;
                 }
@@ -328,7 +142,7 @@ z_spmLaplacian3D( pastix_spm_t  *spm,
                 if (j < dim2) {
                     *rowptr = l+dim1;
 #if !defined(PRECISION_p)
-                    *valptr = (pastix_complex64_t)-1.;
+                    *valptr = -beta;
 #endif
                     valptr++; rowptr++; colptr[1]++;
                 }
@@ -337,7 +151,7 @@ z_spmLaplacian3D( pastix_spm_t  *spm,
                 if (i < dim3) {
                     *rowptr = l+dim1*dim2;
 #if !defined(PRECISION_p)
-                    *valptr = (pastix_complex64_t)-1.;
+                    *valptr = -beta;
 #endif
                     valptr++; rowptr++; colptr[1]++;
                 }
@@ -348,6 +162,7 @@ z_spmLaplacian3D( pastix_spm_t  *spm,
     }
 
     assert( (spm->colptr[ spm->gN ] - spm->colptr[0]) == nnz );
+    (void)alpha; (void)beta;
 }
 
 /**
@@ -478,7 +293,8 @@ z_spmExtendedLaplacian2D( pastix_spm_t  *spm,
  *
  * @ingroup spm_dev_driver
  *
- * z_spmExtendedLaplacian3D - Generate a 3D extended laplacian matrix.
+ * @brief Generate an extended laplacian matrix for a 27-points stencil with
+ * \[ M = \alpha * D - \beta * A \]
  *
  *******************************************************************************
  *
@@ -488,26 +304,28 @@ z_spmExtendedLaplacian2D( pastix_spm_t  *spm,
  *          At exit, contains the matrix in csc format.
  *
  * @param[in] dim1
- *          contains the first dimension of the 3D grid of the laplacian.
+ *          contains the first dimension of the grid of the laplacian.
  *
  * @param[in] dim2
- *          contains the second dimension of the 3D grid of the laplacian.
+ *          contains the second dimension of the grid of the laplacian.
  *
  * @param[in] dim3
- *          contains the second dimension of the 3D grid of the laplacian.
+ *          contains the third dimension of the grid of the laplacian.
  *
  *******************************************************************************/
 void
-z_spmExtendedLaplacian3D( pastix_spm_t  *spm,
-                          pastix_int_t   dim1,
-                          pastix_int_t   dim2,
-                          pastix_int_t   dim3 )
+z_spmExtendedLaplacian3D( pastix_spm_t   *spm,
+                          pastix_int_t    dim1,
+                          pastix_int_t    dim2,
+                          pastix_int_t    dim3 )
 {
 
     pastix_complex64_t *valptr;
     pastix_int_t *colptr, *rowptr;
     pastix_int_t i, j, k, l;
-    pastix_int_t nnz = (2*dim1-1)*dim2*dim3 + (3*dim1-2)*(dim2-1)*dim3 + ((3*dim1-2)*dim2+2*(3*dim1-2)*(dim2-1))*(dim3-1);
+    pastix_int_t nnz = (2*dim1-1) * dim2     * dim3
+        +              (3*dim1-2) * (dim2-1) * dim3
+        +             ((3*dim1-2) * dim2 + 2 * (3*dim1-2) *(dim2-1)) * (dim3-1);
 
     spm->mtxtype  = PastixSymmetric;
     spm->flttype  = PastixComplex64;
@@ -543,28 +361,27 @@ z_spmExtendedLaplacian3D( pastix_spm_t  *spm,
         {
             for(k=1; k<=dim1; k++)
             {
-
                 colptr[1] = colptr[0];
 
                 /* Diagonal value */
                 *rowptr = l;
 #if !defined(PRECISION_p)
-            if ( (j == dim2 || j == 1) && (i == dim3 || i == 1) && (k == dim1 || i == 1) )
-                *valptr = (pastix_complex64_t) 4.75;
-            else if ( (j != dim2 || j != 1) && (i == dim3 || i == 1) && (k == dim1 || i == 1) )
-                *valptr = (pastix_complex64_t) 10.;
-            else if ( (j == dim2 || j == 1) && (i != dim3 || i != 1) && (k == dim1 || i == 1) )
-                *valptr = (pastix_complex64_t) 10.;
-            else if ( (j == dim2 || j == 1) && (i == dim3 || i == 1) && (k != dim1 || i != 1) )
-                *valptr = (pastix_complex64_t) 10.;
-            else if ( (j != dim2 || j != 1) && (i != dim3 || i != 1) && (k == dim1 || i == 1) )
-                *valptr = (pastix_complex64_t) 7.;
-            else if ( (j == dim2 || j == 1) && (i != dim3 || i != 1) && (k != dim1 || i != 1) )
-                *valptr = (pastix_complex64_t) 7.;
-            else if ( (j != dim2 || j != 1) && (i == dim3 || i == 1) && (k != dim1 || i != 1) )
-                *valptr = (pastix_complex64_t) 7.;
-            else
-                *valptr = (pastix_complex64_t) 14.;
+                if ( (j == dim2 || j == 1) && (i == dim3 || i == 1) && (k == dim1 || i == 1) )
+                    *valptr = (pastix_complex64_t) 4.75;
+                else if ( (j != dim2 || j != 1) && (i == dim3 || i == 1) && (k == dim1 || i == 1) )
+                    *valptr = (pastix_complex64_t) 10.;
+                else if ( (j == dim2 || j == 1) && (i != dim3 || i != 1) && (k == dim1 || i == 1) )
+                    *valptr = (pastix_complex64_t) 10.;
+                else if ( (j == dim2 || j == 1) && (i == dim3 || i == 1) && (k != dim1 || i != 1) )
+                    *valptr = (pastix_complex64_t) 10.;
+                else if ( (j != dim2 || j != 1) && (i != dim3 || i != 1) && (k == dim1 || i == 1) )
+                    *valptr = (pastix_complex64_t) 7.;
+                else if ( (j == dim2 || j == 1) && (i != dim3 || i != 1) && (k != dim1 || i != 1) )
+                    *valptr = (pastix_complex64_t) 7.;
+                else if ( (j != dim2 || j != 1) && (i == dim3 || i == 1) && (k != dim1 || i != 1) )
+                    *valptr = (pastix_complex64_t) 7.;
+                else
+                    *valptr = (pastix_complex64_t) 14.;
 #endif
                 valptr++; rowptr++; colptr[1]++;
 
-- 
GitLab