| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: dynamicMeshDict (2160 mal gelesen)
|
faerberma Mitglied Student
 Beiträge: 4 Registriert: 25.07.2014
|
erstellt am: 05. Nov. 2015 15:57 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich hoffe mir kann jemand helfen. Es geht darum, dass eine Klappe von Wasser überströmt wird. Nun wird je nach der Stellung der Klappe eine neue Rechnung aufgesetzt bzw eine neue Klappengeometrie eingeladen (soweit ist noch alles in Ordnung). Das Problem liegt darin, dass die Verfeinerungsbereiche sich pro Klappenstellung verändern - deshalb wurde im dynamicMeshDict angegeben dass der Bereich des Gitters mit alpha.water zwischen 0.001 und 0.999 verfeinert werden soll. Das klappt sehr gut für die Grenzschicht zwischen Wasser und Luft, jedoch wäre es noch hilfreich wenn ich zusätzlich noch eine zweite Bedingung einbauen könnte. Sodass zum Beispiel diese Grenzschicht 3-fach verfeinert und der Wasserkörper, also alles mit alpha.water = 1, nur 1-fach verfeinert wird. Mir ist es momentan nur möglich entweder Grenzschicht oder den Wasserkörper zu verfeinern. Code: /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.3.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object dynamicMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dynamicFvMesh dynamicRefineFvMesh; dynamicRefineFvMeshCoeffs { // How often to refine the grid (every n:th timestep) refineInterval 1; //1 -> mesh wird bei jedem Zeitschritt neu verfeinert // Field to be refinement on field alpha.water; // Refine field inbetween lower..upper lowerRefineLevel 0.001; upperRefineLevel 0.999; // If value < unrefineLevel unrefine unrefineLevel 10; // Have slower than 2:1 refinement nBufferLayers 1; // Refine cells only up to maxRefinement levels maxRefinement 3; // Stop refinement if maxCells reached maxCells 20000000; // Flux field and corresponding velocity field. Fluxes on changed // faces get recalculated by interpolating the velocity. Use 'none' // on surfaceScalarFields that do not need to be reinterpolated. correctFluxes ( (phi none) (nHatf none) (rhoPhi none) (ghf none) ); // Write the refinement level as a volScalarField dumpLevel true; } // ************************************************************************* //
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: 05. Nov. 2015 16:36 <-- editieren / zitieren --> Unities abgeben:          Nur für faerberma
Zitat: Original erstellt von faerberma: Bereich des Gitters mit alpha.water zwischen 0.001 und 0.999 verfeinert werden soll.
Kurze Nachrfrage, wieso 0.001 - 0.999. Solltest du numerische Diffusion von Alpha haben, dass in der VOF Methode von FOAM vorkommen kann (muss natürlich nicht aber es wird hier nicht die PLIC Methode verwendet), so würde sich ggf. fast das ganze Netz verfeinern. Ich würde daher nur die Grenzschicht verfeineren und das mit nem Range von 0.48 - 0.52. Dein Vorhaben geht aufjedenfall, die Frage ist ob du ggf. den Sourcecode erweitern musst um eben zwei Dicts oder Bereiche einstellen zu können. Nach meinem Wissensstand ist das derzeit nicht implementiert; sollte aber auch kein Problem darstellen es zu implementieren. Bin derzeit auch dabei die Verknüpfung zwischen MovingMesh und Adding/Removing Layers herzustellen somit gleiche Libs in Bearbeitung nur komplexer. Denke nicht das die Lib für dynamicRefineFvMeshCoeffs eine Herausforderung darstellt. Vor allem wäre es nur copy-past damit man alles 2x hat. Beispiel:
Code:
// Field to be refinement on field alpha.water; // Refine field inbetween lower..upper lowerRefineLevel1 0.45; lowerRefineLevel2 0.00; upperRefineLevel1 0.55; upperRefineLevel2 0.45; // If value < unrefineLevel unrefine unrefineLevel1 0.5; unrefineLevel2 0.; // Have slower than 2:1 refinement nBufferLayers1 2; nBufferLayers2 1; // Refine cells only up to maxRefinement levels maxRefinement1 3; maxRefinement2 1;
------------------ Viele Grüße, Tobias Holzmann
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 16. Nov. 2015 09:08 <-- editieren / zitieren --> Unities abgeben:          Nur für faerberma
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010 ESI-OpenCFD OpenFOAM v2312
|
erstellt am: 16. Nov. 2015 10:48 <-- editieren / zitieren --> Unities abgeben:          Nur für faerberma
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 16. Nov. 2015 13:50 <-- editieren / zitieren --> Unities abgeben:          Nur für faerberma
Das Dict, welches in der Lib enthalten ist, ist eine alte und sollte keine Beachtung finden. Heute Abend gibts die saubere Lib auf meiner HP: http://www.holzmann-cfd.de/index.php/de/softwareentwicklung Anbei das Dict im Code-Style:
Code:
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.3.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object dynamicMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dynamicFvMesh dynamicRefine2FvMesh; dynamicRefine2FvMeshCoeffs { // How often to refine refineInterval 3; refineInterval2 1; // Field to be refinement on field alpha.water; field2 alpha.water; // Refine field inbetween lower..upper lowerRefineLevel 0.40; upperRefineLevel 0.55; lowerRefineLevel2 0.55; upperRefineLevel2 1.55; // If value < unrefineLevel unrefine unrefineLevel 0.45; unrefineLevel2 0.55; // Have slower than 2:1 refinement nBufferLayers 1; nBufferLayers2 1; // Refine cells only up to maxRefinement levels maxRefinement 3; maxRefinement2 1; // Stop refinement if maxCells reached maxCells 2000000; maxCells2 2000000; // Flux field and corresponding velocity field. Fluxes on changed // faces get recalculated by interpolating the velocity. Use 'none' // on surfaceScalarFields that do not need to be reinterpolated. correctFluxes ( (phi none) (nHatf none) (rhoPhi none) (ghf none) ); // Write the refinement level as a volScalarField dumpLevel true; } // ************************************************************************* //
------------------ Viele Grüße, Tobias Holzmann 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: 17. Nov. 2015 13:04 <-- editieren / zitieren --> Unities abgeben:          Nur für faerberma
Hallo zusammen, Faerberma hat mir noch einen Hinweis gegeben, dass die Library nur bei bestimmten Bedingungen funktioniert. Ich hab die Lib jetzt erweitert und getestet. Testfall + Lib werden voraussichtlich im Laufe des Tages auf meiner Homepage zu finden sein. ------------------ Viele Grüße, Tobias Holzmann 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. Nov. 2015 17:31 <-- editieren / zitieren --> Unities abgeben:          Nur für faerberma
|