[cig-commits] r7802 - mc/3D/CitcomS/trunk/lib
tan2 at geodynamics.org
tan2 at geodynamics.org
Fri Aug 10 16:43:49 PDT 2007
Author: tan2
Date: 2007-08-10 16:43:49 -0700 (Fri, 10 Aug 2007)
New Revision: 7802
Modified:
mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c
Log:
Prevent the original force vector being modified by Uzawa solver. This is needed for the non-Newtonian iterations.
Modified: mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c 2007-08-10 20:51:45 UTC (rev 7801)
+++ mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c 2007-08-10 23:43:49 UTC (rev 7802)
@@ -134,10 +134,10 @@
/* ========================================================================== */
-float solve_Ahat_p_fhat(E,V,P,F,imp,steps_max)
+float solve_Ahat_p_fhat(E,V,P,FF,imp,steps_max)
struct All_variables *E;
- double **V,**P,**F;
+ double **V,**P,**FF;
double imp;
int *steps_max;
@@ -145,7 +145,7 @@
int m,i,j,k,ii,count,convergent,valid,problems,lev,lev_low,npno,neq,steps;
int gnpno,gneq;
- double *r1[NCS],*R[NCS];
+ double *r1[NCS],*F[NCS];
double *r0[NCS],*r2[NCS],*z0[NCS],*z1[NCS],*s1[NCS],*s2[NCS],*Ah[NCS];
double *shuffle[NCS];
double alpha,delta,s2dotAhat,r0dotr0,r1dotz1;
@@ -173,6 +173,8 @@
for (m=1;m<=E->sphere.caps_per_proc;m++) {
npno=E->lmesh.npno;
neq=E->lmesh.neq;
+ F[m] = (double *)malloc((neq+1)*sizeof(double));
+
r0[m] = (double *)malloc((npno+1)*sizeof(double));
r1[m] = (double *)malloc((npno+1)*sizeof(double));
r2[m] = (double *)malloc((npno+1)*sizeof(double));
@@ -180,9 +182,14 @@
z1[m] = (double *)malloc((npno+1)*sizeof(double));
s1[m] = (double *)malloc((npno+1)*sizeof(double));
s2[m] = (double *)malloc((npno+1)*sizeof(double));
- }
+ }
+ /* Copy the original force vector. FF shouldn't be modified. */
+ for (m=1;m<=E->sphere.caps_per_proc;m++)
+ for(i=0;i<neq;i++)
+ F[m][i] = FF[m][i];
+
problems=0;
time0=time=CPU_time0();
@@ -205,13 +212,13 @@
for (m=1;m<=E->sphere.caps_per_proc;m++)
for(i=0;i<neq;i++)
- F[m][i] = F[m][i] - E->u1[m][i];
+ F[m][i] -= E->u1[m][i];
assemble_del2_u(E,V,E->u1,lev,1);
for (m=1;m<=E->sphere.caps_per_proc;m++)
for(i=0;i<neq;i++)
- F[m][i] = F[m][i] - E->u1[m][i];
+ F[m][i] -= E->u1[m][i];
strip_bcs_from_residual(E,F,lev);
@@ -333,6 +340,7 @@
}
for (m=1;m<=E->sphere.caps_per_proc;m++) {
+ free((void *) F[m]);
free((void *) r0[m]);
free((void *) r1[m]);
free((void *) r2[m]);
More information about the cig-commits
mailing list