[petsc-users] discontinuous viscosity stokes equation 3D staggered grid

Anton Popov popov at uni-mainz.de
Sat Jul 27 07:03:27 CDT 2013


Dave,

coupled staggered grid possesses a non-trivial null space. That means it 
probably contains not just three translations, three rotations and a 
constant pressure. It would be nice if somebody finally figures out how 
it looks like. Any ideas? This information is valuable for building a 
proper coupled algebraic multigrid preconditioner.

As for the fake dofs, I really don't like them. It's perfectly possible 
to design a numbering scheme that would only contain real dofs, and 
implement it with PETSc. I'm working on it.

Anton

On 7/26/13 6:05 PM, Dave May wrote:
> Yes, the nullspace is important.
> There is definitely a pressure null space of constants which needs to 
> be considered.
> I don't believe ONLY using
>   -fieldsplit_1_ksp_constant_null_space
> is not sufficient.
>
> You need to inform the KSP for the outer syetem (the coupled u-p 
> system) that there is a null space of constants in the pressure 
> system. This cannot (as far as I'm aware) be set via command line 
> args. You need to write a null space removal function which accepts 
> the complete (u,p) vector which only modifies the pressure dofs.
>
> Take care though when you write this though. Because of the DMDA 
> formulation you are using, you have introduced dummy/ficticious 
> pressure dofs on the right/top/front faces of your mesh. Thus your 
> null space removal function should ignore those dofs when your define 
> the constant pressure constraint.
>
>
>
> Cheers,
>   Dave
>
>
> On 26 July 2013 17:42, Matthew Knepley <knepley at gmail.com 
> <mailto:knepley at gmail.com>> wrote:
>
>     On Fri, Jul 26, 2013 at 10:13 AM, Bishesh Khanal
>     <bisheshkh at gmail.com <mailto:bisheshkh at gmail.com>> wrote:
>
>
>
>
>         On Fri, Jul 26, 2013 at 4:22 PM, Matthew Knepley
>         <knepley at gmail.com <mailto:knepley at gmail.com>> wrote:
>
>             On Fri, Jul 26, 2013 at 9:11 AM, Bishesh Khanal
>             <bisheshkh at gmail.com <mailto:bisheshkh at gmail.com>> wrote:
>
>
>
>
>                 On Fri, Jul 26, 2013 at 2:32 PM, Matthew Knepley
>                 <knepley at gmail.com <mailto:knepley at gmail.com>> wrote:
>
>                     On Fri, Jul 26, 2013 at 7:28 AM, Bishesh Khanal
>                     <bisheshkh at gmail.com <mailto:bisheshkh at gmail.com>>
>                     wrote:
>
>
>
>
>                         On Wed, Jul 17, 2013 at 9:48 PM, Jed Brown
>                         <jedbrown at mcs.anl.gov
>                         <mailto:jedbrown at mcs.anl.gov>> wrote:
>
>                             Bishesh Khanal <bisheshkh at gmail.com
>                             <mailto:bisheshkh at gmail.com>> writes:
>
>                             > Now, I implemented two different
>                             approaches, each for both 2D and 3D, in
>                             > MATLAB. It works for the smaller sizes
>                             but I have problems solving it for
>                             > the problem size I need (250^3 grid size).
>                             > I use staggered grid with p on cell
>                             centers, and components of v on cell
>                             > faces. Similar split up of K to cell
>                             center and faces to account for the
>                             > variable viscosity case)
>
>                             Okay, you're using a staggered-grid finite
>                             difference discretization of
>                             variable-viscosity Stokes.  This is a
>                             common problem and I recommend
>                             starting with PCFieldSplit with Schur
>                             complement reduction (make that
>                             work first, then switch to block
>                             preconditioner). 
>
>
>                         Ok, I made my 3D problem work with
>                         PCFieldSplit with Schur complement reduction
>                         using the options:
>                         -pc_fieldsplit_type schur
>                         -pc_fieldsplit_detect_saddle_point
>                         -fieldsplit_1_ksp_constant_null_space
>
>
>                             You can use PCLSC or
>                             (probably better for you), assemble a
>                             preconditioning matrix containing
>                             the inverse viscosity in the
>                             pressure-pressure block.  This diagonal
>                             matrix is a spectrally equivalent (or
>                             nearly so, depending on
>                             discretization) approximation of the Schur
>                             complement.  The velocity
>                             block can be solved with algebraic
>                             multigrid.  Read the PCFieldSplit
>                             docs (follow papers as appropriate) and
>                             let us know if you get stuck.
>
>
>                         Now, I got a little confused in how exactly to
>                         use command line options to use multigrid for
>                         the velocity bock and PCLS for the pressure
>                         block. After going through the manual I tried
>                         the following:
>
>                     You want Algebraic Multigrid
>
>                     -pc_type fieldsplit -pc_fieldsplit_detect_saddle_point
>                     -pc_fieldsplit_type schur
>                     -fieldsplit_0_pc_type gamg
>                     -fieldsplit_1_ksp_type fgmres
>                      -fieldsplit_1_ksp_constant_null_space
>                      -fieldsplit_1_ksp_monitor_short
>                      -fieldsplit_1_pc_type lsc
>                     -ksp_converged_reason
>
>                 I tried the above set of options but the solution I
>                 get seem to be not correct. The velocity field I get
>                 are quite different than the one I got before without
>                 using gamg which were the expected one.
>                 Note: (Also, I had to add one extra option of
>                 -fieldsplit_1_ksp_gmres_restart 100 , because the
>                 fieldsplit_1_ksp residual norm did not converge within
>                 default 30 iterations before restarting).
>
>
>             These are all iterative solvers. You have to make sure
>             everything converges.
>
>
>         When I set restart to 100, and do -ksp_monitor, it does
>         converge (for the fieldsplit_1_ksp). Are you saying that in
>         spite of having -ksp_converged_reason in the option and petsc
>         completing the run with the message "Linear solve converged
>         due to CONVERGED_RTOL .." not enough to make sure that
>         everything is converging ? If that is the case what should I
>         do for this particular problem ?
>
>
>     If your outer iteration converges, and you do not like the
>     solution, there are usually two possibilities:
>
>       1) Your tolerance is too high, start with it cranked down all
>     the way (1e-10) and slowly relax it
>
>       2) You have a null space that you are not accounting for
>
>         I have used the MAC scheme with indexing as shown in:  fig
>         7.5, page 96 of:
>         http://books.google.co.uk/books?id=W83gxp165SkC&printsec=frontcover&dq=Introduction+to+Numerical+Geodynamic+Modelling&hl=en&sa=X&ei=v6TmUaP_L4PuOs3agJgE&ved=0CDIQ6AEwAA
>
>         Thus I have a DM with 4 dof but there are several "ghost
>         values" set to 0.
>         Would this cause any problem when using the multigrid ? (This
>         has worked fine when not using the multigrid.)
>
>
>     I don't know exactly how you have implemented this. These should
>     be rows of the identity.
>
>             I do this problem in the tutorial with
>             a constant viscosity.
>
>
>         Which tutorial are you referring to ? Could you please provide
>         me the link please ?
>
>
>     There are a few on the PETSc Tutorials page, but you can look at this
>
>     http://www.geodynamics.org/cig/community/workinggroups/short/workshops/cdm2013/presentations/SessionIV_Solvers.pdf
>
>     for a step-by-step example of a saddle-point problem at the end.
>
>         Matt
>
>
>
>                 Matt
>
>                        Matt
>
>
>                         but I get the following errror:
>
>                         [0]PETSC ERROR: --------------------- Error
>                         Message ------------------------------------
>                         [0]PETSC ERROR: Null argument, when expecting
>                         valid pointer!
>                         [0]PETSC ERROR: Null Object: Parameter # 2!
>                         [0]PETSC ERROR:
>                         ------------------------------------------------------------------------
>                         [0]PETSC ERROR: Petsc Release Version 3.4.2,
>                         Jul, 02, 2013
>                         [0]PETSC ERROR: See docs/changes/index.html
>                         for recent updates.
>                         [0]PETSC ERROR: See docs/faq.html for hints
>                         about trouble shooting.
>                         [0]PETSC ERROR: See docs/index.html for manual
>                         pages.
>                         [0]PETSC ERROR:
>                         ------------------------------------------------------------------------
>                         [0]PETSC ERROR: src/AdLemMain on a
>                         arch-linux2-cxx-debug named edwards by bkhanal
>                         Fri Jul 26 14:23:40 2013
>                         [0]PETSC ERROR: Libraries linked from
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/arch-linux2-cxx-debug/lib
>                         [0]PETSC ERROR: Configure run at Fri Jul 19
>                         14:25:01 2013
>                         [0]PETSC ERROR: Configure options
>                         --with-cc=gcc --with-fc=g77 --with-cxx=g++
>                         --download-f-blas-lapack=1 --download-mpich=1
>                         -with-clanguage=cxx --download-hypre=1
>                         [0]PETSC ERROR:
>                         ------------------------------------------------------------------------
>                         [0]PETSC ERROR: MatPtAP() line 8166 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/mat/interface/matrix.c
>                         [0]PETSC ERROR: PCSetUp_MG() line 628 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/pc/impls/mg/mg.c
>                         [0]PETSC ERROR: PCSetUp() line 890 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/pc/interface/precon.c
>                         [0]PETSC ERROR: KSPSetUp() line 278 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/ksp/interface/itfunc.c
>                         [0]PETSC ERROR: KSPSolve() line 399 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/ksp/interface/itfunc.c
>                         [0]PETSC ERROR: PCApply_FieldSplit_Schur()
>                         line 807 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/pc/impls/fieldsplit/fieldsplit.c
>                         [0]PETSC ERROR: PCApply() line 442 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/pc/interface/precon.c
>                         [0]PETSC ERROR: KSP_PCApply() line 227 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/include/petsc-private/kspimpl.h
>                         [0]PETSC ERROR: KSPInitialResidual() line 64
>                         in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/ksp/interface/itres.c
>                         [0]PETSC ERROR: KSPSolve_GMRES() line 239 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/ksp/impls/gmres/gmres.c
>                         [0]PETSC ERROR: KSPSolve() line 441 in
>                         /home/bkhanal/Documents/softwares/petsc-3.4.2/src/ksp/ksp/interface/itfunc.c
>
>
>
>
>
>                     -- 
>                     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
>
>
>
>
>
>             -- 
>             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
>
>
>
>
>
>     -- 
>     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
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20130727/32f09878/attachment-0001.html>


More information about the petsc-users mailing list