[cig-commits] commit: Compute dRx_dzx and dRy_dzy correctly near the boundary

Mercurial hg at geodynamics.org
Mon Mar 5 17:40:37 PST 2012


changeset:   74:114d616b8587
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Mon Mar 05 17:40:26 2012 -0800
files:       compute_Cx.cxx main.cxx
description:
Compute dRx_dzx and dRy_dzy correctly near the boundary


diff -r fa26e2bf82f3 -r 114d616b8587 compute_Cx.cxx
--- a/compute_Cx.cxx	Fri Mar 02 16:27:50 2012 -0800
+++ b/compute_Cx.cxx	Mon Mar 05 17:40:26 2012 -0800
@@ -42,13 +42,16 @@ void compute_Cx(const Model &model, cons
 
           double eta=exp(log_etax[i][j]);
           double delta=(h-std::fabs(dx))/h;
-          double dvx_yy_dv=-2*eta*eta/((h*h)*(min_eta*min_eta + max_eta*max_eta));
+          double dvx_yy_dv=-2*eta*eta/(h*h*(min_eta*min_eta + max_eta*max_eta));
+          if(j==0 || j==Ny-1)
+            dvx_yy_dv/=2;
           double dzy_yx_dv=-eta_jump*dvx_yy_dv;
           double dvy_y_dv=-dzy_yx_dv*h/(min_eta+max_eta);
           double dzx_x_dv=eta_jump*dvy_y_dv;
           double dvp_dv=delta/2 + delta*delta/2;
           double dvpp_dv=-(1-delta)/2 + (1-delta)*(1-delta)/2;
-          double dvx_dv=(eta*(4*dvp_dv - dvpp_dv)  + 2*h*dzx_x_dv)/(3*(min_eta+max_eta));
+          double dvx_dv=(eta*(4*dvp_dv - dvpp_dv)  + 2*h*dzx_x_dv)
+            /(3*(min_eta+max_eta));
           double dp_x_dv=2*eta_jump*dvx_yy_dv;
           double dzx_xx_dv=-eta_jump*dvx_yy_dv + dp_x_dv;
           double dp_dv=-2*eta_jump*dvy_y_dv;
diff -r fa26e2bf82f3 -r 114d616b8587 main.cxx
--- a/main.cxx	Fri Mar 02 16:27:50 2012 -0800
+++ b/main.cxx	Mon Mar 05 17:40:26 2012 -0800
@@ -70,6 +70,8 @@ int main()
     for(int j=0;j<Ny;++j)
       p[i][j]=0;
 
+  zy[0][10]=1;
+
   double Resid_p[Nx][Ny], Resid_x[Nx+1][Ny], Resid_y[Nx][Ny+1];
 
   for(int sweep=0;sweep<n_sweeps;++sweep)
@@ -100,17 +102,11 @@ int main()
                       double dzx_y, dzx_yy;
                       if(j==0)
                         {
-                          // dzx_yy=
-                          //   (-zx[i][Ny-1] - 2*zx[i][j] + zx[i][j+1])/(h*h);
-                          // dzx_y=(zx[i][j+1] + zx[i][Ny-1])/(2*h);
                           dzx_yy=(-zx[i][j] + zx[i][j+1])/(h*h);
                           dzx_y=(zx[i][j+1] - zx[i][j])/(2*h);
                         }
                       else if(j==Ny-1)
                         {
-                          // dzx_yy=
-                          //   (zx[i][j-1] - 2*zx[i][j] - zx[i][0])/(h*h);
-                          // dzx_y=(-zx[i][0] - zx[i][j-1])/(2*h);
                           dzx_yy=(zx[i][j-1] - zx[i][j])/(h*h);
                           dzx_y=(zx[i][j] - zx[i][j-1])/(2*h);
                         }
@@ -166,14 +162,17 @@ int main()
                       double Cx, dCx_dzx;
                       compute_Cx(model,zx,zy,log_etax,log_etay,i,j,Cx,
                                  dCx_dzx);
+
                       double Rx=2*dzx_xx + dzx_yy + dzy_xy 
                         + 2*(dlog_etaxx*zx[i][j] + dlog_etax*dzx_x)
                         + dlog_etayy*zx[i][j] + dlog_etay*dzx_y
                         + dlog_etaxy*zy_avg + dlog_etax*dzy_y
                         - dp_x - fx[i][j] + Cx;
 
-                      double dRx_dzx=
-                        -6/(h*h) + 2*dlog_etaxx + dlog_etayy + dCx_dzx;
+                      double dRx_dzx=-6/(h*h);
+                      if(j==0 || j==Ny-1)
+                        dRx_dzx=-5/(h*h);
+                      dRx_dzx+=2*dlog_etaxx + dlog_etayy + dCx_dzx;
 
                       Resid_x[i][j]=Rx;
                       if(!jacobi)
@@ -280,8 +279,10 @@ int main()
                         + dlog_etayx*zx_avg + dlog_etay*dzx_x
                         - dp_y - fy[i][j] + Cy;
 
-                      double dRy_dzy=
-                        -6/(h*h) + 2*dlog_etayy + dlog_etaxx + dCy_dzy;
+                      double dRy_dzy=-6/(h*h);
+                      if(i==0 || i==Nx-1)
+                        dRy_dzy=-5/(h*h);
+                      dRy_dzy+=2*dlog_etayy + dlog_etaxx + dCy_dzy;
 
                       Resid_y[i][j]=Ry;
                       if(!jacobi)
@@ -392,8 +393,11 @@ int main()
                 double Cx, dCx_dzx;
                 compute_Cx(model,zx,zy,log_etax,log_etay,i,j,Cx,
                            dCx_dzx);
-                double dRx_dzx=
-                  -6/(h*h) + 2*dlog_etaxx + dlog_etayy + dCx_dzx;
+
+                double dRx_dzx=-6/(h*h);
+                if(j==0 || j==Ny-1)
+                  dRx_dzx=-5/(h*h);
+                dRx_dzx+=2*dlog_etaxx + dlog_etayy + dCx_dzx;
 
                 if(!jacobi)
                   zx[i][j]+=(dp[i][j]-dp[i-1][j])/(h*dRx_dzx);
@@ -423,8 +427,10 @@ int main()
                 double Cy, dCy_dzy;
                 compute_Cy(model,zx,zy,log_etax,log_etay,i,j,Cy,
                            dCy_dzy);
-                double dRy_dzy=
-                  -6/(h*h) + 2*dlog_etayy + dlog_etaxx + dCy_dzy;
+                double dRy_dzy=-6/(h*h);
+                if(i==0 || i==Nx-1)
+                  dRy_dzy=-5/(h*h);
+                dRy_dzy+=2*dlog_etayy + dlog_etaxx + dCy_dzy;
 
                 if(!jacobi)
                   zy[i][j]+=(dp[i][j]-dp[i][j-1])/(h*dRy_dzy);



More information about the CIG-COMMITS mailing list