[cig-commits] r7956 - mc/3D/CitcomS/trunk/lib

tan2 at geodynamics.org tan2 at geodynamics.org
Wed Sep 12 12:24:15 PDT 2007


Author: tan2
Date: 2007-09-12 12:24:15 -0700 (Wed, 12 Sep 2007)
New Revision: 7956

Modified:
   mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c
Log:
Keep the load vector intact in the bicg solver

Modified: mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c	2007-09-12 19:23:56 UTC (rev 7955)
+++ mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c	2007-09-12 19:24:15 UTC (rev 7956)
@@ -351,7 +351,7 @@
  */
 
 static float solve_Ahat_p_fhat_BiCG(struct All_variables *E,
-                                    double **V, double **P, double **F,
+                                    double **V, double **P, double **FF,
                                     double imp, int *steps_max)
 {
     void assemble_div_rho_u();
@@ -373,6 +373,7 @@
     double r0dotrt, r1dotrt;
     double residual, dpressure, dvelocity;
 
+    double *F[NCS];
     double *r1[NCS], *r2[NCS], *pt[NCS], *p1[NCS], *p2[NCS];
     double *rt[NCS], *v0[NCS], *s0[NCS], *st[NCS], *t0[NCS];
     double *u0[NCS];
@@ -387,6 +388,7 @@
     lev = E->mesh.levmax;
 
     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));
@@ -404,6 +406,13 @@
     time0 = CPU_time0();
     count = 0;
 
+    /* copy the original force vector since we need to keep it intact
+       between iterations */
+    for(m=1;m<=E->sphere.caps_per_proc;m++)
+        for(j=0;j<neq;j++)
+            F[m][j] = FF[m][j];
+
+
     /* calculate the initial velocity residual */
     v_res = initial_vel_residual(E, V, P, F, imp);
 
@@ -587,6 +596,7 @@
 
 
     for(m=1; m<=E->sphere.caps_per_proc; m++) {
+    	free((void *) F[m]);
         free((void *) r1[m]);
         free((void *) r2[m]);
         free((void *) pt[m]);



More information about the cig-commits mailing list