Hot News:

Unser Angebot:

  Foren auf CAD.de
  OpenFOAM
  Netzverfeinerung mit BlockMesh

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:  Netzverfeinerung mit BlockMesh (2969 mal gelesen)
Holzbasti
Mitglied
Student, Praktikant


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

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


Netz.jpg

 
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


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

Beiträge: 353
Registriert: 02.10.2008

BIM HVACTool für Windows OpenFOAM-2.2.x

erstellt am: 18. Sep. 2013 21:40    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 Holzbasti 10 Unities + Antwort hilfreich

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


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

Beiträge: 16
Registriert: 26.10.2012

erstellt am: 18. Sep. 2013 22:20    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

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





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: 18. Sep. 2013 23:28    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 Holzbasti 10 Unities + Antwort hilfreich

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


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

Beiträge: 16
Registriert: 26.10.2012

erstellt am: 18. Sep. 2013 23: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

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





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: 19. Sep. 2013 13: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 Nur für Holzbasti 10 Unities + Antwort hilfreich

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


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

Beiträge: 16
Registriert: 26.10.2012

erstellt am: 19. Sep. 2013 14:24    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

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





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: 19. Sep. 2013 14:57    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 Holzbasti 10 Unities + Antwort hilfreich

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

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