Autor
|
Thema: Variable Haltekraft implementieren (1851 mal gelesen)
|
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 22. Feb. 2013 14:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich bin OpenFOAM-Neuling und würde gerne Eure Hilfe in Anspruch nehmen. Ich simuliere einen Wassertropfen in einem vom Luft durchströmten Kanal. Ich bin davon ausgegangen, dass interFoam dafür der beste Solver ist und habe den DamBreak Case als Grundlage genommen. Ich habe es geschafft, den Fall so zu modifizieren, dass ich nun einen 2D-Kanal von 20cm Länge und 1cm Höhe habe. Der Wassertropfen befindet sich zu Beginn in der Mitte des Kanals. Luft strömt von links ein und rechts aus und setzt den Wassertropfen mit der Zeit in Bewegung und bläst ihn aus dem Kanal. Soweit funktioniert alles ganz gut. Nun möchte ich eine variable Haltekraft einführen, die auf den Wassertropfen wirkt und während der Simulation so angepasst wird, dass der Tropfen für unterschiedliche/variierende Strömungsgeschwindigkeiten immer in der Mitte des Kanals bleibt. Ich bin aber etwas ratlos, wie sich das am besten umsetzen lässt, und konnte bisher auch weder hier noch anderswo etwas dazu finden. Wenn also jemand eine Idee hat, wäre ich sehr dankbar. 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: 22. Feb. 2013 19:04 <-- editieren / zitieren --> Unities abgeben: Nur für u2947
|
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 25. Feb. 2013 14:15 <-- editieren / zitieren --> Unities abgeben:
Hi, danke für die Antwort. Ziel des Ganzen ist die Bestimmung des Widerstandskoeffizienten des Tropfens. Für jede vorgegebene Strömungsgeschwindigkeit soll die virtuelle Haltekraft bestimmt werden, um den Tropfen an Ort und Stelle zu halten. Wenn die Haltekraft bekannt ist soll dann damit (in Abhängigkeit von der Geometrie, Tropfengröße, etc.) der Widerstandskoeffizient berechnet werden, der für Folgeversuche benötigt wird. Ich habe bisher noch nicht mit bubbleFoam gearbeitet. Ich möchte nur einen Tropfen betrachten und nicht viele, ich vermute aber mal das spielt keine Rolle? Außerdem habe ich auf "openfoamwiki.net" folgendes gefunden: "The diameter of the particles1 constituting the dispersed phase is assumed to be constant." Kann bubbleFoam trotzdem Verformungen des Tropfens modellieren? Das wäre nämlich sehr wichtig für mich. Der Tropfen soll auch keine "Kugel" sein, die durch den Kanal schwebt, sondern mehr oder weniger halbkreisförmig an der Wand haften. Wäre es für den Anfang vielleicht möglich, die Gewichtskraft als Haltekraft zu nehmen? Die statt nach unten nach links wirken zu lassen ist ja kein problem, aber kann man die während der laufenden Simulation (automatisch) anpassen? Langfristig wäre aber eine separate Kraft besser. Gruß Moritz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 17. Jun. 2013 15:58 <-- editieren / zitieren --> Unities abgeben:
Hi, ich habe eine Lösung gefunden, falls es noch jemanden interessieren sollte. Es ist ziemlich einfach, die Gravitation während der Simulation zu variieren. Ich habe in einem anderen Forum einen Ansatz gefunden (http://www.cfd-online.com/Forums/openfoam/71740-variation-gravity-time-2.html) und dann abgewandelt. Ich hänge eine (sehr primitive!) Möglichkeit als Beispiel an. [Diese Nachricht wurde von u2947 am 18. Jun. 2013 editiert.] 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: 17. Jun. 2013 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für u2947
|
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 18. Jun. 2013 09:56 <-- editieren / zitieren --> Unities abgeben:
|
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 18. Jun. 2013 12:10 <-- editieren / zitieren --> Unities abgeben: Nur für u2947
Interessant: das wurde implementiert?
Code:
forAll(mesh.cells(),i) //forAll(mesh.C(),i) works as well { double currentPosition = mesh.C()[i][0]; if (currentPosition < 0.) { alphaSum -= alpha1[i]; //*mesh.V()[i]; multiplication with cell voulme only necessary for non-uniform mesh } else if (currentPosition > 0.) { alphaSum += alpha1[i]; } } Info << "\nalphaSum: " << alphaSum << "\n"; if (alphaSum < 0.) { g=gunits*vector(0,-1,0) + gunits2*vector(1,0,0); } else if (alphaSum > 0.) { g=gunits*vector(0,-1,0) + gunits2*vector(-1,0,0); } else { g=gunits*vector(0,-1,0); } // VVPF c: Info << " AnalyzeGravity " << " " << g.component(vector::X).value() << " " << g.component(vector::Y).value() << " " << g.component(vector::Z).value() << endl; // VVPF d: // Comes from the file "createFields.H". You dont have to delete the lines // in "createFields.H". The field gh is just initilaized there. Info<< "Calculating field g.h\n" << endl; volScalarField gh("gh", g & mesh.C()); surfaceScalarField ghf("ghf", g & mesh.Cf());
------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 19. Jun. 2013 10:58 <-- editieren / zitieren --> Unities abgeben:
Wie gesagt, es ist sehr primitiv, funktioniert aber grundsätzlich. Das war mein erster Versuch. Eigentlich war ich dabei, eine ordentliche Regelung zu implementieren, aber habe dann bemerkt, dass der Tropfen sich merkwürdig verhält (http://ww3.cad.de/foren/ubb/Forum527/HTML/000449.shtml) und muss jetzt erst mal herausfinden, woran das liegt. 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: 19. Jun. 2013 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für u2947
Hi, für deine Haltekraft änderst du also die Erdbeschleunigung g. Hierzu addierst du dann eine Beschleunigung (negativ oder positiv) in einer entsprechenden Richtung, oder? Den Betrag der Kraft leitest du über die Beschleunigung her; sehe ich das richtig? Die Betragsänderung die du implementiert hast ist immer 1 m / s ² oder?
------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 19. Jun. 2013 14:55 <-- editieren / zitieren --> Unities abgeben:
Hi, nicht ganz, es sind 1.5 m/s². Ich definiere am Anfang ja zwei skalare Größen const dimensionedScalar gunits("gunits", dimensionSet(0,1,-2,0,0,0,0), 9.81); const dimensionedScalar gunits2("gunits", dimensionSet(0,1,-2,0,0,0,0), 1.5); die erste ist der Betrag der normalen Gravitation, die zweite die (willkürlich gewählte) Haltebeschleunigung. Nach der Abfrage, ob sich der Tropfen auf der rechten oder linken Kanalseite befindet, setzt ich daraus dann den Gravitationsvektor zusammen. g=gunits*vector(0,-1,0) + gunits2*vector(1,0,0); bzw. g=gunits*vector(0,-1,0) + gunits2*vector(-1,0,0); Die Erdbeschleunigung wirkt also in jedem Fall nach unten und die Haltebeschleunigung nach rechts oder links. Wenn die Beschleunigung so gewählt ist, dass der Tropfen stillsteht, kann ich mir dann die Haltekraft als Produkt von Haltebeschleunigung und Tropfenmasse ausrechnen. Das geht natürlich nicht mit einem festen Wert, aber man kann ja den Betrag der Beschleunigung während der Rechnung anpassen. retentionAcceleration = ... dimensionedScalar retentionScalar("gunits", dimensionSet(0,1,-2,0,0,0,0), retentionAcceleration); g = retentionScalar*vector(1,0,0); (Hier jetzt ohne Erdbeschleunigung) Gruß Moritz 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: 21. Jun. 2013 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für u2947
|
u2947 Mitglied Student
Beiträge: 10 Registriert: 22.02.2013
|
erstellt am: 21. Jun. 2013 14:35 <-- editieren / zitieren --> Unities abgeben:
Hi, das war vielleicht etwas missverständlich ausgedrückt. Ich ändere "g", was für den Solver die Erdbeschleunigung ist, und das bei jeder Iteration. Nur was das "g" für mich bedeutet ist unterschiedlich. Im ersten Fall g=gunits*vector(0,-1,0) + gunits2*vector(1,0,0); addiere ich zu der normalen Erdbeschleunigung noch eine zweite Beschleunigung hinzu, aber da die Vektoren senkrecht aufeinander stehen, sind die beiden ja prinzipiell unabhängig voneinander. Im zweiten Fall g = retentionScalar*vector(1,0,0); (stammt aus einer späteren Version, nicht aus dem Code den ich hochgeladen habe) rechne ich ohne Schwerkraft und das "g" besteht nur noch aus der Haltebeschleunigung, auch wenn der Solver es weiterhin als Gravitation behandelt. Ich zweckentfremde die Gravitationskomponente quasi. Hoffe das war jetzt verständlicher. Gruß Moritz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|