Good morning to everyone! I'm studying adjointShapeOptimizationFoam solver, but now I have some questions which are about the first part of the code, the one which involves, basically, the simpleFoam code. So my questions are:

1) The equation which is solved by the momentum predictor involves the flux phi, which is the product within the interpolation of the velocity on the cell faces and the Sf function. This quantity, as an approximation, is taken as an explicit term, i.e. it derives from the previous iteration or from the BC right?

2) How the algorithm can match the fact that phi is calculated over the cell faces, while U is calculated at the cell center? I can't understand how openFoam can match this, since, I think (and this must be my error), we have the multiplication between one value of velocity and more values of the flux. Is phi perhaps evaluated at the cell center in some ways?

3) Why it is used the p.boundaryField().updateCoeffs() function? In which way boundary conditions, which are prescribed, need to be "updated"? It affects only patches in which only some kinds of BCs (NOT fixedValue or zeroGradient) are applied?

4) The same question is about the function U.correctBoundaryConditions() applied at the end, in the momentum corrector "section". Also in this case the BCs of ONLY some patches are "corrected"? And in which way)? (I guess that a (0,0,0) fixedValue BC over a wall patch will remain always the same, right? )