Autor
|
Thema: Cannot find patchField entry for allBoundary (4594 / mal gelesen)
|
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 15. Sep. 2016 14:30 <-- editieren / zitieren --> Unities abgeben:
Hallo lieber Foamers, ich bekomme eine Fehlermeldung bei der Ausführung von pimpleFoam. Ich habe mir eine STL datei über SnHexMesh eingelesen. Bei der Durchführung von pimpleFoam bekomme ich folgende Fehlermeldung: PIMPLE: Operating solver in PISO mode Reading field p Reading field U Reading/calculating face flux field phi Selecting incompressible transport model Newtonian Selecting turbulence model type RAS Selecting RAS turbulence model kEpsilon --> FOAM FATAL IO ERROR: Cannot find patchField entry for allBoundary
.../0.002/nut.boundaryField from line 24 to line 33 Kann mir jemand helfen? Danke, Mark ------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cfdtobi Mitglied Student
Beiträge: 67 Registriert: 16.07.2015
|
erstellt am: 15. Sep. 2016 15:56 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
Hallo Mark, rufst du snappyHexMesh ohne "-overwrite" auf? bzw. wieso startet dein solver bei t = 0.002? Für den Fall, dass du ohne -overwrite ausführst liegen im Zeitordner nur die Mesh-files. Du kannst diese dann entweder in deinen polyMesh-Ordner kopieren und des Solver zum Zeitpunkt 0 starten oder das ganze via snappyHexMesh -overwrite umgehen. Was wirft ein checkMesh aus?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 15. Sep. 2016 16:27 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
Hi, Konkrete Antwort auf deine Frage dein Fehler sagt dir, dass du im Ordner 0.002 im File nut einen Patch nicht definiert hast und zwar den Patch mit dem Namen allBoundary. Nachtragen und fertig. Wie Tobi schon sagt, es ist verwunderlich das du bei 0.002 anfängst aber das kann natürlich auch einen bestimmten Grund haben, den du verfolgst. Wenn du das lesen würdest:
Code:
--> FOAM FATAL IO ERROR: Cannot find patchField entry for allBoundary.../0.002/nut.boundaryField from line 24 to line 33
wärst du sicher auch selber drauf gekommen. Ich habs lediglich für dich übersetzt ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 16. Sep. 2016 09:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi und Tobias, erstmal vielen Dank für die Antwort. Das mein "allBoundary" fehlt habe ich gesehen, ich wusste aber nicht genau wie ich es einbinden muss! Nach einigen "rumprobiererreien" habe ich nun es geschaft das ich einen Schritt weiter komme. Meines sieht nun so aus:
Code: boundaryField ( allBoundary { inlet { type calculated; value uniform 0; } outlet { type calculated; value uniform 0; } ground { type nutkWallFunction; value }
Folgende Fehlermeldung kommt:
Create time Create mesh for time = 0.002 PIMPLE: Operating solver in PISO mode Reading field p Reading field U Reading/calculating face flux field phi Selecting incompressible transport model Newtonian Selecting turbulence model type RAS Selecting RAS turbulence model kEpsilon
--> FOAM FATAL ERROR: Attempt to return primitive entry ITstream : C:/OpenFOAM/cygwin64../0.002/nut.boundaryField, lines 23-42, IOstream: Version 2.0, format ASCII, line 0, OPENED, GOOD primitiveEntry 'boundaryField' comprises on line 23 the punctuation token '(' on line 24 the word 'allBoundary' on line 25 the punctuation token '{' on line 26 the word 'inlet' on line 27 the punctuation token '{' on line 28 the word 'type' on line 28 the word 'calculated' on line 28 the punctuation token ';' on line 29 the word 'value' on line 29 the word 'uniform' ... as a sub-dictionary From function const dictionary& primitiveEntry::dict() const in file db/dictionary/primitiveEntry/primitiveEntry.C at line 191. FOAM aborting Leider werde Ich mit diesem nut-File nicht warm, auch der User Guide hilft mir nicht richtig weiter. Kann mir einer Sagen was das nut-File macht und was da reingehört? Warum mein Solver mit 0.002 anfängt weiss ich auch nicht. Ich habe sHeMs ohne Overwrite ausgeführt er generiert mir 2 Ordner 0.001 und 0.002. Im Controldict war 0.001 festgelegt. Ich dachte ich bringe das Model erstmal ans laufen und kümmere mich dann um die Zeiten. Danke schon mal für Eure Hilfe.. Danke Mark
------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 16. Sep. 2016 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
Hi, folgendes: So sieht keine Datei aus:
Code:
boundaryField ( allBoundary // <<< was soll das bedeuten? { inlet { type calculated; value uniform 0; } outlet { type calculated; value uniform 0; } ground { type nutkWallFunction; value <<< hier fehlt was aber ich denke das du das einfach weggelassen hast } <<< Klammer fehlt }) <<< Klammer fehlt
Wie kommst du denn auf sowas? Übrigens, das nu File ist wie jedes andere auch. Ich sehe darin kein Probleme oder erhöhte Schwierigkeiten. Es wäre von Vorteil wenn du uns deine boundary Datei präsentieren würdest (constant/polyMesh/boundary). Achja, typografisch ist es nicht sinnvoll alles in dick zu schreiben und [b]rumprobieren[/i] kann man in FOAM wirklich viel aber vielversprechender ist es, zu verstehen. Gerade dein Problem ist einfach nur eine Sache der Struktur in OpenFOAM und wie Dateien aufgebaut sind. Hier kann man (syntaxtechnisch) nichts rumprobieren, da es fest steht. Rumprobieren eher in dem Sinn, dass man versucht die Syntax zu finden, die passt, aber das ist in diesem Fall eher banal als logisch ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 16. Sep. 2016 10:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobias, soweit ich die Vorgehensweise in OF verstanden habe, benutzt man einen vorhandenen Fall, und passt diesen auf sein Usecase an. Das versuche Ich gerade.Dazu, -wie du richtigerweise geschrieben hast- muss man natürlich (u.a.) die Syntax verstehen. Meine boundary Datei ist sehr simple, deshalb habe ich Schwierigkeiten die vom nut-file geforderte Einträge in der richtigen Art und Weise auszufüllen. (By the way, Fett habe ich nur geschrieben um mein geschriebenes besser vom Code bzw. Fehlermeldung zu trennen.) Hier meine boundary:
Code: FoamFile { version 2.0; format binary; class polyBoundaryMesh; location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //1 ( allBoundary { type patch; nFaces 25000; startFace 737500; } ) // ************************************************************************* //
Vielleicht könntest du mir erklären was das nut-file macht und welche Einträge es braucht. Vielen Dank Mark
------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cfdtobi Mitglied Student
Beiträge: 67 Registriert: 16.07.2015
|
erstellt am: 16. Sep. 2016 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
Hallo Mark, Thema 1: snappy zum Verständnis: snappyHexMesh ohne "-overwrite" erzeugt dir für eine Zeitschrittweite t = 0.001 folgende Ordner: 0.001 wenn castellatedMesh true 0.002 wenn snap true 0.003 wenn addLayers true In diesen Ordnern liegen die Meshfiles also 0.001 polyMeshOrdner des castellatedMesh 0.002 polyMeshOrdner des gesnappten Meshes 0.003 polyMeshOrdner des Meshes mit zusätzlichen Layern Primär liegen hier noch keine Randbedingungen deiner Strömung! Thema 2: Was du jetzt aus deinem boundary-file lesen kannst, ist, dass du im mainCase - polymesh nur eine einzige Boundary geschrieben hast die "allBoundary" heißt. (könnte der Name deines umliegenden Hilfsnetzes sein?) Was ich mir vorstellen könnte (man berichte mich wenn ich daneben liege) ist folgendes Dein case startet deshalb im Zeitschritt 0.002 weil du in deinem controlDict
Code: startFrom latestTime
daher startet dein Case zum Zeitpunkt 0.002 da ja dies der letzte Zetischritt ist der geschrieben wurde bei der Erzeugung deines Gitters. Code: startFrom startTime
hilft hier weiter... Was steht denn in der Boundary-file im Ordner 0.002 bei dir. Hast du hier die erzeugten Patches stehen? Wenn du paraFoam startest und die Zeitschritte durchklickst, müsstest du Veränderungen deines Gitters sehen, ansosnten stimmt etwas mit der gesamten Gittererzeugung nicht. Außerdem müsstest du ab Zeitschritt 0.001 im paraFoam /paraView bereits deine patches aufgelistet vorfinden. Einfachste Abhilfe: snappyHexMesh -overwrite dann ist die Gitterproblematik (bei sauber erzeugtem Gitter zumindest) erstmal vom Tisch und du kannst den case starten wie du willst, egal ob latestTime oder startTime startest du jetzt zum Zeitpunkt 0 und somit kann dein SOlver auf die BC zugreifen. Die hier erzeugten Zeitschritte haben nämlich ansich noch nichts mit den Berechnungszeitschritten des Sovlers zu tun, müssen aber verstanden werden, um die Gittererzeugung zu begreifen. nut und nuTilda einfach mal googlen, dann kommt direkt Treffer Nummer 1 ein Link zum englischsprachigen FOAM-Forum. Der Aufbau der Files im 0-Ordner entspricht aber vom prinzip 1:1 den anderen files wie p- U- T-File und wie Tobi schon sagte muss hier die Syntax schlicht eingehalten werden. Vielleicht hilfts Gruß Tobi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 16. Sep. 2016 12:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, erstmal vielen Dank für deine Antwort. Wenn ich die Zeitschritte in Paraview durchklicke passiert augenscheinlich nichts, unter den patches finde ich auch nur den Namen meines Usecases, somit denke ich stimmt etwas mit dem Mesh nicht. Ich probiere es nochmal neu. Im Forum besprechen die aber auch nur zu welchen Model es gehört und nicht was dieses File macht !-Irgendwie weiss das wohl keiner, oder?! Danke und Gruß Mark ------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cfdtobi Mitglied Student
Beiträge: 67 Registriert: 16.07.2015
|
erstellt am: 16. Sep. 2016 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
|
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 16. Sep. 2016 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
Allgemeine VorgehensweiseDein Vorgehen ist im Allgemeinen richtig. Man sucht seinen Solver erstmal nach den Berechnungskriterien heraus. Dann (wenn vorhanden) einen Tutorial Case der dem eigenen ähnelt und dann passt man das an. Das funktioniert bei den Standardfällen aber nicht bei meinen - ist aber für den Anfang ein guter Weg sich irgendwie zurecht zu finden. FOAM mag am Anfang schwer sein wenn keine helfende Hand da ist. Ansonsten ist FOAM recht einfach zu bedienen. Der große Vorteil[/b] an der Toolbox ist, dass der Anwender [i]wissen muss was er tut. Gute Anlaufstellen:
- cfd-online.com
- OpenFOAM wiki
- OpenFOAM User-Guide (da steht oft mehr drin als man denkt)
- Chalmers
- Ohne Werbung für mich zu machen (meine Webseite)
Wenn man mit FOAM nicht zurechtkommt, kann man auch noch GUI's verwenden (lehne ich aber kategorisch ab, da ich hauptsächlich Entwickel und im Terminal schneller bin wie mit irgendeiner GUI. Außerdem hab ich mir selber schon vor langer Zeit mal ein vim-addon gemacht und einige bash Sachen zurechtgelegt, sodass ich im Terminal viel schneller bin). Ist Geschmackssache. Hier wäre wohl die GUI von Engys HelixOS für dich vllt interessant. Einmal verwendet, aber wie erwähnt ich bin der Terminal Liebhaber. Vernetzen Bezüglich Vernetzung hat der Tobi dir schon einiges gesagt. Hier kann ich dir - sofern du mit sHM arbeiten willst - nur meine Tutorials ans Herz legen, die OpenFOAM Wiki Seite bezüglich snappyHexMesh zu lesen. Es gibt eine Alternative Namens cfMesh die anscheinend bessere Netze erstellt wie sHM, selber aber noch nicht verwendet. Die Kleinigkeiten bezüglich Speicherung, hat der Tobi schon erwähnt und die werde ich nicht wiederholen. Steht außerdem auch im User-Guide.
Dein Case Prinzipiell würde ich behaupten, dass ein Simulationsfall mit nur einem Patch recht unsinnig ist. Das kann ich aber nur behaupten, da ich nicht weiß was du machen willst. Wenn deine Boundary Datei so aussieht wie von dir oben gepostet, dann hast du nur ein Eintrag in U, p, T, k, epsilon, omega, nut, alphat, ... der die Randbedingung für diesen Patch setzt. Für nut wäre es dann wie folgt: Code:
boundaryField ( allBoundary { type nutWallFunction; // oder calculated oder was auch immer du machen willst value uniform 0; } )
Erklärung was nut macht Das File macht erstmal gar nichts. nut ist ein Feld, dass die Eddy Viskosität bezeichnet. Auch unter turbulente Viskosität bekannt und kommt eben von der Reynolds Zeitmittelung für turbulente Strömungen (die Grundlagen sind wichtig, daher empfehle ich dir Literatur zu lesen - kannst auch mein Buch heranziehen und / oder auf meiner Seite das Literaturverzeichnis anschauen). Wieso man nut als Datei braucht ist einfach eine Sache wie FOAM arbeitet. Dazu musst du dann C++ kennen. Letztlich macht der Löser nichts anderes als diverse Sachen zu durchlaufen. Eine dabei ist, das Turbulenzmodell auszuwählen und wenn du RANS verwendest, dann brauchen wir (salop gesagt) die Eddy Viskotität und demnach das Feld. Entsprechend wird im Speicher ein neues Objekt erstellt das nut heißt und entsprechende Eigenschaften hat. Aufgrund der Tatsache das es ein IOobject ist und gelesen werden muss, vordert dre Löser diese Datei an. Wieso und warum ,... da könnt ich weit ausholen.ist aber derzeit nicht von Belangem. Wünsch euch ein schönes Weekend. PS: Die einfachste Typografie und Textformatierung ist oft die Beste (natürlich muss man ein paar Aspektpunkte berücksichtigen ) Ich verweise einfach auf LaTeX. ------------------ Viele Grüße, Tobias Holzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 27. Sep. 2016 15:57 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für eure Hilfe, also mein Mesh funktioniert. Leider hänge ich nach wie vor an den nut file: Vielleicht könnt ihr mir sagen warum er nach wie vor sagt: "Cannot find patchField entry for allBoundary" Hier ist mein Blockmesh Auszug: Code: boundary ( allBoundary { type patch; faces ( (3 7 6 2) (0 4 7 3) (2 6 5 1) (1 5 4 0) (4 7 6 5) (0 3 2 1) ); inlet { type patch; faces ( (0 3 2 1) ); } outlet { type patch; faces ( (4 7 6 5) ); } bottom { type type symmetryPlane; faces ( (0 4 5 1) ); } top { type type symmetryPlane; faces ( (3 7 6 2) ); } } );
und hier das nut file: [CODE][boundaryField { inlet { type calculated; value uniform 0; } outlet { type calculated; value uniform 0; } bottom { type nutkWallFunction; value uniform 0; } top { nutkWallFunction; value uniform 0; } };/CODE] Weiß jemand was fehlt? Danke Mark
------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cfdtobi Mitglied Student
Beiträge: 67 Registriert: 16.07.2015
|
erstellt am: 27. Sep. 2016 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
Hallo Marc, wenn ich dein Blockmesh bei mir laufen lasse erzeugt es einen Patch mit dem Namen allBoundary. Da du in deiner nut-file den patch allBoundary nicht ansprichst kommt auch der Fehler "Cannot find patchField entry for allBoundary". Am Ende deines blockMesh kommt eine Auflistung mit allen erzeugten Patches Code:
patch 0 (start: xxx size: xxx) name allBoundary
bzw. wenn du checkMesh aufrufst kommt ebenfalls eine List mit allen patches. Vermutlich, zumindest bei mir so, kommen keine inlet, outlet patches in den Listen vor. Dein blockmesh erzeugt abgesehen des allBoundary 4 patches für 6 Flächen. Du hast jetzt mehrer Möglichkeiten: 1.: Code:
boundary ( inlet { type patch; faces ( (0 3 2 1) ); } outlet { type patch; faces ( (4 7 6 5) ); } bottom { type type symmetryPlane; faces ( (0 4 5 1) ); } top { type type symmetryPlane; faces ( (3 7 6 2) ); } );
dadurch erzeugst du die folgenden Patches: inlet outlet bottom top defaultFaces defaultFaces enthält alle nicht im blockMesh benannten faces, muss aber dann auch in allen files im 0-Verzeichnis angesprochen werden (im Normalfall als type empty) 2. du kannst auch die beiden fehlenden faces noch benennen und dementsprechend auch im 0-Verzeichnis ansprechen Überprüfe alle erzeugten patches entweder über die letzten Zeilen deines blockMeshes oder über den Befehl checkMesh. Und alle dort auftauchenden patches müssen in allen files im 0-Verzeichnis aufgerufen werden. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 28. Sep. 2016 09:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Tobi, wenn ich Checkmesh ausführe sehe ich die folgenden patches: Checking patch topology for multiply connected surfaces... Patch Faces Points Surface topology allBoundary 3283 4073 ok (non-closed singly connected) srtmMUC 80000 81435 ok (non-closed singly connected) Somit spreche ich im nut file allboundary und srtmMUC an, jedoch kommt immer noch der gleiche Fehler (Cannot find patchField entry for allBoundary)? Wass will er noch? Gruss Marc ------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MARK123 Mitglied Student
Beiträge: 30 Registriert: 24.08.2016
|
erstellt am: 28. Sep. 2016 09:48 <-- editieren / zitieren --> Unities abgeben:
Sorry problem gelöst, meine eigene Dummheit,typfehler, allboundary stand bei mir drin anstatt allBoundary, somit hat er das nicht gefunden. Blöde klein und Groß-Schreiberei in mitten des Wortes, muss ich mich erst dran gewöhnen! danek dennoch an Alle! ------------------ MAR Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shor-ty Moderator
Beiträge: 2463 Registriert: 27.08.2010 OpenFOAM-dev (Foundation) OpenFOAM-xxxx (ESI)
|
erstellt am: 28. Sep. 2016 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für MARK123
|