[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