| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Netzverfeinerung mit BlockMesh (2969 mal gelesen)
|
Holzbasti Mitglied Student, Praktikant

 Beiträge: 16 Registriert: 26.10.2012 OpenFOAM 2.3.0 Ubuntu 14.04 LTS 64-bit
|
erstellt am: 18. Sep. 2013 13:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo alle zusammen, ich habe mit BlockMesh ein Gitter erstellt. Da der Rand kaum interessiert, ist es sehr grob. Allerdings ist es für des Vernetzungstool SnappyHexMesh zu grob. Also dachte ich mit, ich packe einfach noch ein weiteres Quader mit feinerem Netz in des bestehende Netz. Leider scheint das nicht so zu klappen wie ich mir das vorstelle. Wenn ich SHM starte, läuft es erst gut, aber später kommen, gefühlte 1000, Warnungen folgenden Inhalts:
Code:
--> FOAM Warning : From function Foam::List<Foam::tetIndices> Foam::polyMeshTetDecomposition::faceTetIndices(const polyMesh&, label, label) in file meshes/polyMesh/polyMeshTetDecomposition/polyMeshTetDecomposition.C at line 565 No base point for face 8395713, 4(2314455 2358387 2389745 2341675), produces a valid tet decomposition.
Hier noch das blockMeshDict, wie ich es mir vorstelle: Code:
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.x | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object blockMeshDict; }// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // convertToMeters 1; vertices ( (-0.02 -0.01 -0.01) (0.06 -0.01 -0.01) (0.06 0.01 -0.01) (-0.02 0.01 -0.01) (-0.02 -0.01 0.01) (0.06 -0.01 0.01) (0.06 0.01 0.01) (-0.02 0.01 0.01) (-0.01 -0.005 -0.01) (0.02 -0.005 -0.01) (0.02 -0.005 0.005) (-0.01 -0.005 0.005) (-0.01 0.005 -0.01) (0.02 0.005 -0.01) (0.02 0.005 0.005) (-0.01 0.005 0.005) ); blocks ( hex (0 1 2 3 4 5 6 7) (16 4 4) simpleGrading (1 1 1) hex (8 9 10 11 12 13 14 15) (48 8 8) simpleGrading (1 1 1) ); edges ( ); boundary ( front { type patch; faces ( (3 7 6 2) ); } back { type patch; faces ( (1 5 4 0) ); } inlet { type patch; faces ( (0 4 7 3) ); } outlet { type patch; faces ( (2 6 5 1) ); } bottom { type symmetryPlane; faces ( (0 3 2 1) ); } top { type symmetryPlane; faces ( (4 5 6 7) ); } ); // ************************************************************************* //
Im Bild ist das Netz, wie es erzeugt wird, zu sehen. Bis auf die Querverbindungen, stelle ich es mir genau so vor. Vielleicht weiß ja wer einen Rat. Viele Grüße, Basti 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: 18. Sep. 2013 21:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Holzbasti
Hallo Holzbasti, ich habe dein blockMeshDict nicht ausprobiert, aber hat "blockMesh" sich schon nicht beschwert? Um so eine ähnliche Struktur nur mit BlockMesh zu gestallten, bräuchtest du schon 26 Blöcke... Ist mühselig :-) Ich denke, was du eher suchst ist eine RefinementBox für SnappyHexMesh. Viele Grüße Thomas ------------------ Unsere Software: HVAC TOOL Ein graphisches Interface für OpenFOAM® und TRNSYS [Diese Nachricht wurde von TTB am 18. Sep. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Holzbasti Mitglied Student, Praktikant

 Beiträge: 16 Registriert: 26.10.2012
|
erstellt am: 18. Sep. 2013 22:20 <-- editieren / zitieren --> Unities abgeben:         
Uh, tatsächlich. Nur geht das immer so schnell, dass es mir gar nicht auffiel. Code:
sebastian@Basti:~/.../case$ blockMesh /*---------------------------------------------------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.1.1 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ Build : 2.1.1-221db2718bbb Exec : blockMesh Date : Sep 18 2013 Time : 22:14:48 Host : "Basti" PID : 2862 Case : /home/.../case nProcs : 1 sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE). fileModificationChecking : Monitoring run-time modified files using timeStampMaster allowSystemOperations : Disallowing user-supplied system call operations// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Create time Creating block mesh from "/home/sebastian/Dokumente/openfoam/Bachelorarbeit/viskoelastisch/versuch-01/constant/polyMesh/blockMeshDict" Creating curved edges Creating topology blocks Creating topology patches Creating block mesh topology --> FOAM Warning : From function cellModel::mag(const labelList&, const pointField&) in file meshes/meshShapes/cellModel/cellModel.C at line 128 zero or negative pyramid volume: -7.5e-07 for face 0 --> FOAM Warning : From function cellModel::mag(const labelList&, const pointField&) in file meshes/meshShapes/cellModel/cellModel.C at line 128 zero or negative pyramid volume: -7.5e-07 for face 1 --> FOAM Warning : From function cellModel::mag(const labelList&, const pointField&) in file meshes/meshShapes/cellModel/cellModel.C at line 128 zero or negative pyramid volume: -7.5e-07 for face 2 --> FOAM Warning : From function cellModel::mag(const labelList&, const pointField&) in file meshes/meshShapes/cellModel/cellModel.C at line 128 zero or negative pyramid volume: -7.5e-07 for face 3 --> FOAM Warning : From function cellModel::mag(const labelList&, const pointField&) in file meshes/meshShapes/cellModel/cellModel.C at line 128 zero or negative pyramid volume: -7.5e-07 for face 4 --> FOAM Warning : From function cellModel::mag(const labelList&, const pointField&) in file meshes/meshShapes/cellModel/cellModel.C at line 128 zero or negative pyramid volume: -7.5e-07 for face 5 --> FOAM Warning : From function blockMesh::createTopology(IOdictionary&) in file blockMesh/blockMeshTopology.C at line 255 negative volume block : 1, probably defined inside-out --> FOAM Warning : From function polyMesh::polyMesh(... construct from shapes...) in file meshes/polyMesh/polyMeshFromShapeMesh.C at line 888 Found 6 undefined faces in mesh; adding to default patch. Check topology Basic statistics Number of internal faces : 0 Number of boundary faces : 12 Number of defined boundary faces : 12 Number of undefined boundary faces : 0 Checking patch -> block consistency Creating block offsets Creating merge list . Creating polyMesh from blockMesh Creating patches Creating cells Creating points with scale 1 There are no merge patch pairs edges Writing polyMesh ---------------- Mesh Information ---------------- boundingBox: (-0.02 -0.01 -0.01) (0.06 0.01 0.01) nPoints: 4394 nCells: 3328 nFaces: 10960 nInternalFaces: 9008 ---------------- Patches ---------------- patch 0 (start: 9008 size: 64) name: front patch 1 (start: 9072 size: 64) name: back patch 2 (start: 9136 size: 16) name: inlet patch 3 (start: 9152 size: 16) name: outlet patch 4 (start: 9168 size: 64) name: bottom patch 5 (start: 9232 size: 64) name: top patch 6 (start: 9296 size: 1664) name: defaultFaces End
Die Refinementbox kenne ich, nutze ich auch, allerdings ist die bei mir zylindrisch. Kann man in SHM mehrere solcher Boxen definieren? Wenn ich es doch im BM machen wöllte, muss ich dann einfach alles in quader zerlegen und die definieren oder muss da noch mehr geschehen? Viele Grüße, Basti 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. Sep. 2013 23:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Holzbasti
Hi, "wöllte" hab ich noch nie gehört  1. ja du kannst in sHM so viele Refinementboxen erstellen wie du magst - zylindrisch - eckig - egal wie - aus einer STL heraus . . . 2. in deinem Fall würde ich das nicht mit BM machen. Du kommst durcheinander und bekommst sicher Probleme mit den Faces bzw. der Zuordnung. ------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Holzbasti Mitglied Student, Praktikant

 Beiträge: 16 Registriert: 26.10.2012
|
erstellt am: 18. Sep. 2013 23:51 <-- editieren / zitieren --> Unities abgeben:         
Hey, "wöllte" ist der Konjunktiv von "wollen". Ich hab eine kleine Aversion gegen "würde xyz". Wie genau definiere ich das dann? So ungefähr?
Code:
geometry { Fraeser.stl { type triSurfaceMesh; name Fraeser; } // Analytical shape; cylinder, sphere refinementBox { type searchableCylinder; point1 (0 0 -0.0025); point2 (0 0 0.00025); radius 0.00025; } refinementBox { type searchableBox; min (-0.005 -0.005 -0.01); max (0.005 0.005 0.001); } };
und wie gebe ich da unterschiedliche Genauigkeiten ein? So?
Code:
refinementSurfaces { Fraeser { // Surface-wise min and max refinement level level (7 8); level (2 3); } }
Das grundlegende snappyHexMeshDict stammt aus dem simpleFoam motorBike Tutorial. Dies sind die einzigen Stellen, die ich (bisher) änderte. Viele Grüße, Basti PS: Und wenn ich schon dabei bin: Weiß einer wieso SHM den Körper "Freaser_ascii" nennt, obwohl als Name "Fraeser" angegeben ist? Die stl-Datei enthält auch nur diesen einen Körper. 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: 19. Sep. 2013 13:16 <-- editieren / zitieren --> Unities abgeben:          Nur für Holzbasti
Hallo Basti, mit den Kunjuntiven etc. hab ich ´s nicht so  Auch wenn ich die deutsche Sprache sehr faszinierend finde, fehlen mir unzählige Kenntnisse aus meiner Schulzeit. Wie dem auch sei. Frage 1 bezogen auf den Namen: schau mal in deine STL Datei rein, die erste Zeile
Code:
solid ...
steht hier irgendwas dran? SHM kann auch mit Regionen arbeiten. Entsprechend entzieht das Tool die Namen der "solid" Tags. Wenn man ohne Regionen arbeitet, habe ich auch andere Namen. Aus "fensterWand" wird "fensterWand_solid" oder so. Aber mit dem kleinen Tool
Code:
sed 's/../../g -i'
geht das ja ganz fix. zur zweiten Frage (Verfeinerungsregionen): du hast schon fast alles richtig gemacht. Da du REGIONEN verfeinern willst und keine Oberflächen gehört deine Angabe in
Code:
refineRegions { Fraeser { // Surface-wise min and max refinement level levels ((0 3)); mode inside; } refinementBox // oder auch einfach verfeinerungsregion_1 { // Surface-wise min and max refinement level levels ((0 3)); mode inside; } }
Zum anderen noch einen Hinweis:
Code:
refinementBox { type searchableCylinder; point1 (0 0 -0.0025); point2 (0 0 0.00025); radius 0.00025; } refinementBox { type searchableBox; min (-0.005 -0.005 -0.01); max (0.005 0.005 0.001); }
Du definierst zwei verschiedene Geometrien mit dem gleiche Namen - kann nicht funktionieren. Beispiel: Code:
verfeinerungsZylinder { type searchableCylinder; point1 (0 0 -0.0025); point2 (0 0 0.00025); radius 0.00025; } verfeinerungBox { type searchableBox; min (-0.005 -0.005 -0.01); max (0.005 0.005 0.001); }
Weiter gibt's so etwas auch nicht:
Code:
Fraeser { // Surface-wise min and max refinement level level (7 8); level (2 3); }
Zwei mal Level zu definieren ist falsch. Gibt dir OF keine Fehlermeldung aus? Ansonsten denke ich, dass OF den ersten Eintrag nimmt. Denke das sich jetzt einiges geklärt hat.
------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Holzbasti Mitglied Student, Praktikant

 Beiträge: 16 Registriert: 26.10.2012
|
erstellt am: 19. Sep. 2013 14:24 <-- editieren / zitieren --> Unities abgeben:         
Hey, ja, die deutsche Sprache. Das kam bei mir auch erst während des Studiums. Mein Deutschabi hab ich noch vermasselt. Das klingt ja schonmal ganz gut. In der stl-Datei steht am Anfang tatsächlich
Code: solid ascii
Wenn ich "ascii" gegen "Fraeser" tausche, kann ich den dann auch in den Dateien für Druck und Geschwindigkeit etc. verwenden? Bevor das jetzt ausprobiere: Ich wollte ja das Grundgitter so, wie es im Bild gezeigt wird. Im endgültigen Fall habe ich natürlich noch einen Körper drin, eben den Fraeser, eigentlich Bohrer. Wenn ich nun also die Box für das Netz und den Zylinder für den Körper will, sollte das dann so aussehen?
Code:
geometry { Fraeser.stl { type triSurfaceMesh; name Fraeser; } // Analytical shape; cylinder, sphere refinementCylinder { type searchableCylinder; point1 (0 0 -0.0025); point2 (0 0 0.00025); radius 0.00025; } refinementBox { type searchableBox; min (-0.005 -0.005 -0.01); max (0.005 0.005 0.001); } }; refineRegions { /*Fraeser // Ich vermute, der gehört hier nicht hin, deshalb auskommentiert { // Surface-wise min and max refinement level levels ((0 3)); mode outside; }*/ refinementBox { // Surface-wise min and max refinement level levels ((0 3)); mode inside; } refinementCylinder { levels (0 3); mode inside; } }; refinementSurfaces { Fraeser { // Surface-wise min and max refinement level level (7 8); } };
Oder kann ich mir den Zylinder sparen, wenn der Körper eh halbwegs zylindrisch ist? Der macht ja eigentlich nur das Netz um den Körper nochmal dichter. Ich hoffe das passt so. Danke für deine Hilfe. Eine Frage habe ich noch, dazu dann aber ein neues Thema, weil es nicht direkt hiermit zusammenhängt. Viele Grüße, Basti 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: 19. Sep. 2013 14:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Holzbasti
Hallo Basti, wenn du mehrere Körper definierst die sich überschneiden aber die gleichen Refinement-Levels haben, wird die Zone in der beide die Vereinigungsmenge bilden auch nur auf das angegebene Level vernetzt, da OF die Refinementstufen immer auf das Grundnetz bezieht. Soweit sehen deine Eintragungen gut aus. Dein Bohrer kann in den Regions stehen, macht aber keinen Sinn weil die inneren Zellen sowieso weggeschnitten werden (locationInMesh).
Wenn in deiner STL folgendes steht:
Code:
solid ASCII
wird OF deinen Namen + diesen Solidnamen verwenden: Code:
geometry { Fraeser.stl { type triSurfaceMesh; name Fraeser; }
wird zur Boundary Fraeser_ascii. Weiteres Beispiel: Code:
geometry { Fraeser.stl { type triSurfaceMesh; name Bohrer; }
--> Boundaryname heißt dann Bohrer_ascii Änderst du deine STL und lässt hinter dem Keyword "solid" alles frei wird es IMMER zu: Name_solid Um die Ergänzung wegzubekommen musst du mit Regionen arbeiten. Das heißt in deinem Fall: Code:
solid bohrer
Code:
[code] geometry { Fraeser.stl { type triSurfaceMesh; regions { bohrer { name bohrerwand; } } } }
Entsprechend muss aber auch das SurfaceRefinement anders aufgebaut werden. Grüße Tobi ------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |