Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  OpenFOAM
  parametrierte Erstellung strukturierter Gitter

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:  parametrierte Erstellung strukturierter Gitter (3240 mal gelesen)
easwood
Mitglied



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

Beiträge: 11
Registriert: 22.01.2014

erstellt am: 22. Jan. 2014 08:47    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,

ich bin Neuling in OpenFoam und beschäftige mich im Moment vor allem mit der Gittergenerierung. Für meine weitere Arbeit will ich strukturierte Gitter automatisiert und parametriert erstellen. Bei der Geometrie handelt es sich im Moment um einfache rechteckige Blöcke, die zu einem großen Netz zusammengebaut werden sollen. Ich habe mir das so vorgestellt, dass ich in einer Datei Ortsvektoren zu einem definierten Nullpunkt (x0, y0, z0) und Größe (Höhe, Breite, Tiefe) für verschiedene rechteckige Blöcke angebe und daraus anschließend mit BlockMesh ein Gitter zusammenbasteln kann. Zu Beginn habe ich das komplette Gitter in ein BlockMeshDict geschrieben und wollte daraus das Gitter erzeugen. Das funktioniert theoretisch auch, allerdings habe ich recht schnell festgestellt, dass mein Arbeitsspeicher für diese Aufgabe sehr schnell an seine Grenzen stößt, denn BlockMesh hat die Rechnung einfach abgebrochen (Ausgabe in der Kommandozeile: killed).
Daher meine Fragen: Wie kann ich so ein Gitter parallelisiert mit BlockMesh erstellen oder gibt es einen einfacheren Weg? Kann ich einzelne Blöcke, die mit BlockMesh erstellt wurden, einfach zu einem zusammenhängenden Gitter zusammenbauen oder muss ich da immer dieses mergeMeshes verwenden (rechnet auch ziemlich lang). Gibt es ein anderes OpenSource-Tool, das für diese Aufgabe besser geeignet ist als BlockMesh? Ist es für so einfache Geometrien sinnvoll, einen eigenen Gittergenerator (für ein strukturiertes Hexaedernetz) zu schreiben oder gibt es so etwas schon? Hat jemand damit Erfahrung bzw. Literatur?

Das sind sehr viele Fragen, die mich im Moment ein wenig quälen. Ich wäre für jede Hilfe dankbar.

Gruß Easwood

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

Wurstfred
Mitglied



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

Beiträge: 14
Registriert: 27.11.2013

OpenFoam-2.2.x
SuSe 12

erstellt am: 23. Jan. 2014 09: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 easwood 10 Unities + Antwort hilfreich

Hi,
ich beantworte dir mal ein paar Fragen.
Parametrisierung blockMeshDict einfach:
Code:
convertToMeters 0.001;

// (xmax-xmin)/a = (ymax-ymin)/b = (zmax-zmin)/c
a 75;
b 56;
c 56;

xmin -25;
xmax 175;
ymin -25;
ymax 125;
zmin -25;
zmax 100;


vertices
(
    ($xmin $ymin $zmin) //0
    ($xmax $ymin $zmin) //1
    ($xmax $ymax $zmin) //2
    ($xmin $ymax $zmin) //3
    ($xmin $ymin $zmax) //4
    ($xmax $ymin $zmax) //5
    ($xmax $ymax $zmax) //6
    ($xmin $ymax $zmax) //7
);

blocks
(
    hex (0 1 2 3 4 5 6 7) ($a $b $c) simpleGrading (1 1 1)
);


Für erweiterte Parametrisierung mit Formel, Berechnungen etc. googelst du am besten mal nach "m4 blockmesh openfoam" oder so, ansonsten gibt es dazu auch schon manche Tutorials die das benutzen:

Code:
/OpenFOAM-2.2.x/tutorials> find -name *.m4 -type f
./incompressible/simpleFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/polyMesh/blockMeshDict.m4
./incompressible/SRFPimpleFoam/rotor2D/constant/polyMesh/blockMeshDict.m4
./incompressible/porousSimpleFoam/angledDuctImplicit/constant/polyMesh/blockMeshDict.m4
./multiphase/twoPhaseEulerFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./multiphase/compressibleTwoPhaseEulerFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./multiphase/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./multiphase/interDyMFoam/ras/sloshingTank2D/constant/polyMesh/blockMeshDict.m4
./multiphase/interDyMFoam/ras/sloshingTank3D/constant/polyMesh/blockMeshDict.m4
./multiphase/interDyMFoam/ras/sloshingTank3D6DoF/constant/polyMesh/blockMeshDict.m4
./multiphase/interDyMFoam/ras/sloshingTank3D3DoF/constant/polyMesh/blockMeshDict.m4
./multiphase/interDyMFoam/ras/sloshingTank2D3DoF/constant/polyMesh/blockMeshDict.m4
./multiphase/multiphaseEulerFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./multiphase/MRFMultiphaseInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/polyMesh/blockMeshDict.m4
./compressible/rhoPimplecFoam/angledDuct/constant/polyMesh/blockMeshDict.m4
./compressible/rhoPimpleFoam/ras/angledDuct/constant/polyMesh/blockMeshDict.m4
./compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/polyMesh/blockMeshDict.m4
./compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/blockMeshDict.m4
./compressible/rhoLTSPimpleFoam/angledDuct/constant/polyMesh/blockMeshDict.m4

Zum parallel laufen weiß ich selbst nicht viel, Google hat mir das ausgegeben:
http://www.cfd-online.com/Forums/openfoam/84546-blockmesh-parallel-mesh-generation.html

Fragen die noch offen sind:
-andere Mesher
-Literatur
-Mesher selbst schreiben
-Wieso bricht dein blockMesh ab

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: 23. Jan. 2014 12:19    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 easwood 10 Unities + Antwort hilfreich

Hallo,

- wieso bricht blockMesh bei dir ab ? Ich schätze nicht das du einen schlechten Rechner hast - wie viele Zellen erstellst du denn? BlockMesh läuft bei mir zwischen 0,1s bis max 4s. Kannst du mal dein Dict posten?  

- Parallelisierung kann du meines Erachtens mit blockMesh nicht machen - müsste ich aber heute Abend nochmals nachschauen. Aber prinzipiell nicht weil die Parallelisierung auf ein Zersplitten des Netzes zurückzuführen ist, sodass jeder Kern eine eigene Domain hat. Beim Vernetzen von sHM ist das das selbe. Das Hintergrundnetz wird in kleine Domains gesplittet und jeder Kern berechnet dann die Deformation/Manipulation des Netzes. BlockMesh parallel auszuführen ergibt für mich auch keinen Sinn. Passt deine OpenFOAM Installation?

------------------
Grüße Tobias Holzmann

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

easwood
Mitglied



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

Beiträge: 11
Registriert: 22.01.2014

erstellt am: 27. Feb. 2014 08:36    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


testgeometrie.pdf

 
Hallo,

vielen Dank für eure Antworten.
Mein blockMeshDict hatte zu viele Zellen, deswegen hat blockMesh abgebrochen (Arbeitsspeicher zu gering).
Es bleibt für mich aber die Frage, wie ich um ein Bauteil für ein Fluid automatisiert ein Gitter erstellen kann. Als Beispiel habe ich eine Testgeometrie angehängt: Die Maße 500x800x1800 entsprechen dabei dem Fluidvolumen (alles rechtwinklig). Wie kann ich nun möglichst automatisiert, ein Gitter für das Fluidvolumen (um die Bauteile herum) erzeugen? Ich habe schon einiges in perl gescriptete, um einzelne Blöcke um die roten Bauteile herum in blockMesh zu erzeugen. Geht das vielleicht einfacher? Kann man mit einem Befehl die roten Bauteile aus einem rechteckigen Fluidblock herausschneiden?

Vielen Dank für eure Hilfe

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

Wurstfred
Mitglied



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

Beiträge: 14
Registriert: 27.11.2013

OpenFoam-2.2.x
SuSe 12

erstellt am: 27. Feb. 2014 10:02    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 easwood 10 Unities + Antwort hilfreich

Hey,
wie oben schon erwähnt sollte das doch echt mit m4 möglich sein.
Mit snappyhexMesh könntest du zwar auch anfangen aber ehrlich gesagt nach meinen schwierigkeiten mit snappy würde ich mir lieber die Mühe machen und das mit blockMesh aufbauen bzw. einem anderen Programm und dann importieren. Vor allem auch weil die Geometrie so simple ist.

Deine Geometrie ist ziemlich einfach und hat ja einen periodischen Aufbau. Das sollte eigentlich mit den von dir eingegebenen Werten sowie 2-3 verschachteteln Schleifen möglich sein. Schwierig wird wahrscheinlich nur die Sortierung der Werte für die einzelnen hexaeder in blockMeshDict. Aber eigentlich sollte das kein Problem darstellen.

Sind nur ein paar Gedanken die mir gerade eingefallen sind.

Gruß

[Diese Nachricht wurde von Wurstfred am 27. Feb. 2014 editiert.]

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

easwood
Mitglied



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

Beiträge: 11
Registriert: 22.01.2014

erstellt am: 28. Feb. 2014 10:48    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,

danke für deine Antwort, Wurstfred.
naja für dieses einfache Beispiel geht das mit Sicherheit mit m4. Ich will die Blöcke aber beliebig in diesem Fluidvolumen verschieben und dann befürchte ich, dass es mit m4 ziemlich kompliziert wird.
Unabhängig davon, welche Skriptsprache ich dafür verwende, die Sache für blockMesh zu parametrieren, bin ich mir nicht sicher, wie ich das überhaupt in blockMesh umsetzen kann.
Meine ersten Gedanken, es in blockMesh umzusetzen waren folgende:
1.) "Zerstückeln" des Fluidbereichs in möglichst wenige Blöcke um die Bauteile herum
2.) Mergen der einzelnen Blöcke mit mergePatchPairs

Problem von 2.) laut UserGuide: "it is inadvisable to merge a patch twice, i.e. include it twice in mergePatchPairs". Wenn man vermeiden will, dass keine Fläche der erstellten Fluidblöcke mehr als 1 mal gemergt werden muss, wird das ganze aber sehr schnell sehr kompliziert bzw. man benötigt extrem viele Blöcke. Deswegen meine Fragen:
- Gibt es die Möglichkeit, aus einem kompletten Fluidblock die Bauteile herauszuschneiden?
- Kann ich einzelne Blöcke, die mit blockMesh erzeugt wurden, irgendwie anders zu einem Netz zusammenbauen (ohne mergePatchPairs)

Vielen Dank für eure Hilfe

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

easwood
Mitglied



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

Beiträge: 11
Registriert: 22.01.2014

erstellt am: 16. Jun. 2014 15:02    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,

im Moment habe ich das Ganze so aufgesetzt, dass ich mit blockmesh ein quaderförmiges Netz für den Fluidbereich erstelle und anschließend mit toposet und splitmeshregions die Bauteile aus diesem Fluidbereich herausschneide. Dabei ergibt sich allerdings das Problem, dass mein blockMesh-Netz sehr fein sein muss, damit das Herausschneiden sauber funktioniert. Wenn die Bauteile zwischen zwei Gitterzellen (des Fluidbereichs) liegen, werden komische Zellen und zusätzliche domains erzeugt. Hat jemand Erfahrung mit splitmeshregions und kann mir da weiterhelfen?

vielen Dank

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: 17. Jun. 2014 12:07    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 easwood 10 Unities + Antwort hilfreich

Hallo eastwood,

arbeite schon sehr lange mit snappyHexMesh und meines Erachtens ist das Tool überhaupt nicht schwer zu händeln. Das ist aber wohl Ansichtssache. Für dein Problem kommt mir gerade eine sehr schnelle Idee.

-> Hintergrundnetz (grob) erzeugen (ist ja immer gleich), dann einen deiner Blöcke als STL File erzeugen und speichern (natürlich die Position wissen). Dann diese STL mit einem Skript in constant/triSurface/ kopieren. Als nächstes eine Kopie anlegen (Block_2). Diesen dann mittels Skript auf eine Position setzen (transformPoints/scaleSurfacePoints oder so ähnlich - ist ein implementiertes Tool in OpenFOAM). Das machst du dann x mal bis du alle Blöcke positioniert hast.

Danach startest du sHM und fertig.
Die sHMDict müsstest du "einmal" so generieren das es für deinen Fall passt. Aber das ist sehr einfach und wenn du es benötigst, kannst du das File via Skript auch anpassen.

Du könntest dann auch ein "setupCase" erstellen, diesen dann kopieren, die oben genannten Änderungen durchführen und zusätzlich simulieren.
Skripting von den OpenFOAM Dingen würd ich mal auf ein(e) (paar) Stunde(n) schätzen. Die Implementierung deiner Verschiebung musst du dir halt selber ausdenken.

Wäre mein Vorschlag.


PS: Wenn es in deinem Fall sowieso nur Würfel sind, kannst du mit sHM nur mit castellated meshen und erhältst ein reines Hexaedernetz. Sofern deine Positionen deiner Würfel an genauen Gitterpunkten vorzufinden sind, erhältst du sogar ein exaktes Hexaedernetz.

------------------
Best regards,
Tobias Holzmann

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



Ingenieur, Physiker, Mathematiker - Prozess- & Methodenentwicklung für komplexe Simulationen in der Fahrzeugentwicklung (CFD/FEM/MKS) (m/w/d)

Wir bewerben uns bei dir. Diese Formulierung überrascht dich vielleicht, da du dich gerade mit deiner eigenen Bewerbung beschäftigst? Als Teaser nennen wir dir 5 Argumente. Den Blockbuster zeigen wir im Bewerbungsprozess. Die Sequels erlebst du bei TWT. Find's raus!

  • Themen am Puls der Zeit. Artificial Intelligence, Autonomous Driving, E-Mobility, Model Based Systems Engineering oder Virtual Experience....
Anzeige ansehenElektrotechnik, Elektronik
easwood
Mitglied



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

Beiträge: 11
Registriert: 22.01.2014

erstellt am: 18. Jun. 2014 08:50    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 Tobias,

danke für deinen Input. Mit sHM habe ich mich bisher noch nicht beschäftigt, deswegen werde ich mir das gleich mal anschauen. Was ich nicht so ganz verstanden habe. Was meinst du mit "exaktes Hexaedernetz" bzw. was würde passieren, wenn die Positionen der Quader nicht an "genauen Gitterpunkten (?)" nicht an genauen Gitterpunkten vorzufinden sind?

Gruß

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