- **OpenFOAM**
(*https://www.cfd-online.com/Forums/openfoam/*)

- - **How to get initial residuals for U components during runtime?**
(*https://www.cfd-online.com/Forums/openfoam/87096-how-get-initial-residuals-u-components-during-runtime.html*)

How to get initial residuals for U components during runtime?Dear all,
I use a modified simpleFoam in OpenFOAM-1.7.x. I simulate a laminar pipe flow with uniform fixed value inlet boundary conditons and zeroGradient outlet boundary conditions. I've set up the case as a wedge using wedge boundary conditions. so far so good... Now I want to stop the simulations if a pre-defined convergence criterion is satisfied for pressure p and the axial (x) and wall-normal (y) velocity component. If I use tmp<fvVectorMatrix> UEqn( fvm::div(phi, U) + turbulence->divDevReff(U) ); UEqn().relax(); eqnResidualU = solve ( UEqn() == -fvc::grad(p) ).initialResidual(); maxResidualU = max(eqnResidualU, maxResidualU); then I get the initial residuals for all three velocity components. And using if (maxResidualU < convergenceCriterionU && maxResidualP < convergenceCriterionP){ Info<< "reached convergence criterion for U and p"<< endl; runTime.writeAndEnd(); Info<< "latestTime = " << runTime.timeName() << endl; } I perform the actual convergence check on all three velocity components. As mentioned above, for this wedge case, I want to stop the calculation if only the x and y component of U satisfy the pre-defined convergence criterion. Does anyone know how to do that? As always, any help is appreciated! Best, Florian |

Try modifying the solver along the lines of this
int StopItter = 1; while (runTime.loop() && StopItter){ . . . #include "UEqn.H". . . } then where you do the convergence check try this if (maxResidualU < convergenceCriterionU && maxResidualP < convergenceCriterionP){ Info<< "reached convergence criterion for U and p"<< endl; runTime.writeAndEnd(); Info<< "latestTime = " << runTime.timeName() << endl; StopItter = 0;} |

thanks for your reply, but if I understand your suggestions correctly, then it will basically do the same as before using
It will stop the calculation when the convergence criteria are satisfied. My concern is If I compare maxResidualU with my convergence criterion, it will always check if the residuals of all velocity components satisfy the convergence criterion. What I need in my specific case is to stop the calculation if only the residuals of Ux and Uy satisfy my convergence criterion. Best, Florian |

Hmm yeah sorry i didtnt look at the code properly before replying :P
I actually have no idea how you would split the Ux and Uy residuals in OpenFOAM itself. How i ended up terminating a simulation upon reaching steady-state was by controlling it with an octave script 1) run OpenFoam solver for n time steps (say 200) from previous time step 2) access the log file and pull out the initial residuals 3) check convergence criterion 4) if convergence reached stop else (1) not very efficient i know, but for what i am doing i had problems with the Ux and Uy residuals, they never actually reach the convergence criterion but rather approached a flat line so i had to specify (1-UxRes(@200)/UxRes(@0)) < 1e-4 for example sorry i couldnt be of more help. |

All times are GMT -4. The time now is 08:45. |