The magic handling of _1_ etc is all done in PetscOptionsFindPair_Private() 
so you need to put a break point in that routine and see why the requested 
value is not located.

  Barry
 

> On Aug 4, 2016, at 9:46 PM, Boyce Griffith <griff...@cims.nyu.edu> wrote:
> 
> 
>> On Aug 4, 2016, at 9:41 PM, Boyce Griffith <griff...@cims.nyu.edu> wrote:
>> 
>> 
>>> On Aug 4, 2016, at 9:26 PM, Boyce Griffith <griff...@cims.nyu.edu> wrote:
>>> 
>>>> 
>>>> On Aug 4, 2016, at 9:01 PM, Barry Smith <bsm...@mcs.anl.gov> wrote:
>>>> 
>>>>> 
>>>>> On Aug 4, 2016, at 8:51 PM, Boyce Griffith <griff...@cims.nyu.edu> wrote:
>>>>> 
>>>>>> 
>>>>>> On Aug 4, 2016, at 8:42 PM, Barry Smith <bsm...@mcs.anl.gov> wrote:
>>>>>> 
>>>>>> 
>>>>>> History,
>>>>>> 
>>>>>> 1) I originally implemented the ASM with one subdomain per process
>>>>>> 2) easily extended to support multiple domain per process
>>>>>> 3) added -pc_asm_type restrict etc but it only worked for one subdomain 
>>>>>> per process because it took advantage of the fact that 
>>>>>>  restrict etc could be achieved by simply dropping the parallel 
>>>>>> communication in the vector scatters
>>>>>> 4) Matt didn't like the restriction to one process per subdomain so he 
>>>>>> added an additional argument to PCASMSetLocalSubdomains() that allowed 
>>>>>> passing in the overlapping and non-overlapping regions of each domain 
>>>>>> (foolishly calling the non-overlapping index set is_local even though 
>>>>>> local has nothing to do with), so that the restrict etc could be handled.
>>>>>> 
>>>>>> Unfortunately IMHO Matt made a mess of things because if you use things 
>>>>>> like -pc_asm_blocks n or  -pc_asm_overlap 1 etc it does not handle the 
>>>>>> -pc_asm_type restrict since it cannot track the is vs is_local. The code 
>>>>>> needs to be refactored so that things like -pc_asm_blocks and 
>>>>>> -pc_asm_overlap 1 can track the is vs is_local index sets properly when 
>>>>>> the -pc_asm_type is set. Also the name is_local needs to be changed to 
>>>>>> something meaningfully like is_nonoverlapping This refactoring would 
>>>>>> also result in easier cleaner code then is currently there.
>>>>>> 
>>>>>> So basically until the PCASM is refactored properly to handle restrict 
>>>>>> etc you are stuck with being able to use the restrict etc ONLY if you 
>>>>>> specifically supply the overlapping and non overlapping domains yourself 
>>>>>> with PCASMSetLocalSubdomains and curse at Matt everyday like we all do.
>>>>> 
>>>>> OK, got it. The reason I’m asking is that we are using PCASM in a custom 
>>>>> smoother, and I noticed that basic/restrict/interpolate/none all give 
>>>>> identical results. We are using PCASMSetLocalSubdomains to set up the 
>>>>> subdomains.
>>>> 
>>>>    But are you setting different is and is_local (stupid name) and not 
>>>> have PETSc computing the overlap in your custom code? If you are setting 
>>>> them differently and not having PETSc compute overlap but getting 
>>>> identical convergence then something is wrong and you likely have to run 
>>>> in the debugger to insure that restrict etc is properly being set and used.
>>> 
>>> Yes we are computing overlapping and non-overlapping IS’es.
>>> 
>>> I just double-checked, and somehow the ASMType setting is not making it 
>>> from the command line into the solver configuration — sorry, I should have 
>>> checked this more carefully before emailing the list. (I thought that the 
>>> command line options were being captured correctly, since I am able to 
>>> control the PC type and all of the sub-KSP/sub-PC settings.)
>> 
>> OK, so here is what appears to be happening. These solvers are named things 
>> like “stokes_pc_level_0_”, “stokes_pc_level_1_”, … . If I use the 
>> command-line argument
>> 
>>      -stokes_ib_pc_level_0_pc_asm_type basic
>> 
>> then the ASM settings are used, but if I do:
>> 
>>      -stokes_ib_pc_level_pc_asm_type basic
>> 
>> they are ignored. Any ideas? :-)
> 
> I should have said: we are playing around with a lot of different command 
> line options that are being collectively applied to all of the level solvers, 
> and these options for ASM are the only ones I’ve encountered so far that have 
> to include the level number to have an effect.
> 
> Thanks,
> 
> — Boyce
> 
>> 
>> Thanks,
>> 
>> — Boyce
>> 
>>>>> BTW, there is also this bit (which was easy to overlook in all of the 
>>>>> repetitive convergence histories):
>>>> 
>>>>  Yeah, better one question per email or we will miss them.
>>>> 
>>>>   There is nothing that says that multiplicative will ALWAYS beat 
>>>> additive, though intuitively you expect it to.
>>> 
>>> OK, so similar story as above: we have a custom MSM that, when used as a MG 
>>> smoother, gives convergence rates that are about 2x PCASM, whereas when we 
>>> use PCASM with MULTIPLICATIVE, it doesn’t seem to help.
>>>  
>>> However, now I am questioning whether the settings are getting propagated 
>>> into PCASM… I’ll need to take another look.
>>> 
>>> Thanks,
>>> 
>>> — Boyce
>>> 
>>>> 
>>>>   Barry
>>>> 
>>>>> 
>>>>>>> Also, the MULTIPLICATIVE variant does not seem to behave as I would 
>>>>>>> expect --- for this same example, if you switch from ADDITIVE to 
>>>>>>> MULTIPLICATIVE, the solver converges slightly more slowly:
>>>>>>> 
>>>>>>> $ ./ex2 -m 32 -n 32 -pc_type asm -pc_asm_blocks 8 -ksp_view 
>>>>>>> -ksp_monitor_true_residual -pc_asm_local_type MULTIPLICATIVE
>>>>>>> 0 KSP preconditioned resid norm 7.467363913958e+00 true resid norm 
>>>>>>> 1.166190378969e+01 ||r(i)||/||b|| 1.000000000000e+00
>>>>>>> 1 KSP preconditioned resid norm 2.878371937592e+00 true resid norm 
>>>>>>> 3.646367718253e+00 ||r(i)||/||b|| 3.126734522949e-01
>>>>>>> 2 KSP preconditioned resid norm 1.666575161021e+00 true resid norm 
>>>>>>> 1.940699059619e+00 ||r(i)||/||b|| 1.664135714560e-01
>>>>>>> 3 KSP preconditioned resid norm 1.086140238220e+00 true resid norm 
>>>>>>> 1.191473615464e+00 ||r(i)||/||b|| 1.021680196433e-01
>>>>>>> 4 KSP preconditioned resid norm 7.939217314942e-01 true resid norm 
>>>>>>> 8.059317628307e-01 ||r(i)||/||b|| 6.910807852344e-02
>>>>>>> 5 KSP preconditioned resid norm 6.265169154675e-01 true resid norm 
>>>>>>> 5.942294290555e-01 ||r(i)||/||b|| 5.095475316653e-02
>>>>>>> 6 KSP preconditioned resid norm 5.164999302721e-01 true resid norm 
>>>>>>> 4.585844476718e-01 ||r(i)||/||b|| 3.932329197203e-02
>>>>>>> 7 KSP preconditioned resid norm 4.472399844370e-01 true resid norm 
>>>>>>> 3.884049472908e-01 ||r(i)||/||b|| 3.330544946136e-02
>>>>>>> 8 KSP preconditioned resid norm 3.445446366213e-01 true resid norm 
>>>>>>> 4.008290378967e-01 ||r(i)||/||b|| 3.437080644166e-02
>>>>>>> 9 KSP preconditioned resid norm 1.987509894375e-01 true resid norm 
>>>>>>> 2.619628925380e-01 ||r(i)||/||b|| 2.246313271505e-02
>>>>>>> 10 KSP preconditioned resid norm 1.084551743751e-01 true resid norm 
>>>>>>> 1.354891040098e-01 ||r(i)||/||b|| 1.161809481995e-02
>>>>>>> 11 KSP preconditioned resid norm 6.108303419460e-02 true resid norm 
>>>>>>> 7.252267103275e-02 ||r(i)||/||b|| 6.218767736436e-03
>>>>>>> 12 KSP preconditioned resid norm 3.641579250431e-02 true resid norm 
>>>>>>> 4.069996187932e-02 ||r(i)||/||b|| 3.489992938829e-03
>>>>>>> 13 KSP preconditioned resid norm 2.424898818735e-02 true resid norm 
>>>>>>> 2.469590201945e-02 ||r(i)||/||b|| 2.117656127577e-03
>>>>>>> 14 KSP preconditioned resid norm 1.792399391125e-02 true resid norm 
>>>>>>> 1.622090905110e-02 ||r(i)||/||b|| 1.390931475995e-03
>>>>>>> 15 KSP preconditioned resid norm 1.320657155648e-02 true resid norm 
>>>>>>> 1.336753101147e-02 ||r(i)||/||b|| 1.146256327657e-03
>>>>>>> 16 KSP preconditioned resid norm 7.398524571182e-03 true resid norm 
>>>>>>> 9.747691680405e-03 ||r(i)||/||b|| 8.358576657974e-04
>>>>>>> 17 KSP preconditioned resid norm 3.043993613039e-03 true resid norm 
>>>>>>> 3.848714422908e-03 ||r(i)||/||b|| 3.300245390731e-04
>>>>>>> 18 KSP preconditioned resid norm 1.767867968946e-03 true resid norm 
>>>>>>> 1.736586340170e-03 ||r(i)||/||b|| 1.489110501585e-04
>>>>>>> 19 KSP preconditioned resid norm 1.088792656005e-03 true resid norm 
>>>>>>> 1.307506936484e-03 ||r(i)||/||b|| 1.121177948355e-04
>>>>>>> 20 KSP preconditioned resid norm 4.622653682144e-04 true resid norm 
>>>>>>> 5.718427718734e-04 ||r(i)||/||b|| 4.903511315013e-05
>>>>>>> 21 KSP preconditioned resid norm 2.591703287585e-04 true resid norm 
>>>>>>> 2.690982547548e-04 ||r(i)||/||b|| 2.307498497738e-05
>>>>>>> 22 KSP preconditioned resid norm 1.596527181997e-04 true resid norm 
>>>>>>> 1.715846687846e-04 ||r(i)||/||b|| 1.471326396435e-05
>>>>>>> 23 KSP preconditioned resid norm 1.006766623019e-04 true resid norm 
>>>>>>> 1.044525361282e-04 ||r(i)||/||b|| 8.956731080268e-06
>>>>>>> 24 KSP preconditioned resid norm 5.349814270060e-05 true resid norm 
>>>>>>> 6.598682341705e-05 ||r(i)||/||b|| 5.658323427037e-06
>>>>>>> KSP Object: 1 MPI processes
>>>>>>> type: gmres
>>>>>>>  GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
>>>>>>> Orthogonalization with no iterative refinement
>>>>>>>  GMRES: happy breakdown tolerance 1e-30
>>>>>>> maximum iterations=10000, initial guess is zero
>>>>>>> tolerances:  relative=9.18274e-06, absolute=1e-50, divergence=10000.
>>>>>>> left preconditioning
>>>>>>> using PRECONDITIONED norm type for convergence test
>>>>>>> PC Object: 1 MPI processes
>>>>>>> type: asm
>>>>>>>  Additive Schwarz: total subdomain blocks = 8, amount of overlap = 1
>>>>>>>  Additive Schwarz: restriction/interpolation type - BASIC
>>>>>>>  Additive Schwarz: local solve composition type - MULTIPLICATIVE
>>>>>>>  Local solve is same for all blocks, in the following KSP and PC 
>>>>>>> objects:
>>>>>>>  KSP Object:    (sub_)     1 MPI processes
>>>>>>>    type: preonly
>>>>>>>    maximum iterations=10000, initial guess is zero
>>>>>>>    tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>>>>>>>    left preconditioning
>>>>>>>    using NONE norm type for convergence test
>>>>>>>  PC Object:    (sub_)     1 MPI processes
>>>>>>>    type: icc
>>>>>>>      0 levels of fill
>>>>>>>      tolerance for zero pivot 2.22045e-14
>>>>>>>      using Manteuffel shift [POSITIVE_DEFINITE]
>>>>>>>      matrix ordering: natural
>>>>>>>      factor fill ratio given 1., needed 1.
>>>>>>>        Factored matrix follows:
>>>>>>>          Mat Object:             1 MPI processes
>>>>>>>            type: seqsbaij
>>>>>>>            rows=160, cols=160
>>>>>>>            package used to perform factorization: petsc
>>>>>>>            total: nonzeros=443, allocated nonzeros=443
>>>>>>>            total number of mallocs used during MatSetValues calls =0
>>>>>>>                block size is 1
>>>>>>>    linear system matrix = precond matrix:
>>>>>>>    Mat Object:       1 MPI processes
>>>>>>>      type: seqaij
>>>>>>>      rows=160, cols=160
>>>>>>>      total: nonzeros=726, allocated nonzeros=726
>>>>>>>      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=1024, cols=1024
>>>>>>>  total: nonzeros=4992, allocated nonzeros=5120
>>>>>>>  total number of mallocs used during MatSetValues calls =0
>>>>>>>    not using I-node routines
>>>>>>> Norm of error 0.000292304 iterations 24
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> 
>>>>>>> -- Boyce
>> 
> 

Reply via email to