[cig-commits] commit: Implement Jacobi iterations. Does not improve things
Mercurial
hg at geodynamics.org
Fri Feb 17 09:47:20 PST 2012
changeset: 49:5354d53bfb2b
user: Walter Landry <wlandry at caltech.edu>
date: Wed Feb 15 11:24:28 2012 -0800
files: main.cxx
description:
Implement Jacobi iterations. Does not improve things
diff -r 85bab1d05473 -r 5354d53bfb2b main.cxx
--- a/main.cxx Wed Feb 15 06:34:25 2012 -0800
+++ b/main.cxx Wed Feb 15 11:24:28 2012 -0800
@@ -29,12 +29,14 @@ int main()
double zx[Nx+1][Ny], zy[Nx][Ny+1], log_etax[Nx+1][Ny], log_etay[Nx][Ny+1],
p[Nx][Ny], dp[Nx][Ny], div[Nx][Ny], fx[Nx+1][Ny], fy[Nx][Ny+1];
+ double zx_new[Nx+1][Ny], zy_new[Nx][Ny+1], p_new[Nx][Ny];
+
/* Initial conditions */
- const int max_iterations=1;
- int n_sweeps=1;
- const double theta_mom=0.7;
- const double theta_c=1.0;
+ const int max_iterations=10000;
+ int n_sweeps=10000000;
+ const double theta_mom=0.7/100;
+ const double theta_c=1.0/100;
const double tolerance=1.0e-6;
Model model(Model::solCx);
@@ -169,7 +171,10 @@ int main()
// << middle << " "
// // << zx_jump << " "
// // << dzx_x_jump << " "
- // // << dzx_xx_jump << " "
+ // << dzx_xx_jump << " "
+ // << pi*pi*zx[i+1][j]*exp(-log_etax[i+1][j])*eta_jump << " "
+ // << pi*pi*zx[i][j]*exp(-log_etax[i][j])*eta_jump << " "
+ // << pi*pi*zx[i-1][j]*exp(-log_etax[i-1][j])*eta_jump << " "
// // << dzx_xx << " "
// << (zx[i+3][j]-2*zx[i+2][j]+zx[i+1][j])/(h*h) << " "
// << (zx[i+2][j]-2*zx[i+1][j]+zx[i][j])/(h*h) << " "
@@ -205,9 +210,7 @@ int main()
double dRx_dzx=-6/(h*h) + 2*dlog_etaxx + dlog_etayy;
Resid_x[i][j]=Rx;
- // zx[i][j]-=theta_mom*Rx/dRx_dzx;
-
- // Resid_x[i][j]=dzx_xx;
+ zx_new[i][j]=zx[i][j]-theta_mom*Rx/dRx_dzx;
}
}
}
@@ -388,7 +391,7 @@ int main()
double dRy_dzy=-6/(h*h) + 2*dlog_etayy + dlog_etaxx;
Resid_y[i][j]=Ry;
- // zy[i][j]-=theta_mom*Ry/dRy_dzy;
+ zy_new[i][j]=zy[i][j]-theta_mom*Ry/dRy_dzy;
}
}
}
@@ -469,7 +472,7 @@ int main()
Resid_p[i][j]=Rc;
dp[i][j]=-theta_c*Rc/dRc_dp;
- // p[i][j]+=dp[i][j];
+ p_new[i][j]=p[i][j]+dp[i][j];
}
if(sweep%100==0)
@@ -506,7 +509,7 @@ int main()
double dRx_dzx=-6/(h*h) + 2*dlog_etaxx + dlog_etayy;
- // zx[i][j]+=(dp[i][j]-dp[i-1][j])/(h*dRx_dzx);
+ zx_new[i][j]+=(dp[i][j]-dp[i-1][j])/(h*dRx_dzx);
max_x_resid=std::max(std::fabs(Resid_x[i][j]),max_x_resid);
}
@@ -530,7 +533,7 @@ int main()
double dRy_dzy=-6/(h*h) + 2*dlog_etayy + dlog_etaxx;
- // zy[i][j]+=(dp[i][j]-dp[i][j-1])/(h*dRy_dzy);
+ zy_new[i][j]+=(dp[i][j]-dp[i][j-1])/(h*dRy_dzy);
max_y_resid=std::max(fabs(Resid_y[i][j]),max_y_resid);
}
@@ -539,11 +542,12 @@ int main()
if(sweep%100==0)
{
- // std::cout << sweep << " "
- // << max_x_resid << " "
- // << max_y_resid << " "
- // << max_p_resid << " "
- // << "\n";
+ std::cout << iteration << " "
+ << sweep << " "
+ << max_x_resid << " "
+ << max_y_resid << " "
+ << max_p_resid << " "
+ << "\n";
std::stringstream ss;
ss << "zx" << sweep;
@@ -566,22 +570,34 @@ int main()
write_vtk(ss.str(),Nx,NN,div);
}
- if(fabs(max_x_resid-max_x_resid_previous)/max_x_resid < tolerance
- && fabs(max_y_resid-max_y_resid_previous)/max_y_resid < tolerance
- && fabs(max_p_resid-max_p_resid_previous)/max_p_resid < tolerance)
- {
- std::cout << "Solved "
- << sweep << " "
- << tolerance << " "
- << fabs(max_x_resid-max_x_resid_previous)/max_x_resid << " "
- << fabs(max_y_resid-max_y_resid_previous)/max_y_resid << " "
- << fabs(max_p_resid-max_p_resid_previous)/max_p_resid << " "
- << "\n";
- break;
- }
+ // if(fabs(max_x_resid-max_x_resid_previous)/max_x_resid < tolerance
+ // && fabs(max_y_resid-max_y_resid_previous)/max_y_resid < tolerance
+ // && fabs(max_p_resid-max_p_resid_previous)/max_p_resid < tolerance)
+ // {
+ // std::cout << "Solved "
+ // << sweep << " "
+ // << tolerance << " "
+ // << fabs(max_x_resid-max_x_resid_previous)/max_x_resid << " "
+ // << fabs(max_y_resid-max_y_resid_previous)/max_y_resid << " "
+ // << fabs(max_p_resid-max_p_resid_previous)/max_p_resid << " "
+ // << "\n";
+ // break;
+ // }
max_x_resid_previous=max_x_resid;
max_y_resid_previous=max_y_resid;
max_p_resid_previous=max_p_resid;
+
+ for(int i=0;i<Nx+1;++i)
+ for(int j=0;j<Ny+1;++j)
+ {
+ if(j<Ny)
+ zx[i][j]=zx_new[i][j];
+ if(i<Nx)
+ zy[i][j]=zy_new[i][j];
+ if(j<Ny && i<Nx)
+ p[i][j]=p_new[i][j];
+ }
+
}
}
for(int i=0;i<Nx+1;++i)
More information about the CIG-COMMITS
mailing list