OOF2: The Manual

Name

Picard (Picard) — Solve nonlinear equations with Picard iteration. Picard converges more slowly than Newton's method, but does less work per iteration.

Synopsis

Picard(relative_tolerance,absolute_tolerance,maximum_iterations)

Details

  • Base class: NonlinearSolverBase
  • Parameters:

    relative_tolerance
    Relative tolerance for convergence to a nonlinear solution. Type: A real number.
    absolute_tolerance
    Absolute tolerance for convergence to a nonlinear solution. Type: A real number.
    maximum_iterations
    Maximum number of iterations for convergence to a nonlinear solution. Type: Integer.

Description

Picard is a nonlinear solver used in AdvancedSolverMode for solving nonlinear equations by Picard iteration.

Given equations of the form


      \[ B(\phi)\phi = f(\phi). \]
    (6.152)

where \(\phi\) is a vector of unknowns (Field values), \(B(\phi)\) is a nonlinear matrix-valued function of \(\phi\), and \(f(\phi)\) is a vector, and a trial solution \(\phi_n\), the next trial solution is obtained by solving


      \[ B(\phi_n) \phi_{n+1} = f(\phi_n). \]
    (6.153)

Picard iterates this procedure until the residual, \(r_n = B(\phi_n)\phi_n -
  f(\phi_n)\) satisfies


      \[ |r_n| < \epsilon|r_0| + \delta \]
    (6.154)

where \(\epsilon\)=relative_tolerance and \(\delta\)=absolute_tolerance, or when the maximum_iterations limit is exceeded.

[Note] Note

We've written equation (6.152), which is being solved by Picard, in a different form than the equation (6.149) being solved by Newton. In many situations the two methods are equivalent. The big difference between our implementations is that Picard doesn't require the derivative of the \(f(\phi)\) term, which arises from Properties that make direct contributions to forces, as opposed to Fluxes, in equation (2.9). Picard may be useful for systems with linear fluxes (for which computing \(B(\phi)\) is simple) and nonlinear forces, but in general Newton is to be preferred.