Elias,

    How are you zeroing the rows and columns of the matrix, are you using 
MatZeroRowsColumns()? 

    If so, are you passing in the vectors b and x (with b set and the x 
locations associated with the Dirichlet rows set to the correct Dirichlet 
value)?

    If so, are you calling KSPSetInitializeGuessNonzero(ksp,PETSC_TRUE) before 
the solve?

    Thanks

    Barry


> On Jul 7, 2022, at 3:14 AM, Karabelas, Elias ([email protected]) 
> <[email protected]> wrote:
> 
> Hi Mark,
> thanks for the answer, but I'm struggling to translate your suggestion into 
> solver options. 
> From scrolling through the user manual I think this points towards 
> PCCOMPOSITE.
> However, the User Manual is not very precise with composite PCs, so how would 
> I achieve this on top of my existing solver options?
> Best regards
> Elias
> 
> 
> 
> Am 06.07.22 um 16:41 schrieb Mark Adams:
>> And one iteration of undamped Jacobi after the solve should fix this.
>> 
>> On Wed, Jul 6, 2022 at 8:42 AM Karabelas, Elias ([email protected] 
>> <mailto:[email protected]>) <[email protected] 
>> <mailto:[email protected]>> wrote:
>> Dear Matt,
>> 
>> thanks for the fast response. That makes perfect sense to me. 
>> 
>> Best regards
>> Elias
>> 
>> Am 06.07.22 um 14:35 schrieb Matthew Knepley:
>>> On Wed, Jul 6, 2022 at 7:46 AM Karabelas, Elias 
>>> ([email protected] <mailto:[email protected]>) 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> Dear all,
>>> 
>>> I don't know if this is a bug, but I observed that when using GMRES with 
>>> AGG-PCGAMG as preconditioner Dirichlet boundary conditions don't seem to be 
>>> exactly fulfilled.
>>> 
>>> My Matrix has zero rows and cols with 1 on the diagonal where I have 
>>> dirichlet-bcs in my FE-mesh and I would expect that the eqs in this rows 
>>> can be exactly fulfilled (as u_i = g_i) there.
>>> 
>>> I would not expect aggregation to be exact here, but only within the 
>>> iteration tolerance. If instead you eliminate those variables, you can 
>>> maintain algebraic exactness.
>>> This is what we do in examples, like SNES ex56.
>>> 
>>>   Thanks,
>>> 
>>>      Matt
>>> However, when I solve A*x = b with the above solver I only get u_i = g_i + 
>>> error in that part of the vector. Switching from pc_gamg_type agg to 
>>> pc_gamg_type classical cures this problem, but the classical is not 
>>> advertised in the user manual.
>>> 
>>> These are the options I'm currently using:
>>> 
>>> -ksp_type gmres
>>> -ksp_pc_side right
>>> -pc_type gamg
>>> -pc_gamg_type agg [or classical]
>>> -pc_gamg_sym_graph 1
>>> -pc_gamg_square_graph 1
>>> -pc_gamg_agg_nsmooths 1
>>> -pc_gamg_threshold 0.01
>>> -pc_mg_cycles v
>>> 
>>> Iteration counts are basically the same.
>>> 
>>> Best regards
>>> 
>>> Elias
>>> 
>>> -- 
>>> Dr. Elias Karabelas
>>> Research Associate
>>> University of Graz
>>> Institute of Mathematics and Scientific Computing
>>> Heinrichstraße 36
>>> A-8010 Graz
>>> Austria
>>> 
>>> Phone: +43 316 380 8546
>>> Email: [email protected] <mailto:[email protected]>
>>> Web:  https://ccl.medunigraz.at/ <https://ccl.medunigraz.at/>
>>> 
>>> -- 
>>> 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
>>> 
>>> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
>> 
>> -- 
>> Dr. Elias Karabelas
>> Research Associate
>> University of Graz
>> Institute of Mathematics and Scientific Computing
>> Heinrichstraße 36
>> A-8010 Graz
>> Austria
>> 
>> Phone: +43 316 380 8546
>> Email: [email protected] <mailto:[email protected]>
>> Web:  https://ccl.medunigraz.at/ <https://ccl.medunigraz.at/>
> -- 
> Dr. Elias Karabelas
> Research Associate
> University of Graz
> Institute of Mathematics and Scientific Computing
> Heinrichstraße 36
> A-8010 Graz
> Austria
> 
> Phone: +43 316 380 8546
> Email: [email protected] <mailto:[email protected]>
> Web:  https://ccl.medunigraz.at/ <https://ccl.medunigraz.at/>

Reply via email to