📘

PDRblockMeshとは?

2023/09/11に公開

この記事について

OpenFOAMの基本的なメッシュ作成ユーティリティとして,blockMeshが存在する。少し前に,これとは少しことなる PDRblockMesh というユーティリティーが開発された。

ここでは,PDRblockMesh とは何なのか,何ができるのかについて考える。

PDRblockMesh

概要

blockMeshの設定はわかりにくい。それをシンプルにしたものがPDRblockMeshなのかもしれない。

基本的に,x, y, z軸にそった直線で構成されるメッシュを作成する。構造格子のような感覚で,作成するメッシュを指示することができる。

各軸に対して,どこからどこまでを何分割するか,という指示を与える。

それに加えて,上記の指示で作成したメッシュの外部にも,限られたタイプではあるが,メッシュを追加することができる。

ソースコードヘッダでの説明

https://develop.openfoam.com/Development/openfoam/-/blob/master/src/mesh/blockMesh/PDRblockMesh/PDRblock.H

PDRblock.H
Class
    Foam::PDRblock

Description
    A single block x-y-z rectilinear mesh addressable as i,j,k with
    simplified creation. Some of the input is similar to blockMeshDict,
    but since this specialization is for a single-block that is aligned
    with the x-y-z directions, it provides a different means of specifying
    the mesh.

    Dictionary controls
    \table
        Property    | Description                          | Required | Default
        x           | X-direction grid specification       | yes |
        y           | Y-direction grid specification       | yes |
        z           | Z-direction grid specification       | yes |
        scale       | Point scaling                        | no  | 1.0
        expansion   | Type of expansion (ratio/relative)   | no  | ratio
        boundary    | Boundary patches                     | yes |
        defaultPatch | Default patch specification         | no  |
    \endtable

    Grid coordinate controls
    \table
        Property| Description                               | Required | Default
        points  | Locations defining the mesh segment       | yes |
        nCells  | Divisions per mesh segment                | yes |
        ratios  | Expansion values per segment              | no  |
    \endtable

    A negative expansion value is trapped and treated as its reciprocal.
    by default, the expansion is as per blockMesh and represents the ratio
    of end-size / start-size for the section.
    Alternatively, the relative size can be given.

PDRとは何か?

PDR (porosity/distributed resistance) modellingなのかもしれない。

https://develop.openfoam.com/Development/openfoam/-/blob/master/applications/solvers/combustion/PDRFoam/PDRFoam.C?ref_type=heads

cavity例題のメッシュ

OpenFOAMの基本的な例題cavityのメッシュを使ってPDRblockMeshについて考える。cavity例題では,単純な2次元矩形領域が計算対象である。図1にblockMeshおよびPDRblockMeshにより作成したメッシュをします。OpenFOAMに付属する例題には,両方の設定ファイル(blockMeshDictおよびPDRblockMeshDict)が付属している。

図1 cavity例題用メッシュ;左: blockMeshによるメッシュ,右: PDRblockMeshによるメッシュ

なお,この例題では,極めてシンプルなメッシュを作成する。そのため,外部メッシュ(outer)は使用していない。

設定ファイルの比較

設定ファイルの主要部分を下記に示す。

blockMeshの場合(blockMeshDict)

blockMeshDictでは,ブロックを構成する8つの節点座標を指定する。さらに,ブロック構成を指示する順によって,グローバル座標(x, y, z)に沿わない方向にもメッシュを生成できる。

blockMeshDict抜粋
scale   0.1;

vertices
(
    (0 0 0)
    (1 0 0)
    (1 1 0)
    (0 1 0)
    (0 0 0.1)
    (1 0 0.1)
    (1 1 0.1)
    (0 1 0.1)
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
);

PDRblockMeshの場合(PDRblockMeshDict)

PDRblockMeshDictでは,節点の座標を直接指示する必要はない。その代わりに,グローバル座標(x, y, z)のそれぞれに対して,次の3つを指示する。

  • 開始点および終了点の座標(必要なら途中の点の座標も)
  • セルの数
  • セルサイズ比率(等間隔なら1)

この方法では,x,y,z軸に沿ったメッシュしか生成できない。(軸を回転させるオプションは使用できる。)軸に沿ったセルを作る場合には,どの軸を何分割するかという指示だけでよく,ブロックの指示は不要となり,設定ファイルがシンプルになる。

PDRblockMeshDict抜粋
scale   0.1;

x
{
    points  (0 1);
    nCells  (20);
    ratios  (1);
}

y
{
    points  (0 1);
    nCells  (20);
    ratios  (1);
}

z
{
    points  (0 0.1);
    nCells  (1);
    ratios  (1);
}

使用例(simplePipeCage例題)

simplePipeCage例題概要

この例題では,矩形領域の単純なメッシュを作成するとともに,その外部にメッシュを追加する。この外部メッシュは,設定ファイル内部のouterエントリーで指示する。

outerのタイプとしては,次の4つが選択できる。それぞれの指定によって作成されるメッシュを示す。

  • none
  • extend
  • box
  • sphere

https://develop.openfoam.com/Development/openfoam/-/tree/master/tutorials/preProcessing/PDRsetFields/simplePipeCage?ref_type=heads

基本設定

PDRblockMeshDictの一部
x
{
    points  ( -11.87 0.03 1.03 2.03 3.05 15.32 );
    nCells  ( 14 5 5 5 14 );
    ratios  ( 0.0887187064230887 1 1 1.04060401 10.6993205379072 );
}

y
{
    points  ( -11.64 0.04 1.03 2.03 3.05 15.31 );
    nCells  ( 14 5 5 5 14 );
    ratios  ( 0.0887187064230887 1 1 1.04060401 10.6993205379072 );
}

z
{
    points  ( 0 1.02 2.05 14.19 );
    nCells  ( 5 5 14 );
    ratios  ( 1 1 10.6993205379072 );
}

outer 設定の効果(4つのtype)

PDRblockMeshDictの一部
outer
{
    type        none;     // (none | extend | box | sphere)  [default: none]
    onGround    true;       // Module on the ground?  [default: false]
    expansion   relative;   // (uniform | ratio | relative)  [default: ratio]

    ratios      1.1;

    size        3;          // Overall outer/inner size
    nCells      10;         // Number of cells for outer region
}

作成されたメッシュ


outer - none


outer - extend


outer - box


outer - sphere

Discussion