Thank you for this fast response!


Am 22.08.2016 18:07, schrieb Barry Smith:
On Aug 22, 2016, at 7:36 AM, Jonas Mairhofer <[email protected]> 
wrote:

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
    This is wrong, it is the "mixing" parameter. I will fix it.
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
   The computation of the \sum_{i=0}^{m} \alpha_i^k X^{k-m+1} and \sum_{i=0}^m 
\alpha_i^k G(X^{k-m+i} take place in

   146:     
SNESNGMRESFormCombinedSolution_Private(snes,ivec,l,XM,FM,fMnorm,X,XA,FA);

in particular  the

     ierr = VecMAXPY(XA,l,beta,Xdot);CHKERRQ(ierr);

  (note this is NOT the same \beta it is more like the \alpha above).

     ierr = VecMAXPY(FA,l,beta,Fdot);CHKERRQ(ierr);

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?
    Both are, see above.
And is \beta used in a "regular line search way" where X^{new} = X^{old} + \beta* 
"undamped update"
No
or as in the equation above

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

142:       VecAXPY(XM,-ngmres->andersonBeta,FM);

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

Reply via email to