enrico icon indicating copy to clipboard operation
enrico copied to clipboard

Implement underrelaxation

Open paulromano opened this issue 6 years ago • 0 comments

Moving issue 21 from gitlab originally submitted by @aprilnovak:

Enrico currently uses standard Picard iteration, where a field in iteration i + 1 is computed as the result of some operator A acting on the previous iteration field: u(i + 1) = A(u(i), v(i)). When Doppler feedback is strong and/or the fluid flowrate is sufficiently low, oscillations might be observed between successive iterations in the heat source and/or heat transfer fields. Underrelaxation is a common approach for both reducing these oscillations and speeding up slow convergence.

Underrelaxation computes a field in iteration i + 1 as a linear combination of the previous iterate and the most recently-computed approximation as u(i + 1)=(1 - a) * u(i) + A(u(i), v(i)), where a is a constant parameter in the range (0, 1]. Because underrelaxation is so commonly-used, it would be nice to have the ability to use it in Enrico. Implementing underrelaxation involves several steps:

  • [ ] Create example demonstrating oscillations (without relaxation)
  • [ ] Create example demonstrating slow convergence (without relaxation)
  • [x] Implement underrelaxation capabilities. People most commonly apply underrelaxation to the heat source, so I will assume relaxation of that field, with possible future extensions to other options.
  • [ ] Apply underrelaxation to the two examples to demonstrate both the correct implementation and advantages of the approach.

The above tasks will assume a simple constant-a relaxation. The next steps can be to add stochastic approximation methods, which vary a (and in some cases the number of particles simulated in each Picard iteration).

  • [x] Implement Robbins-Monro stochastic approximation (variable a, constant number of particles/iteration)
  • [ ] Implement Dufek-Gudowski stochastic approximation (variable a and number of particles/iteration)
  • [ ] Apply Robbins-Monro to two examples
  • [ ] Apply Dufek-Gudowski to two examples

paulromano avatar May 15 '19 19:05 paulromano