旋回流のメッシュ作成法

645 views
Skip to first unread message

川上親久

unread,
Dec 1, 2014, 4:31:31 AM12/1/14
to open...@googlegroups.com
こんにちは.
OpenFOAMの初心者です.

旋回流の数値計算を試みています.

CADを用いて流れ場のメッシュの作成を考えているのですが,
CADデータ作成後の流れが分からず困っております.

snappyHexMesh等による方法も考えましたが,
詳しい文献等が見当たりませんでした.

CAD(使用したCADソフトはcreoparametric)を使ったメッシュの作成法をどなたかご教授いただけますでしょうか.

旋回流を発生させるカップと流れ場のCADで作成した概形を添付ファイルに掲載させていただきます.

よろしくお願いいたします.
添付図1.docx

ohbuchi

unread,
Dec 2, 2014, 6:30:57 PM12/2/14
to open...@googlegroups.com
どのツールでメッシュを切るかによって作業手順は異なります。
snappyHexMeshを使うことを前提にすると、まずCADデータをSTLに変換(大抵のCADでエクスポート可能)します。
次に、snappyHexMeshDictを編集します。手で編集することもできますが、最近ではswiftSnapという便利なツール
があり、その使い方が下記ページに解説されています。
http://mogura7.zenno.info/~et/wordpress/ocse/?p=613
http://mogura7.zenno.info/~et/wordpress/ocse/?p=852

他にHelyxOSもあります。検索してみて下さい。


kwck

unread,
Dec 3, 2014, 12:53:43 AM12/3/14
to open...@googlegroups.com
ohbuchi様


snappyHexMeshによる方法でメッシュを作成しようと思います.

不慣れなものですので,また質問をさせていただくかもしれません.

ご教授ありがとうございました.

追伸 snappyHexMeshによる方法が詳しく説明されてあるサイト等ご存知でしたら教えていただけないでしょうか.

ohbuchi

unread,
Dec 3, 2014, 1:18:28 AM12/3/14
to open...@googlegroups.com
snappyHexMeshについては、下記を参照してください。

http://openfoamwiki.net/index.php/SnappyHexMesh
特に、上記でリンクのあるsnappyWikiが詳しいと思います。
https://sites.google.com/site/snappywiki/

Genoa大学のSummer Courseも解りやすいです。
http://www.dicat.unige.it/guerrero/of2014b/4_2meshing.pdf
このサイトからサンプルデータも入手できます。

OpenCAE初心者勉強会のページにも過去にSnappyについての資料があったと記憶しています。
探してみて下さい。
http://www.opencae.jp/wiki/OpenCAE-User-Group-archive
http://opencae.gifu-nct.ac.jp/pukiwiki/index.php?%A5%AA%A1%BC%A5%D7%A5%F3%A3%C3%A3%C1%A3%C5%BD%E9%BF%B4%BC%D4%CA%D9%B6%AF%B2%F1



2014年12月3日水曜日 14時53分43秒 UTC+9 kwck:

kwck

unread,
Dec 3, 2014, 1:44:30 AM12/3/14
to open...@googlegroups.com
ohbuchi様

貴重な資料を教えてくださり,ありがとうございます.

ネットで探してもなかなか見つからない初見の資料ばかりでした.

これで停滞していた研究が前進しそうです.ありがとうございました.

kwck

unread,
Dec 4, 2014, 2:29:44 AM12/4/14
to open...@googlegroups.com
snappyHexMeshでファイルを作成して実行したところエラーが表示されました.

始めてsnappyHexMeshを使ったためファイルの設定が間違えている可能性が高いのですが,
どこがおかしいのか把握できずにおります.

stlファイルはtriSurface内にしっかり入れています.

snappyHexMeshDict編集で参考にしたサイトは以下のサイトです.
http://opencfd.jimdo.com/%E3%83%97%E3%83%AC%E5%87%A6%E7%90%86/snappyhexmesh/

どなたかご指摘くだされば幸いです.よろしくお願いいたします.

------------------------------snappyHexMeshDictの記述-------------------------------

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.1.1                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Which of the steps to run
castellatedMesh true; 
snap            true;
addLayers       true;

// 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 surface
geometry
{
    vortex_base.stl      //CADで作成したSTLファイル名
    {
        type triSurfaceMesh;
        name vortex_base;   //CADで作成したSTLファイル名
    }

    /*refinementBox
    {
        type searchableBox;
        min (-1.0 -0.7 0.0);
        max ( 8.0  0.7 2.5);
    }*/
};

// メッシュ細分の設定
castellatedMeshControls
{
  //プロセッサあたりの最大格子数
    maxLocalCells 100000;

    // 全体の最大格子数
    // この値を超えると細分は行われない
    // 表面形状内の格子除去前の格子数もこの数値が適用される。
    maxGlobalCells 2000000;

    // 細分される格子の最小数
    // 細分可能な格子数がこの値以下になると細分を止める。
    minRefinementCells 10;

    // 細分によって生じるアンバランスを許容するレベルの設定?
    maxLoadUnbalance 0.10;

    // 細分レベルが異なる格子間のバッファレイヤ数
    // 大きな値をとると格子数が多くなる
    // 値が小さすぎると界面フィットしたときに不十分になる
    nCellsBetweenLevels 2;

  // 特徴線の定義ファイルの指定と、特徴線周りの細分レベルの設定
    features
    (
        {
            file "vortex_base.eMesh";   //CADで作成したデータ
            level 3;
        }
    );

  // 表面ベースの細分
    refinementSurfaces
    {
        vortex_base             //CADで作成したデータ
        {
            // 表面ベースの細分設定(最小レベル、最大レベル)
            level (1 1);
        }
    }

    // 解像する角度。この角度以上で交差していれば特徴線と見なす。
    resolveFeatureAngle 60;

    // Region-wise refinement
    // ~~~~~~~~~~~~~~~~~~~~~~

    // Specifies refinement level for cells in relation to a surface. One of
    // three modes
    // - distance. 'levels' specifies per distance to the surface the
    //   wanted refinement level. The distances need to be specified in
    //   descending order.
    // - inside. 'levels' is only one entry and only the level is used. All
    //   cells inside the surface get refined up to the level. The surface
    //   needs to be closed for this to be possible.
    // - outside. Same but cells outside.

/*    refinementRegions
    {
        refinementBox
        {
            mode inside;
            levels ((1E15 4));
        }
    }*/

    // Mesh selection
    // ~~~~~~~~~~~~~~

    //格子内分点の定義
  //この点を含んでいる領域が解析対象となる
  //格子の面上や頂点に来てはいけない。必ず格子内に置く
    locationInMesh (3 3 0.43);

    // Whether any faceZones (as specified in the refinementSurfaces)
    // are only on the boundary of corresponding cellZones or also allow
    // free-standing zone faces. Not used if there are no faceZones.
    allowFreeStandingZoneFaces true;
}

// Settings for the snapping.
snapControls
{
    //境界におけるパッチの平滑化処理の反復回数
    nSmoothPatch 3;

    //表面形状へフィットする際に許容される移動距離の比
    tolerance 4.0;

    //格子置換時の緩和計算の回数
    nSolveIter 30;

    //格子の界面フィッティングの緩和計算の回数
    nRelaxIter 5;

    //特徴線の界面フィッティング
    //特徴線の界面フィッティング計算の回数
    nFeatureSnapIter 10;

  //表面サンプリングによる特徴線の検出、デフォルトはfaulse
    implicitFeatureSnap true;
  
    //細分化の際に特徴線を使う、デフォルトはtrue
    explicitFeatureSnap true;

    multiRegionFeatureSnap;
}

// 境界層メッシュ作成の設定
addLayersControls
{
    // レイヤ厚さの設定
    // レイヤ外部の変形していない格子の大きさに対して
    // 相対値(true)か、絶対値(false)か
    relativeSizes true;

    // 付加するレイヤの定義
    layers
    {
        "(lowerWall|vortex_base).*"
        {
            nSurfaceLayers 1;     // 付加するレイヤ数
        }
    }

    // Expansion factor for layer mesh
    expansionRatio 1.0;

    //- Wanted thickness of final added cell layer. If multiple layers
    //  is the
    //  thickness of the layer furthest away from the wall.
    //  Relative to undistorted size of cell outside layer.
    //  is the thickness of the layer furthest away from the wall.
    //  See relativeSizes parameter.
    finalLayerThickness 0.5;

    //- Minimum thickness of cell layer. If for any reason layer
    //  cannot be above minThickness do not add layer.
    //  Relative to undistorted size of cell outside layer.
    minThickness 0.25;

    //- If points get not extruded do nGrow layers of connected faces that are
    //  also not grown. This helps convergence of the layer addition process
    //  close to features.
    // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x)
    nGrow 0;

    // Advanced settings

    //- When not to extrude surface. 0 is flat surface, 90 is when two faces
    //  make straight angle.
    featureAngle 360;

    //- Maximum number of snapping relaxation iterations. Should stop
    //  before upon reaching a correct mesh.
    nRelaxIter 3;

    // Number of smoothing iterations of surface normals
    nSmoothSurfaceNormals 1;

    // Number of smoothing iterations of interior mesh movement direction
    nSmoothNormals 3;

    // Smooth layer thickness over surface patches
    nSmoothThickness 10;

    // Stop layer growth on highly warped cells
    maxFaceThicknessRatio 0.3;

    // Reduce layer growth where ratio thickness to medial
    // distance is large
    maxThicknessToMedialRatio 0.3;

    // Angle used to pick up medial axis points
    // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 in 17x.
    minMedianAxisAngle 90;


    // Create buffer region for new layer terminations
    nBufferCellsNoExtrude 0;


    // Overall max number of layer addition iterations. The mesher will exit
    // if it reaches this number of iterations; possibly with an illegal
    // mesh.
    nLayerIter 50;
}

// メッシュ品質の設定(基本的に変更なしで)
meshQualityControls
{
    //- Maximum non-orthogonality allowed. Set to 180 to disable.
    maxNonOrtho 65;

    //- Max skewness allowed. Set to <0 to disable.
    maxBoundarySkewness 20;
    maxInternalSkewness 4;

    //- Max concaveness allowed. Is angle (in degrees) below which concavity
    //  is allowed. 0 is straight face, <0 would be convex face.
    //  Set to 180 to disable.
    maxConcave 80;

    //- Minimum pyramid volume. Is absolute volume of cell pyramid.
    //  Set to a sensible fraction of the smallest cell volume expected.
    //  Set to very negative number (e.g. -1E30) to disable.
    minVol 1e-13;

    //- Minimum quality of the tet formed by the face-centre
    //  and variable base point minimum decomposition triangles and
    //  the cell centre. This has to be a positive number for tracking
    //  to work. Set to very negative number (e.g. -1E30) to
    //  disable.
    //     <0 = inside out tet,
    //      0 = flat tet
    //      1 = regular tet
    minTetQuality 1e-30;

    //- Minimum face area. Set to <0 to disable.
    minArea -1;

    //- Minimum face twist. Set to <-1 to disable. dot product of face normal
    //- and face centre triangles normal
    minTwist 0.02;

    //- minimum normalised cell determinant
    //- 1 = hex, <= 0 = folded or flattened illegal cell
    minDeterminant 0.001;

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

    //- minVolRatio (0 -> 1)
    minVolRatio 0.01;

    //must be >0 for Fluent compatibility
    minTriangleTwist -1;

    // Advanced

    //- Number of error distribution iterations
    nSmoothScale 4;
    //- amount to scale back displacement at error points
    errorReduction 0.75;
}

// アドバンスド設定
 
// 結果を出力する際のオプション設定
// 0:最終的なメッシュを出力するだけ
// 1:変換途中のメッシュも出力する
// 2:セルレベルのスカラー値を付けて出力する
// 4:途中の.objファイルも出力する
debug 0;

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

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

ohbuchi

unread,
Dec 4, 2014, 4:54:41 AM12/4/14
to open...@googlegroups.com
まずはエラーメッセージの内容を注意深く読んでみましょう。
大抵の場合、そこに良いヒントがあります。


2014年12月4日木曜日 16時29分44秒 UTC+9 kwck:

kwck

unread,
Dec 5, 2014, 2:51:48 AM12/5/14
to open...@googlegroups.com
ohbuchi様

エラー内容を読んで確認してみます.

ご指摘ありがとうございました.

大渕真志

unread,
Dec 5, 2014, 3:02:53 AM12/5/14
to open...@googlegroups.com
解らなかったら、エラーメッセージを提示して下さい。


iPhoneから送信

2014/12/05 16:51、kwck <kwc...@gmail.com> のメッセージ:

ohbuchi様

エラー内容を読んで確認してみます.

ご指摘ありがとうございました.

--
このメールは Google グループのグループ「OpenFOAM」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには openfoam+u...@googlegroups.com にメールを送信してください。
このグループに投稿するには open...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/openfoam からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

kwck

unread,
Dec 5, 2014, 4:06:10 AM12/5/14
to open...@googlegroups.com
ohbuchi様

和訳してみましたが,まったく意味が理解で来ませんでした.

以下のようなエラー表示が出ました.

あと,もう一件質問があるのですが,エラー中にある「line 182」といった表示は
ディクショナリ(今回はsnappyHexMeshDict)の182行目のことだと解釈しているのですが,
ディクショナリ中の行番号を簡単に確認する方法はあるのでしょうか.

私は最上行から「1行目,2行目,3行目...」と地道に数えて確認しています.


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Create mesh for time = 0

Read mesh in = 0.02 s


--> FOAM FATAL IO ERROR:
"ill defined primitiveEntry starting at keyword '     ' on line 182 and ending at line 327"

file: /home/sakurajima/OpenFOAM/sakurajima-2.3.0/run/study/12/1/system/snappyHexMeshDict at line 327.

    From function primitiveEntry::readEntry(const dictionary&, Istream&)
    in file lnInclude/IOerror.C at line 132.

FOAM exiting

ohbuchi

unread,
Dec 5, 2014, 6:41:08 AM12/5/14
to open...@googlegroups.com
ファイルに全角のスペースなどが入っていませんか?
コメント内以外に全角文字があるとエラーになります。


2014年12月5日金曜日 18時06分10秒 UTC+9 kwck:

kwck

unread,
Dec 5, 2014, 10:22:16 PM12/5/14
to open...@googlegroups.com
ohbuchi様

全角文字がないか確認しましたが,ありませんでした.

試しにtutorialsのmotorbikeをコピーして別のファイル(名前はsnappy_tutorial)に移して実行したところ
以下のエラーが出てしまいました.

tutorialでもエラーが出てしまうためどこがおかしいのか検討がつかずにおります.

-----------------------------------------------------------------------------------------
Create time




--> FOAM FATAL IO ERROR:
cannot find file

file: /home/snappy_tutorial/system/controlDict at line 0.

    From function regIOobject::readStream()
    in file db/regIOobject/regIOobjectRead.C at line 73.

FOAM exiting

大渕真志

unread,
Dec 6, 2014, 12:05:11 AM12/6/14
to open...@googlegroups.com
チュートリアルが動作しないという事はビルドが完了していないのでしょう。しかしエラーメッセージはディクショナリファイルに問題があると言ってます。



2014年12月6日土曜日、kwck<kwc...@gmail.com>さんは書きました:

kwck

unread,
Dec 7, 2014, 11:57:59 PM12/7/14
to open...@googlegroups.com
ohbuchi様

以下の方法でチュートリアルを実行しました.

どこか操作法で問題があるのでしょうか.

-----------------------------------------------------------------------------------------------------------------------
1. tutorials/mesh/snappyHexMesh内にあるmotorBikeをコピー
   ※motorBikeファイルの右下に黒色の矢印が表示されています
2. 新しいファイルフォルダを作る
2. 新しいフォルダ内(名前はtestとしました)に貼り付ける
 ※ファイルではなくエディタが貼り付けられています.右下には鍵のマークがあります.
3. コマンドでblockMeshを実行する
4. ファイルが見つからないとのエラーが出る

  --> FOAM FATAL IO ERROR:
cannot find file

file: (...省略)/OpenFOAM/test/system/controlDict at line 0.

ohbuchi

unread,
Dec 8, 2014, 1:07:16 AM12/8/14
to open...@googlegroups.com
お使いの環境が何なのかわからないのでご指摘の操作が正しいか解らないのですが、
一般的には、ターミナル内で以下の様にコマンドを実行します。

cp -r $WM_PROJECT_DIR/tutorials/incompressible/simpleFoam/motorBike ./test
cd test
blockMesh


2014年12月8日月曜日 13時57分59秒 UTC+9 kwck:

kwck

unread,
Dec 8, 2014, 2:04:02 AM12/8/14
to open...@googlegroups.com
ohbuchi様

先ほどはtutorials/mesh/snappyHexMesh/motorBikeから
コピーしたのでうまくいかなかったのかもしれません.

tutorials/incompressible/simpleFoam/motorBikeからコピーしなおして
やりなおしてみようと思います.

あと,cp -r $WM_PROJECT_DIRはどういう意味なのでしょうか.

cd OpenFOAM/...(計算したいファイル)/
blockMesh

とは違う作業のことですか?

基本的なことかもしれませんがお教えいただけますでしょうか.


ohbuchi

unread,
Dec 8, 2014, 2:16:38 AM12/8/14
to open...@googlegroups.com
$WM_PROJECT_DIRはOpenFOAMをセットアップしたディレクトリが記録されている環境変数です。
OpenFOAMでは多数の環境変数が下記スクリプトで定義されます。
 OpenFOAM-2.3.x/etc/bashrc


2014年12月8日月曜日 16時04分02秒 UTC+9 kwck:

kwck

unread,
Dec 8, 2014, 3:45:40 AM12/8/14
to open...@googlegroups.com
ohbuchi様

tutorials/incompressible/simpleFoam/motorBikeからコピーして
新しくファイルを作成し貼り付けました.

コマンド上で「cp - r $WM_PROJECT_DIR」と入力した後,計算したいファイルまで行って「 ./test」と入力してEnterを押し,
「cd test」と入力してEnter,その後blockMeshと入力すればよいということでしょうか.

幼稚な説明で申し訳ございません,よろしくお願いします.

kwck

unread,
Dec 9, 2014, 8:51:23 PM12/9/14
to open...@googlegroups.com
ohbuchi様

先述の問題は解決できました.

ご指摘いただきましてありがとうございました.
Reply all
Reply to author
Forward
0 new messages