| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: OpenFOAM skripten (3149 mal gelesen)
|
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 20. Jan. 2014 18:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich bin neu hier und möchte mich zuerst einmal kurz vorstellen, bevor ich hier meine Fragen stelle Ich fange im Februar meine Bachelorthesis an und die Hauptaufgabe ist es, eine Geometrie zu optimieren. Ich habe schon Erfahrungen mit Fluent, CCM+, diversen CAD-Programmen Ansa und vielem mehr gesammelt. Weiterhin kann ich die Programmiersprachen C, VB und VBA. Linux und OpenFOAM sind aber nun ganz neu für mich. Ich möchte eine ralativ einfache Geometrie mit blockMesh erstellen und mit OF berechnen. Da ich nun einige Parameter haben, möchte ich gerne die Berechnungen automatisieren. Nun zu meiner ersten Frage: Hat jemand zufällig ein Skript, für mich als Beispiel, wie das aussehen muss, um: - die Geometrie zu ändern, - die Berechnung durchlauf zu lassen und optimaler Weise - die Ergebnisse (beispielsweise die Wärmemenge)in eine Datei schreiben, so das ich am Ende eine Übersicht bekomme, welche Variante am Besten ist? Die zweite Frage btrifft blockMesh: Habe ich das richtig verstanden, dass blockMesh grundsätzlich keine Layer (Randschichten) machen kann? Die Funktionen simpleGrading und edgeGrading habe ich schon kennengelernt, nur glaube ich nicht, dass diese mir so einfach zum gewünschten Erfolge dienen. Ich würde jetzt also um meine Wände separate Blöcke (zusätzlich zu dem Fluidraum) erstellen und dann mit simpleGradient meine Randschicht erstellen, die dann in den Fluidraum übergehen. Ist das so sinnvoll oder gibt es hier eine bessere Vorgehensweise? Danke schon einmal im Vorraus! Viele Grüße Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NewFOAMER Mitglied Ing. Strukturmechanik
 Beiträge: 9 Registriert: 03.12.2013
|
erstellt am: 21. Jan. 2014 10:31 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hallo Micha, Wilkommen! Da hast du dir ja einiges vorgenommen. Was deine Topologieoptimierung an geht, so kann ich nur auf die Diplomarbeit von Michael Böhm (Numerische Strömungsoptimierung: Mathematische Herleitung und exemplarische Umsetzung mit OpenFOAM) verweisen. Er hat sowas mit einem einfachen Strömungskanal gemacht (2D). Es ist aber alles sehr sehr und nochmal sehr Mathematisch. Ich glaube von Hand bist du vielleicht schneller Viel Erfolg! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 21. Jan. 2014 10:43 <-- editieren / zitieren --> Unities abgeben:         
Schönen guten Morgen, vielen Dank für die Antwort. Die Abschlussarbeit kostet 60.-€ bei Amazon und ist nicht sehr gut bewertet (was noch nichts heißen muss; auch sind die Bewertungen schon recht alt). Hast du das Buch und lohnt es sich das zu kaufen? Wo genau siehst du die Schwierigkeiten bei meiner Abschlussarbeit? Im Automatisieren, also skripten oder bei der Auswertung? Viele Grüße Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NewFOAMER Mitglied Ing. Strukturmechanik
 Beiträge: 9 Registriert: 03.12.2013
|
erstellt am: 21. Jan. 2014 11:10 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Ich konnte mir das Buch zum Glück über unsere ZHB besorgen. Vielleicht geht das auch bei dir. Die 60€ kann man aber bestimmt besser investieren. Wenn das Automatisieren nicht deine Aufgabe ist, so ist es "nur" nettes Beiwerk. Kann man machen wenn man sich absolut sicher ist, dass der zeitliche Rahmen ausreicht. Da du noch ein Anfänger in OF bist (ich bin auch nur fortgeschrittener Anfänger  ) solltest du dich erstmal mit den Grundlagen deiner Arbeit beschäftigen (gute Vernetzung, Vernetzungsstudie, Auswertung, Optimierungsansätze wählen, neues Modell usw.) Wenn das geschaft ist kannst du deinen Case hübsch machen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 21. Jan. 2014 11:24 <-- editieren / zitieren --> Unities abgeben:         
So ähnlich soll es ablaufen: - Testfälle rechnen zu denen Literaturangeben vorliegen um OpenFOAM und die Einstellungen zu validieren - Ausgangs-Geometrie berechen und hierbei die Netzstudie machen, so dass ich die Einstellungen für Folgevarianten herannehmen kann - Variantenanzahl mit Hilfe von DOE reduzieren - Varianten rechnen und auswerten Habe ich das mit dem blockMesh in meinem ersten Post richtig verstanden? Muss ich einzelnen Blöcke anlegen, und dann mit simpleGrading die Layer erstellen? Oder gibt es da noch andere Möglichkeiten? Viele Grüße und danke für dein Feedback! Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 21. Jan. 2014 12:25 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hallo Micha und willkommen im Forum, am Sonntag habe ich einem Studenten bei seiner Abschlussarbeit geholfen. Darum geht es im Allgemeinen um eine Profilumströmung die entsprechend mit verschiedenen Winkeln geneigt ist. 2D (4 Fälle) + 3D (4 Fälle) wurden von mir in ein paar Stunden per Skript erstellt. Das hätte ich auch in 2 Stunden machen können aber ich war so nett und hab eben noch vieles kommentiert etc Eine Erweiterung der Fälle auf 16 oder 20 Winkel ist jetz eine Sache von 5 Minuten. Ich weiß nicht wie deine Geometrie aussieht oder was du machen willst, ich jedenfalls hab 2D sowie 3D mit SnappyHexMesh erstellt. Bei 2D dann eben eine Fläche extrudiert um auf ein 2D Netz zu gelangen. Ich will damit sagen, dass du viele Möglichkeiten besitzt die Berechnung zu machen. Ein Freund von mir hat bspw. einen Arbeitsraum untersucht, in dem er die Lüftung an der Decke jeweils um x mm verschoben hat. Einmal in X-Richtung dann in Y-Richtung etc. Waren glaub 50 Simulationen. Mittels einem von Ihm erstellten Skript war das dann mit einem Befehl erledigt. Die Berechnung war dann automatisiert und nach ein paar Tagen hat er alle 50 Simulationen durchgeführt, ohne nochmals selber Hand an zu legen.
Eine Literatur kann ich dir hierzu nicht geben, da ich deine Frage nicht wirklich CFD orientiert finde. Es ist eher eine Programmieraufgabe/Skriptaufgabe. Dazu gibt es aber so viele Informationen im Internet. Allgemein zur Literatur würde ich keine "Diplomarbeit" kaufen die so teuer ist, außer Sie wird von anderen CFDlern empfohlen. Könnte dir jetzt ein paar gute Bücher vorschlagen aber das ist natürlich auch wieder eine subjektive Wahrnehmung. Ein paar Bücher findest du auf meiner Homepage.
Wenn du neu in Linux bist, kannst du dir das Terminal angewöhnen und den Texteditor vim.
1. bist du wesentlich schneller wie andere, die mit einem Texteditior die Daten bearbeitet 2. Bietet es dir die Möglichkeit Code zu Highlighten (auch OpenFOAM Code) 3. Den Umgang mit der Shell bringt dir Sicherheit und Schnelligkeit 4. Du hast x Skriptsprachen zur Auswahl. Was du machen willst und welche dir liegt entscheidest du / kannst auch ne Programmiersprache wählen: Code:
bash python c++
- Die Fähigkeit eines bash-Skriptes + Linuxbefehle (Textmanipulation) ist enorm - Solltest du ein 2D Fall machen, der simple ist, empfehle ich dir blockMeshDict mit "sed" zu manipulieren.
- Bezüglich deiner Richtigkeit von BlockMesh - kannst du so machen, musst du aber nicht. Solltest du dich dafür entscheiden, kannst du einen Block erstellen oder mehrere. Das liegt ganz von der Geometrie und deinen Anforderungen an das Netz ab. Du kannst auch Grenzschichten mittels anderen Tools erstellen. Es gibt eine Fülle an Möglichkeiten die du betrachten kannst. Deine Wahl 
Allgemein solltest du dir aber den Umgang mit OpenFOAM vertraut machen.
------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 21. Jan. 2014 12:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo Tobias, vielen Dank für die aufschlussreiche Info. Mein Prof meinte ich soll blockMesh nehmen, da hier das Netz bei jeder Simulation annähernd gleich ist und meine Geometrie dafür geeignet ist. Ist es mit SnappyHexMesh auch möglich, eine Geometrie zu erstellen? Gibt es auch die Möglichkeit, sich eien gewählte Größe zu jeder Berechnung herauszuschreiben, so dass ich diese übersichtlich in einer Datei habe? Ist es möglich, dass du mir mal so ein Beispielskript zeigen kannst? Mich würde der grundlegende Aufbau und Ablauf interessieren. Viele Grüße Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 21. Jan. 2014 16:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hallo Michael, du kannst über Probes bestimmte Punkte im STrömungsfeld herausschreiben lassen. Gibt sicherlich auch wesentlich mehr an Ausgabemöglichkeiten als ich es kenne. sHM ist nur ein Vernetzer - kein Geometrieerzeuger. ------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 22. Jan. 2014 07:38 <-- editieren / zitieren --> Unities abgeben:         
|
Shor-ty Moderator
     

 Beiträge: 2466 Registriert: 27.08.2010
|
erstellt am: 22. Jan. 2014 12:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hallo, ich zaubere mir schnell was aus den Ärmeln: Code:
#!/bin/bash # # Skript zur Automatisierung# Skriptstart clear echo "" echo "Automatisierung der Parameterstudie" for i in { 1...10 } do echo " - Startcase in case_$i kopieren" cp -r startcase case_$i cd case_$i echo " - Manipulationen am blockMesh" . . irgendwelche Berechnungen für Punkte . sed '14s/(0 0 0)/(1 3 1)/g' -i constant/polyMesh/blockMeshDict // Ersetz bspw. in Zeile 14 (0 0 0) -> (1 3 1) . . . if [ $k -eq 10 ] then echo "Extrudiere Mesh" extrudeMesh -overwrite > logFiles/log.extrudeMesh fi usw. usw. usw. cd ..
done echo "Parameterstudie beendet"
------------------ Grüße Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 22. Jan. 2014 16:43 <-- editieren / zitieren --> Unities abgeben:         
|
student92 Mitglied
 Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 30. Jun. 2015 14:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hallo zusammen, der letzte Beitrag ist zwar schon etwas länger her, aber ich dachte mir aber das mein Anliegen hier gut zu passen könnte. Kurz zu mir: Ich heiße Matthias, bin 22 und fange gerade mit meiner Bachelorarbeit in einem unternehmen an. Bei dieser geht es um eine Strömung in einer Geometrie , welche ich mit OpenFoam im blockMesh erstellen und anschließend simulieren soll.Dies hat bislang auch alles gut funktioniert. Mit Hilfe von Python (worin ich mich nun schon etwas länger einlese) muss im Anschluss, ähnlich wie bei Michael, die Geometrie bzw. das BlockMesh ergänzen und Parameter verändern. Nun zum Problem, das ich eigentlich ziemlich schnell durchgeführt haben wollte  Die Parametrisierung mit Hilfe der blockMeshdict.m4 habe ich verstanden, aber leide tue ich mich ziemlich schwer mit dem Python-Skript. 1. Ich weiß nicht, wie ich mit Python das Skript so erstelle, dass ich auf die Datei zugreifen und z.B. Paramater xlaenge und point (xyz) beim Ausführen im Terminal verändern kann. In Python unterscheiden sich ie Befehle lgaube ich zum obigen Beispiel. 2. Soll hierbei z.b. ein Block geteilt werden, sodass ein weiterer neuer Block entsteht, für dem Ebenfalls dann neue points erstellt werden sollen. Ich hoffe ich konnte meine Probleme verständlich zum Ausdruck bringen und Ihr könnt mir Helfen. @Michael, ist deine Arbeit öffentlich und man kann sie sich mal anschauen? Würde später auch gerne als Bonus in der Arbeit meine Ergebnisse in ein File schreiben lassen. Vielen Dank und viele Grüße Matthias [Diese Nachricht wurde von student92 am 30. Jun. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Micha6982 Mitglied Akademischer Mitarbeiter
 
 Beiträge: 130 Registriert: 20.01.2014 ubuntu 16.04 Salome 7.7.1 & 7.8.0 OpenFOAM 3.x & 4.x
|
erstellt am: 30. Jun. 2015 14:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo Matthias, herzlich willkommen! Meine Arbeit habe ich ebenfalls in einem Unternehmen gemacht und daher ist die Arbeit unter Verschluß! Mit Phyton kenne ich mich nicht aus. Kannst du nicht auf die Shell umsteigen oder gibt es einen besonderen Grund für Phyton? Außerdem habe ich vor kurzem herausgefunden wie man in Blockmesh rechnen kann: http://ww3.cad.de/foren/ubb/Forum527/HTML/000664.shtml Dann ersparst du dir den Umweg über m4. Viele Grüße Michael ------------------ Viele Grüße Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
student92 Mitglied
 Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 30. Jun. 2015 18:26 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hi Michael, danke dir für deine schnelle Antwort. Leider ist die Aufgabenstellung so gewählt, dass Python als Programmiersprache festgelegt wurde. Kann aber nochmal nachfragen. Sonst hoffe ich aber mal, dass es noch jemanden gibt, der mir die zwei Probleme aufzeigen kann. Viele Grüße Matthias 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: 30. Jun. 2015 18:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hallo Matthias, naja ist relativ egal ob du Bash-skripting machst oder Python verwendest. Bei Bash musst du auch erstmal zurecht kommen, da viele Operationen gar nich auf die Schnelle ersichtlich sind. Letzten Endes ist das auch alles sehr easy (piping) aber Python wird da genauso gut gehen. Ist ja immerhin ne sehr einfach Programmiersprache. Du musst es halt in Python so programmieren das das alles funktioniert. Ggf. würde ich das blockMesh parametrisieren und die Parameter via Python setzen. Alternativ einfach alles in Python machen (wenn du schon dabei bist). Verwende am Besten "vim" und los gehts (: Viel Erfolg. ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
student92 Mitglied
 Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 30. Jun. 2015 19:05 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hi Shorty, den vim Editor schaue ich mir gerade an,was man so liest soll dieser schon mal besser sein als die vorhandenen Standard-Editoren. Genau, das BlockMesh habe ich bereits parametrisiert, war im Grunde ziemlich einfach. Beim skripten komme ich nicht schnell genug voran, da ich die ganzen Operationen für Python nicht kenne. Nochmal die zwei Dinge: 1. Ich weiß nicht, wie ich mit Python auf das BlockMesh / eine Datei zugreife und z.B. Paramater xlaenge und point (xyz) beim Ausführen im Terminal verändern kann. 2. Soll hierbei z.b. ein Block geteilt werden, sodass ein weiterer neuer Block entsteht, für dem ebenfalls dann neue points erstellt werden sollen. Vllt kan mir ja jemand die Operationen nennen, wie im obigen Beispiel von Shorty. Viele Grüße Matthias P.s. ihr seid echt fix, bin wirklich überrascht. 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: 30. Jun. 2015 19:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Micha6982
Hi, naja ich bin ja Moderator von diesem Brett und bekomme immer gleich ne Mail wenn was passiert. Muss ja auch für Ordnung sorgen  In bash wäre das sehr easy like:
Code:
sed -i 's#Pointx .*#Pointx $whatEver#g' constant/polyMesh/blockMeshDicht
Für python (ist ja eher Programmierung) folge einfach dem Internet (stackoverflow etc.) http://www.python-kurs.eu/dateien.php Du kannst auch in Python ein Bash-Skript laufen lassen. Je nach dem wie du das machen möchtest. Zum zweiten Problem (: Naja, wenn du nen Block splitten möchtest, dann muss dein Programm natürlich neue Punkte einbinden und neue Blöcke generieren. Musst dir halt Gedanken machen wie du das umsetzen könntest. ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |