On Thu, Feb 5, 2015 at 4:15 PM, Fabian Gabel <gabel.fab...@gmail.com> wrote:
> Thank you for your feedback. > > > -coupledsolve_pc_type fieldsplit > > -coupledsolve_pc_fieldsplit_0_fields 0,1,2 > > -coupledsolve_pc_fieldsplit_1_fields 3 > > -coupledsolve_pc_fieldsplit_type schur > > -coupledsolve_pc_fieldsplit_block_size 4 > > -coupledsolve_fieldsplit_0_ksp_converged_reason > > -coupledsolve_fieldsplit_1_ksp_converged_reason > > -coupledsolve_fieldsplit_0_ksp_type gmres > > -coupledsolve_fieldsplit_0_pc_type fieldsplit > > -coupledsolve_fieldsplit_0_pc_fieldsplit_block_size 3 > > -coupledsolve_fieldsplit_0_fieldsplit_0_pc_type ml > > -coupledsolve_fieldsplit_0_fieldsplit_1_pc_type ml > > -coupledsolve_fieldsplit_0_fieldsplit_2_pc_type ml > > > > Is it normal, that I have to explicitly specify the block size > > for each > > fieldsplit? > > > > > > No. You should be able to just specify > > > > > > -coupledsolve_fieldsplit_ksp_converged > > -coupledsolve_fieldsplit_0_fieldsplit_pc_type ml > > > > > > and same options will be applied to all splits (0,1,2). > > > > Does this functionality not work? > > > > > It does work indeed, but what I actually was referring to, was the use > of > > -coupledsolve_pc_fieldsplit_block_size 4 > -coupledsolve_fieldsplit_0_pc_fieldsplit_block_size 3 > > Without them, I get the error message > > [0]PETSC ERROR: PCFieldSplitSetDefaults() line 468 > in /work/build/petsc/src/ksp/pc/impls/fieldsplit/fieldsplit.c Unhandled > case, must have at least two fields, not 1 > > I thought PETSc would already know, what I want to do, since I > initialized the fieldsplit with > > CALL PCFieldSplitSetIS(PRECON,PETSC_NULL_CHARACTER,ISU,IERR) > > etc. > > > > > > > Are there any guidelines to follow that I could use to avoid > > taking wild > > guesses? > > > > > > Sure. There are lots of papers published on how to construct robust > > block preconditioners for saddle point problems arising from Navier > > Stokes. > > I would start by looking at this book: > > > > > > Finite Elements and Fast Iterative Solvers > > > > Howard Elman, David Silvester and Andy Wathen > > > > Oxford University Press > > > > See chapters 6 and 8. > > > As a matter of fact I spent the last days digging through papers on the > regard of preconditioners or approximate Schur complements and the names > Elman and Silvester have come up quite often. > > The problem I experience is, that, except for one publication, all the > other ones I checked deal with finite element formulations. Only > > Klaij, C. and Vuik, C. SIMPLE-type preconditioners for cell-centered, > colocated finite volume discretization of incompressible > Reynolds-averaged Navier–Stokes equations > > presented an approach for finite volume methods. Furthermore, a lot of > literature is found on saddle point problems, since the linear system > from stable finite element formulations comes with a 0 block as pressure > matrix. I'm not sure how I can benefit from the work that has already > been done for finite element methods, since I neither use finite > elements nor I am trying to solve a saddle point problem (?). > I believe the operator estimates for FV are very similar to first order FEM, and I believe that you do have a saddle-point system in that there are both positive and negative eigenvalues. Thanks, Matt > > > > > Petsc has some support to generate approximate pressure > > schur > > > complements for you, but these will not be as good as the > > ones > > > specifically constructed for you particular discretization. > > > > I came across a tutorial (/snes/examples/tutorials/ex70.c), > > which shows > > 2 different approaches: > > > > 1- provide a Preconditioner \hat{S}p for the approximation of > > the true > > Schur complement > > > > 2- use another Matrix (in this case its the Matrix used for > > constructing > > the preconditioner in the former approach) as a new > > approximation of the > > Schur complement. > > > > Speaking in terms of the PETSc-manual p.87, looking at the > > factorization > > of the Schur field split preconditioner, approach 1 sets > > \hat{S}p while > > approach 2 furthermore sets \hat{S}. Is this correct? > > > > > > > > No this is not correct. > > \hat{S} is always constructed by PETSc as > > \hat{S} = A11 - A10 KSP(A00) A01 > > But then what happens in this line from the > tutorial /snes/examples/tutorials/ex70.c > > ierr = KSPSetOperators(subksp[1], s->myS, s->myS);CHKERRQ(ierr); > > It think the approximate Schur complement a (Matrix of type Schur) gets > replaced by an explicitely formed Matrix (myS, of type MPIAIJ). > > > > You have two choices in how to define the preconditioned, \hat{S_p}: > > > > [1] Assemble you own matrix (as is done in ex70) > > > > [2] Let PETSc build one. PETSc does this according to > > > > \hat{S_p} = A11 - A10 inv(diag(A00)) A01 > > > Regards, > Fabian > > > > > > > -- 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