snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·...

30
snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成 若嶋 振一郎(NIT, Ichinoseki College) [email protected] 2017/5/21 1 初出: 2017/01/05 更新: 2017/05/20

Transcript of snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·...

Page 1: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

snappyHexMesh/cfMeshコマンドを用いたメッシュ生成

若嶋振一郎(NIT, Ichinoseki College)

[email protected]

2017/5/21 1

初出: 2017/01/05更新: 2017/05/20

Page 2: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

Outline

1. snappyHexMeshコマンドについて1. snappyHexMeshコマンドの概要と準備

2. snappyHexMeshコマンドの実行

2. cfMeshについて1. cfMeshパッケージの導入

2. cfMeshに含まれるコマンド

3. 準備

4. cfMeshコマンドの実行

2017/5/21 2

Page 3: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

snappyHexMeshコマンド

• OpenFOAMに付属する非構造格子生成コマンド• blockMeshは構造格子を生成

• blockMeshと組み合わせて利用する

• しばしばsHMと省略形で引用

•基本的な流れ① blockMeshDictでベースメッシュ作成

② constant/triSurface以下に置いた形状ファイル(.stl, .obj, .vtkなど)から特徴線を抽出

③ 形状ファイル、特徴線データを用いてsystem/snappyHexMeshDictに記述した設定に従い、メッシュを生成

2017/5/21 3

Page 4: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

sHMのしくみ

• CADソフトウェア等で、STLなどの形状ファイルを出力する(形状のどちら側にメッシュを張るかを確認しておく)

• blockMeshでベースメッシュを作成する(手動)

• snappyHexMeshの機能により、形状近傍のベースメッシュを細分化する(8分木法)

•領域外になる部分のセルを取り除く(ここまでで “castellate”の状態 )

•領域外に飛び出ているメッシュを形状に合わせる(“snap”)

•必要があれば境界層メッシュを挿入する(“addLayers”)

2017/5/21 4

Page 5: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike

①形状データは三角形の表面メッシュ(STL, OBJ, VTK形式)ファイルを用意し、constant/triSurface/に置きます

$ cp $FOAM_TUTORIALS/resources/geometry/motorBike.obj.gz constant/triSurface

$ gunzip constant/triSurface/motorBike.obj.gz (gzip形式を解凍)

$ paraview constant/triSurface/motorBike.obj

2017/5/21 5

※ STLファイルなどで、形状のある部分をパッチとして境界条件の指定に使いたい場合は、個別のstlファイルとして出力して個別にしていするか、それらを1つのstlにまとめておく(solid ~endsolidの組を複数作る)

Page 6: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike

② surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定ファイルsystem/surfaceFeatureExtractDict)

$ surfaceFeatureExtract

→ constant/extendedFeatureEdgeMesh以下にobj形式の形で特徴線形状データが生成。さらにextendedFeatureEdgeMeshファイルも生成

→more motorBike.extendedFeatureEdgeMeshを用いて、constant/triSurfaceの下に.eMesh形式の特徴線データを出力

→この.eMesh形式ファイルをsnappyHexMeshDict内で記述し、特徴線のデータをメッシュ生成に利用

2017/5/21 6

Page 7: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

system/surfaceFeatureExtractmotorBike.obj{

// How to obtain raw features (extractFromFile || extractFromSurface)extractionMethod extractFromSurface;

extractFromSurfaceCoeffs{

// Mark edges whose adjacent surface normals are at an angle less// than includedAngle as features// - 0 : selects no edges// - 180: selects all edgesincludedAngle 150;

}

subsetFeatures{

// Keep nonManifold edges (edges with >2 connected faces)nonManifoldEdges no;

// Keep open edges (edges with 1 connected face)openEdges yes;

}

// Write options

// Write features to obj format for postprocessingwriteObj yes;

}

// ************************************************************************* //

2017/5/21 7

面と面が作る角度が includedAngle(deg.) 以下であれば、その辺を特徴線とする

形状ファイル名を指定(複数の場合は、並べて記述)

Page 8: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike

③ blockMeshコマンドによるベースメッシュ生成

$ blockMesh

→ 手動でベースメッシュを生成

2017/5/21 8

Page 9: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike

④ snappyHexMeshコマンドの実行

→ system/snappyHexMeshDictで制御

→ 内部的なステップ

1. castellatedMesh ベースメッシュの細分化+必要部分の切り出し

2. snap メッシュの形状へのスナップ

3. addLayers 境界層メッシュの生成

2017/5/21 9

※ snappyHexMeshコマンド実行時に-overwriteオプションをつけない場合は、こ

れらの3つのステップでのメッシュの状態が、3つの時間レベルのデータフォルダに個別にメッシュが保存されます

Page 10: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike

$ snappyHexMesh ・・・・ かなり時間がかかる

$ ls

0.orig 1 2 3 Allclean Allrun constant system

$ paraFoam & 各時間のメッシュを確認してみる(バイクカウル部の垂直断面図)

2017/5/21 10

1:castlletedMesh 2:snap 3:addLayers

Page 11: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

snappyHexMeshDict

• https://cfd.direct/openfoam/user-guide/snappyhexmesh/に詳述

• snappyHexMeshDict(300行!)の構造を順に確認してみる

2017/5/21 11

// Which of the steps to runcastellatedMesh true;snap true;addLayers true;

① 3 つのステップのスイッチ

Page 12: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

2017/5/21 12

②形状の記述

// Geometry. Definition of all surfaces. All surfaces are of class// searchableSurface.// Surfaces are used// - to specify refinement for any mesh cell intersecting it// - to specify refinement for any mesh cell inside/outside/near// - to 'snap' the mesh boundary to the surfacegeometry{

motorBike.obj{

type triSurfaceMesh;name motorBike;

}

refinementBox{

type searchableBox;min (-1.0 -0.7 0.0);max ( 8.0 0.7 2.5);

}};

objやstlファイルを記述し、ここではそのsurfaceにmotorBikeというパッチ名をつける

特定の領域(BOXやCYRINDERなど)でメッシュをリファインする領域も指定できる

Page 13: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

2017/5/21 13

③ castellatedMesh/snap/addLyersの設定

// Settings for the castellatedMesh generation.castellatedMeshControls{

(別紙で説明)}

// Settings for the snapping.snapControls{

(別紙で説明)}

// Settings for the layer addition.addLayersControls{

(別紙で説明)}

Page 14: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

2017/5/21 14

④ MeshQualityControlの設定

meshQualityControls{

#include "meshQualityDict"

// Advanced

//- Number of error distribution iterationsnSmoothScale 4;//- Amount to scale back displacement at error pointserrorReduction 0.75;

}

// Include defaults parameters from master dictionary#includeEtc "caseDicts/meshQualityDict“

//- minFaceWeight (0 -> 0.5)minFaceWeight 0.02;

OpenFOAM-4.x/etc/caseDicts/meshQualityDict (システム共通)

Page 15: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

2017/5/21 15

⑤ Advanced部分の設定(経験的にあまり弄ることはない)

// Advanced

// Write flagswriteFlags(

scalarLevelslayerSetslayerFields // write volScalarField for layer coverage

);

// Merge tolerance. Is fraction of overall bounding box of initial mesh.// Note: the write tolerance needs to be higher than this.mergeTolerance 1e-6;

Page 16: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

sHMの実行のまとめ$ blockMesh

$ surfaceFeatureExtract

$ snappyHexMesh

⇒ 3つの実行ステップごとに、ステップで生成したメッシュが時刻ディレクトリに保存される。問題が無ければ0以外のディレクトリを削除して

$ snappyHexMesh –overwrite

として、上書きでメッシュ生成を行う

# すべてまっさらな状態から行うには、

$ foamCleanPolyMesh

メッシュのチェック

$ checkMesh

2017/5/21 16

Page 17: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

sHM関連のトピックス(後日追記予定)

• 2Dメッシュの生成方法

• stl,obj形式について

2017/5/21 17

Page 18: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMesh(A library for polyhedral mesh generation )

• Creative Fields(http://cfMesh.com)で開発中

•商用版のcfMeshPro([email protected])と無償版cfMesh(1.1.2)の2つがある(機能的には当然Pro版が最新実装)

•無償版cfMeshはsourceforgeでソースが公開(GPL)• https://sourceforge.net/p/cfmesh/code/ci/v1.1.2/tree/

• sHMと同様の機能を有するが、コマンドツール群という位置づけ

2017/5/21 18

Page 19: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMeshの機能

•八分木法によるメッシュ生成(sHMと似ている)

• stlや基本的形状から細分化領域を指定できる

•自動境界適合メッシュ生成、テトラ、ヘキサ、ポリヘドラルメッシュ

•境界層メッシュ生成

•並列計算によるメッシュ生成

2017/5/21 19

Page 20: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

download & install

$ cd of-4.x (ユーザーフォルダ)

$ git clone https://git.code.sf.net/p/cfmesh/code cfmesh-devel

$ cd cfmesh-devel

$ ./Allwmake (OF4.xの導入済みであること)

インストール後の更新

$ cd cfmesh-devel

$ git pull

$ ./Allwmake

2017/5/21 20

Page 21: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMeshにより導入されるコマンド(24個)• FLMAToSurface• FMSToSurface• FMSToVTK• cartesian2DMesh• cartesianMesh• checkSurfaceMesh• copySurfaceParts• generateBoundaryLayers• importSurfaceAsSubset• improveMeshQuality• improveSymmetryPlanes• mergeSurfacePatches

• meshToFPMA• pMesh• patchesToSubsets• preparePar• removeSurfaceFacets• scaleMesh• scaleSurfaceMesh• subsetToPatch• surfaceFeatureEdges• surfaceGenerateBoundingBox• surfaceToFMS• tetMesh

2017/5/21 21

Page 22: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMeshに含まれるtutorial$ tree -L 2 ..├── cartesian2DMesh│ └── hatOctree├── cartesianMesh│ ├── asmoOctree│ ├── bunnyOctree│ ├── elbow_90degree│ ├── intakePortOctree│ ├── multipleOrifices│ ├── sBendOctree│ ├── sawOctree│ ├── ship5415Octree│ └── singleOrifice├── pMesh│ ├── bunnyPoly│ └── multipleOrifices└── tetMesh

├── cutCubeOctree└── socketOctree

2017/5/21 22

※配布のものそのままでは、エラーになるものもあるようです

Page 23: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMeshによるメッシュ生成の流れ(cartesianMesh)

① stlファイルの準備• cfMeshは単独のstlファイルが必要

• ただし、stlファイルの中に、パッチ毎のsolidが含まれている状態

→ 面毎に名前がついており、パッチ名に対応する

例 tutorials/cartesianMesh/sawOctree/sav1.stl

2017/5/21 23

Page 24: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

stlファイルの構造solid patch000

facet normal 0.811072 -0.468654 0.350037

outer loop

vertex 4.76676 10.8144 51.1671

vertex 4.64955 10.8767 51.5221

vertex 4.59512 10.6202 51.3048

endloop

endfacet

・・・

endsolid patch000

solid patch001

facet ...

endsolid patch001

:

2017/5/21 24

三角形(facet)のデータ

solid パッチ名

Page 25: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMeshによるメッシュ生成の流れ(cartesianMesh)

②特徴線の抽出(.fmsファイルの作成)• sHMと同様に特徴線を抽出し、メッシュ生成に利用する(無くてもよい)

• もとの形状データ+特徴線データを1つのファイルに出力する

• 特徴線を含んだ形に変更するためには,下記のコマンドを実行する。(引数は入力ファイル名と出力ファイル名)$ surfaceFeatureEdges sav1.stl sav1withFeature.stl

• 出力ファイルの拡張子をfmsにすることで,cfMeshのファイル形式で出力される(fms形式のほうが精度が良い) angleオプションをつけるべし$ surfaceFeatureEdges sav1.stl sav1withFeature.fms –angle 0

2017/5/21 25

Page 26: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

• surfaceFeatureEdges all.stl all.fms

• surfaceFeatureEdges all.stl all.fms –angle 0

2017/5/21 26

Page 27: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMeshによるメッシュ生成の流れ(cartesianMesh)

③ cartesianMeshの実行• system/meshDictを設定

• 特徴線を含んだ形に変更するためには,下記のコマンドを実行する。(引数は入力ファイル名と出力ファイル名)$ surfaceFeatureEdges sav1.stl sav1Feature.stl

• 出力ファイルの拡張子をfmsにすることで,cfMeshのファイル形式で出力される(fms形式のほうが精度が良い) angleオプションをつけるべし$ surfaceFeatureEdges sav1.stl sav1Feature.fms –angle 0

2017/5/21 27

Page 28: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

system/meshDict

2017/5/21 28

surfaceFile “mesh.fms”; 形状ファイル(stl, fms形式)maxCellSize 10.0; 最大セルサイズ(絶対値指定)boundaryCellSize 1.0; 境界層セルサイズ(option)boundaryCellSizeRefinementThickness 1.0; 境界層厚さ(option)minCellSize 1.0; 最小セルサイズ(option)

boundaryLayers { } 境界層の設定ブロックlocalRefinement { } パッチ名によるリファイン設定surfaceMeshRefinement { } サーフェスのリファイン設定edgeMeshRefinement { } エッジベースのリファイン設定objectRefinements { } オブジェクトによるリファイン設定anisotropicSources { } 異方性メッシュの設定renameBoundary { } パッチ名の変更workflowControls { } コントロール

keepCellsIntersectingBoundary 1;checkGluedMesh 0;enforceGeometryConstraints 1;

別紙で説明

Page 29: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

cfMesh利用時の注意点

cfMeshの「ベースメッシュ」は、セルサイズを指定することでx-y-z方向に直交格子が作られる

このため、対称性を考えた周期境界などを考えたい場合は、問題よっては、完全に対称性を加味できない場合がある→この場合は、ベースメッシュをblockMeshで作成するsHMのほうが有利な時がある

2017/5/21 29

Page 30: snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·  · 2017-05-21Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ②surfaceFeatureExtractコマンドによる特徴線の抽出を実施(設定

以上で、snappyHexMesh/cfMeshに関するハンズオンセミナーは終了です。お疲れ様でした!

2017/5/21 30