[cig-commits] [commit] rajesh-petsc-schur: solve_Ahat_p_fhat_iterCG; results dont match master (99d5629)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Wed Nov 5 19:04:02 PST 2014


Repository : https://github.com/geodynamics/citcoms

On branch  : rajesh-petsc-schur
Link       : https://github.com/geodynamics/citcoms/compare/464e1b32299b15819f93efd98d969cddb84dfe51...f97ae655a50bdbd6dac1923a3471ee4dae178fbd

>---------------------------------------------------------------

commit 99d5629682a991bfb6016d7aa180b34005b456aa
Author: Rajesh Kommu <rajesh.kommu at gmail.com>
Date:   Tue Sep 9 13:58:13 2014 -0700

    solve_Ahat_p_fhat_iterCG; results dont match master


>---------------------------------------------------------------

99d5629682a991bfb6016d7aa180b34005b456aa
 lib/Stokes_flow_Incomp.c | 47 +++++++++++++++++++++++------------------------
 1 file changed, 23 insertions(+), 24 deletions(-)

diff --git a/lib/Stokes_flow_Incomp.c b/lib/Stokes_flow_Incomp.c
index 06c2bb0..51ca4b5 100644
--- a/lib/Stokes_flow_Incomp.c
+++ b/lib/Stokes_flow_Incomp.c
@@ -1153,16 +1153,16 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
 
     for (m=1; m<=E->sphere.caps_per_proc; m++)   {
         F[m] = (double *)malloc(neq*sizeof(double));
-        r1[m] = (double *)malloc((npno+1)*sizeof(double));
-        r2[m] = (double *)malloc((npno+1)*sizeof(double));
-        pt[m] = (double *)malloc((npno+1)*sizeof(double));
-        p1[m] = (double *)malloc((npno+1)*sizeof(double));
-        p2[m] = (double *)malloc((npno+1)*sizeof(double));
-        rt[m] = (double *)malloc((npno+1)*sizeof(double));
-        v0[m] = (double *)malloc((npno+1)*sizeof(double));
-        s0[m] = (double *)malloc((npno+1)*sizeof(double));
-        st[m] = (double *)malloc((npno+1)*sizeof(double));
-        t0[m] = (double *)malloc((npno+1)*sizeof(double));
+        r1[m] = (double *)malloc((npno)*sizeof(double));
+        r2[m] = (double *)malloc((npno)*sizeof(double));
+        pt[m] = (double *)malloc((npno)*sizeof(double));
+        p1[m] = (double *)malloc((npno)*sizeof(double));
+        p2[m] = (double *)malloc((npno)*sizeof(double));
+        rt[m] = (double *)malloc((npno)*sizeof(double));
+        v0[m] = (double *)malloc((npno)*sizeof(double));
+        s0[m] = (double *)malloc((npno)*sizeof(double));
+        st[m] = (double *)malloc((npno)*sizeof(double));
+        t0[m] = (double *)malloc((npno)*sizeof(double));
 
         u0[m] = (double *)malloc(neq*sizeof(double));
     }
@@ -1206,7 +1206,7 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
 
     /* initial conjugate residual rt = r1 */
     for(m=1; m<=E->sphere.caps_per_proc; m++)
-        for(j=1; j<=npno; j++)
+        for(j=0; j<npno; j++)
             rt[m][j] = r1[m][j];
 
 
@@ -1229,13 +1229,13 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
         /* update search direction */
         if(count == 0)
             for (m=1; m<=E->sphere.caps_per_proc; m++)
-                for(j=1; j<=npno; j++)
+                for(j=0; j<npno; j++)
                     p2[m][j] = r1[m][j];
         else {
             /* p2 = r1 + <r1,rt>/<r0,rt> * alpha/omega * (p1 - omega*v0) */
             beta = (r1dotrt / r0dotrt) * (alpha / omega);
             for(m=1; m<=E->sphere.caps_per_proc; m++)
-                for(j=1; j<=npno; j++)
+                for(j=0; j<npno; j++)
                     p2[m][j] = r1[m][j] + beta
                         * (p1[m][j] - omega * v0[m][j]);
         }
@@ -1243,8 +1243,9 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
 
         /* preconditioner BPI ~= inv(K), pt = BPI*p2 */
         for(m=1; m<=E->sphere.caps_per_proc; m++)
-            for(j=1; j<=npno; j++)
-                pt[m][j] = E->BPI[lev][m][j] * p2[m][j];
+            for(j=0; j<npno; j++)
+                /* change to E->BPI[lev][m][j] after it has been made 0-based */
+                pt[m][j] = E->BPI[lev][m][j+1] * p2[m][j];
 
 
         /* solve K*u0 = grad(pt) for u1 */
@@ -1267,14 +1268,15 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
 
         /* s0 = r1 - alpha * v0 */
         for(m=1; m<=E->sphere.caps_per_proc; m++)
-            for(j=1; j<=npno; j++)
+            for(j=0; j<npno; j++)
                 s0[m][j] = r1[m][j] - alpha * v0[m][j];
 
 
         /* preconditioner BPI ~= inv(K), st = BPI*s0 */
         for(m=1; m<=E->sphere.caps_per_proc; m++)
-            for(j=1; j<=npno; j++)
-                st[m][j] = E->BPI[lev][m][j] * s0[m][j];
+            for(j=0; j<npno; j++)
+                /* change to E->BPI[lev][m][j] after it has been made 0-based */
+                st[m][j] = E->BPI[lev][m][j+1] * s0[m][j];
 
 
         /* solve K*u1 = grad(st) for u1 */
@@ -1297,17 +1299,17 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
 
         /* r2 = s0 - omega * t0 */
         for(m=1; m<=E->sphere.caps_per_proc; m++)
-            for(j=1; j<=npno; j++)
+            for(j=0; j<npno; j++)
                 r2[m][j] = s0[m][j] - omega * t0[m][j];
 
 
         /* P = P + alpha * pt + omega * st */
         for(m=1; m<=E->sphere.caps_per_proc; m++)
-            for(j=1; j<=npno; j++)
+            for(j=0; j<npno; j++)
                 s0[m][j] = alpha * pt[m][j] + omega * st[m][j];
 
         for(m=1; m<=E->sphere.caps_per_proc; m++)
-            for(j=1; j<=npno; j++)
+            for(j=0; j<npno; j++)
                 P[m][j] += s0[m][j];
 
 
@@ -1398,9 +1400,6 @@ static void solve_Ahat_p_fhat_BiCG(struct All_variables *E,
     }
 
     *steps_max=count;
-
-    return;
-
 }
 
 



More information about the CIG-COMMITS mailing list