👍

Salome:円柱の外側と内側でメッシュサイズを変える(6面体)

2022/11/07に公開

https://zenn.dev/shittoku_xxx/articles/f6516e470dbe5a

1.概要

この記事は図1-1のようなメッシュをSalome-Meca(ver.2021)で作成した際の記録です.


図1-1. 作りたいメッシュ

図1-1のように円柱の外側は細かく,内側は粗くメッシングしたい状況を考える.そしてそのメッシュを,なるべく6面体要素で構成したいとする.例えば下記のようにして,このような状況は達成できる.このようにして作成したメッシュは円柱の最中心以外は6面体要素になり,最中心はプリズム要素になる.

  • 円柱上部表面の外側と内側を別々のメッシュにするために領域分けする(2節)
  • 円柱上部表面の外側と内側で別々にメッシュを切って高さ方向に押し出す(3節)

2.形状作成:Geometoryモジュール

まずはGeometoryモジュールで3D形状を作成する.このとき,円柱を外側と内側で領域分けする.そして,領域分けした円柱の上部表面に面グループを作る.この面グループは内側の円と外側のドーナツ状の中空円に対して作る.下記でその手順を説明する.

2-1.円柱の外側と内側で領域分け:Partition

まずは,ベースとなる円柱を作成する.手順および設定は下記である(図2-1).

  • Create a cylinderをクリック
  • 作ったcylinderにNameを付ける(Nameは任意): Cylinder
  • 半径の入力, Radius: 50
  • 高さの入力, Height: 300


図2-1. ベースとなる円柱の作成

領域を分けるためにベース円柱よりも小さな円柱をもう一つ作る.手順および設定は下記である(図2-2)

  • Create a cylinderをクリック
  • 作ったcylinderにNameを付ける: Cylinder_inside(Nameは任意)
  • 半径の入力, Radius: 25
  • 高さの入力, Height: 300


図2-2. 領域分けのための円柱作成

円柱を内側と外側に分ける.手順および設定は下記である(図2-3).

  • Partitionをクリック
  • Partition分けされたObjectにNameを付ける: Cylinder_devided(Nameは任意)
  • Objects: Cylinder(ベースとなるObjects, ベース円柱を選択する)
  • Tool Objects: Cylinder_inside(Partition分けに使うObject, 内側の小さな円柱を選択する)

    図2-3. 領域分け実施

2-2.面グループの作成:Create Group

領域分けされた円柱に対し面グループを作る.まずは内側の円にNameを付ける.手順および設定は下記である(図2-4).

  • 領域分けされた円柱を選択(Cylinder_devidedを選択)
  • 右クリックからCreate Groupを選択
  • Shape Type: 面を選択
  • 内側の円にNameを付ける: top_in(Nameは任意)
  • Main Shapeに領域分けされた円柱が選択されていることを確認(Cylinder_devided)
  • 内側の円を選択してAddする


図2-4. 内側の円にNameを付ける(Group作成)

外側のドーナツ状の中空円にNameを付ける.手順および設定は下記である(図2-5).

  • 領域分けされた円柱を選択(Cylinder_devidedを選択)
  • 右クリックからCreate Groupを選択
  • Shape Type: 面を選択
  • 外側のドーナツ状の中空円にNameを付ける: top_out(Nameは任意)
  • Main Shapeに領域分けされた円柱が選択されていることを確認(Cylinder_devided)
  • 外側のドーナツ状の中空円を選択してAddする


図2-5. 外側のドーナツ状の中空円にNameを付ける(Group作成)

領域分けされた円柱の形状作成および,面Groupの作成はこれで完了である.次はMeshモジュールに移る.

3.メッシュ作成:Meshモジュール

Meshモジュールに移り,親メッシュ→サブメッシュの順に設定していく.親メッシュと全てのサブメッシュの設定が終わったらメッシュを計算する.

3-1.親メッシュの設定:押し出しメッシュ(Extrusion 3D)

まずは親メッシュの設定から.面の押し出しにより3Dメッシュを作成することを指定する.面の押し出しにより3Dメッシュを作成する場合は,「3D」の設定と「1D」の設定をする.手順および設定は下記である(図3-1, 3-2).まずは「3D」の設定から.

  • メッシュを切る対象(Geometry)を選択する:Cylinder_devidedを選択(領域分割された円柱)
  • Create a Meshをクリックし,メッシュの設定に移る.
  • 親メッシュにNameを付ける:Mesh_all(Nameは任意)
  • Geometryに親メッシュの形状(Cylinder_devided)が選択されていることを確認する.
  • 3Dの設定を行っていることを確認する.
  • AlgorithmはExtrusion 3Dをプルダウンから選択.


図3-1. 親メッシュの設定:3Dの設定

  • 1Dの設定に移る(図3-2).
  • AlgorithmはWire Discretisationを選択.
  • 歯車マークからNumber of Segmentsを選択(円柱の高さ方向の分割数を指定する項目).
  • 「分割数を指定する設定」にNameを付ける: Height_number(Nameは任意).
  • Number of Segments: 10(円柱の高さ方向が10層に分割される)


図3-2. 親メッシュの設定:1Dの設定

親メッシュの設定はこれで終わりである.次はサブメッシュの設定をする(円筒上面の2Dメッシュ設定).

3-2.外側サブメッシュの設定:内側軸投影4角形メッシュ(Quadrangle: Medial Axis Projection)

ここでは円筒上面の外側ドーナツ状の中空円に対し,図3-3のような中空の4角形メッシュを作るための設定を行う.このメッシュは親メッシュ(押し出で作成するメッシュ)のサブメッシュとして作成する.4角形メッシュを作るために「Quadrangle: Medial Axis Projection」というAlgorithmを使う.このAlgorithmは,川の流路のような形,またはその入口と出口が繋がった中空の環状形状に対し4角形メッシュを作成するときに便利なAlgorithmである(参考[1]).


図3-3. 作りたいメッシュ:外側ドーナツ状の中空円に対する4角形メッシュ

上記で説明したサブメッシュの設定をするための手順および設定は下記である(図3-4, 3-5).今回はAlgorithmとして「Quadrangle: Medial Axis Projection」を使用するが,「2D」と「1D」の2つの設定をする.まずは「2D」の設定から.

  • 親メッシュを選択:Mesh_allを選択
  • 右クリックからCreate Sub-meshを選択
  • Sub-meshにNameを付ける:mesh_out(Nameは任意)
  • Meshに親メッシュが選択されていることを確認する:Mesh_all
  • Geometoryとして円筒上面の外側ドーナツ状の中空円の面グループを選択:top_out
  • 「2D」の設定を行っていることを確認する.
  • AlgorithmはQuadrangle: Medial Axis Projectionを選択する.
  • 歯車マークからNumber of Layersを選択.
  • 「分割数を指定する設定」にNameを付ける:radial_out(Nameは任意)
  • Number of layers: 20(半径方向が20層に分割)


図3-4. 外側ドーナツ状の中空円に対するSub-meshの設定:2Dの設定

  • 「1D」の設定に移る.
  • MeshやGeometryの設定が「2D」の設定のときから変わっていないことを確認する.
  • AlgorithmはWire Discretisationを選択
  • 歯車マークからNumber of Segmentsを選択
  • 「分割数を指定する設定」にNameを付ける:circumference_out(Nameは任意)
  • Number of Segments:40(周方向が40個に分割)


図3-5. 外側ドーナツ状の中空円に対するSub-meshの設定:1Dの設定

これで外側ドーナツ状の中空円(円柱上部表面)に対するSub-meshの設定は終わりである.次は内側の円(円柱上部表面)に対するSub-meshの設定をする.

3-3.内側サブメッシュの設定:放射状4角形メッシュ(Radial Quadrangle 1D-2D)

ここでは円筒上面の内側の円に対し,図3-6のような4角形メッシュを作るための設定を行う.図3-6では外側のドーナツ状の中空円に対するメッシュも表示されてしまっているが,ここで行うのは内側の円に対する設定のみである.ドーナツ状の中空円に対して行ったように,このメッシュも親メッシュ(押し出で作成するメッシュ)のサブメッシュとして作成する.


図3-6. 作りたいメッシュ:内側の円に対する4角形メッシュと3角形メッシュ

4角形メッシュを作るために「Radial Quadrangle 1D-2D」というAlgorithmを使う.このAlgorithmは中身が詰まった円に対し,4角形メッシュを作成するときに便利なAlgorithmである(参考[2]).「Radial Quadrangle 1D-2D」を使った場合,最も中心に近い部分以外は4角形のメッシュが作成され,最も中心に近い部分は3角形のメッシュが作られる.

また,ここでは半径方向と周方向の分割数の指定をするが,周方向の分割数は自由に指定できないことに注意したい周方向の分割数は外側のドーナツ状中空円で指定した周方向の分割数と同じにしなければならない.そうしなければ,内側と外側の境界面で節点数の整合性がとれず,上手くメッシュが切れない.

だた,ver.2021のSalome-Mecaの場合は親切設計になっていて,このことについて後々警告文が出てくる.そしてその警告文のメッセージに従い設定を進めていけば,ユーザーが誤って異なる節点数を指定しても,整合性のとれたメッシュを作成してくれる.この警告文が出てきた後の設定の進め方は後述する.ver.2021よりも古いバージョンのSalome-Mecaにおいてもこのような親切な警告文が出てくるかは私は知らない(私はver.2021しか使ったことが無いため).

説明が長くなったが,上記で説明した内側のサブメッシュの設定をするための手順および設定は下記である(図3-7, 3-8).今回はAlgorithmとして「Radial Quadrangle 1D-2D」を使用するが,「2D」と「1D」の2つの設定をする.まずは「2D」の設定から.

  • 親メッシュを選択:Mesh_allを選択
  • 右クリックからCreate Sub-meshを選択
  • Sub-meshにNameを付ける:mesh_in(Nameは任意)
  • Meshに親メッシュが選択されていることを確認する:Mesh_all
  • Geometoryとして円筒上面の内側の円の面グループを選択:top_in
  • 「2D」の設定を行っていることを確認する.
  • AlgorithmはQuadrangle: Radial Quadrangle 1D-2Dを選択する.
  • 歯車マークからNumber of Layersを選択.
  • 「分割数を指定する設定」にNameを付ける:radial_in(Nameは任意)
  • Number of layers: 5(半径方向が5層に分割)


図3-7. 内側の円に対するSub-meshの設定:2Dの設定

  • 「1D」の設定に移る.
  • MeshやGeometryの設定が「2D」の設定のときから変わっていないことを確認する.
  • AlgorithmはWire Discretisationを選択
  • 歯車マークからNumber of Segmentsを選択
  • 「分割数を指定する設定」にNameを付ける:circumference_in(Nameは任意)
  • Number of Segments:40(周方向が40個に分割,外側のドーナツ状中空円の周方向の分割数と揃える


図3-8. 内側の円に対するSub-meshの設定:1Dの設定

ここまでで,親メッシュと全てのサブメッシュの設定は終わりである.

3-4.メッシュの計算

サブメッシュの計算→親メッシュの計算,の順番でメッシュを作成していく.まずは,外側のサブメッシュから作成する.その手順は下記である(図3-11).図3-11のようなメッシュが切れていれば目的のメッシュが作れている.

  • 外側のドーナツ状中空円のサブメッシュを選択:mesh_outを選択
  • 右クリックからCompute Sub-meshを選択.


図3-11. 外側のドーナツ状中空円のメッシュ生成

次は内側のサブメッシュを作成する.その手順は下記である(図3-12).図3-12のようなメッシュが切れていれば目的のメッシュが作れている.

  • 内側の円のサブメッシュを選択:mesh_inを選択
  • 右クリックからCompute Sub-meshを選択.


図3-12. 内側の円のメッシュ生成

円筒上面のサブメッシュが完成したので,このサブメッシュを押し出して親メッシュ(全体メッシュ)を作る.その手順は下記である(図3-13).図3-13のようなメッシュが切れていれば目的のメッシュが作れている.

  • 親メッシュを選択:Mesh_allを選択
  • 右クリックからComputeを選択.

    図3-13. 親メッシュ生成(全体メッシュ生成)

4.おまけ

上記手順で作成したメッシュは全て1次要素として作成される.モデル全てを2次要素に変換したい場合の手順および設定は下記である(図4-1).

  • 親メッシュを選択:Mesh_allを選択.
  • 右クリックからConvert to/from quadraticを選択.
  • Mesh or Sub-meshに親メッシュが選択されていることを確認:Mesh_all
  • Convert to quadraticを選択し,2次要素化する.


図4-1. モデル全てを2次要素に変換

最後に作ったモデルの要素数などを確認しておく.その手順は下記である(図4-2).モデル全体で10,000要素あり,そのうち9,600要素は6面体2次要素であることが分かる.プリズム2次要素は400個.ほとんど全て6面体でメッシュ作成することができた.


図4-2. モデル情報(存在する要素の種類,要素数,節点数など)

環境

・ver.2021, Salome-Meca
・Windows 10 Home

参考

[1]. Medial Axis Projection Quadrangle meshing algorithm(Salome Platform Documentation)
[2]. Radial Quadrangle 1D-2D(Salome Documentation)

Discussion