residual control with PISO or NonOrthogonality
Hello,
I want to change the implementation of residual control in OpenFoam somewhat (interDymFoam is used). Right now, if you add additional PISO loops or Nonorthogonal corrections, the abstol is taken from the last iteration. I want to change this that it takes always the value of corrPISO == 1 (for 0 there is no pressure equation) and NonOrthogonalCorr == 0. In order to do this, I thought to add an object in pimpleControlI.H: Code:
inline bool Foam::pimpleControl::firstPISONOC() const Code:
residualControl_[fieldI].initialabstol Code:
public: Thanks for the support. Regards, Daniel |
I am kind of stuck with this and would appreciate some help. The solution sketched up below does not work. The reason why is simple: the residual control check is done after each PIMPLE loop. At this point, CorrPISO_ and corrNonOrtho_ are reset to 0 (since the loops are finished) and abstol is that of the last matrix iteration.
This means calling a procedure to check for CorrPISO_ or corrNonOrtho_ to be any number is pointless, since they are always constant (= 0) at this point. This opens up a question: why does OpenFoam has check procedure storeInitialResiduals() specifying CorrPISO_ and corrNonOrtho_ (among others) if these numbers are 0 anyway? It would be sufficient to check for corr_. There are two initial residuals stored, the very first one (called first) and, as said the last. I would need the first of each PIMPLE step as residual. I checked if this residual is saved somewhere or if I can save it by overwriting a number within e.g. the application solver. Unfortunatly, the residuals are protected and cannot be overwritten. The best way to do what I want would be the use the variable sp.first().initialResidual() and update after each PIMPLE loop. But this does not seem to work. It is only saved the very first PIMPLE loop. Can anybody tell me, where this is done? I would like to change this, but I do not find any first() object in solverPerformance.C. Is there a list of residuals stored? Regards, Daniel |
So, I figured it out finally. The solverPerformance object is a list that can be read out. So, all that was needed is to find the right row where to find the information. In pimpleControl.C instead of
Code:
const scalar residual = = sp.last().initialResidual(); Code:
scalar residual; This works for interFoam, where the outer loop is alpha1Eqn and there inner loops are for p_rghEqn only, but should work for other solvers too (I did not test this) as long as the pressure is designated p_rgh or p. Regards, Daniel |
All times are GMT -4. The time now is 15:38. |