Konvergenzprobleme - simpleFoam - Rohrleitungssystem / OpenFOAM
Absynthe23 28. Feb. 2019, 13:24


Geometrie.JPG

 
Hallo zusammen!  

Ich bin neu hier im Forum, allerdings ist es mir schon länger bekannt und der ein oder andere Beitrag konnte mir in der Vergangenheit schon weiterhelfen.

Diesmal habe ich allerdings ein Problem, dass ich momentan leider nicht so richtig gebacken bekomme...


Mein Vorhaben


Ich möchte einen Teil eines Luftleitungssystem  mit OpenFoam (simpleFoam) berechnen.

Es handelt sich um Rohrleitungen mit Krümmern und Durchmessern von 250 und 350 mm die in einen großen Rechteckkanal münden. Die Geschwindigkeiten liegen in der Größenordnung von maximal ~ 24 m/s bis auf 2 m/s

Das Netz erstelle ich mittels SnappyHexMesh und einem reinen Hexaeder-Grundgitter aus gmsh. Hier habe ich bereits mehrere Netzvarianten ausprobiert. Grob / fein / mit Layer oder ohne.. CheckMesh ergab immer das mein Netz in Ordnung ist.

Vorgegeben wird die Geschwindigkeit am Einlass und es wird am Ende des Rechtecks frei "ausgeblasen", hier setze ich den Druck auf "0".

Ich verwende das k-Epsilon Turbulenzmodell mit Wandfunktionen, habe allerdings auch schon kOmegaSST ausprobiert.

Ich initialisiere mittels Potentialfoam.

Mein Problem

Ich habe nun allerdings das Problem, dass ich mit meinem Residuum von p kaum unter den Wert 0,005 - 0,001 oder etwas in der Größenordnung komme. Auch die anderen Größen erreichen meistens keine kleineren Werte.

Das sollte doch eigentlich noch weiter sinken, das ist doch eigentlich nicht akzeptabel so?

Die Ergebnisse sehen eigentlich im groben und ganzen plausibel aus. Geschwindigkeiten sind im korrekten Bereich, beim Druck sind auch keine großen Ausreißer dabei.


Ich mir einfach unsicher und unschlüssig ob ich hier wirklich alles korrekt mache und alle Randbedingungen etc. passen  


Ich wäre wirklich sehr dankbar, falls jemand einfach mal über meinen Case drübersieht und mir eventuell noch die ein oder andere Idee mit auf den Weg gibt!     

Beste Grüße!


Hier ein beispielhafter Auszug meines Rechenoutputs. Ich habe auch schon über 1000 Iterationen gerechnet ohne Erfolg.

Code:

Time = 150

smoothSolver:  Solving for Ux, Initial residual = 0.00378163, Final residual = 3.17913e-005, No Iterations 19
smoothSolver:  Solving for Uy, Initial residual = 0.00795081, Final residual = 6.85687e-005, No Iterations 23
smoothSolver:  Solving for Uz, Initial residual = 0.00467368, Final residual = 4.40989e-005, No Iterations 18
GAMG:  Solving for p, Initial residual = 0.0132319, Final residual = 8.3468e-009, No Iterations 23
GAMG:  Solving for p, Initial residual = 0.00198833, Final residual = 8.91338e-009, No Iterations 14
GAMG:  Solving for p, Initial residual = 0.000139475, Final residual = 5.24627e-009, No Iterations 10
GAMG:  Solving for p, Initial residual = 1.69987e-005, Final residual = 5.30083e-009, No Iterations 7
time step continuity errors : sum local = 2.43281e-007, global = 6.73135e-009, cumulative = 1.22496e-008
smoothSolver:  Solving for epsilon, Initial residual = 0.0105538, Final residual = 0.000100227, No Iterations 14
smoothSolver:  Solving for k, Initial residual = 0.0144642, Final residual = 0.000144077, No Iterations 18
ExecutionTime = 2162.26 s  ClockTime = 2162 s


Der Vollständigkeit halber auch alle anderen Codes meines Case's.

fvSchemes

Code:

/*
Shor-ty 04. Mrz. 2019, 09:27

Hallo Absynthe (das Parfüm?), ...

ich geh nur kurz auf deine Aussagen ein.


  • Schön gegliedert, und code Tags verwendet. Find ich sehr lobenswert
  • Diese Aussage ist nicht korrekt

Zitat:

Ich habe nun allerdings das Problem, dass ich mit meinem Residuum von p kaum unter den Wert 0,005 - 0,001 oder etwas in der Größenordnung komme. Auch die anderen Größen erreichen meistens keine kleineren Werte.

Das sollte doch eigentlich noch weiter sinken, das ist doch eigentlich nicht akzeptabel so?


Der SIMPLE Algorithmus (du verwendest ja den SIMPLEC) kann transiente Erscheinungen nicht berechnen. Wenn du also alle 5 oder 10 Iterationen rausschreiben lässt und dir einen Schnitt durch deinen Rechteck-Kanal legst, gehe ich stark davon aus, dass du hier irgendwelche transienten Erscheinungen vorfinden wirst. Zumindest irgendwo in deiner Geometrie. Entsprechend können deine Residuuen nicht weiter sinken auch wenn die Lösung eigentlich schon gut approximiert[i] ist.

Allgemein rechnest du ja sehr stabil (1 Ordnung - Gauss Upwind). Beim Outlet würde ich beim Geschwindigkeitsfeld ein inlet/Outlet verwenden und ein Rückströmen verhindern (du weißt ja nicht wie und was eigentlich rückströmen würde). Ferner hast du hier einen fixierten Druck, wodurch diese [i]pressureXY Randbedingung wenig Sinn macht. Siehe Quellcode (sofern ich mich jetzt richtig erinnere).


  • Essentiell ist natürlich auch der Fehler, dass du den Druck nicht unterrelaxierst (auch wenn du SIMPLEC) verwendest solltest du dein Druckfeld unterrelaxieren
  • Stabilisierung kannst du auch damit erreichen, dass du deine Gleichungen nicht mit 0.9 sondern mit 0.7 unterrelaxierst, damit fallen deine Residuuen im Allgemeinen auch

Ansonsten, sagen die Residuuen nicht immer das aus, ob eine Lösung konvergiert ist oder nicht. Siehe hierzu die Berechnung der Residuuen in OpenFOAM + Skalierung. Irgendwo auf cfd-online.com hab ich das mal beschrieben.


Zuletzt:

Zitat:

Mesh non-orthogonality Max: 62.0921 average: 10.7761


Das ist mit Abstand das Wichtigste. Ein Wert von 62 ist eigentlich noch gar nicht so hoch, daher würde ich auch deine 3x NonOrthoCorrection auf 0 setzen und eher die nCorrectors auf 2. Auswirkungen sind in der Druck-Korrekturgleichung vorzufinden.

Ach ja, für eine bessere Approximation der Turbulenzgrößen würde ich dir die turbulentKineticEnergy... für k empfehlen und die [i]mixingLengthDissipationRateInlet...[i] für epsilon und entsprechend die MixingLength bestimmen (=d_hyd * 0.037).

Absynthe23 04. Mrz. 2019, 21:02

Hallo Tobias,

vielen lieben Dank erstmal dafür, dass Du Dir kurz Zeit genommen und meinen Case angesehen hast!   

Zitat:
Der SIMPLE Algorithmus (du verwendest ja den SIMPLEC) kann transiente Erscheinungen nicht berechnen. Wenn du also alle 5 oder 10 Iterationen rausschreiben lässt und dir einen Schnitt durch deinen Rechteck-Kanal legst, gehe ich stark davon aus, dass du hier irgendwelche transienten Erscheinungen vorfinden wirst. Zumindest irgendwo in deiner Geometrie. Entsprechend können deine Residuuen nicht weiter sinken auch wenn die Lösung eigentlich schon gut approximiert[i] ist.

Okay, da gebe ich dir natürlich Recht! Vermutlich werden nach der plötzlichen Aufweitung des Rohres in den Rechteck-Kanal große Ablösegebiete mit instationären Verwirbelungen/Verhalten auftreten..und diese kann der SIMPLEC Algorithmus nicht lösen. Das würde dann eventuell auch die doch deutlich schwankenden Residuen erklären?


Ich habe deine Ratschläge beachtet und meine Simulation dahingehend angepasst. Es ändert sich kaum etwas, nur ein klein wenig weiter sinken die Residuen. Ich werde das Ergebnis (für verschiedene Iterationsanzahlen) auch noch untereinander vergleichen.


Jetzt hätte ich dann allerdings noch eine Frage. Um die transienten Effekte abbilden zu können, würde ich dann wohl an dieser Stelle als Solver pimpleFoam verwenden, richtig?

Das würde ich mir dann die nächsten Tage mal genauer ansehen/probieren.

Gibt es hier etwas zu beachten? Wie groß ist der Aufwand? Oder einen Art "Ratschlag" den Du mir vorab geben könntest? 


Beste Grüße!

Timo

P.S:

Absynthe ist u.a. ein Lied 


Shor-ty 05. Mrz. 2019, 13:17

Hi,


  • Wie sieht deine Unterrelaxation vom Druck aus (Eintrag in fvSolutions)
  • pimpleFoam für transiente Berechnungen, ja. Wie man die Algorithmen richtig verwendet (PISO / PIMPLE / SIMPLE), findest du in meinem Buch Mathematics, Derivations, Numerics and OpenFOAM
  • Aufwand ist meines Erachtens nicht sehr groß (also um den Case umzubauen)
  • Du kannst auch transiente Tutorials von meiner Seite holen (holzmann-cfd.de)

Gutes Gelingen. Grüße Tobi