| | | Die 10 hitzebeständigsten Materialien für den 3D-Druck, ein Fachartikel
|
Autor
|
Thema: Rotationinduzierte Strömung (1004 / mal gelesen)
|
Bando00 Mitglied Student
Beiträge: 4 Registriert: 08.11.2018 OF v6.0
|
erstellt am: 08. Nov. 2018 18:28 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hoffe, dass ihr mir helfen könnt. Ich würde gerne eine Rotation einer beliebigen Geometrie, z.B. einer zylindrischen Scheibe mit einer beliebigen Dicke, z.B. von 5mm realisieren wollen. Axial zur Scheibe versetzt soll sich eine Wand befinden, um den Einfluss der Rotationsgeschwindigkeit der Scheibe und der Entfernung zur Wand bestimmen zu können. Wie z.B. die Geschewindigkeits-, Druck- und die Schubspannungsverteilung an der Geometrie sowie der Wand/wall. Zwischen der Geometrie und der Wand soll sich ein inkompressibles newtonsches Fluid mit einer beliebigen Viskosität befinden. Die Strömung kann als laminar angenommen werden. Ich habe mich mit einigen Tutorials beschäftigt, um eine Lösung für dieses Problem zu finden, bis jetzt jedoch ohne Erfolg. Meine Überlegungen waren folgende: Entweder - die Scheibe/ der Rotor steht still und das Fluid/Geschwindigkeitsfeld erfährt eine Drehung (a) oder - die Scheibe/ der Rotor rotiert und das Fluid "ruht" (b) a) SRFPimpleFoam: https://github.com/OpenFOAM/OpenFOAM-6/tree/master/tutorials/incompressible/SRFPimpleFoam/rotor2D In diesem Tutorial befindet sich ein fest definierter 2D-Rotor mittig in einer schmalen zylindrischen Scheibe. Dieser wird anschließend radial mit einem relativen Geschwindigkeitsfeld Urel beaufschlagt, indem durch das SRFProperties-Skript eine Rotation in [rpm] realisiert wird. Hier kommt ein sogenannter freestreamPatch für die Mantelfläche der zylindrischen Scheibe zum Einsatz, welcher unterschiedlich auf eine Inlet- sowie Outletströmung reagiert / sich verhält. b) interPhaseChangeDyMFoam: https://github.com/OpenFOAM/OpenFOAM-6/tree/master/tutorials/multiphase/interPhaseChangeDyMFoam/propeller In diesem Tutorial wird mit dem dynamicMesh-Skript durch die AMI-Definition eine Master-Slave Beziehung für einen patch definiert, welcher die rotierende 3D-Geometrie einschließt. Somit wird zusätzlich zu einer Inletströmung eine Propellerroation in der Strömung gewährleistet. Hier wird der Propeller sowie die einzelnen zylinderischen Rechenräume zur Ausbreitung der Strömung als ein .obj file eingelesen und mit Skripten wie .topoSetDict und createPatchDict die notwendigen Patches definiert. Leider verstehe ich den Ablauf im Skript nicht wirklich. Zusätzlich bin ich auf eine boundary condition für eine wall gestoßen, welche jene wall rotieren lassen kann: rotatingWallVelocity. Nun zu meinen Fragen: (1) Hat jemand Erfahrungswerte zu den verschiedenen Ansätzen? Hat jemand zufällig sich mit einem ähnlichen Fall beschäftigt? (2) Habe ich irgendwo einen Denkfehler drin? (3) Ansatz über rotatingWallVelocity: Kann in Kombination mit einem transienten Solver für laminare Strömungen wie z.B. icoFoam (icoDyMFoam wurde meine ich zu icoFoam zusammengefasst) eine Rotation realisieren? Die SuFu hat ergeben, dass sich bereits jemand mit einer strömungsinduzierten Rotation beschäftigt hat, welches genau das Gegenteil meines Ansatzes ist, aber leider der Beitrag zum stillstand kam. Ich wäre für Ratschläge und Hinweise in der Form dankbar, dass ich bei erfolgreichem Aufsetzen der Simulation mein Skript/job-file zur Verfügung stellen würde.
Ich danke allen im voraus. Mit Besten Grüßen, Bando Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 08. Nov. 2018 19:28 <-- editieren / zitieren --> Unities abgeben: Nur für Bando00
Hi Bando, willkommen und Hut ab für eine ausführliche Fragestellung. Damit sind alle Fragen erstmal geklärt. Daher direkt meine Antwort:
- Ich habe so etwas bereits durchgeführt
- Zu deinen Ansätzen: a) SRF oder MRF hab ich nicht verwendet, b) rotatingWallVelocity habe ich verwendet, c) und selbstverständlich auch AMI (wobei das in deinem Fall fast schon zu viel ist.
- Adhoc, ohne weitere Details zu kennen würde ich zu b) tendieren
Einen Multiphasen-Löser brauchst du nicht. Du schreibst ja selbst, dass du eine laminare, inkompressible und damit (ich gehe davon aus) einphasiges Fluid hast, welches sich zwischen Scheibe und Wand befindet. Übrigens, dass erinnert mich ein bisschen an die Versuche zur Viskositätsbestimmung von Newtonschen Fluiden. rotatingWallVelocity kann sowohl für stationäre als auch für transiente Betrachtungen verwendet werden. Gutes Gelingen, Tobi ------------------ Viele Grüße, Tobi OpenFOAM® Tutorials | Training | Publikationen | Für Anfänger wiki.openfoam.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bando00 Mitglied Student
Beiträge: 4 Registriert: 08.11.2018 OF v6.0
|
erstellt am: 08. Nov. 2018 22:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, ich danke dir für deine schnelle Antwort. Genau, den Multiphasen-Solver habe ich nur als ein Beispiel aufgeführt, weil dort die zyklische AMI-Methode zum Einsatz kommt. Ich möchte tatsächlich mit dieser Simulation ein bereits bekanntes einphasiges newtonsches Fluid mit gegebener Viskosität unter möglichst genauen Randbedingungen nachsimulieren. Ich würde nun versuchen zunächst eine stationäre Simulation (vermutlich mit dem simpleFoam-solver mit ausgeschalteter Turbulenzmodellierung) aufsetzen und abschließend eine instationäre (mit dem icoFoam-Solver) für einen potentiellen Vergleich durchführen. Ich hoffe, dass ich bis zum Sonntag eine stationäre Lösung parat habe, welche ich hier präsentieren kann. Und wenn nicht, werde ich mein Problem hier ausführlich wieder servieren. Danke und bis dahin, Bando
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 09. Nov. 2018 07:13 <-- editieren / zitieren --> Unities abgeben: Nur für Bando00
|
Bando00 Mitglied Student
Beiträge: 4 Registriert: 08.11.2018 OF v6.0
|
erstellt am: 11. Nov. 2018 17:52 <-- editieren / zitieren --> Unities abgeben:
Abend zusammen, abend Tobi, ich habe nun versucht eine stationäre Lösung mit dem simpleFoam solver aus dem motorbike-Tutorial zu generieren, bis jetzt leider ohne Erfolg. Die Geometrie wird dabei im .stl-Format eingelesen. surfaceFeatures, blockMesh für das Fluid und anschließender sHM läuft durch. Im log.simpleFoam bekomme ich einen Fehler, welchen ich nicht ganz verstehe und mir die Suche im Internet keine Lösung eingebracht hat. Code: Create timeCreate mesh for time = 0 SIMPLE: No convergence criteria found
Reading field p Reading field U Reading/calculating face flux field phi [0] [1] [2] [3] [4] [1] [1] --> FOAM FATAL IO ERROR: [1] Unable to set reference cell for field p Please supply either pRefCell or pRefPoint [1] [1] [1] file: IOstream.SIMPLE[3] from line 0[2] to line [3] 0--> FOAM FATAL IO ERROR: [4] . [2] [3] --> FOAM FATAL IO ERROR: [1] Unable to set reference cell for field p Please supply either pRefCell or pRefPoint [4] [1] [3] [2] From function --> FOAM FATAL IO ERROR: Unable to set reference cell for field p Please supply either pRefCell or pRefPoint bool Foam::setRefCell(const volScalarField&, const volScalarField&, const Foam::Dictionary&, Foam::label&, Foam::scalar&, bool) [3] [2] [4] [1] [3] [2] Unable to set reference cell for field p Please supply either pRefCell or pRefPoint in file file: cfdTools/general/findRefCell/findRefCell.C[4] [2] IOstream.SIMPLE at line file: from line 105[4] IOstream.SIMPLE0 . from line [4] to line 0[1] file: 0 to line FOAM parallel run exiting IOstream.SIMPLE.[1] 0 from line .[3] 0 to line [3] [2] From function 0[2] bool Foam::setRefCell(const volScalarField&, const volScalarField&, const Foam::Dictionary&, Foam::label&, Foam::scalar&, bool). From function bool Foam::setRefCell(const volScalarField&, const volScalarField&, const Foam::Dictionary&, Foam::label&, Foam::scalar&, bool)[3] [4] in file [2] cfdTools/general/findRefCell/findRefCell.C[4] in file at line From function cfdTools/general/findRefCell/findRefCell.Cbool Foam::setRefCell(const volScalarField&, const volScalarField&, const Foam::Dictionary&, Foam::label&, Foam::scalar&, bool)105 at line . 105 [4] [3] . in file [0] FOAM parallel run exiting cfdTools/general/findRefCell/findRefCell.C[2] [3] at line FOAM parallel run exiting
Ich habe auch versucht meine fvSolution um die angeblich fehlenden Einträge von RefCell und RefPoint zu ergänzen. Wobei ich langsam bezweifle, dass es daran liegt. --> Es wird zumindest ein Geschwindigkeitsfeld auf der Geometrie berechnet, welches auf dem ersten Blick plausibel aussieht. Danke vorab, Bando00. [Diese Nachricht wurde von Bando00 am 08. Dez. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 11. Nov. 2018 18:49 <-- editieren / zitieren --> Unities abgeben: Nur für Bando00
|
Bando00 Mitglied Student
Beiträge: 4 Registriert: 08.11.2018 OF v6.0
|
erstellt am: 11. Nov. 2018 20:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, wer lesen kann ist klar im Vorteil. Ich danke dir für die Hinweise!!! Die Simulation ist gerade durchgelaufen, zumindest für die ersten 100 Iterationsschritte und endete mit einem Abbruch. Jedoch sahen die Ergebnisse vielversprechend aus. Code: Time = 114[3] [1] #[2] 0 Foam::error: rintStack(Foam::Ostream&)[4] [0] ##0 0Foam::error: rintStack(Foam::Ostream&) #Foam::error: rintStack(Foam::Ostream&)0 Foam::error: rintStack(Foam::Ostream&)#0 Foam::error: rintStack(Foam::Ostream&) at ??:? [4] #1 Foam::sigFpe::sigHandler(int) at ??:? [0] #1 Foam::sigFpe::sigHandler(int) at ??:? [1] #1 Foam::sigFpe::sigHandler(int) at ??:? [3] #1 Foam::sigFpe::sigHandler(int) at ??:? [2] #1 Foam::sigFpe::sigHandler(int) at ??:? [3] #2 ? at ??:? [4] #2 ? at ??:? [1] #2 ? at ??:? [0] #2 ? at ??:? [2] #2 ? in "/lib/x86_64-linux-gnu/libc.so.6" [4] #3 Foam::GaussSeidelSmoother::smooth(Foam::word const&, Foam::Field<double>&, Foam::lduMatrix const&, Foam::Field<double> const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&, unsigned char, int) in "/lib/x86_64-linux-gnu/libc.so.6" und weiter unten [...] [3] #7 at ??:? [2] #8 at ??:? [1] #8 ? at ??:? [0] #8 ? at ??:? [4] #8 ?? at ??:? [3] #8 ? at ??:? [2] #9 __libc_start_main at ??:? [1] #9 __libc_start_main? at ??:? [0] #9 __libc_start_main at ??:? [4] #9 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6" [2] #10 in "/lib/x86_64-linux-gnu/libc.so.6" [1] #10 at ??:? [3] #9 __libc_start_main? in "/lib/x86_64-linux-gnu/libc.so.6" [4] #10 in "/lib/x86_64-linux-gnu/libc.so.6" [0] #10 ? in "/lib/x86_64-linux-gnu/libc.so.6" [3] #10 ? at ??:? [ag-VirtualBox:02743] *** Process received signal *** [ag-VirtualBox:02743] Signal: Floating point exception (8) [ag-VirtualBox:02743] Signal code: (-6) [ag-VirtualBox:02743] Failing at address: 0x3e800000ab7 [ag-VirtualBox:02743] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x36cb0) [0x7f5063a0ccb0] und ganz unten [...] mpirun noticed that process rank 1 with PID 2742 on node ag-VirtualBox exited on signal 8 (Floating point exception).
Ich werde aus der Fehlermeldung leider nicht schlauer. Ist etwa der RAM-Speicher übergelaufen oder stimmt eine oder mehrere Randbedingungen eventuell noch nicht?
Und zum Schluss eine Verständnisfrage:
Wenn ich nun die stationäre Lösung mit dem simpleFoam-solver ohne das k-epsilon-Turbulenzmodell rechnen möchte, wird ein einfacher Wechsel von "tubulence on;" zu "turbulence off; im tubulenceProperties-file ausreichen, um eine laminare Strömung zu erzwingen? An dieser Stelle möchte ich dir nochmals vielmals danken Tobi, dass du dir die Zeit genommen hast. Grüße, Bando00. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 13. Nov. 2018 07:45 <-- editieren / zitieren --> Unities abgeben: Nur für Bando00
Zitat:
[ag-VirtualBox:02743] Signal: Floating point exception (8)
Division durch Null löst den Floating Point exception aus. Siehe auch:
Zitat:
A "floating point number" is how computers usually represent numbers that are not integers -- basically, a number with a decimal point. In C++ you declare them with float instead of int. A floating point exception is an error that occurs when you try to do something impossible with a floating point number, such as divide by zero.
https://stackoverflow.com/questions/4236853/floating-point-exception-c-why-and-what-is-itHeißt also, aus irgendwelchen Gründen hast du irgendwo in deinem Lösungsgebiet eine Konstellation, wo durch Null geteilt wird. Zur Prüfung, jeden Iterationsschritt speichern und sich alle Größen zeitlich betrachten (ParaView). Normalerweise findet man die Problemstellen dann recht schnell und kann auf Netz, Randbedingungen zurückschließen. Zu deiner zweiten Frage; so halbwegs ja. Da du die OpenFOAM Foundation Version 6 verwendest musst du das simulationType: RAS Attribut zu simulationType: laminar umändern. Siehe hier auch verschiedene Tutorials. ------------------ Viele Grüße, Tobi OpenFOAM® Tutorials | Training | Publikationen | Für Anfänger wiki.openfoam.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|