Autor
|
Thema: Post-Processing: Massenstrom berechnen (7404 mal gelesen)
|
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 28. Aug. 2012 13:23 <-- editieren / zitieren --> Unities abgeben:
Hi FOAM'ler, ich würde mir am Inlet und am Outlet gern meine Massenströme berechnen. Irgendwie komme ich mit den Tips, die ich gegoogelt habe nicht zurecht. Ich habe gelesen, dass man OF in der fvScheme sagen kann, dass der für jedes writeInterval den Massenstrom mitberechnet und in der phi niederschreibt, stimmt das? Phi wird dann über das Outlet integriert? Wenn ja, wie mache ich das? Habe es schon mit integrateVariables bei Paraview versucht, aber irgendwie bin ich zu blöd die zu integrierenden Daten dafür auszuwählen ?!?! Ich hätte jetzt irgendwie über das Outlet eine mittlere Geschwindigkeit berechnet und diese einfach mit der Dichte und dem Querschnitt multipliziert (Konti-Gleichung). Muss doch mit paraView irgendwie gehen... Viele Grüße 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: 28. Aug. 2012 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hi, bzgl. Phi-Feld: phi-Feld in Paraview bzgl. Massenstrom an In- und Outlet:patchIntegrate weiteres: Volumenstrom/Massenstrom in Paraview weiteres: calcMassFlow - Kontrollflche bzgl. Paraview und Massenstrom an Patches (irgendwo steht hier im Forum auch was, find ich aber grad nicht): a) inlet-Patch auswählen (internalField abwählen) b) integratedVariables c) integratedVariables auswählen -> Filter -> Calculator d) U*rho/Area e) in die Tabelle wechseln f) Calculator auswählen g) Result = Massenstrom wiederhole für Outlet Möglich auch für ein Slice aber man erhält große Abweichungen vom wirklichen Massenstrom, da eine Linearisierung statt findet. PS: Alles über die Suchfunktion gefunden Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TTB Mitglied CFD Engineer
Beiträge: 353 Registriert: 02.10.2008 BIM HVACTool für Windows OpenFOAM-2.2.x
|
erstellt am: 28. Aug. 2012 17:49 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hallo Tobi, oder am Ende der controlDict anhängen:
Code:
functions ( massFlow { type patchMassFlow; functionObjectLibs ( "libsimpleFunctionObjects.so" ); verbose true; patches ( outlet ); factor 1.; } );
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: 28. Aug. 2012 18:29 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
|
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 04. Sep. 2012 15:01 <-- editieren / zitieren --> Unities abgeben:
Hi Foam'ler, also irgendwie funktioniert das mit dem Bestimmen des Massenstroms nicht.... Folgendes Problem (bspw. an einer Düse): Ich gebe mir am Inlet eine Strömungsgeschwindigkeit (Durck zeroGradient) für Luft vor, so dass sich für Luft der entsprechende Massenstrom einstellt. Am Outlet ist die Geschwindigkeit zeroGradient und ein Druck vorgegeben. Die Strömungsgeschwindigkeit habe ich mir über die Konti-Gleichung ausgerechnet: m_strom = rho*AInlet*u (Berechnet für einen kreisrunden Querschnitt) Ich erhalte an meinem Modell auch die Strömungsbedingungen, die ich nach Bernoulli und Konti (vereinfachend) erwarte. Wenn ich nun aber patchIntegrate mache, dann zeigt der mir für phi Werte von 170 an. (welche ja dann der Massenstrom sein soll) Also mein Massenstrom beträgt 0,05 kg/s Luft (berechnet auf meine Eintrittsfläche) Wenn ich nun am Inlet flowRateInletVelocity mache und einen Massenstrom von 0,05kg/s vorgebe, dann erhalte ich zwar für den Massenstrom über patchIntegrate auch den richtigen Wert von exakt 0,05. Aber meine Strömungsgeschwindigkeiten sind, wenn ich mir mein Profil in Paraview angucke, sehr niedrig ... unter 0,1m/s. Berechnet auf meinen Querschnitt kann das doch gar nicht sein ?! Nun folgende Frage/Vermutung: Ich arbeite ja mit dem Rotationssymmetrischen Mesh (mit wedges und so). vgl.5.2.2 basetypes --- http://www.openfoam.org/docs/user/boundaries.php Kann das sein, dass flowRateInletVelocity und patchIntegrate mit falschen Werten für die Fläche rechnen und dadurch Fehler verursachen, weil ich mich mit nem rotationssymmetrischen Modell arbeite? Oder muss ich meine Querschnittsfläche von meinem "Kuchenstück" berücksichtigen? Dass ich mir meine Strömungsgeschwindigkeit auf die kleinere Fläche berechnen muss? Wäre aber unlogisch, dann müssten bei gleichen Massenstrom und kleinerer Fläche ja die Strömungsgewschindigkeiten noch höher sein. Außerdem kommen ja mit meiner vorgegebenen Geschwindigkeit am Inlet durchaus realstische Werte raus... Hier meine Ausgaben vom patchIntegrate am Inlet (patchIntegrate phi air -latestTime)
Code:
Create mesh for time = 30Time = 30 Area vector of patch air[0] = (23.1318 0 0) Area magnitude of patch air[0] = 23.1318 Reading surfaceScalarField phi Integral of phi over patch air[0] = -170.643 End
-----------------------------Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 04. Sep. 2012 16:05 <-- editieren / zitieren --> Unities abgeben:
Nochmal ich. Laut cfd-online habe ich das wohl richtig gemacht, dass ich "so tun" kann, als wäre das ein volles Rohr. OF rechnet das dann für mich um. Also der Ansatz die entsprechende Strömungsgeschwindigkeit vorzugeben passt??? Wenn ja, sollte das Problem bei patchIntegrate/flowRateInletVelocity liegen, oder? Oder kann man beim "Mitschreiben" von phi fehler machen? [Diese Nachricht wurde von bartholomew83 am 04. Sep. 2012 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: 04. Sep. 2012 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hi, eine Strömunggeschwindigkeit vorzugeben bedarf keiner Berücksichtigung der Querschnittsfläche. Beim Massenstrom jedoch schon. Du hast nur 1/4 der Querschnittsfläche, somit auch 1/4 des Massenstroms den du vorgeben solltest. Wieso deine Werte so abweichen ist ne gute Frage. An patchIntegrate liegts nicht, genauso wenig wie flowRateInletVelocity. Du machst irgendeinen Fehler. Passt deine Skalierung? Hast du 23m² Querschnittsfläche?
Zitat: Kann das sein, dass flowRateInletVelocity und patchIntegrate mit falschen Werten für die Fläche rechnen und dadurch Fehler verursachen, weil ich mich mit nem rotationssymmetrischen Modell arbeite?
Normal nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 04. Sep. 2012 19:26 <-- editieren / zitieren --> Unities abgeben:
Hi Tobi, ich habe in meiner blockMesh convertToMeters 0.001; und dann ist eigentlich alles in mm angegeben. Ist doch eigentlich richtig, oder? Oder genau andersrum mit 1000? Das Inlet ist quasi das erste "Kuchenstück". Die Rotationsachse geht durch den Nullpunkt. Von dort aus ich 2 Punkte mit dem Radius in y-Richtung aufgespannt, die jeweils in z so verschoben sind, dass ein 5°-Keil aufgespannt wird. Also bspw. Punkt1 (0 20 z) und Punkt2 (0 20 -z) z=Wert entsprechend y und 5°-Keil berechnet. Mein Rohr hat am Eingang einen Radius von 20mm. Damit müsste ich auf eine Fläche von 0.00126m² kommen. Ist da vielleicht irgendwo ein Denkfehler drin? Achso, und was meinst Du mit 1/4 der Querschnittsfläche? Meinst Du bezogen auf mein Modell. Also, wenn wäre es ja noch weniger, weil ich ja ein 5°-Keil um 360° rotieren lasse. Bei cfd-online habe ich irgendwo gelesen, dass OF aber das berücksichtigt und man ganz normal für den vollen Querschnitt die BC's setzen kann. Gruß [Diese Nachricht wurde von bartholomew83 am 04. Sep. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 04. Sep. 2012 19:32 <-- editieren / zitieren --> Unities abgeben:
Kann das vielleicht sein, dass patchIntegrate und flowRateInlet den "convertToMeters"-Faktor in die Rechnung nicht korrekt einbeziehen? Oder kann man davon ausgehen, dass die richtig funktionieren? Ich änder gleich mal alle meine Werte mit convertToMeters = 1 Mal gucken ob's was bringt. [Diese Nachricht wurde von bartholomew83 am 04. Sep. 2012 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: 04. Sep. 2012 19:46 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hi, convertToMeters ist einschließlich für blockMesh. Durch blockMesh erzeugst du dir dein Netz und alle anderen Parameter sind davon nicht mehr betroffen. Skalierung nachschauen checkMesh gibt Info über die Größe (bounding-Box) Angaben in Meter Paraview: Netz einladen "Display Information" gibt auch die Boundingbox in Meter Massenstrom / cfd-online Bzgl.
Code:
flowRateInletVelocity
folgender Code:
Code:
const scalar t = db().time().timeOutputValue(); // a simpler way of doing this would be nice const scalar avgU = -flowRate_->value(t)/gSum(patch().magSf()); tmp<vectorField> n = patch().nf(); const surfaceScalarField& phi = db().lookupObject<surfaceScalarField>(phiName_); if (phi.dimensions() == dimVelocity*dimArea) { // volumetric flow-rate operator==(n*avgU); } else if (phi.dimensions() == dimDensity*dimVelocity*dimArea) { if (rhoName_ == "none") { // volumetric flow-rate operator==(n*avgU); } else { // mass flow-rate const fvPatchField<scalar>& rhop = patch().lookupPatchField<volScalarField, scalar>(rhoName_); operator==(n*avgU/rhop); } }
Denke das sagt alles oder? OF berechnet dir über deinen Massenstrom die mittlere Geschwindigkeit avgU. Diese wird über: Code:
avgU = massenstrom / fläche
berechnet. Anschließend wird diese mit den Normalenvektoren der Fläche multipliziert und woala du hast deinen Massenstrom angegeben. gibst du den Massenstrom der kompletten Fläche an, dann stmimt das nicht. Symmetrie Dachte du hast 2x SymmetryPlanes und simulierst 1/4 von einer Geometrie. Bei deiner Simulation müsstest du das Kreissegmet als Fläche nehmen. Fläche über Paraview möglich.
Zitat: Damit müsste ich auf eine Fläche von 0.00126m² kommen.
Und deiner Aussage von oben (patchIntegrate) sehe ich das du nen Skalierungsfehler haben solltest. Für Geschwindigkeitskomponenten spielt es keine Rolle ob du 100m/s auf den Gesamtquerschnitt initialisiert oder auf 1/10 davon.
Ist auch logisch. Kompletter Querschnitt -> du hast den ganzen Massenstrom da OF die komplette Querschnittsfläche hat. Bei 1/10 Querschnittsfläche hat OF nur diese. Der Geschwindigkeitsvektor ändert sich dadurch aber nicht! Grüße Tobi 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. Sep. 2012 22:31 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Ergänzend und abschließend: - bei kompressiblen Strömungen: Code:
type flowRateInletVelocity; flowRate uniform 2; // kg/s rho rho; value uniform (0 0 0);
Ist aber optional da der Konstruktor rho = rho initialisiert, wenn man nichts vorgibt. Mit
Code:
rho none;
erhält man den volumetrischen Massenstrom.Grüße Tobi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bistor Mitglied Entwicklungsingenieurin
Beiträge: 96 Registriert: 12.04.2011 OpenFoam 2.1.x Salome
|
erstellt am: 11. Sep. 2012 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Zitat: Original erstellt von TTB: Hallo Tobi,oder am Ende der controlDict anhängen:
Code:
functions ( massFlow { type patchMassFlow; functionObjectLibs ( "libsimpleFunctionObjects.so" ); verbose true; patches ( outlet ); factor 1.; } );
Hallo, ich hab das gerade ausprobiert. Aber patchMassFlow kennt mein OF scheinbar nicht. Habe dann gegooglet. Man muss wohl "libso" dafür kompilieren. Ist das korrekt? Wenn ja was brauch ich dafür? Den scheinbar fehlt das meinem System auch. 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: 11. Sep. 2012 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hi, das Thema hatte ich gestern mit Thomas. Anscheinend geht sein Vorschlag nicht in der offiziellen Version. Ich persönlich habe es noch nicht getestet und kann dir deshalb keine Lösung sage. Ggf. wird Thomas nochmals eine Aktualisierung posten sobald er es gelöst hat. Grüße Tobi PS: Mit libso - testen und posten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 12. Sep. 2012 11:33 <-- editieren / zitieren --> Unities abgeben:
Hi Jungs, nochmal danke für die Hilfe, bekomme auch nun auch realistische Werte für meinen Massenstrom raus. Ich hätte nochmal eine Frage für die bequemere Auswertung. Vorweg: Vom Skripten habe ich keine Ahnung. Daher kann ich nicht einschätzen, ob es vom Zeitaufwand her Sinn macht sich für folgendes Problem im Skripten einzuarbeiten. Wenn ich patchIntegrate phi <patch> mache, bekomme ich ja meine Massenströme am patch für alle Zeitschritte, die geschrieben wurden, im Terminal angezeigt. Wenn ich mir mit patchIntegrate bspw. 10 Zeitschritte für einen patch gleichzeitig anzeigen lasse, ist es dann relativ einfach ein Skript zu schreiben, welches mir aus den 10 Werten für die Massenströme einen Mittelwert bildet? Oder könnte man den patchIntegrate anpassen? Beispiel: patchIntegrate phi inlet (gibt Werte für alle Zeitschritte aus) modifiziert: patchIntegrate phi inlet -Mittelwert (gibt nur einen Wert aus, dieser ist Mittelwert aller Werte aus vorhandenen Zeitschritten) Würde gerne sowas haben, da mich der zeitlich gemittelte Massenstrom für unterschiedliche Boundarys interessiert, und ich mich nicht jedes mal mit paraview durchklickern möchte! Ich weiss, dass sowas immer schwer zu einschätzen ist, aber ich befürchte fast, dass ich länger brauche sowas selbst zu skripten, als es gleich von vornherein per Hand auszuwerten. Hab wie gesagt vom Skripten keine Ahnung.... Aber vielleicht hat ja sowas von Euch schonmal einer geskriptet und kann mir da ohne viel Aufwand weiterhelfen Herzliche Grüße
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. Sep. 2012 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
|
bartholomew83 Mitglied Student
Beiträge: 62 Registriert: 20.08.2012
|
erstellt am: 12. Sep. 2012 13:42 <-- editieren / zitieren --> Unities abgeben:
|
Tineline Mitglied
Beiträge: 2 Registriert: 08.02.2016
|
erstellt am: 08. Feb. 2016 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hallo Leute, ich bin (wie so viele hier) auch recht neu bei OpenFoam und habe im Ramen meiner Studienarbeit ein recht ähnliches Problem wie hier beschrieben. Leider scheitere ich schon daran libso richtig zu kompilieren. Kann mir jemand da genauer weiter helfen was ich machen muss? Vielen Dank schonmal und viele Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 09. Feb. 2016 06:58 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
Hallo Tineline, am einfachsten du packst folgendes in dein controlDict: Code:
functions { MassflowInletRight { type faceSource; functionObjectLibs ("libfieldFunctionObjects.so"); enabled true; outputControl timeStep; outputInterval 1; outputControlMode timeStep; log true; valueOutput false; source patch; sourceName outlet; operation sum; fields ( phi ); } }
Damit bekommst du zu jeder Iterationen den Massenstrom auf der Konsole angezeigt. ------------------ Viele Grüße Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tineline Mitglied
Beiträge: 2 Registriert: 08.02.2016
|
erstellt am: 10. Feb. 2016 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für bartholomew83
|