Autor
|
Thema: PostProcessing einer Berieselungssimulation (467 mal gelesen)
|
TheB1gLebowski Mitglied
Beiträge: 2 Registriert: 03.08.2021
|
erstellt am: 03. Aug. 2021 16:15 <-- editieren / zitieren --> Unities abgeben:
Liebes Forum, ich führe eine Berieslungssimulation eines einzelnen Füllkörpers durch und möchte herausfinden welche Stellen auf der Oberfläche des Körpers durch Wasser benetzt werden. Der verwendete Solver ist der interFoam und der Füllkörper wurde mittels SnappyHexMesh generiert. Dabei geht es besonders darum wie lange die Stellen benetzt werden. Das heißt zunächst möchte ich herausfinden welche Stellen überhaupt über den gesamten Zeitraum der Simulation jemals mit Wasser in Kontakt waren. Dafür wäre es toll wenn man dies in paraFoam visualisiert darstellen könnte wo insgesamt überall Wasser war und nicht wo gerade in dem spezifischen Zeitschritt Wasser ist (Dies ist ja leicht zu visualisieren). Meine Idee um den zeitlichen Faktor mit zu betrachten ist, die alpha.water Werte in den einzelnen Zellen bzw auf der Oberfläche des Körpers über die geschriebenen timeSteps aufzusummieren und somit einen Absolutwert an alpha.water für die Zellen zu generieren und am besten wäre es, dies dann in paraFoam als "heat map" (also hohe alpha.water Werte entsprechen langer Zeit) visualisieren zu können. Ich konnte leider für beides -also wo war überhaupt Wasser und die Summen der alpha.water Werte keine Lösung finden. es wäre toll wenn mir jemand dabei weiterhelfen könnte, gerne auch andere Ideen um die Problemstellung anzugehen. Da es um die Benetzung des Füllkörpers geht reicht auch eine Lösung die nur den Füllkörper betrachtet (möglicherweiße etwas mit surface?) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 04. Aug. 2021 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für TheB1gLebowski
Hallo "GuterFilm", die Fragestellung kann natürlich mit verschiedenen Methoden umgesetzt werden. Aber dafür benötigst Du (wahrscheinlich) erstmal eigene Libraries die Du programmieren musst. Was ggf. möglich wäre ist die Betrachtung eines Wandfilms. Dazu muss man aber Lagrange rechnen. Die Frage die sich mir bei Dir stellt ist auch, ob eine Lagrange Betrachtung nicht sinniger ist als eine VOF Analyse. Das ist aber abhängig davon, wie viele Tropfen du hast (https://openfoam.org/release/2-0-0/surface-film/). Ansonsten müsstest Du ggf. eine FunctionObject schreiben, die deine Summation erfüllt. Alternativ natürlich, direkt in den VOF Solver rein. Da könnte man dann zwei neue volScalarFields erstellen. Benetzt? Hier würde man sich nur die fvPatches anschauen (internalField = 0). Dann über jede Boundary (ggf. gezielt nur den Körper) loopen und jedes Face betrachten -> alpha@Face > 0 --> benetzt und dann den Wert von 0 auf 1 setzen. Das Feld würde dir dann später angeben, was alles benetzt wurde (Zeitpunkt unbekannt). Menge? Ähnlich wie zuvor, allerdings müsste man hier wohl die Zellwerte der Faces betrachten. Eine blose Aufsummierung macht für mich keinen Sinn. Wenn dann müsste das Integral auf die Benetzungszeit gemittelt werden. Sonst macht das keinen Sinn (zumindest aus meiner derzeitigen Überlegung). Natürlich musst Du das alles hinzuprogrammieren aber das sollte kein Problem darstellen ------------------ Glück Auf, Tobi OpenFOAM® Community - Knowledge Base Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TheB1gLebowski Mitglied
Beiträge: 2 Registriert: 03.08.2021
|
erstellt am: 09. Aug. 2021 10:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, vielen Dank für deine schnelle und ausführliche Antwort. Die VOF Methode ist mir vorgegeben, weshalb ich diese auch nicht ändern kann und somit eine Lagrange Betrachtung auch wenn vielleicht sinnvoller, nicht möglich ist. Bezüglich deines Punktes mit dem benetzt sein, habe ich leider nicht ganz verstanden wie du das meinst. Ich denke es handelt sich bei dem was du beschrieben hast um eine function, die programmiert werden muss ? Bezüglich der Summation der Felder bin ich von der bloßen Aufsummierung auch weg da dies wenig sinnvoll war. Ich habe nun durch die fieldAverage function eine Betrachtung durchgeführt. So wie ich das verstanden habe bildet diese function ein Mittel über die geschriebenen Timesteps für mein alpha.water feld. Deswegen kann man ja davon ausgehen das hohe Mittelwerte für eine längere Zeit benetzt gewesen sein müssen. Liege ich mit dieser Annahme auf dem richtigen Weg ? Viele Grüße Lebowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 09. Aug. 2021 11:51 <-- editieren / zitieren --> Unities abgeben: Nur für TheB1gLebowski
Hey Lebowski,
- Wenn Du VOF verwenden musst, dann sollte das Netz auch entsprechend fein aufgelöst sein (sofern du einzelne Tropfen abbildest - aber die Tropfen sind ja auch recht groß - also auch machbar - definitiv)
- Die Punkte die ich erwähnt habe, sind nicht in FOAM integriert und müssten (natürlich) programmiert werden
- Bei der functionObject siehst Du das richtig, sofern du als base time; gewählt hast. Allerdings muss ich dazu sagen, dass ein «averaging» mit Deinen erstellten Zeitschritten nicht ganz sauber ist, da Du nur die diskreten Zeitpunkte vorliegen hast. Da Deine Simulation aber transient ist, ist die Benetzung in jedem Zeitschritt individuell und man müsste diese Funktion natürlich mit dem Löser zusammen ausführen (nicht über postProcess sondern ins «controlDict» als Funktion definieren). Nur wenn Du das so machst, erhältst Du eine quantitativ richtige Aussage. Alles andere kann - muss aber nicht - richtig sein und ist natürlich abhängig davon, wie viele Zeitschritte Du gespeichert hast. Wenn Du daraus ein flüssiges Video machen kannst (30 FPS), dann sollte das Ergebnis auch ganz akzeptabel sein.
Mit Deiner erwähnten Funktion hab ich noch nicht wirklich gearbeitet und kann damit auch nicht genau sagen was Du zuletzt bekommst: Code:
Calculates average quantities for a user-specified selection of volumetric and surface fields. Fields are entered as a list of sub-dictionaries, which indicate the type of averages to perform, and can be updated during the calculation. The current options include: - \c mean: arithmetic mean - \c prime2Mean: prime-squared mean - \c base: average over 'time', or 'iteration' - \c window: optional averaging window, specified in 'base' units Average field names are constructed by concatenating the base field with the averaging type, e.g. when averaging field 'U', the resultant fields are: - arithmetic mean field, \c UMean - prime-squared field, \c UPrime2Mean Information regarding the number of averaging steps, and total averaging time are written on a per-field basis to the \c "<functionObject name>Properties" dictionary, located in \<time\>/uniform When restarting form a previous calculation, the averaging is continuous or may be restarted using the \c restartOnRestart option. The averaging process may be restarted after each calculation output time using the \c restartOnOutput option or restarted periodically using the \c periodicRestart option and setting \c restartPeriod to the required averaging period.
Ich müsste im Code nachschauen, ob das «mean» dann für jedes einzelne Face/Zelle gilt oder ein Mittelwert im Allgemeinen abbildet. ------------------ Glück Auf, Tobi OpenFOAM® Community - Knowledge Base Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|