[petsc-users] Implementation of Anderson mixing

Jonas Mairhofer mhofer at itt.uni-stuttgart.de
Mon Aug 22 07:36:58 CDT 2016


Dear PETSc-Team,

I am having a bit of trouble understanding the way the Anderson mixing 
method is implemented inPETSc.

On the corresponding website 
(http://www.mcs.anl.gov/petsc/petsc-3.5/docs/manualpages/SNES/SNESAnderson.html) 
it says in the
"Option database" section

X_{update} = X + \beta F

which looks to me as if the new solution is calculated from the old 
solution plus something which depends on the old residual F.

However, in the "Notes" section it says that the new solution is found 
by combining "m previous solutions" which I interpret as the last m 
values of X.

In most other sources on Anderson mixing (e.g. the original one referd 
to on the website mentioned above) the update procedure looks something 
like

X^{k+1} = (1-\beta) \sum_{i=0}^{m} \alpha_i^k X^{k-m+1} + \beta 
\sum_{i=0}^m \alpha_i^k G(X^{k-m+i}) where G = F + X.

Therefore, the new value of X is calculated from the last m values of X 
and F.

Unfortunately, I was not able to understand and follow the actual source 
code in src/snes/impls/ngmres/anderson.c 
<http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/impls/ngmres/anderson.c.html#SNESAnderson>

Could you please tell me whether the last values of X, F or both are 
used in the update scheme of PETSc's Anderson mixing implementation?

And is \beta used in a "regular line search way" where X^{new} = X^{old} 
+ \beta* "undamped update"

or as in the equation above

X^{new} = (1-\beta) \sum "function of last m X"   + \beta \sum "function 
of last m G"

which would explain to me why beta is not set via 
-snes_linesearch_damping but using the extra option -snes_anderson_beta.


Thank you very much for your help!
Jonas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160822/e9daeb79/attachment.html>


More information about the petsc-users mailing list