Autor
|
Thema: Definition der Randbedingungen für eine Raumabsaugung (1069 mal gelesen)
|
RevolutionZero Mitglied
Beiträge: 29 Registriert: 11.01.2021 OpenFoam V8 OpenFoam 2106 (Ubuntu 20.04.3)
|
erstellt am: 11. Jan. 2021 18:18 <-- editieren / zitieren --> Unities abgeben:
Hallo OpenFoam-Community, ich versuche eine Absaugung für einen quadratischen Raum in OpenFoam zu simulieren. Dazu soll über den Inlet_1 ein fester Volumenstrom mit (Angabe über Geschwindigkeit) einströmen und über Outlet_1 ein fester Volumenstrom (Angabe über Geschwindigkeit) abgesaugt werden. Um das Volumen im Raum und den Druck ausgleichen zu können, soll über zwei Fenster (inlet_2 und inlet_3) wieder Luft nachströmen können. Mein erster Versuch für die Definition der Randbedingungen sieht wie folgt aus:
Code:
FoamFile { version 2.0; format ascii; class volVectorField; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { inlet_1 { type fixedValue; value uniform (0 0.1 0); } inlet_2 { type pressureInletOutletVelocity; value uniform (0 0 0); } inlet_3 { type pressureInletOutletVelocity; value uniform (0 0 0); } outlet_1 { type fixedValue; value uniform (-15.0 0 0); } suction { type noSlip; } walls { type noSlip; } } FoamFile { version 2.0; format ascii; class volScalarField; object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0]; internalField uniform 0; boundaryField { inlet_1 { type zeroGradient; } inlet_2 { type uniformTotalPressure; p0 uniform 0.1; } inlet_3 { type uniformTotalPressure; p0 uniform 0.1; } outlet_1 { type fixedValue; value uniform 0; } suction { type zeroGradient; } walls { type zeroGradient; } }
Bei der Definition der freien Konvektion an den Fenstern bin ich mir allerdings nicht sicher, ob das so passt. Deswegen würde ich gerne wissen, wie man so eine Bedingung in OpenFoam definiert. Ich würde mich freuen, wenn mir jemand weiterhelfen könnte. Vielen Dank schon mal im Voraus für die Hilfe. [Diese Nachricht wurde von RevolutionZero am 11. Jan. 2021 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: 12. Jan. 2021 20:43 <-- editieren / zitieren --> Unities abgeben: Nur für RevolutionZero
Hallo und Willkommen im Forum, - Druck für outlet ist zeroGradient - niemals Druck und Geschwindigkeit am gleichen Patch außer Du hast Überschallströmungen. Da sind die Charakteristiken der Gleichung eine andere
- Druck für die Fenster kannst Du mit totalPressure ansetzen
- UniformTotalPressure brauchst Du hier nicht, kannst aber natürlich auch verwenden. Unterschied, uniform.* arbeitet meistens mit der Function1 c++ Klasse und erlaubt mehrere Profile zu nutzen
Bitte das nächste Mal die Code Tags verwenden. ------------------ Glück Auf, Tobi OpenFOAM® Community - Knowledge Base Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RevolutionZero Mitglied
Beiträge: 29 Registriert: 11.01.2021 OpenFoam V8 OpenFoam 2106 (Ubuntu 20.04.3)
|
erstellt am: 12. Jan. 2021 21:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, vielen Dank für die schnelle Antwort. Ich hab jetzt meine Randbedingungen entsprechend angepasst. Allerdings besteht nun das Problem, dass die Lösung nicht mehr konvergiert und die Zeitschritte immer kleiner werden. Mein controlDict, fvSchemes und fvSolution hab ich mit kleinen Änderungen aus dem pimpleFoam-Tutorial pitzDailyPulse übernommen:
Code: application pimpleFoam;startFrom startTime; startTime 0; stopAt endTime; endTime 5; deltaT 0.0001; writeControl adjustableRunTime; writeInterval 0.05; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable yes; adjustTimeStep yes; maxCo 5; functions { #includeFunc patchAverage(name=inlet, fields=(p U)) }
Code: ddtSchemes { default Euler; }gradSchemes { default Gauss linear; } divSchemes { default none; div(phi,U) Gauss linearUpwind grad(U); div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } snGradSchemes { default corrected; }
Code: solvers { p { solver GAMG; tolerance 1e-7; relTol 0.01; smoother DICGaussSeidel; } pFinal { $p; relTol 0; } U { solver smoothSolver; smoother symGaussSeidel; tolerance 1e-05; relTol 0.1; } UFinal { $U; relTol 0; } } PIMPLE { nNonOrthogonalCorrectors 0; nCorrectors 2; }
Woran könnte es liegen, dass die Zeitschritte immer kleiner werden? Vielen Dank im Voraus für die Hilfe. Gruß Basti 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: 13. Jan. 2021 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für RevolutionZero
Hallo Basti, natürlich könnte es an vielem liegen aber wahrscheinlich an den von mir genannten Randbedingungen (waren jetzt einfach mal adhoc hervorgezogen). Sind deine 15 m/s am Outlet schon realistisch? Scheint mir etwas extrem zu sein. In der Lüftungstechnik hab ich 15 m/s spontan gesprochen noch nicht gesehen. Vielleicht mal 7 - 8 m/s bei einem Drallauslass aber 15 scheint schon hoch zu sein. Aber kann natürlich auch stimmen. WEnn ich aber 15 m/s sehe, dann würde ich nicht mehr behaupten, dass Du eine laminare Strömung hast, oder? Setz mal dein U auf upwind. Höhere Ordnung erst später, wenn alles passt. Daran kannst schonmal festhalten, dass Deine Numerik keine unphysikalischen Ergebnisse produziert. Zudem, MaxCo 5 bedeutet, Du musst den PIMPLE Algorithmus verwenden. Laut Deinen Einstellungen läut der aber im PISO Mode (kannst im Output des Solvers direkt beim Start sehen). Via checkMesh und Deiner Average Non-Orthogonality kannst Du ferner bestimmen ob Deine corrected für laplacian und snGrad ausreicht --> siehe OpenFOAM User Guide. ------------------ Glück Auf, Tobi OpenFOAM® Community - Knowledge Base Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RevolutionZero Mitglied
Beiträge: 29 Registriert: 11.01.2021 OpenFoam V8 OpenFoam 2106 (Ubuntu 20.04.3)
|
erstellt am: 13. Jan. 2021 18:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, vielen Dank für deine Hilfe und für die schnelle Rückmeldung. Bei der Geschwindigkeit hast du Recht, da hab ich einen zu hohen Volumenstrom angenommen. Hab die Geschwindigkeit jetzt mal auf 7 m/s angepasst und werde damit ein paar neue Versuche starten. U hab ich auf Upwind gesetzt und der PIMPLE Algorithmus läuft jetzt auch im PIMPLE Modus. Meine fvSolution sieht jetzt so aus: Code: solvers { p { solver GAMG; tolerance 1e-7; relTol 0.01; smoother DICGaussSeidel; } pFinal { $p; relTol 0; } U { solver smoothSolver; smoother symGaussSeidel; tolerance 1e-05; relTol 0.1; } UFinal { $U; relTol 0; } } PIMPLE { nNonOrthogonalCorrectors 0; nCorrectors 1; nOuterCorrectors 50; pRefCell 0; pRefValue 0; outerCorrectorResidualControl { P { relTol 0; tolerance 0.0001; } U { relTol 0; tolerance 0.0001; } } } relaxationFactors { fields { p 0.7; pFinal 1; U 0.7; UFinal 1; } } // ************************************************************************* //
Ich habe gerade die erste Simulation mit den geänderten Werten laufen lassen. Allerdings musste ich feststellen, dass nach mehreren Zeitschritten die Lösung nicht mehr konvergiert und ich die folgenden Fehlermeldung bekomme: Code: PIMPLE: Iteration 32 smoothSolver: Solving for Ux, Initial residual = 1, Final residual = 0.0240946, No Iterations 1 smoothSolver: Solving for Uy, Initial residual = 0.999998, Final residual = 0.0517483, No Iterations 1 smoothSolver: Solving for Uz, Initial residual = 0.999989, Final residual = 0.050873, No Iterations 1 #0 Foam::error: : printStack(Foam::Ostream&) at ??:? #1 Foam::sigFpe::sigHandler(int) at ??:? #2 ? in "/lib/x86_64-linux-gnu/libc.so.6" #3 Foam::DICPreconditioner::calcReciprocalD(Foam::Field<double>&, Foam::lduMatrix const&) at ??:? #4 Foam::DICSmoother::DICSmoother(Foam::word const&, Foam::lduMatrix const&, Foam::FieldField<Foam::Field, double> const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&) at ??:? #5 Foam::DICGaussSeidelSmoother::DICGaussSeidelSmoother(Foam::word const&, Foam::lduMatrix const&, Foam::FieldField<Foam::Field, double> const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&) at ??:? #6 Foam::lduMatrix::smoother::addsymMatrixConstructorToTable<Foam::DICGaussSeidelSmoother>::New(Foam::word const&, Foam::lduMatrix const&, Foam::FieldField<Foam::Field, double> const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&) at ??:? #7 Foam::lduMatrix::smoother::New(Foam::word const&, Foam::lduMatrix const&, Foam::FieldField<Foam::Field, double> const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&, Foam::Dictionary const&) at ??:? #8 Foam::GAMGSolver::initVcycle(Foam::PtrList<Foam::Field<double> >&, Foam::PtrList<Foam::Field<double> >&, Foam::PtrList<Foam::lduMatrix::smoother>&, Foam::Field<double>&, Foam::Field<double>&) const at ??:? #9 Foam::GAMGSolver::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:? #10 Foam::fvMatrix<double>::solveSegregated(Foam::Dictionary const&) at ??:? #11 Foam::fvMatrix<double>::solve(Foam::Dictionary const&) in "/opt/openfoam8/platforms/linux64GccDPInt32Opt/bin/pimpleFoam" #12 Foam::fvMatrix<double>::solve() in "/opt/openfoam8/platforms/linux64GccDPInt32Opt/bin/pimpleFoam" #13 ? in "/opt/openfoam8/platforms/linux64GccDPInt32Opt/bin/pimpleFoam" #14 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6" #15 ? in "/opt/openfoam8/platforms/linux64GccDPInt32Opt/bin/pimpleFoam"
Woran könnte das liegen? Sollte ich die Relaxationsfaktoren eventuell kleiner kleiner wählen? Vielen Dank für die Hilfe! Gruß Basti [Diese Nachricht wurde von RevolutionZero am 13. Jan. 2021 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: 13. Jan. 2021 20:37 <-- editieren / zitieren --> Unities abgeben: Nur für RevolutionZero
Lass mal in PISO laufen und schreib jede Iteration/Zeitschritt raus. Dann schaust Du mal in Paraview wo das Problem auftritt ... Du wirst hohe Geschwindigkeiten sehen die wahrscheinlich von einem Patch starten. Dann musst mal schauen was Du da machen kannst. Bpsw. setz erstmal Dein Inlet 3 auf eine Wand. Dann Inlet geht was rein (U -> fixed), outlet hast du auch fixed bei U. Dann inlet 2 mit fixedValue im Druck und als U machst einfach mal ein outletInlet mit einem outletValue von (0 0 0). ------------------ Glück Auf, Tobi OpenFOAM® Community - Knowledge Base Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RevolutionZero Mitglied
Beiträge: 29 Registriert: 11.01.2021 OpenFoam V8 OpenFoam 2106 (Ubuntu 20.04.3)
|
erstellt am: 15. Jan. 2021 11:59 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für deine Hilfe. Also die hohen Geschwindigkeiten gehen von den Fensterflächen aus. Die Abänderung der Randbedingung auf outletInlet am inlet_2 führt allerdings auch zu immer kleiner werdenden Zeitschritten bis die Simulation komplett abbricht. Hab auch schon versucht mit einem geringerem Druck an den Fenstern zu rechnen, das hat allerdings auch nicht zum Erfolg geführt. Was könnte ich jetzt noch machen? Gruß Basti Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RevolutionZero Mitglied
Beiträge: 29 Registriert: 11.01.2021 OpenFoam V8 OpenFoam 2106 (Ubuntu 20.04.3)
|
erstellt am: 15. Jan. 2021 12:00 <-- editieren / zitieren --> Unities abgeben:
Soll ich eventuell andere Randbedingungen annehmen, wie zum Beispiel am Outlet anstelle der Geschwindigkeit einen Unterdruck? [Diese Nachricht wurde von RevolutionZero am 15. Jan. 2021 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: 16. Jan. 2021 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für RevolutionZero
Also die Krux ist folgende: - Du müsstest am Outlet Dein Druck fixieren - Ferner müsste am Fenster der gleiche Druck verwendet werden - Allerdings hast Du am Outlet noch die Vorgabe des Volumenstroms Versuch es einfach mal. Fixed für p am Outlet und am Fenster ein totalPressure mit U -> pressureInletVelocity. Am Outlet gibst Du dann ferner noch den Volumenstrom an (oder Geschwindigkeit). Problem hier ist wahrscheilnich, dass Du kein Referenzdruck hast (also irgendwo muss der Wert fixiert sein). Wenn man mit einem totalPressure arbeitet, ohne fixedValue an einem anderen Patch, dann senkt sich der Druck im inneren einfach und die Geschwindigkeit steigt ins unermessliche (es gibt einen konstanten Druckgradient, der stets eine Impulserhöhung mit sich bringt). Die totalPressure RB verhindert das im Allgemeinen, da der Druck auf jedem Face mit dem Wert des kinematischen Drucks (1/2 rho U²) reduziert wird. Das funktioniert aber nur, wenn man irgendwo anders einen festen Druckwert hat. ------------------ 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 >>)
|