// aitken acceleration
aitkenDelta.storePrevIter();

// update delta
aitkenDelta = (U - U.prevIter()) / aitkenInitialRes;

// update relaxation factor
if(iCorr == 0)
{
  aitkenTheta = 0.1;
} else
{
  vectorField b(aitkenDelta.internalField() - aitkenDelta.prevIter().internalField());

  scalar sumMagB = gSum(magSqr(b));
  if(sumMagB < SMALL) {
    //Warning << "Aitken under-relaxation: denominator less then SMALL"
    //    << endl;
    sumMagB += SMALL;
  }

  aitkenTheta = -aitkenTheta*
                gSum(aitkenDelta.prevIter().internalField() & b)/sumMagB;
}

// correction to the latest U
U += aitkenTheta*aitkenDelta*aitkenInitialRes;
