Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  OpenFOAM
  Definition der Randbedingungen für eine Raumabsaugung

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
Autor Thema:  Definition der Randbedingungen für eine Raumabsaugung (1069 mal gelesen)
RevolutionZero
Mitglied



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

Beiträge: 29
Registriert: 11.01.2021

OpenFoam V8
OpenFoam 2106
(Ubuntu 20.04.3)

erstellt am: 11. Jan. 2021 18:18    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

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





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: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 12. Jan. 2021 20:43    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 RevolutionZero 10 Unities + Antwort hilfreich

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



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

Beiträge: 29
Registriert: 11.01.2021

OpenFoam V8
OpenFoam 2106
(Ubuntu 20.04.3)

erstellt am: 12. Jan. 2021 21:30    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

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





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: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 13. Jan. 2021 14:09    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 RevolutionZero 10 Unities + Antwort hilfreich

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



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

Beiträge: 29
Registriert: 11.01.2021

OpenFoam V8
OpenFoam 2106
(Ubuntu 20.04.3)

erstellt am: 13. Jan. 2021 18:51    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

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





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: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 13. Jan. 2021 20:37    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 RevolutionZero 10 Unities + Antwort hilfreich

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



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

Beiträge: 29
Registriert: 11.01.2021

OpenFoam V8
OpenFoam 2106
(Ubuntu 20.04.3)

erstellt am: 15. Jan. 2021 11:59    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

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



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

Beiträge: 29
Registriert: 11.01.2021

OpenFoam V8
OpenFoam 2106
(Ubuntu 20.04.3)

erstellt am: 15. Jan. 2021 12:00    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

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





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: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 16. Jan. 2021 09:08    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 RevolutionZero 10 Unities + Antwort hilfreich

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 >>)

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)2023 CAD.de | Impressum | Datenschutz