Writing mesh to time 3
IOstream::check(const char* operation) : error in IOstream "/home/
user1/OpenFOAM/user1-1.5/run/tutorials/rhoCentralFoam/oblique/3/
polyMesh/faces" for operation Ostream& operator<<(Ostream&, const int)
file: /home/user1/OpenFOAM/user1-1.5/run/tutorials/rhoCentralFoam/
oblique/3/polyMesh/faces at line 4123646.
From function IOstream::check(const char* operation) const
in file db/IOstreams/IOstreams/IOcheck.C at line 54.
FOAM exiting
STLファイルを7個用いているのですが, refinementSurfacesのlevelを全て (7 7) としたときは、通常通り終了し、7
個中3個のみをlevel(8 8)とし、他4個をlevel(7 7)としたときは、上記のエラーが発生いたいました。
refinementSurfacesのleveは全て同じものにしないとlevelの異なる結合部で格子生成がうまくいかない等の不具合がでるので
しょうか?
もし、お分かりでしたらご教示お願いいたします。
まず、確認したいのは、時刻3に書き込むということは、snappyHexMeshDict の設定が
castellatedMesh true;
snap true;
addLayers true;
で、layerを貼るのに失敗しているということでしょうか?
また、時刻2のメッシュをparaFoamとかで見ると、layerは無いけど
きちんとsnapされたメッシュが出来てますか?
> refinementSurfacesのleveは全て同じものにしないとlevelの異なる結合部で格子生成がうまくいかない等の不具合がでるので
> しょうか?
用いているSTLファイルは御互いに孤立しているのでしょうか?
それとも隣接しているのでしょうか?
もし、隣接しているのであれば、そのような問題が出るかもしれませんので、
STLの中身マージしまえば良いと思います。
あと、snappyHexMeshで失敗する場合には、STL自体の質をsurfaceCheckで
調べることも必要ですね。
ありがとうございます。申し訳ございません。様々な検討を行った結果、初歩的なミスでハードディスクの容量不足で書き込みが出来なかったようです。
しかしながら、生成した格子をparaviewで確認すると、全てlevel(7 7)で実行した場合と7個中3個のみlevel(8 8)
で実行した場合ですが、前者よりも後者の方が7個中4個のlevel(7 7)で実行したところの格子も粗くなりました。
部分的に格子を細かくしたいときでも、levelについては全て統一した方がよろしいのでしょうか?
また、マージとはSTLファイルの中の数字データを単純に一つのファイルにコピー&ペーストしてまとめてその1つのファイルでlevelを決定するとい
う解釈でよろしいでしょうか?
尚、格子については隣接しております。
> ありがとうございます。申し訳ございません。様々な検討を行った結果、初歩的なミスでハードディスクの容量不足で書き込みが出来なかったようです。
あらら.
エラーを見て最初は私もdisk fullかと思ったのですが,まさかなと思って違
うこと書いてしまいました.
> しかしながら、生成した格子をparaviewで確認すると、全てlevel(7 7)で実行した場合と7個中3個のみlevel(8 8)
> で実行した場合ですが、前者よりも後者の方が7個中4個のlevel(7 7)で実行したところの格子も粗くなりました。
それは,単に生成途中の格子数がsnappyHexMeshDictにおける
castellatedMeshControls/maxGlobalCellsの制限値に引っ掛かっているんじゃ
ないですかね?
> 部分的に格子を細かくしたいときでも、levelについては全て統一した方がよろしいのでしょうか?
そんなことは無いと思います.
> また、マージとはSTLファイルの中の数字データを単純に一つのファイルにコピー&ペーストしてまとめてその1つのファイルでlevelを決定するとい
> う解釈でよろしいでしょうか?
>
> 尚、格子については隣接しております。
STLによる面が隣接していて,かつlevelも同一で良いのであれば,マージした
ほうが良いと思います.
STLファイルのマージは,ASCII形式なら,カット&ペーストでも良いですし,
cat file1.stl file2.stl > all.stl
とcatコマンドでも出来ます.
#何故かsurfaceAddコマンドでマージしても上手くいかないです,,
ただ,STLファイルのsolidブロックの最初の行と最後の行にある,
solid wall
:
endsolid wall
といた.solidやendsolidキーワード後のsolid名(ここではwall)が,マージ前
のファイで重複しているといけないので,その場合にはどちらかのsolid名を
変更してからマージします.
なお,違うファイルにあるSTL面がスムースに隣接していて,さらにlayerメッ
シュを隣接線で途切れないように貼りたいような場合には,solidブロックを
分けないで,マージするほうが良い場合もあると思います.
例えば,
file1.stl:
---
solid wall1
中身1
endsolid wall1
---
file2.stl:
---
solid wall2
中身2
endsolid wall2
---
をマージするのに,
cat file1.stl file2.stl > all.stl
により
all.stl:
---
solid wall1
中身1
solid wall1
endsolid wall2
中身2
endsolid wall2
---
とするのではなく,
all.stl:
---
solid wall
中身1
中身2
endsolid wall
---
とするということです.
まあ,同じsolidブロック内にあるからといって,layerメッシュが連続に貼れ
るかとは,面の接合状態によるので,保証できませんが,,
あと,castellatedMeshの制御で試行錯誤している段階では,snapやaddLayers
をfalseにしていたほうが良いですよ.snapやaddLayersは時間がかかりますの
で.
それでは.