Boyce,

    I noticed that in the KSPView you sent the solver inside GASM was fgmres, I 
don't know why! This would explain why the outer GMRES had inconsistent 
residuals. If you switch the inner solver to preonly + LU for GASM what 
happens? 

> On Apr 30, 2019, at 11:36 AM, Boyce Griffith via petsc-users 
> <[email protected]> wrote:
> 
> 
> 
>> On Apr 30, 2019, at 12:31 PM, Mark Adams <[email protected]> wrote:
>> 
>> When I said it was singular I was looking at "preconditioned residual norm 
>> to an rtol of 1e-12. If I look at the true residual norm, however, it 
>> stagnates around 1e-4."
>> 
>> This is not what I am seeing in this output.
> 
> Whoops, I switched the outer KSP from GMRES to FGMRES.
> 
> With GMRES, the preconditioned residual norm drops nicely (but, of course, 
> the solution is no good):
> 
> $ ./main -d 3 -n 10 -ksp_type gmres -ksp_monitor_true_residual
> Running ./main -d 3 -n 10 -ksp_type gmres -ksp_monitor_true_residual
> 
>   0 KSP preconditioned resid norm 7.954859454640e-01 true resid norm 
> 5.249964981356e+02 ||r(i)||/||b|| 1.000000000000e+00
>   1 KSP preconditioned resid norm 1.791745669837e-01 true resid norm 
> 6.420515097608e+01 ||r(i)||/||b|| 1.222963414120e-01
>   2 KSP preconditioned resid norm 1.018932536518e-02 true resid norm 
> 1.538149013353e+00 ||r(i)||/||b|| 2.929827187068e-03
>   3 KSP preconditioned resid norm 1.247250041620e-03 true resid norm 
> 1.231074134137e-01 ||r(i)||/||b|| 2.344918753761e-04
>   4 KSP preconditioned resid norm 1.090687825399e-04 true resid norm 
> 9.214204251786e-02 ||r(i)||/||b|| 1.755098231037e-04
>   5 KSP preconditioned resid norm 5.773017036638e-06 true resid norm 
> 9.199655161085e-02 ||r(i)||/||b|| 1.752326957181e-04
>   6 KSP preconditioned resid norm 4.880868222010e-07 true resid norm 
> 9.199488147685e-02 ||r(i)||/||b|| 1.752295144892e-04
>   7 KSP preconditioned resid norm 3.528569945380e-08 true resid norm 
> 9.199485972669e-02 ||r(i)||/||b|| 1.752294730601e-04
>   8 KSP preconditioned resid norm 1.875782938387e-09 true resid norm 
> 9.199486015879e-02 ||r(i)||/||b|| 1.752294738832e-04
>   9 KSP preconditioned resid norm 8.952213054230e-11 true resid norm 
> 9.199486012037e-02 ||r(i)||/||b|| 1.752294738100e-04
>  10 KSP preconditioned resid norm 3.450175063457e-12 true resid norm 
> 9.199486011997e-02 ||r(i)||/||b|| 1.752294738092e-04
>  11 KSP preconditioned resid norm 2.186653062508e-13 true resid norm 
> 9.199486012016e-02 ||r(i)||/||b|| 1.752294738096e-04
> 
>> It is just a poor PC. The big drop in the residual at the beginning is 
>> suspicious. When you solve this problem well have you checked that you are 
>> getting a good solution?
> 
> Yes indeed, the solution appears to be no good with this preconditioner.
> 
> Note that all that the PC is doing is applying GASM to split the problem onto 
> two subdomains.
> 
>> That is, do you check that your model is not messed up, like a bad mesh.
> 
> This is a uniform HEX mesh automatically generated by libMesh.
> 
>> On Tue, Apr 30, 2019 at 11:35 AM Boyce Griffith via petsc-users 
>> <[email protected]> wrote:
>> 
>> 
>>> On Apr 30, 2019, at 11:23 AM, Fande Kong <[email protected]> wrote:
>>> 
>>> 
>>> 
>>> On Tue, Apr 30, 2019 at 7:40 AM Boyce Griffith via petsc-users 
>>> <[email protected]> wrote:
>>> 
>>> 
>>>> On Apr 30, 2019, at 9:06 AM, Mark Adams <[email protected]> wrote:
>>>> 
>>>> 
>>>> 
>>>> 
>>>> Allowing GASM to construct the "outer" subdomains from the non-overlapping 
>>>> "inner" subdomains, and using "exact" subdomain solvers (subdomain KSPs 
>>>> are using FGMRES+ILU with an rtol of 1e-12), I get convergence in ~2 
>>>> iterations in the preconditioned residual norm to an rtol of 1e-12. If I 
>>>> look at the true residual norm, however, it stagnates around 1e-4.
>>>> 
>>>> 
>>>> That PC is singular. 
>>> 
>>> Yes. I am confused about why GASM is giving a singular PC but ASM is not 
>>> with the same subdomains.
>>> 
>>> We could not tell much without the info of detailed solver setup. The 
>>> overlapping function was implemented by me and Dmitry a couple of years 
>>> ago, and it is trick when a subdomain is shared by multiple cores.  Do you 
>>> mind to start from our example? Or setup an example for us to demonstrate  
>>> your issues? 
>>> 
>>> At least please use "-ksp_view" (linear solver) or "-snes_view" (nonlinear 
>>> solver) to print more information that will help us a bit.
>> 
>> Here you go:
>> 
>> $ ./main -d 3 -n 10 -ksp_type fgmres -sub_ksp_type fgmres -sub_pc_type ilu 
>> -sub_ksp_rtol 1.0e-12 -ksp_converged_reason -ksp_monitor_true_residual 
>> -ksp_max_it 10 -ksp_view
>> make: `main' is up to date.
>> Running ./main -d 3 -n 10 -ksp_type fgmres -sub_ksp_type fgmres -sub_pc_type 
>> ilu -sub_ksp_rtol 1.0e-12 -ksp_converged_reason -ksp_monitor_true_residual 
>> -ksp_max_it 10 -ksp_view
>> 
>>   0 KSP unpreconditioned resid norm 5.249964981356e+02 true resid norm 
>> 5.249964981356e+02 ||r(i)||/||b|| 1.000000000000e+00
>>   1 KSP unpreconditioned resid norm 9.316296223724e-02 true resid norm 
>> 9.316296223724e-02 ||r(i)||/||b|| 1.774544450641e-04
>>   2 KSP unpreconditioned resid norm 9.314881028141e-02 true resid norm 
>> 9.314881028141e-02 ||r(i)||/||b|| 1.774274887779e-04
>>   3 KSP unpreconditioned resid norm 9.299990517422e-02 true resid norm 
>> 9.299918556770e-02 ||r(i)||/||b|| 1.771424874222e-04
>>   4 KSP unpreconditioned resid norm 9.224468272306e-02 true resid norm 
>> 9.393543403858e-02 ||r(i)||/||b|| 1.789258297382e-04
>>   5 KSP unpreconditioned resid norm 9.150828598034e-02 true resid norm 
>> 9.511673987375e-02 ||r(i)||/||b|| 1.811759510997e-04
>>   6 KSP unpreconditioned resid norm 9.078924839691e-02 true resid norm 
>> 1.013093335976e-01 ||r(i)||/||b|| 1.929714463951e-04
>>   7 KSP unpreconditioned resid norm 9.008689850931e-02 true resid norm 
>> 1.011099594157e-01 ||r(i)||/||b|| 1.925916835155e-04
>>   8 KSP unpreconditioned resid norm 8.940060065590e-02 true resid norm 
>> 1.090779251949e-01 ||r(i)||/||b|| 2.077688624253e-04
>>   9 KSP unpreconditioned resid norm 8.872975256529e-02 true resid norm 
>> 1.102873098599e-01 ||r(i)||/||b|| 2.100724676289e-04
>>  10 KSP unpreconditioned resid norm 8.807378313465e-02 true resid norm 
>> 1.071996745064e-01 ||r(i)||/||b|| 2.041912182026e-04
>> Linear solve did not converge due to DIVERGED_ITS iterations 10
>> KSP Object: 1 MPI processes
>>   type: fgmres
>>     restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization 
>> with no iterative refinement
>>     happy breakdown tolerance 1e-30
>>   maximum iterations=10, nonzero initial guess
>>   tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>>   right preconditioning
>>   using UNPRECONDITIONED norm type for convergence test
>> PC Object: 1 MPI processes
>>   type: gasm
>>     Restriction/interpolation type: RESTRICT
>>     requested amount of overlap = 0
>>     total number of subdomains = 2
>>     max number of local subdomains = 2
>>     [0|1] number of locally-supported subdomains = 2
>>     Subdomain solver info is as follows:
>>       - - - - - - - - - - - - - - - - - -
>>       [0|1] (subcomm [0|1]) local subdomain number 0, local size = 484
>>     KSP Object: (sub_) 1 MPI processes
>>       type: fgmres
>>         restart=30, using Classical (unmodified) Gram-Schmidt 
>> Orthogonalization with no iterative refinement
>>         happy breakdown tolerance 1e-30
>>       maximum iterations=10000, initial guess is zero
>>       tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>>       right preconditioning
>>       using UNPRECONDITIONED norm type for convergence test
>>     PC Object: (sub_) 1 MPI processes
>>       type: ilu
>>         out-of-place factorization
>>         0 levels of fill
>>         tolerance for zero pivot 2.22045e-14
>>         matrix ordering: natural
>>         factor fill ratio given 1., needed 1.
>>           Factored matrix follows:
>>             Mat Object: 1 MPI processes
>>               type: seqaij
>>               rows=484, cols=484
>>               package used to perform factorization: petsc
>>               total: nonzeros=15376, allocated nonzeros=15376
>>               total number of mallocs used during MatSetValues calls =0
>>                 not using I-node routines
>>       linear system matrix = precond matrix:
>>       Mat Object: () 1 MPI processes
>>         type: seqaij
>>         rows=484, cols=484
>>         total: nonzeros=15376, allocated nonzeros=15376
>>         total number of mallocs used during MatSetValues calls =0
>>           not using I-node routines
>>       - - - - - - - - - - - - - - - - - -
>>       [0|1] (subcomm [0|1]) local subdomain number 1, local size = 121
>>     KSP Object: (sub_) 1 MPI processes
>>       type: fgmres
>>         restart=30, using Classical (unmodified) Gram-Schmidt 
>> Orthogonalization with no iterative refinement
>>         happy breakdown tolerance 1e-30
>>       maximum iterations=10000, initial guess is zero
>>       tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>>       right preconditioning
>>       using UNPRECONDITIONED norm type for convergence test
>>     PC Object: (sub_) 1 MPI processes
>>       type: ilu
>>         out-of-place factorization
>>         0 levels of fill
>>         tolerance for zero pivot 2.22045e-14
>>         matrix ordering: natural
>>         factor fill ratio given 1., needed 1.
>>           Factored matrix follows:
>>             Mat Object: 1 MPI processes
>>               type: seqaij
>>               rows=121, cols=121
>>               package used to perform factorization: petsc
>>               total: nonzeros=961, allocated nonzeros=961
>>               total number of mallocs used during MatSetValues calls =0
>>                 not using I-node routines
>>       linear system matrix = precond matrix:
>>       Mat Object: () 1 MPI processes
>>         type: seqaij
>>         rows=121, cols=121
>>         total: nonzeros=961, allocated nonzeros=961
>>         total number of mallocs used during MatSetValues calls =0
>>           not using I-node routines
>>       - - - - - - - - - - - - - - - - - -
>> [0]PETSC ERROR: --------------------- Error Message 
>> --------------------------------------------------------------
>> [0]PETSC ERROR: Petsc has generated inconsistent data
>> [0]PETSC ERROR: Called more times than PetscViewerASCIIPushSynchronized()
>> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for 
>> trouble shooting.
>> [0]PETSC ERROR: Petsc Release Version 3.11.1, unknown 
>> [0]PETSC ERROR: ./main on a darwin-dbg named boycesimacwork.dhcp.unc.edu by 
>> boyceg Tue Apr 30 11:29:02 2019
>> [0]PETSC ERROR: Configure options --CC=mpicc --CXX=mpicxx --FC=mpif90 
>> --PETSC_ARCH=darwin-dbg --with-debugging=1 --with-c++-support=1 
>> --with-hypre=1 --download-hypre=1 --with-hdf5=1 --with-hdf5-dir=/usr/local
>> [0]PETSC ERROR: #1 PetscViewerASCIIPopSynchronized() line 438 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/sys/classes/viewer/impls/ascii/filev.c
>> [0]PETSC ERROR: #2 PCView_GASM() line 251 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/ksp/pc/impls/gasm/gasm.c
>> [0]PETSC ERROR: #3 PCView() line 1651 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/ksp/pc/interface/precon.c
>> [0]PETSC ERROR: #4 KSPView() line 213 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/ksp/ksp/interface/itcreate.c
>> [0]PETSC ERROR: #5 PetscObjectView() line 100 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/sys/objects/destroy.c
>> [0]PETSC ERROR: #6 ObjectView() line 14 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/ksp/ksp/interface/itfunc.c
>> [0]PETSC ERROR: #7 KSPSolve() line 831 in 
>> /Users/boyceg/sfw/petsc/petsc-maint/src/ksp/ksp/interface/itfunc.c
>> 
>>> One difference between them is that the default GASM overlap is 0 
>>> (https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PC/PCGASMSetOverlap.html),
>>>  but the default ASM overlap is 1 
>>> (https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PC/PCASMSetOverlap.html).
>>> 
>>> For your particular application, not sure you need any overlap since there 
>>> are two different PDEs on two different subdomains. It may be fine to run 
>>> the PC without the overlapping domain.   It is a definitely interesting 
>>> application for GASM. 
>>> 
>>> Fande,
>>> 
>>>  
>>> However, changing the GASM overlap does not make any difference in the 
>>> convergence history.
>>> 
>>> -- Boyce
>> 
> 

Reply via email to