Re: [petsc-users] Starting point for Stokes fieldsplit
Hi Dave, Thanks for your help. Max
Hey Max,
Without knowing anything about the specific application related to your Stokes problem, or information about the mesh you are using, I have a couple of questions and suggestions which might help.
The test case that I am working with is isoviscous convection, benchmark case 1a from Blankenbach 1989.
1) If A, is your stokes operator A = ( K,B ; B^T, 0 ), what is your precondition operator? Specifically, what is in the (2,2) slot in the precondioner? - i.e. what matrix are you you applying -stokes_fieldsplit_1_pc_type jacobi -stokes_fieldsplit_1_ksp_type preonly to? Is it the identity as in the SpeedUp notes?
I think that this is the problem. The (2,2) slot in the LHS matrix is all zero (pressure does not appear in the continuity equation), so I think that the preconditioner is meaningless. I am still confused as to why this choice of preconditioner was suggested in the tutorial, and what is a better choice of preconditioner for this block? Should I be using one of the Schur complement methods instead of the additive or multiplicative field split?
2) This choice -stokes_fieldsplit_0_pc_type ml -stokes_fieldsplit_0_ksp_type preonly may simply not be a very effective and degrade the performance of the outer solver. I'd make the solver for the operator in the (1,1) slot much stronger, for example -stokes_fieldsplit_0_ksp_type gmres -stokes_fieldsplit_0_ksp_rtol 1.0e-4 -stokes_fieldsplit_0_mg_levels_ksp_type gmres -stokes_fieldsplit_0_mg_levels_pc_type bjacobi -stokes_fieldsplit_0_mg_levels_ksp_max_it 4
Add a monitor on this solver (-stokes_fieldsplit_0_ksp_XXX) to see how ML is doing.
3) Using -stokes_pc_fieldsplit_type MULTIPLICATIVE should reduce the number of outer iterations by a factor of two, but it will use more memory. 4) You should use a flexible Krylov method on the outer most solve (-stokes_ksp_XXX) as the preconditioner is varying between each outer iteration. Use -stokes_ksp_type fgmres or -stokes_ksp_type gcr
Thanks for pointing this out. I made that change.
5) Depending on how the physical problem is scaled (non-dimensionalised), the size of the residuals associated with the momentum and continuity equation make be quite different. You are currently use the entire residual from (u,p) to determine when to stop iterating. You might want to consider writing a monitor which examines the these residuals independently.
I think that I have scaled the problem correctly. I (slowly) obtain a sufficiently accurate solution using as options only: -stokes_ksp_atol 1e-5 -stokes_ksp_rtol 1e-5 -stokes_ksp_monitor_true_residual -stokes_ksp_norm_type UNPRECONDITIONED
Cheers, Dave
On Mon, Feb 20, 2012 at 2:05 PM, Max Rudolph <[email protected]> wrote:
Hi Dave, Thanks for your help.
Max
Hey Max,
Without knowing anything about the specific application related to your Stokes problem, or information about the mesh you are using, I have a couple of questions and suggestions which might help.
The test case that I am working with is isoviscous convection, benchmark case 1a from Blankenbach 1989.
1) If A, is your stokes operator A = ( K,B ; B^T, 0 ), what is your precondition operator? Specifically, what is in the (2,2) slot in the precondioner? - i.e. what matrix are you you applying -stokes_fieldsplit_1_pc_type jacobi -stokes_fieldsplit_1_ksp_type preonly to? Is it the identity as in the SpeedUp notes?
I think that this is the problem. The (2,2) slot in the LHS matrix is all zero (pressure does not appear in the continuity equation), so I think that the preconditioner is meaningless. I am still confused as to why this choice of preconditioner was suggested in the tutorial, and what is a better choice of preconditioner for this block? Should I be using one of the Schur complement methods instead of the additive or multiplicative field split?
Its not suggested, it is demonstrated. Its the first logical choice, since Jacobi gives the identity for a 0 block (see http://www.jstor.org/pss/2158202). Its not meaningless. All the better preconditioners involve either a Schur complement (also shown in the tutorial), or an auxiliary operator which is more difficult to setup and thus not shown.
2) This choice -stokes_fieldsplit_0_pc_type ml -stokes_fieldsplit_0_ksp_type preonly may simply not be a very effective and degrade the performance of the outer solver. I'd make the solver for the operator in the (1,1) slot much stronger, for example -stokes_fieldsplit_0_ksp_type gmres -stokes_fieldsplit_0_ksp_rtol 1.0e-4 -stokes_fieldsplit_0_mg_levels_ksp_type gmres -stokes_fieldsplit_0_mg_levels_pc_type bjacobi -stokes_fieldsplit_0_mg_levels_ksp_max_it 4
Add a monitor on this solver (-stokes_fieldsplit_0_ksp_XXX) to see how ML is doing.
3) Using -stokes_pc_fieldsplit_type MULTIPLICATIVE should reduce the number of outer iterations by a factor of two, but it will use more memory.
4) You should use a flexible Krylov method on the outer most solve (-stokes_ksp_XXX) as the preconditioner is varying between each outer iteration. Use -stokes_ksp_type fgmres or -stokes_ksp_type gcr
Thanks for pointing this out. I made that change.
5) Depending on how the physical problem is scaled (non-dimensionalised), the size of the residuals associated with the momentum and continuity equation make be quite different. You are currently use the entire residual from (u,p) to determine when to stop iterating. You might want to consider writing a monitor which examines the these residuals independently.
I think that I have scaled the problem correctly. I (slowly) obtain a sufficiently accurate solution using as options only: -stokes_ksp_atol 1e-5 -stokes_ksp_rtol 1e-5 -stokes_ksp_monitor_true_residual -stokes_ksp_norm_type UNPRECONDITIONED
How do you know the problem is scaled correctly? Have you looked at norms of the residuals for the two systems? Thanks, Matt
Cheers, Dave
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
Max,
The test case that I am working with is isoviscous convection, benchmark case 1a from Blankenbach 1989.
Okay, I know this problem. An iso viscous problem, solved on a uniform grid using dx=dy=dz discretised via FV should be super easy to precondition.
I think that this is the problem. The (2,2) slot in the LHS matrix is all zero (pressure does not appear in the continuity equation), so I think that the preconditioner is meaningless. I am still confused as to why this choice of preconditioner was suggested in the tutorial, and what is a better choice of preconditioner for this block? Should I be using one of the Schur complement methods instead of the additive or multiplicative field split?
No, you need to define an appropriate stokes preconditioner You should assemble this matrix B = ( K,B ; B^T, -1/eta* I ) as the preconditioner for stokes. Here eta* is a measure of the local viscosity within each pressure control volume. Unless you specify to use the real diagonal Pass this into the third argument in KSPSetOperators() (i.e. the Pmat variable) http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/KSPSetOperat... Not sure how you represent A and B, but if you really want to run just additive with fieldsplit, you don't need the off diagonal blocks, so B = ( K,0 ; 0, -1/eta* I ) would yield the same result. Depending on your matrix representation, this may save you some memory. PCFieldsplit will use the B(1,1) and B(2,2) to build the stokes preconditioner unless you ask for it to use the real diagonal - but for the stokes operator A, this makes no sense. This is the right thing to do (as Matt states). Try it out, and let us know how it goes. Cheers, Dave
On Tue, Feb 21, 2012 at 3:36 AM, Dave May <[email protected]> wrote:
Max,
The test case that I am working with is isoviscous convection, benchmark case 1a from Blankenbach 1989.
Okay, I know this problem. An iso viscous problem, solved on a uniform grid using dx=dy=dz discretised via FV should be super easy to precondition.
I think that this is the problem. The (2,2) slot in the LHS matrix is all zero (pressure does not appear in the continuity equation), so I think
that
the preconditioner is meaningless. I am still confused as to why this choice of preconditioner was suggested in the tutorial, and what is a better choice of preconditioner for this block? Should I be using one of the Schur complement methods instead of the additive or multiplicative field split?
No, you need to define an appropriate stokes preconditioner You should assemble this matrix B = ( K,B ; B^T, -1/eta* I ) as the preconditioner for stokes. Here eta* is a measure of the local viscosity within each pressure control volume. Unless you specify to use the real diagonal
Pass this into the third argument in KSPSetOperators() (i.e. the Pmat variable)
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/KSPSetOperat...
Not sure how you represent A and B, but if you really want to run just additive with fieldsplit, you don't need the off diagonal blocks, so B = ( K,0 ; 0, -1/eta* I ) would yield the same result. Depending on your matrix representation, this may save you some memory.
PCFieldsplit will use the B(1,1) and B(2,2) to build the stokes preconditioner unless you ask for it to use the real diagonal - but for the stokes operator A, this makes no sense.
This is the right thing to do (as Matt states). Try it out, and let us know how it goes.
Cheers, Dave
Dave and Matt, Thanks for your help. I had some time to work on this a little more. I now have a stokes operator A that looks like this: A=(K B; B^T 0) and a matrix from which the preconditioner is generated P=(K B; B^T -1/eta*I) I verified that I can solve this system using the default ksp and pc settings in 77 iterations for the first timestep (initial guess zero) and in 31 iterations for the second timestep (nonzero initial guess). I adopted your suggestion to use the multiplicative field split as a starting point. My reading of the PETSc manual suggests to me that the preconditioner formed should then look like: B = (ksp(K,K) 0;-B^T*ksp(K,K)*ksp(0,-1/eta*I) ksp(0,-1/eta*I)) My interpretation of the output suggests that the solvers within each fieldsplit are converging nicely, but the global residual is not decreasing after the first few iterations. Given the disparity in residual sizes, I think that there might be a problem with the scaling of the pressure variable (I scaled the continuity equation by eta/dx where dx is my grid spacing). I also scaled the (1,1) block in the preconditioner by this scale factor. Thanks again for all of your help. Max Options used: -stokes_pc_fieldsplit_0_fields 0,1 -stokes_pc_fieldsplit_1_fields 2 \ -stokes_pc_type fieldsplit -stokes_pc_fieldsplit_type multiplicative \ -stokes_fieldsplit_0_pc_type ml \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_monitor_true_residual \ -stokes_fieldsplit_0_ksp_norm_type UNPRECONDITIONED \ -stokes_fieldsplit_0_ksp_max_it 3 \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_rtol 1.0e-4 \ -stokes_fieldsplit_0_mg_levels_ksp_type gmres \ -stokes_fieldsplit_0_mg_levels_pc_type bjacobi \ -stokes_fieldsplit_0_mg_levels_ksp_max_it 4 \ -stokes_fieldsplit_1_pc_type jacobi \ -stokes_fieldsplit_1_ksp_type preonly \ -stokes_fieldsplit_1_ksp_max_it 3 \ -stokes_fieldsplit_1_ksp_monitor_true_residual \ -stokes_ksp_type gcr \ -stokes_ksp_monitor_blocks \ -stokes_ksp_monitor_draw \ -stokes_ksp_view \ -stokes_ksp_atol 1e-6 \ -stokes_ksp_rtol 1e-6 \ -stokes_ksp_max_it 100 \ -stokes_ksp_norm_type UNPRECONDITIONED \ -stokes_ksp_monitor_true_residual \ Output: 0 KSP Component U,V,P residual norm [ 0.000000000000e+00, 1.165111661413e+06, 0.000000000000e+00 ] Residual norms for stokes_ solve. 0 KSP unpreconditioned resid norm 1.165111661413e+06 true resid norm 1.165111661413e+06 ||r(i)||/||b|| 1.000000000000e+00 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.165111661413e+06 true resid norm 1.165111661413e+06 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 3.173622513625e+05 true resid norm 3.173622513625e+05 ||r(i)||/||b|| 2.723878421898e-01 2 KSP unpreconditioned resid norm 5.634119635158e+04 true resid norm 1.725996376799e+05 ||r(i)||/||b|| 1.481399967026e-01 3 KSP unpreconditioned resid norm 1.218418968344e+03 true resid norm 1.559727441168e+05 ||r(i)||/||b|| 1.338693528546e-01 1 KSP Component U,V,P residual norm [ 5.763380362961e+04, 1.154490085631e+05, 3.370358145704e-12 ] 1 KSP unpreconditioned resid norm 1.290353784783e+05 true resid norm 1.290353784783e+05 ||r(i)||/||b|| 1.107493665644e-01 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.290353784783e+05 true resid norm 1.290353784783e+05 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 1.655137188235e+04 true resid norm 1.655137188235e+04 ||r(i)||/||b|| 1.282700301076e-01 2 KSP unpreconditioned resid norm 1.195941831181e+03 true resid norm 4.554417355181e+03 ||r(i)||/||b|| 3.529588093508e-02 3 KSP unpreconditioned resid norm 8.479547025398e+01 true resid norm 3.817072778396e+03 ||r(i)||/||b|| 2.958159865466e-02 2 KSP Component U,V,P residual norm [ 2.026983725663e+03, 2.531521226429e+03, 3.419060873106e-12 ] 2 KSP unpreconditioned resid norm 3.243032954498e+03 true resid norm 3.243032954498e+03 ||r(i)||/||b|| 2.783452489493e-03 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 3.243032954498e+03 true resid norm 3.243032954498e+03 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 1.170090628031e+02 true resid norm 1.170090628031e+02 ||r(i)||/||b|| 3.608013376517e-02 2 KSP unpreconditioned resid norm 9.782830529900e+00 true resid norm 1.741722174777e+01 ||r(i)||/||b|| 5.370658267168e-03 3 KSP unpreconditioned resid norm 6.886950142735e-01 true resid norm 1.636749336722e+01 ||r(i)||/||b|| 5.046971028932e-03 3 KSP Component U,V,P residual norm [ 7.515013854917e+01, 7.515663601801e+01, 3.418919176066e-12 ] 3 KSP unpreconditioned resid norm 1.062829396540e+02 true resid norm 1.062829396540e+02 ||r(i)||/||b|| 9.122124786317e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.062829396540e+02 true resid norm 1.062829396540e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.373578062042e+01 true resid norm 5.373578062042e+01 ||r(i)||/||b|| 5.055917797846e-01 2 KSP unpreconditioned resid norm 1.199305097134e+00 true resid norm 3.492111756827e+01 ||r(i)||/||b|| 3.285674792393e-01 3 KSP unpreconditioned resid norm 9.508597255523e-02 true resid norm 3.452079362567e+01 ||r(i)||/||b|| 3.248008922038e-01 4 KSP Component U,V,P residual norm [ 7.495897679790e+01, 7.527868410560e+01, 3.418919160091e-12 ] 4 KSP unpreconditioned resid norm 1.062343093509e+02 true resid norm 1.062343093509e+02 ||r(i)||/||b|| 9.117950911420e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.062343093509e+02 true resid norm 1.062343093509e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.419252803207e+01 true resid norm 5.419252803207e+01 ||r(i)||/||b|| 5.101226558840e-01 2 KSP unpreconditioned resid norm 1.431134174522e+00 true resid norm 3.339055236737e+01 ||r(i)||/||b|| 3.143104386088e-01 3 KSP unpreconditioned resid norm 9.760479467902e-02 true resid norm 3.304522520358e+01 ||r(i)||/||b|| 3.110598205561e-01 5 KSP Component U,V,P residual norm [ 7.491128585963e+01, 7.523275560552e+01, 3.418919008441e-12 ] 5 KSP unpreconditioned resid norm 1.061681132221e+02 true resid norm 1.061681132221e+02 ||r(i)||/||b|| 9.112269384837e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061681132221e+02 true resid norm 1.061681132221e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.343215079492e+01 true resid norm 5.343215079492e+01 ||r(i)||/||b|| 5.032787074508e-01 2 KSP unpreconditioned resid norm 1.288069736759e+00 true resid norm 3.308925591301e+01 ||r(i)||/||b|| 3.116684935691e-01 3 KSP unpreconditioned resid norm 9.505248953960e-02 true resid norm 3.281875055845e+01 ||r(i)||/||b|| 3.091205971589e-01 6 KSP Component U,V,P residual norm [ 7.481188568118e+01, 7.527346267608e+01, 3.418918860626e-12 ] 6 KSP unpreconditioned resid norm 1.061268694649e+02 true resid norm 1.061268694649e+02 ||r(i)||/||b|| 9.108729487455e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061268694649e+02 true resid norm 1.061268694649e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.300383444945e+01 true resid norm 5.300383444945e+01 ||r(i)||/||b|| 4.994384053416e-01 2 KSP unpreconditioned resid norm 1.118785004087e+00 true resid norm 3.282090953364e+01 ||r(i)||/||b|| 3.092610730828e-01 3 KSP unpreconditioned resid norm 9.758015489979e-02 true resid norm 3.259718081014e+01 ||r(i)||/||b|| 3.071529479244e-01 7 KSP Component U,V,P residual norm [ 7.475024970669e+01, 7.530858268154e+01, 3.418918784089e-12 ] 7 KSP unpreconditioned resid norm 1.061083524362e+02 true resid norm 1.061083524362e+02 ||r(i)||/||b|| 9.107140195255e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061083524362e+02 true resid norm 1.061083524362e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.296981668051e+01 true resid norm 5.296981668051e+01 ||r(i)||/||b|| 4.992049679820e-01 2 KSP unpreconditioned resid norm 9.379451887610e-01 true resid norm 3.378466967056e+01 ||r(i)||/||b|| 3.183978348066e-01 3 KSP unpreconditioned resid norm 9.102580142867e-02 true resid norm 3.360853440947e+01 ||r(i)||/||b|| 3.167378781957e-01 8 KSP Component U,V,P residual norm [ 7.464535615814e+01, 7.537007679541e+01, 3.418918790515e-12 ] 8 KSP unpreconditioned resid norm 1.060781677449e+02 true resid norm 1.060781677449e+02 ||r(i)||/||b|| 9.104549482946e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060781677449e+02 true resid norm 1.060781677449e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.281972737642e+01 true resid norm 5.281972737642e+01 ||r(i)||/||b|| 4.979321240109e-01 2 KSP unpreconditioned resid norm 9.224594814880e-01 true resid norm 3.351285171891e+01 ||r(i)||/||b|| 3.159260046751e-01 3 KSP unpreconditioned resid norm 9.143100662935e-02 true resid norm 3.329269756083e+01 ||r(i)||/||b|| 3.138506091177e-01 9 KSP Component U,V,P residual norm [ 7.451688471900e+01, 7.544516987344e+01, 3.418918860847e-12 ] 9 KSP unpreconditioned resid norm 1.060412172952e+02 true resid norm 1.060412172952e+02 ||r(i)||/||b|| 9.101378074496e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060412172952e+02 true resid norm 1.060412172952e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.275132249899e+01 true resid norm 5.275132249899e+01 ||r(i)||/||b|| 4.974605520805e-01 2 KSP unpreconditioned resid norm 7.755381284769e-01 true resid norm 3.453933285011e+01 ||r(i)||/||b|| 3.257161105001e-01 3 KSP unpreconditioned resid norm 7.298768665179e-02 true resid norm 3.435179316160e+01 ||r(i)||/||b|| 3.239475558447e-01 10 KSP Component U,V,P residual norm [ 7.451431102619e+01, 7.544762349626e+01, 3.418918857322e-12 ] 10 KSP unpreconditioned resid norm 1.060411544587e+02 true resid norm 1.060411544587e+02 ||r(i)||/||b|| 9.101372681321e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060411544587e+02 true resid norm 1.060411544587e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.276103518337e+01 true resid norm 5.276103518337e+01 ||r(i)||/||b|| 4.975524403961e-01 2 KSP unpreconditioned resid norm 7.777079890360e-01 true resid norm 3.454373663425e+01 ||r(i)||/||b|| 3.257578325186e-01 3 KSP unpreconditioned resid norm 7.356028471071e-02 true resid norm 3.435584054266e+01 ||r(i)||/||b|| 3.239859158269e-01 11 KSP Component U,V,P residual norm [ 7.438335197779e+01, 7.553731959735e+01, 3.418918856471e-12 ]
I did eventually make my test case work using the split preconditioning, first using additive schwartz as the preconditioner for the upper left (0,0) block and then using ML with asm and gmres within each multigrid level. I am posting my runtime options in case it might be helpful for someone else out there who wants to try this. The key to getting the solver to converge for me was starting with a good initial guess (the solution diverged with a zero initial guess), especially for the pressure field, using gcr as the outer ksp and, small ksp_rtol values for both of the inner ksps. Max -stokes_pc_fieldsplit_0_fields 0,1 -stokes_pc_fieldsplit_1_fields 2 \ -stokes_pc_type fieldsplit -stokes_pc_fieldsplit_type multiplicative \ -stokes_ksp_initial_guess_nonzero \ -stokes_fieldsplit_0_pc_type asm \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_initial_guess_nonzero \ -stokes_fieldsplit_0_ksp_max_it 10 \ -stokes_fieldsplit_0_ksp_rtol 1.0e-9 \ -stokes_fieldsplit_1_pc_type jacobi \ -stokes_fieldsplit_1_ksp_type gmres \ -stokes_fieldsplit_1_ksp_max_it 10 \ -stokes_fieldsplit_1_ksp_rtol 1.0e-9 \ -stokes_ksp_type gcr \ -stokes_ksp_monitor_blocks \ -stokes_ksp_monitor \ -stokes_ksp_view \ -stokes_ksp_atol 1e-2 \ -stokes_ksp_rtol 0.0 \ On Wed, Feb 22, 2012 at 1:29 PM, Max Rudolph <[email protected]> wrote:
On Tue, Feb 21, 2012 at 3:36 AM, Dave May <[email protected]> wrote:
Max,
The test case that I am working with is isoviscous convection, benchmark case 1a from Blankenbach 1989.
Okay, I know this problem. An iso viscous problem, solved on a uniform grid using dx=dy=dz discretised via FV should be super easy to precondition.
I think that this is the problem. The (2,2) slot in the LHS matrix is
all
zero (pressure does not appear in the continuity equation), so I think that the preconditioner is meaningless. I am still confused as to why this choice of preconditioner was suggested in the tutorial, and what is a better choice of preconditioner for this block? Should I be using one of the Schur complement methods instead of the additive or multiplicative field split?
No, you need to define an appropriate stokes preconditioner You should assemble this matrix B = ( K,B ; B^T, -1/eta* I ) as the preconditioner for stokes. Here eta* is a measure of the local viscosity within each pressure control volume. Unless you specify to use the real diagonal
Pass this into the third argument in KSPSetOperators() (i.e. the Pmat variable)
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/KSPSetOperat...
Not sure how you represent A and B, but if you really want to run just additive with fieldsplit, you don't need the off diagonal blocks, so B = ( K,0 ; 0, -1/eta* I ) would yield the same result. Depending on your matrix representation, this may save you some memory.
PCFieldsplit will use the B(1,1) and B(2,2) to build the stokes preconditioner unless you ask for it to use the real diagonal - but for the stokes operator A, this makes no sense.
This is the right thing to do (as Matt states). Try it out, and let us know how it goes.
Cheers, Dave
Dave and Matt, Thanks for your help. I had some time to work on this a little more. I now have a stokes operator A that looks like this: A=(K B; B^T 0) and a matrix from which the preconditioner is generated P=(K B; B^T -1/eta*I)
I verified that I can solve this system using the default ksp and pc settings in 77 iterations for the first timestep (initial guess zero) and in 31 iterations for the second timestep (nonzero initial guess).
I adopted your suggestion to use the multiplicative field split as a starting point. My reading of the PETSc manual suggests to me that the preconditioner formed should then look like:
B = (ksp(K,K) 0;-B^T*ksp(K,K)*ksp(0,-1/eta*I) ksp(0,-1/eta*I))
My interpretation of the output suggests that the solvers within each fieldsplit are converging nicely, but the global residual is not decreasing after the first few iterations. Given the disparity in residual sizes, I think that there might be a problem with the scaling of the pressure variable (I scaled the continuity equation by eta/dx where dx is my grid spacing). I also scaled the (1,1) block in the preconditioner by this scale factor. Thanks again for all of your help.
Max
Options used: -stokes_pc_fieldsplit_0_fields 0,1 -stokes_pc_fieldsplit_1_fields 2 \ -stokes_pc_type fieldsplit -stokes_pc_fieldsplit_type multiplicative \ -stokes_fieldsplit_0_pc_type ml \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_monitor_true_residual \ -stokes_fieldsplit_0_ksp_norm_type UNPRECONDITIONED \ -stokes_fieldsplit_0_ksp_max_it 3 \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_rtol 1.0e-4 \ -stokes_fieldsplit_0_mg_levels_ksp_type gmres \ -stokes_fieldsplit_0_mg_levels_pc_type bjacobi \ -stokes_fieldsplit_0_mg_levels_ksp_max_it 4 \ -stokes_fieldsplit_1_pc_type jacobi \ -stokes_fieldsplit_1_ksp_type preonly \ -stokes_fieldsplit_1_ksp_max_it 3 \ -stokes_fieldsplit_1_ksp_monitor_true_residual \ -stokes_ksp_type gcr \ -stokes_ksp_monitor_blocks \ -stokes_ksp_monitor_draw \ -stokes_ksp_view \ -stokes_ksp_atol 1e-6 \ -stokes_ksp_rtol 1e-6 \ -stokes_ksp_max_it 100 \ -stokes_ksp_norm_type UNPRECONDITIONED \ -stokes_ksp_monitor_true_residual \
Output:
0 KSP Component U,V,P residual norm [ 0.000000000000e+00, 1.165111661413e+06, 0.000000000000e+00 ] Residual norms for stokes_ solve. 0 KSP unpreconditioned resid norm 1.165111661413e+06 true resid norm 1.165111661413e+06 ||r(i)||/||b|| 1.000000000000e+00 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.165111661413e+06 true resid norm 1.165111661413e+06 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 3.173622513625e+05 true resid norm 3.173622513625e+05 ||r(i)||/||b|| 2.723878421898e-01 2 KSP unpreconditioned resid norm 5.634119635158e+04 true resid norm 1.725996376799e+05 ||r(i)||/||b|| 1.481399967026e-01 3 KSP unpreconditioned resid norm 1.218418968344e+03 true resid norm 1.559727441168e+05 ||r(i)||/||b|| 1.338693528546e-01 1 KSP Component U,V,P residual norm [ 5.763380362961e+04, 1.154490085631e+05, 3.370358145704e-12 ] 1 KSP unpreconditioned resid norm 1.290353784783e+05 true resid norm 1.290353784783e+05 ||r(i)||/||b|| 1.107493665644e-01 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.290353784783e+05 true resid norm 1.290353784783e+05 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 1.655137188235e+04 true resid norm 1.655137188235e+04 ||r(i)||/||b|| 1.282700301076e-01 2 KSP unpreconditioned resid norm 1.195941831181e+03 true resid norm 4.554417355181e+03 ||r(i)||/||b|| 3.529588093508e-02 3 KSP unpreconditioned resid norm 8.479547025398e+01 true resid norm 3.817072778396e+03 ||r(i)||/||b|| 2.958159865466e-02 2 KSP Component U,V,P residual norm [ 2.026983725663e+03, 2.531521226429e+03, 3.419060873106e-12 ] 2 KSP unpreconditioned resid norm 3.243032954498e+03 true resid norm 3.243032954498e+03 ||r(i)||/||b|| 2.783452489493e-03 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 3.243032954498e+03 true resid norm 3.243032954498e+03 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 1.170090628031e+02 true resid norm 1.170090628031e+02 ||r(i)||/||b|| 3.608013376517e-02 2 KSP unpreconditioned resid norm 9.782830529900e+00 true resid norm 1.741722174777e+01 ||r(i)||/||b|| 5.370658267168e-03 3 KSP unpreconditioned resid norm 6.886950142735e-01 true resid norm 1.636749336722e+01 ||r(i)||/||b|| 5.046971028932e-03 3 KSP Component U,V,P residual norm [ 7.515013854917e+01, 7.515663601801e+01, 3.418919176066e-12 ] 3 KSP unpreconditioned resid norm 1.062829396540e+02 true resid norm 1.062829396540e+02 ||r(i)||/||b|| 9.122124786317e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.062829396540e+02 true resid norm 1.062829396540e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.373578062042e+01 true resid norm 5.373578062042e+01 ||r(i)||/||b|| 5.055917797846e-01 2 KSP unpreconditioned resid norm 1.199305097134e+00 true resid norm 3.492111756827e+01 ||r(i)||/||b|| 3.285674792393e-01 3 KSP unpreconditioned resid norm 9.508597255523e-02 true resid norm 3.452079362567e+01 ||r(i)||/||b|| 3.248008922038e-01 4 KSP Component U,V,P residual norm [ 7.495897679790e+01, 7.527868410560e+01, 3.418919160091e-12 ] 4 KSP unpreconditioned resid norm 1.062343093509e+02 true resid norm 1.062343093509e+02 ||r(i)||/||b|| 9.117950911420e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.062343093509e+02 true resid norm 1.062343093509e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.419252803207e+01 true resid norm 5.419252803207e+01 ||r(i)||/||b|| 5.101226558840e-01 2 KSP unpreconditioned resid norm 1.431134174522e+00 true resid norm 3.339055236737e+01 ||r(i)||/||b|| 3.143104386088e-01 3 KSP unpreconditioned resid norm 9.760479467902e-02 true resid norm 3.304522520358e+01 ||r(i)||/||b|| 3.110598205561e-01 5 KSP Component U,V,P residual norm [ 7.491128585963e+01, 7.523275560552e+01, 3.418919008441e-12 ] 5 KSP unpreconditioned resid norm 1.061681132221e+02 true resid norm 1.061681132221e+02 ||r(i)||/||b|| 9.112269384837e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061681132221e+02 true resid norm 1.061681132221e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.343215079492e+01 true resid norm 5.343215079492e+01 ||r(i)||/||b|| 5.032787074508e-01 2 KSP unpreconditioned resid norm 1.288069736759e+00 true resid norm 3.308925591301e+01 ||r(i)||/||b|| 3.116684935691e-01 3 KSP unpreconditioned resid norm 9.505248953960e-02 true resid norm 3.281875055845e+01 ||r(i)||/||b|| 3.091205971589e-01 6 KSP Component U,V,P residual norm [ 7.481188568118e+01, 7.527346267608e+01, 3.418918860626e-12 ] 6 KSP unpreconditioned resid norm 1.061268694649e+02 true resid norm 1.061268694649e+02 ||r(i)||/||b|| 9.108729487455e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061268694649e+02 true resid norm 1.061268694649e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.300383444945e+01 true resid norm 5.300383444945e+01 ||r(i)||/||b|| 4.994384053416e-01 2 KSP unpreconditioned resid norm 1.118785004087e+00 true resid norm 3.282090953364e+01 ||r(i)||/||b|| 3.092610730828e-01 3 KSP unpreconditioned resid norm 9.758015489979e-02 true resid norm 3.259718081014e+01 ||r(i)||/||b|| 3.071529479244e-01 7 KSP Component U,V,P residual norm [ 7.475024970669e+01, 7.530858268154e+01, 3.418918784089e-12 ] 7 KSP unpreconditioned resid norm 1.061083524362e+02 true resid norm 1.061083524362e+02 ||r(i)||/||b|| 9.107140195255e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061083524362e+02 true resid norm 1.061083524362e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.296981668051e+01 true resid norm 5.296981668051e+01 ||r(i)||/||b|| 4.992049679820e-01 2 KSP unpreconditioned resid norm 9.379451887610e-01 true resid norm 3.378466967056e+01 ||r(i)||/||b|| 3.183978348066e-01 3 KSP unpreconditioned resid norm 9.102580142867e-02 true resid norm 3.360853440947e+01 ||r(i)||/||b|| 3.167378781957e-01 8 KSP Component U,V,P residual norm [ 7.464535615814e+01, 7.537007679541e+01, 3.418918790515e-12 ] 8 KSP unpreconditioned resid norm 1.060781677449e+02 true resid norm 1.060781677449e+02 ||r(i)||/||b|| 9.104549482946e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060781677449e+02 true resid norm 1.060781677449e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.281972737642e+01 true resid norm 5.281972737642e+01 ||r(i)||/||b|| 4.979321240109e-01 2 KSP unpreconditioned resid norm 9.224594814880e-01 true resid norm 3.351285171891e+01 ||r(i)||/||b|| 3.159260046751e-01 3 KSP unpreconditioned resid norm 9.143100662935e-02 true resid norm 3.329269756083e+01 ||r(i)||/||b|| 3.138506091177e-01 9 KSP Component U,V,P residual norm [ 7.451688471900e+01, 7.544516987344e+01, 3.418918860847e-12 ] 9 KSP unpreconditioned resid norm 1.060412172952e+02 true resid norm 1.060412172952e+02 ||r(i)||/||b|| 9.101378074496e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060412172952e+02 true resid norm 1.060412172952e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.275132249899e+01 true resid norm 5.275132249899e+01 ||r(i)||/||b|| 4.974605520805e-01 2 KSP unpreconditioned resid norm 7.755381284769e-01 true resid norm 3.453933285011e+01 ||r(i)||/||b|| 3.257161105001e-01 3 KSP unpreconditioned resid norm 7.298768665179e-02 true resid norm 3.435179316160e+01 ||r(i)||/||b|| 3.239475558447e-01 10 KSP Component U,V,P residual norm [ 7.451431102619e+01, 7.544762349626e+01, 3.418918857322e-12 ] 10 KSP unpreconditioned resid norm 1.060411544587e+02 true resid norm 1.060411544587e+02 ||r(i)||/||b|| 9.101372681321e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060411544587e+02 true resid norm 1.060411544587e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.276103518337e+01 true resid norm 5.276103518337e+01 ||r(i)||/||b|| 4.975524403961e-01 2 KSP unpreconditioned resid norm 7.777079890360e-01 true resid norm 3.454373663425e+01 ||r(i)||/||b|| 3.257578325186e-01 3 KSP unpreconditioned resid norm 7.356028471071e-02 true resid norm 3.435584054266e+01 ||r(i)||/||b|| 3.239859158269e-01 11 KSP Component U,V,P residual norm [ 7.438335197779e+01, 7.553731959735e+01, 3.418918856471e-12 ]
On Sun, Feb 26, 2012 at 4:39 PM, Max Rudolph <[email protected]> wrote:
I did eventually make my test case work using the split preconditioning, first using additive schwartz as the preconditioner for the upper left (0,0) block and then using ML with asm and gmres within each multigrid level. I am posting my runtime options in case it might be helpful for someone else out there who wants to try this. The key to getting the solver to converge for me was starting with a good initial guess (the solution diverged with a zero initial guess), especially for the pressure field, using gcr as the outer ksp and, small ksp_rtol values for both of the inner ksps.
This sounds wrong. I think you have a bug. The discussion motivated me to put all the simple Stokes preconditioners in ex62 (tests 30-37 in builder.py). Once I get matrix-free application going, I will put in the auxiliary operator PCs that Dave suggested. Also, always start using LU until you understand how the outer iteration behaves, then back off to ML or GAMG. Matt
Max
-stokes_pc_fieldsplit_0_fields 0,1 -stokes_pc_fieldsplit_1_fields 2 \ -stokes_pc_type fieldsplit -stokes_pc_fieldsplit_type multiplicative \ -stokes_ksp_initial_guess_nonzero \ -stokes_fieldsplit_0_pc_type asm \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_initial_guess_nonzero \ -stokes_fieldsplit_0_ksp_max_it 10 \ -stokes_fieldsplit_0_ksp_rtol 1.0e-9 \ -stokes_fieldsplit_1_pc_type jacobi \ -stokes_fieldsplit_1_ksp_type gmres \ -stokes_fieldsplit_1_ksp_max_it 10 \ -stokes_fieldsplit_1_ksp_rtol 1.0e-9 \ -stokes_ksp_type gcr \ -stokes_ksp_monitor_blocks \ -stokes_ksp_monitor \ -stokes_ksp_view \ -stokes_ksp_atol 1e-2 \ -stokes_ksp_rtol 0.0 \
On Wed, Feb 22, 2012 at 1:29 PM, Max Rudolph <[email protected]> wrote:
On Tue, Feb 21, 2012 at 3:36 AM, Dave May <[email protected]>wrote:
Max,
The test case that I am working with is isoviscous convection,
benchmark
case 1a from Blankenbach 1989.
Okay, I know this problem. An iso viscous problem, solved on a uniform grid using dx=dy=dz discretised via FV should be super easy to precondition.
I think that this is the problem. The (2,2) slot in the LHS matrix is
all
zero (pressure does not appear in the continuity equation), so I think that the preconditioner is meaningless. I am still confused as to why this choice of preconditioner was suggested in the tutorial, and what is a better choice of preconditioner for this block? Should I be using one of the Schur complement methods instead of the additive or multiplicative field split?
No, you need to define an appropriate stokes preconditioner You should assemble this matrix B = ( K,B ; B^T, -1/eta* I ) as the preconditioner for stokes. Here eta* is a measure of the local viscosity within each pressure control volume. Unless you specify to use the real diagonal
Pass this into the third argument in KSPSetOperators() (i.e. the Pmat variable)
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/KSPSetOperat...
Not sure how you represent A and B, but if you really want to run just additive with fieldsplit, you don't need the off diagonal blocks, so B = ( K,0 ; 0, -1/eta* I ) would yield the same result. Depending on your matrix representation, this may save you some memory.
PCFieldsplit will use the B(1,1) and B(2,2) to build the stokes preconditioner unless you ask for it to use the real diagonal - but for the stokes operator A, this makes no sense.
This is the right thing to do (as Matt states). Try it out, and let us know how it goes.
Cheers, Dave
Dave and Matt, Thanks for your help. I had some time to work on this a little more. I now have a stokes operator A that looks like this: A=(K B; B^T 0) and a matrix from which the preconditioner is generated P=(K B; B^T -1/eta*I)
I verified that I can solve this system using the default ksp and pc settings in 77 iterations for the first timestep (initial guess zero) and in 31 iterations for the second timestep (nonzero initial guess).
I adopted your suggestion to use the multiplicative field split as a starting point. My reading of the PETSc manual suggests to me that the preconditioner formed should then look like:
B = (ksp(K,K) 0;-B^T*ksp(K,K)*ksp(0,-1/eta*I) ksp(0,-1/eta*I))
My interpretation of the output suggests that the solvers within each fieldsplit are converging nicely, but the global residual is not decreasing after the first few iterations. Given the disparity in residual sizes, I think that there might be a problem with the scaling of the pressure variable (I scaled the continuity equation by eta/dx where dx is my grid spacing). I also scaled the (1,1) block in the preconditioner by this scale factor. Thanks again for all of your help.
Max
Options used: -stokes_pc_fieldsplit_0_fields 0,1 -stokes_pc_fieldsplit_1_fields 2 \ -stokes_pc_type fieldsplit -stokes_pc_fieldsplit_type multiplicative \ -stokes_fieldsplit_0_pc_type ml \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_monitor_true_residual \ -stokes_fieldsplit_0_ksp_norm_type UNPRECONDITIONED \ -stokes_fieldsplit_0_ksp_max_it 3 \ -stokes_fieldsplit_0_ksp_type gmres \ -stokes_fieldsplit_0_ksp_rtol 1.0e-4 \ -stokes_fieldsplit_0_mg_levels_ksp_type gmres \ -stokes_fieldsplit_0_mg_levels_pc_type bjacobi \ -stokes_fieldsplit_0_mg_levels_ksp_max_it 4 \ -stokes_fieldsplit_1_pc_type jacobi \ -stokes_fieldsplit_1_ksp_type preonly \ -stokes_fieldsplit_1_ksp_max_it 3 \ -stokes_fieldsplit_1_ksp_monitor_true_residual \ -stokes_ksp_type gcr \ -stokes_ksp_monitor_blocks \ -stokes_ksp_monitor_draw \ -stokes_ksp_view \ -stokes_ksp_atol 1e-6 \ -stokes_ksp_rtol 1e-6 \ -stokes_ksp_max_it 100 \ -stokes_ksp_norm_type UNPRECONDITIONED \ -stokes_ksp_monitor_true_residual \
Output:
0 KSP Component U,V,P residual norm [ 0.000000000000e+00, 1.165111661413e+06, 0.000000000000e+00 ] Residual norms for stokes_ solve. 0 KSP unpreconditioned resid norm 1.165111661413e+06 true resid norm 1.165111661413e+06 ||r(i)||/||b|| 1.000000000000e+00 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.165111661413e+06 true resid norm 1.165111661413e+06 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 3.173622513625e+05 true resid norm 3.173622513625e+05 ||r(i)||/||b|| 2.723878421898e-01 2 KSP unpreconditioned resid norm 5.634119635158e+04 true resid norm 1.725996376799e+05 ||r(i)||/||b|| 1.481399967026e-01 3 KSP unpreconditioned resid norm 1.218418968344e+03 true resid norm 1.559727441168e+05 ||r(i)||/||b|| 1.338693528546e-01 1 KSP Component U,V,P residual norm [ 5.763380362961e+04, 1.154490085631e+05, 3.370358145704e-12 ] 1 KSP unpreconditioned resid norm 1.290353784783e+05 true resid norm 1.290353784783e+05 ||r(i)||/||b|| 1.107493665644e-01 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.290353784783e+05 true resid norm 1.290353784783e+05 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 1.655137188235e+04 true resid norm 1.655137188235e+04 ||r(i)||/||b|| 1.282700301076e-01 2 KSP unpreconditioned resid norm 1.195941831181e+03 true resid norm 4.554417355181e+03 ||r(i)||/||b|| 3.529588093508e-02 3 KSP unpreconditioned resid norm 8.479547025398e+01 true resid norm 3.817072778396e+03 ||r(i)||/||b|| 2.958159865466e-02 2 KSP Component U,V,P residual norm [ 2.026983725663e+03, 2.531521226429e+03, 3.419060873106e-12 ] 2 KSP unpreconditioned resid norm 3.243032954498e+03 true resid norm 3.243032954498e+03 ||r(i)||/||b|| 2.783452489493e-03 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 3.243032954498e+03 true resid norm 3.243032954498e+03 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 1.170090628031e+02 true resid norm 1.170090628031e+02 ||r(i)||/||b|| 3.608013376517e-02 2 KSP unpreconditioned resid norm 9.782830529900e+00 true resid norm 1.741722174777e+01 ||r(i)||/||b|| 5.370658267168e-03 3 KSP unpreconditioned resid norm 6.886950142735e-01 true resid norm 1.636749336722e+01 ||r(i)||/||b|| 5.046971028932e-03 3 KSP Component U,V,P residual norm [ 7.515013854917e+01, 7.515663601801e+01, 3.418919176066e-12 ] 3 KSP unpreconditioned resid norm 1.062829396540e+02 true resid norm 1.062829396540e+02 ||r(i)||/||b|| 9.122124786317e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.062829396540e+02 true resid norm 1.062829396540e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.373578062042e+01 true resid norm 5.373578062042e+01 ||r(i)||/||b|| 5.055917797846e-01 2 KSP unpreconditioned resid norm 1.199305097134e+00 true resid norm 3.492111756827e+01 ||r(i)||/||b|| 3.285674792393e-01 3 KSP unpreconditioned resid norm 9.508597255523e-02 true resid norm 3.452079362567e+01 ||r(i)||/||b|| 3.248008922038e-01 4 KSP Component U,V,P residual norm [ 7.495897679790e+01, 7.527868410560e+01, 3.418919160091e-12 ] 4 KSP unpreconditioned resid norm 1.062343093509e+02 true resid norm 1.062343093509e+02 ||r(i)||/||b|| 9.117950911420e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.062343093509e+02 true resid norm 1.062343093509e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.419252803207e+01 true resid norm 5.419252803207e+01 ||r(i)||/||b|| 5.101226558840e-01 2 KSP unpreconditioned resid norm 1.431134174522e+00 true resid norm 3.339055236737e+01 ||r(i)||/||b|| 3.143104386088e-01 3 KSP unpreconditioned resid norm 9.760479467902e-02 true resid norm 3.304522520358e+01 ||r(i)||/||b|| 3.110598205561e-01 5 KSP Component U,V,P residual norm [ 7.491128585963e+01, 7.523275560552e+01, 3.418919008441e-12 ] 5 KSP unpreconditioned resid norm 1.061681132221e+02 true resid norm 1.061681132221e+02 ||r(i)||/||b|| 9.112269384837e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061681132221e+02 true resid norm 1.061681132221e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.343215079492e+01 true resid norm 5.343215079492e+01 ||r(i)||/||b|| 5.032787074508e-01 2 KSP unpreconditioned resid norm 1.288069736759e+00 true resid norm 3.308925591301e+01 ||r(i)||/||b|| 3.116684935691e-01 3 KSP unpreconditioned resid norm 9.505248953960e-02 true resid norm 3.281875055845e+01 ||r(i)||/||b|| 3.091205971589e-01 6 KSP Component U,V,P residual norm [ 7.481188568118e+01, 7.527346267608e+01, 3.418918860626e-12 ] 6 KSP unpreconditioned resid norm 1.061268694649e+02 true resid norm 1.061268694649e+02 ||r(i)||/||b|| 9.108729487455e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061268694649e+02 true resid norm 1.061268694649e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.300383444945e+01 true resid norm 5.300383444945e+01 ||r(i)||/||b|| 4.994384053416e-01 2 KSP unpreconditioned resid norm 1.118785004087e+00 true resid norm 3.282090953364e+01 ||r(i)||/||b|| 3.092610730828e-01 3 KSP unpreconditioned resid norm 9.758015489979e-02 true resid norm 3.259718081014e+01 ||r(i)||/||b|| 3.071529479244e-01 7 KSP Component U,V,P residual norm [ 7.475024970669e+01, 7.530858268154e+01, 3.418918784089e-12 ] 7 KSP unpreconditioned resid norm 1.061083524362e+02 true resid norm 1.061083524362e+02 ||r(i)||/||b|| 9.107140195255e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.061083524362e+02 true resid norm 1.061083524362e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.296981668051e+01 true resid norm 5.296981668051e+01 ||r(i)||/||b|| 4.992049679820e-01 2 KSP unpreconditioned resid norm 9.379451887610e-01 true resid norm 3.378466967056e+01 ||r(i)||/||b|| 3.183978348066e-01 3 KSP unpreconditioned resid norm 9.102580142867e-02 true resid norm 3.360853440947e+01 ||r(i)||/||b|| 3.167378781957e-01 8 KSP Component U,V,P residual norm [ 7.464535615814e+01, 7.537007679541e+01, 3.418918790515e-12 ] 8 KSP unpreconditioned resid norm 1.060781677449e+02 true resid norm 1.060781677449e+02 ||r(i)||/||b|| 9.104549482946e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060781677449e+02 true resid norm 1.060781677449e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.281972737642e+01 true resid norm 5.281972737642e+01 ||r(i)||/||b|| 4.979321240109e-01 2 KSP unpreconditioned resid norm 9.224594814880e-01 true resid norm 3.351285171891e+01 ||r(i)||/||b|| 3.159260046751e-01 3 KSP unpreconditioned resid norm 9.143100662935e-02 true resid norm 3.329269756083e+01 ||r(i)||/||b|| 3.138506091177e-01 9 KSP Component U,V,P residual norm [ 7.451688471900e+01, 7.544516987344e+01, 3.418918860847e-12 ] 9 KSP unpreconditioned resid norm 1.060412172952e+02 true resid norm 1.060412172952e+02 ||r(i)||/||b|| 9.101378074496e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060412172952e+02 true resid norm 1.060412172952e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.275132249899e+01 true resid norm 5.275132249899e+01 ||r(i)||/||b|| 4.974605520805e-01 2 KSP unpreconditioned resid norm 7.755381284769e-01 true resid norm 3.453933285011e+01 ||r(i)||/||b|| 3.257161105001e-01 3 KSP unpreconditioned resid norm 7.298768665179e-02 true resid norm 3.435179316160e+01 ||r(i)||/||b|| 3.239475558447e-01 10 KSP Component U,V,P residual norm [ 7.451431102619e+01, 7.544762349626e+01, 3.418918857322e-12 ] 10 KSP unpreconditioned resid norm 1.060411544587e+02 true resid norm 1.060411544587e+02 ||r(i)||/||b|| 9.101372681321e-05 Residual norms for stokes_fieldsplit_0_ solve. 0 KSP unpreconditioned resid norm 1.060411544587e+02 true resid norm 1.060411544587e+02 ||r(i)||/||b|| 1.000000000000e+00 1 KSP unpreconditioned resid norm 5.276103518337e+01 true resid norm 5.276103518337e+01 ||r(i)||/||b|| 4.975524403961e-01 2 KSP unpreconditioned resid norm 7.777079890360e-01 true resid norm 3.454373663425e+01 ||r(i)||/||b|| 3.257578325186e-01 3 KSP unpreconditioned resid norm 7.356028471071e-02 true resid norm 3.435584054266e+01 ||r(i)||/||b|| 3.239859158269e-01 11 KSP Component U,V,P residual norm [ 7.438335197779e+01, 7.553731959735e+01, 3.418918856471e-12 ]
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
participants (4)
-
Dave May -
Matthew Knepley -
Max Rudolph -
Max Rudolph