| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Wärmestrom (5077 mal gelesen)
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010 ESI-OpenCFD OpenFOAM v2312
|
erstellt am: 15. Jan. 2011 14:19 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, bezüglich meiner Dipl. Arbeit würde ich gerne meinen Solver chtMulti noch etwas erweitern und zwar um den Wärmestrom Q welcher auch in Paraview angezeigt werden sollte. Dazu müsste ich wohl erst eine Unterscheidung zwischen Solid und Fluid treffen. Vorab interessiert mich nur der Wärmestrom Q in den Solid Regionen welche ich Standardmäßig so erhalten müsste: q=lambda/s/Delta_T=~lambda*dT/dx Sehe ich das richtig? Die Problematik die ich habe ist, dass ich nicht weiß wie ich das in den Solver implementieren kann oder wie ich die Programmierung vornehmen soll. Wie sähe das bei den Fluid Regionen aus? Für Hilfe wäre ich sehr dankbar. Grüße Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 17. Jan. 2011 09:21 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
hi, schau mal in den DEBUG-Flags von chtMultiRegionFoam nach. Dort wird der Wärmstrom bei aktiviertem DEBUG ausgegeben, dort findest du dann auch die Implementierung. neewbie
------------------ --------- neewbie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 17. Jan. 2011 11:47 <-- editieren / zitieren --> Unities abgeben:         
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010 ESI-OpenCFD OpenFOAM v2312
|
erstellt am: 18. Jan. 2011 13:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, habe die DEBUG nicht gefunden. Mir wurde jedoch von einem Mitglied im cfd-online Forum geraten einfach den heatflux zu implementieren. Er meinte ich müsste dafür lediglich ein paar Sachen anpassen: createSolidFields.H habe ich folgendes eingefügt:
Code:
Info<< " Adding to fluxs\n" << endl; fluxs.set ( i, new volScalarField ( IOobject ( "flux", runTime.timeName(), solidRegions[i], IOobject::MUST_READ, IOobject::AUTO_WRITE ), solidRegions[i] ) );
Funktioniert, da er die Datei flux im Ordner /0 nach dem kompilieren haben will. setRegionSolidFields.H Code:
volScalarField& flux = fluxs[i];
solveSolid.H sollte ich dann noch die Gleichung flux = grad (kappa, T) implementieren Code:
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix tEqn ( -fvm::laplacian(K, T) ); tEqn.relax(); eqnResidual = tEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); // solving heatflux fvScalarMatrix fluxEqn ( //-fvm::laplacian(K, T) fvc::grad(K, T) ); fluxEqn.relax(); eqnResidual = fluxEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); }
Damit bekomm ich einen Fehler beim kompilieren. Ersetze ich jedoch fvc::grad(K, T); mit -fvm::laplacian(K, T) geht es. Im UserGuide habe ich nichts passendes gefunden. Mir ist die Semantik noch nicht ganz klar. Sprich wie ich die Gesetze in OpenFoam einbinde. Ich find auch nirgends die Beschreibung über fvm / fvc Ist warscheinlich banaler als ich denke. Danke schonmal im voraus. Grüße Tobi [Diese Nachricht wurde von Shor-ty am 18. Jan. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 18. Jan. 2011 15:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
hi, also wenn du fvm::laplacian(K,T) für den Flux machst, dann rechnest du 2x das Gleiche; nämlich eine handelsübliche Wärmeleitungsgleichung div(K grad (T)). fvm: FinteVolumeMatrix --> zu deutsch: iteriere bitte über die entstehende Matrix bis du einen guten Lösungsvektor bekommen hast fvc:: FinteVolumeCalculus --> zu deutsch: berechne bitte folgendes auf den Gitterpunkten. ein Wärmestrom Q=q/A und q=-K*grad(T) --> je größer die Änderung der Temperatur (grad(T) umso größer ist die Wärmestromdichte q und je nach Stoff (K) in OF hieße das dann: berechne fvc::K*grad(T) wobei T jetzt die Werte der Interfaces sein müssen. puh .... Müsste man für den Transport ÜBER die Grenzen nicht reine Leitung nehmen anstelle von div(K grad(T)), was ja wieder mein Wärmestrom wäre...hmmm.... deswegen verstehe ich den Weg über fvm::laplacian(k,T) nicht. ------------------ --------- neewbie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 18. Jan. 2011 15:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
|
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 18. Jan. 2011 15:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 18. Jan. 2011 16:08 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von neewbie: hi, also wenn du fvm::laplacian(K,T) für den Flux machst, dann rechnest du 2x das Gleiche; nämlich eine handelsübliche Wärmeleitungsgleichung div(K grad (T)).
das weiß ich auch ;) ich wollte nur damit sicher gehen, ob meine restlichen Änderungen in den Dateien in Ordnung sind und er mir das kompiliert. Sicher ist das nicht das was ich brauche. Damit habe ich nur getestet, ob ich meine Formulierung mit fvm::grad(K, T) falsch hab oder nicht Zitat:
fvm: FinteVolumeMatrix --> zu deutsch: iteriere bitte über die entstehende Matrix bis du einen guten Lösungsvektor bekommen hast fvc:: FinteVolumeCalculus --> zu deutsch: berechne bitte folgendes auf den Gitterpunkten.
Danke Zitat:
ein Wärmestrom Q=q/A und q=-K*grad(T) --> je größer die Änderung der Temperatur (grad(T) umso größer ist die Wärmestromdichte q und je nach Stoff (K) in OF hieße das dann: berechne fvc::K*grad(T) wobei T jetzt die Werte der Interfaces sein müssen.
genau Q = lambda / s * A * dT = k * A * dT und q = Q/A. Also q = K * dT bzw. q = K * grad(T). Zitat:
Müsste man für den Transport ÜBER die Grenzen nicht reine Leitung nehmen anstelle von div(K grad(T)), was ja wieder mein Wärmestrom wäre...hmmm.... deswegen verstehe ich den Weg über fvm::laplacian(k,T) nicht.
Wie gesagt ;) das fvm::laplacian(k,T) war nur wegen meiner Kompilierung gedacht. Ob es funktioniert oder nicht. Zitat: hab´s gefunden: schau mal in solidWallMixedTemperatureCoupledFvPatchScalarField.C // 224
Ich werd mal schauen was hierzu steht. Danke. Und noch zu dem Code Code:
fvScalarMatrix fluxEqn ( fvc::grad(K, T) ); fluxEqn.relax(); eqnResidual = fluxEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual);
Müsste dann hier fvc::K*grad(T) stehen? Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010 ESI-OpenCFD OpenFOAM v2312
|
erstellt am: 18. Jan. 2011 16:47 <-- editieren / zitieren --> Unities abgeben:         
Du meinst diesen Codeabschnitt: Code:
if (debug) { scalar Q = gSum(K()*patch().magSf()*snGrad()); Info<< patch().boundaryMesh().mesh().name() << ':' << patch().name() << ':' << this->dimensionedInternalField().name() << " <- " << nbrMesh.name() << ':' << nbrPatch.name() << ':' << this->dimensionedInternalField().name() << " :" << " heat[W]:" << Q << " walltemperature " << " min:" << gMin(*this) << " max:" << gMax(*this) << " avg:" << gAverage(*this) << endl; }
Lässt mich darauf schließen, dass Debug ne Variable ist oder? Wie aktiviere ich das ? Wie gesagt ich bin noch nicht so vertraut mit objekt orientierter Programmierung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 18. Jan. 2011 16:56 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
ja Debug ist eine Variable oder vielmehr ein Schalter den man ~/etc/controlDict für beliebige Dinge setzen kann. Danach muss der entsprechende Quellcode neu kompiliert werden!!! ------------------ --------- neewbie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 18. Jan. 2011 17:09 <-- editieren / zitieren --> Unities abgeben:         
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010 ESI-OpenCFD OpenFOAM v2312
|
erstellt am: 18. Jan. 2011 18:13 <-- editieren / zitieren --> Unities abgeben:         
Nur noch ne Frage. Die Berechnung der Heatflux ist nur im chtMultiRegionFoam implementiert. Kann ich die ohne Änderung in den SimpleFoam implementieren? Das wirds nicht so einfach sein oder? Grüße Tobi [Diese Nachricht wurde von Shor-ty am 18. Jan. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 18. Jan. 2011 20:01 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
ja vermutlich schon. eigentlich ist es in der RB implementiert. sollte schon gehen, schau einfach genau wie die Felder initialisiert werden. Ansonsten könnte man eventuell auch mit einem leeren Patch arbeiten und dann eine Art pseudo-Kopplung aufsetzen. ------------------ --------- neewbie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 17. Feb. 2011 10:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 17. Feb. 2011 11:28 <-- editieren / zitieren --> Unities abgeben:         
Aktuell ist es schon noch - ja ... wallHeatFlux - meinst du solidWallHeatFlux ? Hab ich mal angeschaut - ich bin aber noch nicht ganz fit in OOP da muss ich mich erst noch etwas einarbeiten. Ich habe allerdings von einem CFD - Ingenieur einen von Ihm gemachten Solver bekommen, welcher den Wärmestrom generiert. Vielleicht kann ich das irgendwie in meinen einbinden. Geht mit Sicherheit aber ich habe bislang noch keine Zeit gehabt es zu testen. Zudem ist das mit den MultiRegionen immer so ne Sache. Grüße Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neewbie Mitglied CFD Engineer, Research

 Beiträge: 48 Registriert: 08.02.2010 OF 1.7.x OF 1.6-ext
|
erstellt am: 17. Feb. 2011 11:30 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
nein ich meinte das post-tool wallHeatFlux. Das sollte doch man doch "relativ" einfach in den Solver implementieren können. Nach jeder Iteration oder ganz am Ende ein einziges Mal ausführen. ------------------ --------- neewbie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 17. Feb. 2011 13:58 <-- editieren / zitieren --> Unities abgeben:         
|
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: 11. Mrz. 2014 19:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Shor-ty
Hallo zusammen, ich möchte diesen Beitrag nochmal aufwärmen, da ich auch gerne den wallHeatFlux im Solver haben würde. Dann könnte ich ihn als Konvergenzkriterium während der Berechnung verwenden. Kann mir das jemand erklären wie das genau geht? Bin in OpenFOAM und dessen Programmierung noch nicht so fit. Vielen Dank schon einmal!
------------------ Viele Grüße Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 01. Aug. 2015 11:04 <-- editieren / zitieren --> Unities abgeben:         
Da hier alles etwas verwirrend ist und auf Anfrage von Matthias ich den Solver gestern programmiert habe, kann jeder die Implementierung im simpleFoam Löser hier einsehen: http://www.holzmann-cfd.de/index.php/de/softwareentwicklung#heatSimpleFoamWie man leicht erkennen wird ist da nix besonderes dabei. PS:
- fvm vs fvc bedeutet implizit vs explizit (ProgrammersGuide)
- es heitß fvc::grad(T) * K und nicht fvc::K*grad(T) da fvc die Klasse ist und :: der Bereichszugriffsoperator darstellt (furchtbare Übersetzung des Scopes)
------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |