LoginSignup
2

More than 3 years have passed since last update.

OpenFOAMによるF1 Rear Wingの風洞解析 (1) メッシュ生成編

Last updated at Posted at 2020-08-25

目的

本記事では、snappyHexMesh + OpenFOAM v8 の組み合わせでの風洞数値実験を行うことを目的としています。
分量の関係から、前編(メッシュ生成)、後編(CFDの実行)に分けて解説していきます。

データの準備

Wing data

解析対象の3次元データを用意する必要があります。
今回はここからF1_2019_Rear_Wing.stpというデータをダウンロードし、解析にかけることにしました。

FreeCADで読み込みobj形式で出力しておきます。

wing.png

OpenFOAM case data

snappyHexMeshを使ったTutorial caseを以下のようにして作業ディレクトリに持ってきます。

cp $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ~/rearWing

ここではホームディレクトリにrearWingというディレクトリ名でコピーしています。

objファイルのデータ変換

ダウンロードしたobjファイルをconstantディレクトリ下に置きます:

~/rearWing/constant/triSurface/

今回のobjファイルはミリメーター単位で描かれていたため、メーター単位に変換します:

surfaceConvert -scale 0.001 rearWing.obj rearWing2.obj

特徴線の抽出

次いで、形状データの特徴線の抽出を行います。
そのためにはsurfaceFeaturesユーティリティを使用しますが、その設定ファイルを作業ディレクトリに持ってくる必要があります。

foamGet surfaceFeaturesDict

これで、surfaceFeaturesDictファイルがsystemフォルダ下にコピーされます。

surfaceFeaturesDict
surfaces ("rearWing2.obj");

// Identify a feature when angle between faces < includedAngle
includedAngle       150;

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

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

ここで重要なパラメータはincludedAngleになります。どの程度の値が良いのかは各形状データに依存します。

surfaceFeatures

なお,他ページをみるとsurfaceFeatureExtractという異なるユーティリティがありますが,これは古いユーティリティになるようで,of8以降はsurfaceFeaturesに移行していく模様です。

これで.eMeshファイルがconstant/triSurface/以下に作成されます。同ファイルはParaviewで直接開くことができないので、ここを参考に

surfaceFeatureConvert rearWing2.eMesh features.obj

のようにobjファイルに変換する必要があります。

features.png

Meshing

bockMesh

blockMesh.png

上図のようにblockを作成し、風洞空間(解析の系)を用意する必要があります。
そこで、surfaceCheckユーティリティを利用し、objファイルのサイズ(座標)を確認します。

surfaceCheck rearWing.obj -blockMesh > blockData
blockDataの中身
Statistics:
Triangles    : 62704
Vertices     : 31348
Bounding Box : (-0.519 -0.109139 -0.000233722) (0.519 0.693148 0.67)

// blockMeshDict info

vertices
(
    (-0.519 -0.109139 -0.000233722)
    (0.519 -0.109139 -0.000233722)
    (0.519 0.693148 -0.000233722)
    (-0.519 0.693148 -0.000233722)
    (-0.519 -0.109139 0.67)
    (0.519 -0.109139 0.67)
    (0.519 0.693148 0.67)
    (-0.519 0.693148 0.67)
);

この座標データを参考にblockMeshDictを編集します。今回は、以下のようにverticesを修正しました。

blockMeshDict
vertices
(
    (-3.519 -10.109139 -2.000233722)
    (3.519 -10.109139 -2.000233722)
    (3.519 6.693148 -2.000233722)
    (-3.519 6.693148 -2.000233722)
    (-3.519 -10.109139 2.87)
    (3.519 -10.109139 2.87)
    (3.519 6.693148 2.87)
    (-3.519 6.693148 2.87)
);

snappyHexMesh

次いで、snappyHexMeshを実行するのですが、元あるsnappyHexMeshDictのファイル(古いバージョンの入力ファイル。v8でも問題なく動く)を使うのではなく、新たにv8の設定ファイルを持ってくることにします。書式が若干変わっています。

foamGet snappyHexMeshDict

設定は多岐にわたっており、全てを言及するのが(分量的に)困難なため、ここでは、修正ポイントのみを説明します。

snappyHexMeshDict/geometry
geometry
{
    rearWing
    {
        type triSurfaceMesh;
        file "rearWing.obj";
    }
};
snappyHexMeshDict/castellatedMeshControls
    features
    (
       { file "rearWing.eMesh"; level 6; }
    );
snappyHexMeshDict/castellatedMeshControls
    refinementSurfaces
    {
        rearWing
        {
            level (5 6);
            patchInfo { type wall; }
        }
    }
snappyHexMeshDict/castellatedMeshControls
    refinementRegions
    {
        rearWing
        {
            mode inside;
            levels ((1E15 6));
        }
    }
snappyHexMeshDict/addLayersControls
    layers
    {
        rearWing
        {
            nSurfaceLayers 3;
        }
    }

上記のサンプルではウィングモデルをrearWingと名付けています。修正箇所は、デフォルトで入っているモデル名を、このrearWingに変更すれば良いです(境界層メッシュ等の設定はここでは言及しません)。

ここまでできれば、あとはsnappyHexMeshを実行すればよいのですが、メッシュ生成にそれなりに時間を要するため、並列処理(decomposePar)を行うことにします。snappyHexMeshDictの時と同様に、

foamGet decomposeParDict

で設定ファイルを持ってきます。種々の分割方法が用意されていますが、ここではscotchを使用することにします。

decomposeParDict
numberOfSubdomains 4;
method scotch;

その後、領域分割を行い、snappyHexMeshを並列で実行します。

分割
decomposePar
snappyHexMeshの並列処理
foamJob -p snappyHexMesh
meshの再構築
reconstructParMesh

heckMeshをしてfalseがなければ、メッシュ作成はこれで完了です。
お疲れさまでした!! (メッシュが粗い、品質が良くない、というのはご容赦ください・・・)

mesh.png

まとめ

メッシュ生成から解析までの流れを一つの記事でまとめるつもりでいましたが、記事が長くなりましたので、解析は後編というかたちでまとめたいと思います。
実際、メッシュ生成といっても、今回はほぼデフォルトのままですので、snappyHexMeshの細かな設定(レイヤーやメッシュの細かさなど)は操作できずにいます。そのあたりは改めて確認したいと思っています。

私はこれまで商用メッシャーばかりを使ってきていて、オープンソースのメッシャーがどこまで切れるのか知りませんでした。思いの外、切れるなというのが今回の感想になります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2