Autor
|
Thema: Initialisierung von rhoSimpleFoam (2628 / mal gelesen)
|
Studentenmensch Mitglied Student
Beiträge: 47 Registriert: 12.05.2016
|
erstellt am: 28. Jul. 2016 16:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, meine Rechnung mit rhoSimpleFoam konvergiert leider nicht auf meine Zielresiduen hin und ich erhalte große timestep continuity errors. Um das zu begehen habe ich bisher an den Relaxationsfaktoren rumgespielt, das Netz verbessert und nun möchte ich noch probieren, das Geschwindigkeitsfeld bzw. Druckfeld zu initialisieren. Ich dachte ich könnte das mit potentialFoam lösen. Aber hier meckert er mir rum, dass ich falsche Dimensionen für U verwende. Wobei U für beide solver die gleichen Dimensionen hat. Wahrscheinlich wird U aus p berechnet. Und p hat eben unterschiedliche Dimensionen. Für den inkompressiblen Fall m^2 / s^2 und den kompressiblen Fall kg/(m*s^2) . Hat einer eine Idee wie ich das ganze lösen kann? PotentialFoam starte ich mit den Einstellungen aus dem 0 Ordner. Dort ist p bei mir hinterlegt als kg/(m*s^2) (kompressibler Fall). Macht es Sinn hier die Dimensionen auf m^2 / s^2 zu ändern? Ich müsste ja dann für rhoSimpleFoam für alle p Felder wieder die Dimension auf (m*s^2) zurückstellen und irgendwie umrechnen im Anschluss an potentialFoam? Oder gibt es eine andere Initialisierungsmöglichkeit für rhoSimpleFoam? Vielen Dank und Grüße ------------------ Moritz Franke [Diese Nachricht wurde von Studentenmensch am 28. Jul. 2016 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: 29. Jul. 2016 10:12 <-- editieren / zitieren --> Unities abgeben: Nur für Studentenmensch
Hi Moritz, a) Denken b) Probieren c) Fragen Zuerstmal, potentialFoam funktioniert wunderbar in einem rhoSimpleFoam Case:
Code:
Create mesh for time = 0 potentialFlow: Operating solver in PISO mode
Reading velocity field U Constructing pressure field p Constructing velocity potential field Phi No MRF models present Calculating potential flow GAMG: Solving for Phi, Initial residual = 1, Final residual = 0.00437936, No Iterations 6 GAMG: Solving for Phi, Initial residual = 1.54156e-05, Final residual = 7.6661e-07, No Iterations 2 GAMG: Solving for Phi, Initial residual = 7.66134e-07, Final residual = 7.66134e-07, No Iterations 0 GAMG: Solving for Phi, Initial residual = 7.66134e-07, Final residual = 7.66134e-07, No Iterations 0 Continuity error = 0.242919 Interpolated velocity error = 0.0001909 ExecutionTime = 0.94 s ClockTime = 1 s
p hat keine unterschiedlichen Dimensionen (wäre ja auch komisch oder). Außer du nimmst Stellung auf inkompressible und kompressible Löser. Es ist klar, dass hier der Faktor der Dichte und damit auch die Einheiten geändert werden. So wie ich das rekonstruiere, hast du inkompressible gerechnet und dann lediglich diese Daten in einen kompressiblen Löser kopiert und weitergerechnet, oder? Da stellt sich mir jedoch gleich die Frage wieso das geht, da normalerweise sollte direkt nach der ersten Druck-Korrektur ein Fehler der Einheiten kommen (ausgehend von meiner Rekonstruktion; ich kann aus deiner Nachricht nicht herauslesen was du machst). Aber PotentialFoam + Compressible funktioniert bei mir wunderbar (siehe oben die Ausgabe). ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Studentenmensch Mitglied Student
Beiträge: 47 Registriert: 12.05.2016
|
erstellt am: 29. Jul. 2016 15:30 <-- editieren / zitieren --> Unities abgeben:
a) Denken - Check b) Probieren - Check c) Fragen - Momentan dabei Im Tutorial für PotentialFoam steht bei p als Einheit: m^2/s^2 Im Tutorial für rhoSimpleFoam steht bei p als Einheit: kg/(m*s^2) Ausgang ist ein rhoSimpleFoam Case bei dem ich im fvSolution phi ergänzt habe:
Code: solvers { p { solver GAMG; tolerance 1e-08; relTol 0.01; smoother GaussSeidel; cacheAgglomeration on; nCellsInCoarsestLevel 1000; agglomerator faceAreaPair; mergeLevels 1; } Phi // Phi Nur fuer potentialFoam wichtig { $p; } e { solver smoothSolver; smoother symGaussSeidel; tolerance 1e-06; relTol 0.01; } "(U|k|epsilon|omega)" { solver smoothSolver; smoother GaussSeidel; nSweeps 2; tolerance 1e-07; relTol 0.01; } } SIMPLE { nUCorrectors 2; nNonOrthogonalCorrectors 0; rhoMin rhoMin [ 1 -3 0 0 0 ] 0.5; rhoMax rhoMAx [ 1 -3 0 0 0 ] 2.0; residualControl { p 1e-3; U 1e-4; e 1e-3; // possibly check turbulence fields "(k|epsilon|omega)" 1e-6; } } potentialFlow { nNonOrthogonalCorrectors 10; } relaxationFactors { fields { p 0.3; rho 0.1; //ursprünglich 0.1 } equations { U 0.7; "(k|epsilon)" 0.9; e 0.9; } }
Und im fvSchemes auch phi ergänzt habe. Hier hat er mir rumgemeckert das das fehlt. Code: ddtSchemes { default steadyState; }gradSchemes { default Gauss linear; } divSchemes { default none; //neu div(phi,U) bounded Gauss upwind; div((muEff*dev2(T(grad(U))))) Gauss linear; div(phi,e) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; div(phi,Ekp) bounded Gauss upwind; div(phi,omega) bounded Gauss upwind; } laplacianSchemes { default Gauss linear corrected; } interpolationSchemes { default linear; } snGradSchemes { default corrected; } fluxRequired { default no; p ; Phi; //neu für potentialFoam }
Danach hat er mir noch rumgemeckert, das bei meinem Einlauf keine Dichte spezifiziert wäre. Also habe ich bei U gesetzt: Code:
dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { ".*" { type fixedValue; value uniform (0 0 0); } Inlet { type flowRateInletVelocity; massFlowRate 0.1; rho rho; rhoInlet 1.2; } "outlet.*" { type zeroGradient; } }
und für p Code: dimensions [1 -1 -2 0 0 0 0];internalField uniform 1.0e5; boundaryField { ".*" { type zeroGradient; } Einlauf { type zeroGradient; } "outlet.*" { type fixedValue; value $internalField; } }
Anschließend habe ich potentialFoam gestartet mit folgendem ControlDict:
Code: application rhoSimpleFoam; //rhoPorousSimpleFoam;startFrom startTime; startTime 0; stopAt endTime; endTime 200; deltaT 1; writeControl timeStep; writeInterval 10; purgeWrite 2; writeFormat ascii; writePrecision 8; writeCompression off; timeFormat general; timePrecision 6; graphFormat raw; runTimeModifiable true; adjustTimeStep true; maxCo 0.8;
Was mir auch ganz gute Residuuen für phi ausgespuckt hat.
Anschließend habe ich direkt rhoSimpleFoam laufen lassen. Dann kam in der Konsole, dass die Einheiten für U nicht konform sind. 1. Mache ich vielleicht einen Fehler in der Abfolge der Befehle bzw. im ControlDict? 2. Was ist denn potentialFoam für ein Solver? In OpenFoam wird er nur als "Basis CFD Code" gelistet. Er muss ja irgendeine Annahme für rho treffen, kompressibel oder inkompressibel? Es heißt immer, potentialFoam löst das Geschwindigkeitsfeld. Dafür muss doch aber auch das Druckfeld bekannt sein? Sorry bin noch nicht so sehr mit der Theorie bewandert. Aufjedenfall ist die Einheit im Tutorial für potentialFoam anders als beim kompressiblen Fall. Und rhoSimpleFoam ist doch ein kompressibler solver . Kommt es daher zum Konflikt wegen den Einheiten für p? 3. Idee: Ich nehme nach der Rechnung mit potentialFoam lediglich das Geschwindigkeitsfeld U und kopiere mir die U file in meinen 0.Ordner für rhoSimpleFoam. Dann habe ich zumindest die Geschwindigkeit :-) Nich ganz so trivial das zu durchsteigen ------------------ Moritz Franke [Diese Nachricht wurde von Studentenmensch am 29. Jul. 2016 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: 01. Aug. 2016 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für Studentenmensch
Grüße dich, also potentialFoam löst nur das Geschwindigkeitsfeld. Wenn du wissen willst wie die Gleichung (Poissen) aussieht, dann musst du lediglich die Navier-Stokes-Gleichung hernehmen und dann nochmals den Divergenzoperator anwenden. Dann erhält man die Poissen-Gleichung für den Druck, der hier gelöst wird. Der Druck wird dann verwendet, um das Geschwindigkeitsfeld abzuschätzen. Ein kurzer Blick in den Quellcode zeigt letztlich was gemacht wird. Ich hab hier 4.x verwendet und ohne Probleme potentialFoam in einem komperessiblen Löser laufen lassen. Die Ausgabe ist ein modifiziertes U File. Auch wenn ich die Einheiten in p ändere, macht er mir keine Probleme. Liegt auch auf der Hand wenn man die Quellen anschaut:
Code:
Info<< "Constructing pressure field " << pName << nl << endl; volScalarField p ( IOobject ( pName, runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ), mesh, dimensionedScalar(pName, sqr(dimVelocity), 0), pBCTypes );
Wie man sieht, werden die Dimensionen explizit gewählt. Vielleicht ist das aber auch neu hinzugekommen in Foam 4.x. Ergo, es müsste in deinem Fall gehen. Lediglich das Schlüsselwort potentialFlow müsste in dein fvSolution hinzugefügt werden. Zudem müsste noch ein Löser für Phi eingetragen werden. Dann müsstest du potentialFoam ausführen können. Manchmal hat potentialFoam Probleme mit Randbedingungen. ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Studentenmensch Mitglied Student
Beiträge: 47 Registriert: 12.05.2016
|
erstellt am: 05. Aug. 2016 11:46 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|