コンパック V.90 内蔵モデム コマンドコンパック V.90 内蔵モデム コマンド 1Œ1 1 モデム コマンドのガイドライン コマンドの入力 モデム
snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·...
Transcript of snappyHexMesh/cfMeshコマンドを 用いたメッシュ生成hirose/ockitatohoku/ref/03... ·...
snappyHexMesh/cfMeshコマンドを用いたメッシュ生成
若嶋振一郎(NIT, Ichinoseki College)
2017/5/21 1
初出: 2017/01/05更新: 2017/05/20
Outline
1. snappyHexMeshコマンドについて1. snappyHexMeshコマンドの概要と準備
2. snappyHexMeshコマンドの実行
2. cfMeshについて1. cfMeshパッケージの導入
2. cfMeshに含まれるコマンド
3. 準備
4. cfMeshコマンドの実行
2017/5/21 2
snappyHexMeshコマンド
• OpenFOAMに付属する非構造格子生成コマンド• blockMeshは構造格子を生成
• blockMeshと組み合わせて利用する
• しばしばsHMと省略形で引用
•基本的な流れ① blockMeshDictでベースメッシュ作成
② constant/triSurface以下に置いた形状ファイル(.stl, .obj, .vtkなど)から特徴線を抽出
③ 形状ファイル、特徴線データを用いてsystem/snappyHexMeshDictに記述した設定に従い、メッシュを生成
2017/5/21 3
sHMのしくみ
• CADソフトウェア等で、STLなどの形状ファイルを出力する(形状のどちら側にメッシュを張るかを確認しておく)
• blockMeshでベースメッシュを作成する(手動)
• snappyHexMeshの機能により、形状近傍のベースメッシュを細分化する(8分木法)
•領域外になる部分のセルを取り除く(ここまでで “castellate”の状態 )
•領域外に飛び出ているメッシュを形状に合わせる(“snap”)
•必要があれば境界層メッシュを挿入する(“addLayers”)
2017/5/21 4
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の組を複数作る)
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
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.) 以下であれば、その辺を特徴線とする
形状ファイル名を指定(複数の場合は、並べて記述)
Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike
③ blockMeshコマンドによるベースメッシュ生成
$ blockMesh
→ 手動でベースメッシュを生成
2017/5/21 8
Tutorial: $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike
④ snappyHexMeshコマンドの実行
→ system/snappyHexMeshDictで制御
→ 内部的なステップ
1. castellatedMesh ベースメッシュの細分化+必要部分の切り出し
2. snap メッシュの形状へのスナップ
3. addLayers 境界層メッシュの生成
2017/5/21 9
※ snappyHexMeshコマンド実行時に-overwriteオプションをつけない場合は、こ
れらの3つのステップでのメッシュの状態が、3つの時間レベルのデータフォルダに個別にメッシュが保存されます
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
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 つのステップのスイッチ
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など)でメッシュをリファインする領域も指定できる
2017/5/21 13
③ castellatedMesh/snap/addLyersの設定
// Settings for the castellatedMesh generation.castellatedMeshControls{
(別紙で説明)}
// Settings for the snapping.snapControls{
(別紙で説明)}
// Settings for the layer addition.addLayersControls{
(別紙で説明)}
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 (システム共通)
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;
sHMの実行のまとめ$ blockMesh
$ surfaceFeatureExtract
$ snappyHexMesh
⇒ 3つの実行ステップごとに、ステップで生成したメッシュが時刻ディレクトリに保存される。問題が無ければ0以外のディレクトリを削除して
$ snappyHexMesh –overwrite
として、上書きでメッシュ生成を行う
# すべてまっさらな状態から行うには、
$ foamCleanPolyMesh
メッシュのチェック
$ checkMesh
2017/5/21 16
sHM関連のトピックス(後日追記予定)
• 2Dメッシュの生成方法
• stl,obj形式について
2017/5/21 17
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
cfMeshの機能
•八分木法によるメッシュ生成(sHMと似ている)
• stlや基本的形状から細分化領域を指定できる
•自動境界適合メッシュ生成、テトラ、ヘキサ、ポリヘドラルメッシュ
•境界層メッシュ生成
•並列計算によるメッシュ生成
2017/5/21 19
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
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
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
※配布のものそのままでは、エラーになるものもあるようです
cfMeshによるメッシュ生成の流れ(cartesianMesh)
① stlファイルの準備• cfMeshは単独のstlファイルが必要
• ただし、stlファイルの中に、パッチ毎のsolidが含まれている状態
→ 面毎に名前がついており、パッチ名に対応する
例 tutorials/cartesianMesh/sawOctree/sav1.stl
2017/5/21 23
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 パッチ名
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
• surfaceFeatureEdges all.stl all.fms
• surfaceFeatureEdges all.stl all.fms –angle 0
2017/5/21 26
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
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;
別紙で説明
cfMesh利用時の注意点
cfMeshの「ベースメッシュ」は、セルサイズを指定することでx-y-z方向に直交格子が作られる
このため、対称性を考えた周期境界などを考えたい場合は、問題よっては、完全に対称性を加味できない場合がある→この場合は、ベースメッシュをblockMeshで作成するsHMのほうが有利な時がある
2017/5/21 29
以上で、snappyHexMesh/cfMeshに関するハンズオンセミナーは終了です。お疲れ様でした!
2017/5/21 30