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でインスタントに確認するのは、不可能.

    • コンパイルしかない.