gmsh のバージョン依存性について (エラー備忘録)¶
gmsh がエラーを吐きまくる.¶
おそらく、主に、occで複雑な?図形を作りまくった場合.
シンプルに全部 occ で読み込みが安定するのかもしれない ( 2023/2/21時点の所感 )
主に電磁石設計ツールについて.(大量の面要素を手動設定する鬼畜ジオメトリのメッシング.)
エラーの備忘録¶
gmsh==4.11.1¶
当初(バグ捕りの発端になった)のエラーについて¶
python pip インストール OpenCascade 7.6.0 (なぜかダウングレード、4.10.5は、7.6.1でコンパイルされてる.)
ジオメトリ設定はうまくいく.( Begin Meshing.... までたどり着く.エンティティもちゃんと生成されてる )
メッシュ切った際に( 体積エンティティがないといって、エラーがでて終了.あるはずなのに. ).エラーは以下.
ERROR : Edge 2 - 395 multiple times in surface mesh
ERROR : No elements in volume 10
正直、対処不能?
ポートの穴をあけるだけで( 単にブーリアン切っただけで)、死ぬ.
オプション設定による対処について¶
もしかしたら、Geometry.OCCFixDegenrated とか、オプションででどうにかなったり?
Geometry.OCC 系列のオプションを軒並み追加したら、事態改善したかもしれない... ( gmsh==4.11.1 )
何がきいたのか? ( Geometry.OCCSafeUnbinding だった )
Geometry.OCCSafeUnbind とは何か?
Geometry.OCCSafeUnbind: Revert to safe (i.e. with recursive checks on boundaries) unbinding of entities in boolean operations and geometrical transformations. ( Default value: 0 )
4.10.2 (May 13, 2022): new Geometry.OCCSafeUnbind option to disable boolean optimization introduced in 4.10.0 (for backward compatibility);
つまりは、
Geometry.OCCSafeUnbind: ブーリアン演算や幾何学変換において、安全な(つまり、境界の再帰的チェックを伴う)エンティティのバインド解除に戻す。( デフォルト値: 0 )
4.10.0 で導入されたブーリアン最適化を無効にする新しい Geometry.OCCSafeUnbind オプション(下位互換性のため);
言いたいことは、"Revert to safe unbinding of entities" ということで、安全じゃない、ブーリアン最適化というのを入れているようです.これに2日ぐらい無駄にした.. 上記エラーがあったら、このオプションを疑うべき.
gmsh==4.10.5¶
4.11.1と同様のバグがでる.
gmsh==4.9.5¶
4.11.1 と同様のエラーはでない(メッシュは切れる).
一方、モデルの複雑度(エンティティ数をあげて?)、複雑なブーリアンをきると、死ぬ.
ERROR : OpenCASCADE exception BRep_Tool:: TopoDS_vertex hasnt gp_Pnt.
意味的には、TopoDS_vertex という構造体がgp_Pnt(Geometry Point_Pointerを持っていない的なエラーか?)
つまり、gmshはもっていると期待しているが、OpenCascadeは持っていないといわれているということか.( 使うべき、versionがあってないということかもしれない.この場合、どうしようもない.)
対処できるとしたら、独立にコンパイルか? ( gmsh 4.9.5 で、openCACADE=7.5.0 etc. )
pipでインストールの場合、pipインストール時にopenCascadeの使用バージョンが規定されているはず.
pipでインスタントに確認するのは、不可能.
コンパイルしかない.