Hot News:

Unser Angebot:

  Foren auf CAD.de
  OpenFOAM
  Erhaltungsgleichungen im Code wiederfinden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  Erhaltungsgleichungen im Code wiederfinden (717 / mal gelesen)
Studentenmensch
Mitglied
Student


Sehen Sie sich das Profil von Studentenmensch an!   Senden Sie eine Private Message an Studentenmensch  Schreiben Sie einen Gästebucheintrag für Studentenmensch

Beiträge: 47
Registriert: 12.05.2016

erstellt am: 06. Jul. 2016 08:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Grüß Gott,

ich bin im programmieren nicht sonderlich bewandert. Trotzdem würde ich gerne wissen, was da genau passiert im Hintergrund.
Angenommen ich nehme den solver: rhoPorousSimpleFoam

Unter applications>solvers>compressibible>rhoSimpleFoam>rhoPorousSimpleFoam liegen u.a.:
UEqn.H
pEqn.H
EEqn.H

Ich denke das sind die wesentlichen Dateien. Meine Frage ist, wo ich dort jetzt die Navier-Stokes Gleichungen wiederfinde bzw. die Gleichungen für Impuls, Masse und, da es sich um einen kompressiblen Fall handelt, auch die der Energie.

Unter UEqn.H finde ich:

Code:

// Construct the Momentum equation

    tmp<fvVectorMatrix> UEqn
    (
        fvm::Div(phi, U)
      + turbulence->divDevRhoReff(U)
    ==
        fvOptions(rho, U)
    );

    UEqn().relax();


Laut OpenFoam User Guide heißt das soviel wie:  Diskretisierter Term (Divergenz (Rho* Geschwindigkeit U) )  + ?  = Einem Term aus fvOptions

UEqn().relax() ?

Wo sind die ganzen anderen Terme der Impulsgleichung?

Was passiert denn in pEqn? Ein grober Überblick welche Gleichungen hier gelöst werden wäre hilfreich :-)

Code:

{
    const volScalarField& psi = thermo.psi();

    volVectorField HbyA("HbyA", U);

    if (pressureImplicitPorosity)
    {
        HbyA = trTU() & UEqn().H();
    }
    else
    {
        HbyA = trAU()*UEqn().H();
    }

    UEqn.clear();

    bool closedVolume = false;

    surfaceScalarField phiHbyA
    (
        "phiHbyA",
        fvc::interpolate(rho*HbyA) & mesh.Sf()
    );

    fvOptions.makeRelative(fvc::interpolate(rho), phiHbyA);

    closedVolume = adjustPhi(phiHbyA, U, p);

    while (simple.correctNonOrthogonal())
    {
        tmp<fvScalarMatrix> tpEqn;

        if (pressureImplicitPorosity)
        {
            tpEqn =
            (
                fvm::laplacian(rho*trTU(), p)
              + fvOptions(psi, p, rho.name())
            ==
                fvc::Div(phiHbyA)
            );
        }
        else
        {
            tpEqn =
            (
                fvm::laplacian(rho*trAU(), p)
              + fvOptions(psi, p, rho.name())
            ==
                fvc::Div(phiHbyA)
            );
        }

        tpEqn().setReference(pRefCell, pRefValue);

        tpEqn().solve();

        if (simple.finalNonOrthogonalIter())
        {
            phi = phiHbyA - tpEqn().flux();
        }
    }

    #include "incompressible/continuityErrs.H"

    // Explicitly relax pressure for momentum corrector
    p.relax();

    if (pressureImplicitPorosity)
    {
        U = HbyA - (trTU() & fvc::grad(p));
    }
    else
    {
        U = HbyA - trAU()*fvc::grad(p);
    }

    U.correctBoundaryConditions();
    fvOptions.correct(U);

    // For closed-volume cases adjust the pressure and density levels
    // to obey overall mass continuity
    if (closedVolume)
    {
        p += (initialMass - fvc::nobiggrin mainIntegrate(psi*p))
            /fvc::nobiggrin mainIntegrate(psi);
    }

    rho = thermo.rho();
    rho = max(rho, rhoMin);
    rho = min(rho, rhoMax);
    rho.relax();
    Info<< "rho max/min : "
        << max(rho).value() << " "
        << min(rho).value() << endl;
}


Bevor ich mit EEqn weitermache erstmal die beiden :-)

Danke für ein paar Tipps

Lg Moritz

------------------
Moritz Franke

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Shor-ty
Moderator





Sehen Sie sich das Profil von Shor-ty an!   Senden Sie eine Private Message an Shor-ty  Schreiben Sie einen Gästebucheintrag für Shor-ty

Beiträge: 2466
Registriert: 27.08.2010

ESI-OpenCFD OpenFOAM v2312

erstellt am: 06. Jul. 2016 15:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Studentenmensch 10 Unities + Antwort hilfreich

Hi Moritz,

FOAM hat sich ziemlich stark verändert seit den Anfängen. Am Anfang war das alles noch etwas leichter zu verstehen aber es wird immer notwendiger die Numerik und wirklich Ahnung von Gleichungen zu haben. Da in FOAM immer mehr Wert auf numerische Stabilisierung und konsistenz der Gleichungen gelegt wird. Zu deiner Frage. Numerisch betrachtet löst man die NS Gleichung nicht, da dies nicht möglich ist. Du hast Ux, Uy, Uz und p als Unbekannte. Allerdings hast du nicht 4 Gleichungen in denen diese vorkommen. Zwar hast du drei NS Gleichungen + Massenerhaltung (4 Gleichungen) aber in der Massenerhaltung kommt kein Druck vor, somit kann das Gleichungssystem nicht ohne Weiteres gelösen werden. Heißt, es kann nicht direkt gelöst werden, sondern muss mittels iterativen Methoden bestimmt werden.

Zur Berechnung verwendet man nicht direkt die U und p Felder sondern bezieht sich hauptsächlich auf die sogenannten Fluxes (phi). In UEqn.H wird die Matrix für die Momentum-Gleichung (ohne Druckterm) konstruiert (Matrix) aber nicht gelöst wenn MomentumCorrector = false. Allerdings braucht man die Matrix später bei der Druckberechnung.

Um die Dinge einfach zu halten nehmen wir an das momentumCorrector an ist. D.h. du konstruierst deine NS ohne Druckterm und berechnest dir aufgrund des vorhanden Geschwindigkeitfeldes die Fluxes an jedem Face deiner diskretisierten Domain. Diese Fluxes müssen die Kontinuität erfüllen. Da aber die berechneten Fluxes ohne Druck berechnet worden sind kann zwar die Konti erfüllt sein aber dann stimmt das Druckfeld nicht. Somit muss man mittels den Fluxes ein neues Druckfeld berechnen, die Fluxes neu berechnen und schauen das das Druck und Geschwindigkeitsfeld so übereinstimmen, dass die Massenerhaltung stimmt. Man bricht aber irgendwann vorher ab wenn der Fehler (Residual) eine gewisse Grenze erreicht.

Wie man das letztlich macht (Druck-Geschwindigkeitskorrektur) hängt davon ab welchen Algorithmus man verwendet, PISO, SIMPLE, PIMPLE, SIMPLEC, SIMPLER usw... Um die Druckgleichung verstehen zu können brauchst du schon etwas mehr Wissen im Bereich der Druck-Geschwindigkeitskorrektur Algorithmen. Ich empfehle hier den Ferziger, dann verstehst du auch die pEqn.H etwas besser.


Das hier:

Code:

// Construct the Momentum equation

    tmp<fvVectorMatrix> UEqn
    (
        fvm::Div(phi, U)
      + turbulence->divDevRhoReff(U)
    ==
        fvOptions(rho, U)
    );

    UEqn().relax();


Ist die Navier-Stokes-Gleichung ohne (-grad(p)). Zusementhält diese Gleichung einen Source-Term den man in fvOptions einfügen könnte. Wird keine fvOptions verwendet, ist der Source Term Null. Warum man das macht ist einfach. Der User hat nun die Möglichkeit ohne Hard-Coding die Momentum-Gleichung mittels bestimmter Soruce-Terme zu verändern (during run time). Wenns dich wirklich interessiert wieso der oben genannte Code die NS Gleichung repräsentiert, dann kannst du das bei mir nachlesen: Mathematics, Numerics, Derivations and OpenFOAM. Das was du suchst sind die letzten Kapitel -> divDevRhoREff.

Ansonsten hast du in pEqn.H eben noch zusätzlich Korrekturen bezüglich Porosität, subsonische, transonische etc.

Für den Anfang glaube ich eine sehr gute Einführung 

------------------
Viele Grüße,
Tobias Holzmann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Studentenmensch
Mitglied
Student


Sehen Sie sich das Profil von Studentenmensch an!   Senden Sie eine Private Message an Studentenmensch  Schreiben Sie einen Gästebucheintrag für Studentenmensch

Beiträge: 47
Registriert: 12.05.2016

erstellt am: 07. Jul. 2016 14:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
FOAM hat sich ziemlich stark verändert seit den Anfängen. Am Anfang war das alles noch etwas leichter zu verstehen aber es wird immer notwendiger die Numerik und wirklich Ahnung von Gleichungen zu haben.

Um beim kommerziellen Support abzuzocken? Wo bleibt dann der OpenSource Spirit?

Danke aufjedenfall für deinen Support Tobi Holzmann :-) Hört sich ziemlich komplex an. Da war mal was mit Row-Chie Interpolation , sowas hatte ich mal gehört :-) Wie spielen denn in das ganze Thema die RANS Gleichungen rein? Letztlich löst man das ganze Strömungsfeld ja auf den gemittelten NS Gleichungen?

Grüße moritz

------------------
Moritz Franke

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Shor-ty
Moderator





Sehen Sie sich das Profil von Shor-ty an!   Senden Sie eine Private Message an Shor-ty  Schreiben Sie einen Gästebucheintrag für Shor-ty

Beiträge: 2466
Registriert: 27.08.2010

ESI-OpenCFD OpenFOAM v2312

erstellt am: 08. Jul. 2016 00:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Studentenmensch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Studentenmensch:

Um beim kommerziellen Support abzuzocken? Wo bleibt dann der OpenSource Spirit?

Danke aufjedenfall für deinen Support Tobi Holzmann :-) Hört sich ziemlich komplex an. Da war mal was mit Row-Chie Interpolation , sowas hatte ich mal gehört :-) Wie spielen denn in das ganze Thema die RANS Gleichungen rein? Letztlich löst man das ganze Strömungsfeld ja auf den gemittelten NS Gleichungen?

Grüße moritz


Hi,

immer ganz ruhig. Du bekommst eine Toolbox die wirklich viel kann und die OpenSource ist. Die Änderung sind aufgrund der Konsistenz von Gleichungen und Neuerungen in der Numerik zurückzuführen. Da wird zwangsläufig alles etwas komplexer. Die Dinge beim "alten" zu lassen wäre schlichtweg falsch und würde FOAM nicht konkurenzfähig machen. Natürlich ist es von der Anwenderseite aus gesehen mühseeliger zu verstehen aber mal eherlich - wenn man sich nicht bewusst ist was man macht, dann kann man auch direkt nen kommerzielles Programm kaufen.

Du siehst schon, ich steuer extrem gegen deine Aussage, da ich selber den OpenSource Gedanken für richtig halte, allerdings finde ich es auch notwendig das diverse Änderungen gemacht werden, die möglicherweise auch auf die Lesbarkeit/das Verständnis Einfluss nehmen. Trotz alledem das FOAM Open Source ist, müssen die Leute Geld verdienen (na klar durch Schulungen und kommerziellen Support, und dass wenn der Code komplexer wird, sich größere Supportlücken ergeben mag auch einleuchten, allerdings ist es auch notwendig die Toolbox zu verbessern). Ich merks bei mir - steck viel Arbeit in Foren, freiwillige Arbeit (www.holzmann-cfd.de) und für was? Richtig für nichts. Ich bekomm kein Geld dafür und auch kaum Rückmeldung. Ich mach das derzeit nur aus Überzeugung das vom Open Source Gedanken und hoff das irgendwann was zurückkommt. Ob 's so ist, kann ich nicht sagen oder vorhersehen. Hoffen ist das einzige das bleibt, wie beim Spiel gegen Frankreich heute. Viel gekämpft kann man stolz auf unsere Elf sein aber letztlich zählt halt der Titel. Ob man unter den Top 4 ist interessiert letztlich auch niemand oder? Ähnlich bei mir oder bei Foam - man muss konkurenzfähig bleiben (:

So das wars aber auch mit dem kleinen Ausflug (:
Eins noch - FOAM bietet die Möglichkeit den Code zu betrachten. Du hast also die Möglichkeit nachzuvollziehen was gemacht wird (jeden kleinen Schritt). Es obliegt also an dem User selber (:

------------------
Viele Grüße,
Tobias Holzmann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz