並列計算時の領域分割の調整方法について教えてください

1,296 views
Skip to first unread message

小南秀彰

unread,
Apr 13, 2017, 8:40:16 PM4/13/17
to OpenFOAM
並列計算時の領域分割の調整方法

DEXCS2016を使っています。

流体だけの非定常計算で並列計算をすると下記のようなエラーが出ます。
並列の分割数を2,3,4と変えても同じメッセージが出ました。
対応方法について、よろしく 御教示ねがいます。

【1】領域分割での不具合が原因だと推定しています。
この推定は正しいでしょうか?
【2】これを確かめるために、領域の分割を 明示的に変更したいです。
scotchで、CPU-coreのweightを変えることで領域を分割する位置を変えられるのでしょうか?
【3】分割された領域を区別して表示させるための操作方法を教えてください。
paravisのnativeモードで読み込んだあと何かfilerを設定すれば良いのでしょうか?

. /home/dexcs/OpenFOAM/OpenFOAM-4.x/etc/bashrc;pyFoamDecompose.py --method=scotch . 2;pyFoamPlotRunner.py  --procn=2 simpleFoam &


【質問の背景】
流体だけの計算をしていて
(定常・非定常)×(シングル・並列計算)
という4通りでの動作確認をしています。

DEXCSのランチャーのデモ形状では全ての組合せで計算が出来ました。
しかし、inletが2つoutletが1つの円形合流管では、(定常・非定常)&並列計算という2つの組み合わせで計算ができません。
したがって、並列計算時の領域分割時に、wall境界以外のparchが異なる領域に跨ると動作不良を発生させるのではないかと推定しています。

このwikiの以前の記事では、baffleの表裏のwallが同じ領域内に含まれていないといけないという記載がありましたが、今回はbaffleを使っていません。
symmetryも使っていません。

上記のエラーメッセージは、分割アルゴリズム:method=scotch、領域分割数:procn=2 の場合です。
Web検索で見つけた第一回目並列計算セミナー(2010/10/2:今野会長による発表)という資料では、simple,hierarchical,metis,manualという分割アルゴリズムの特徴が紹介されています。DEXCSのデモ形状では正常に動いているので、アルゴリズム依存というよりは領域を分割する位置が問題だろうと推定しています。

以上 よろしく御教示 おねがいします。


Masashi Imano

unread,
Apr 14, 2017, 12:27:47 AM4/14/17
to OpenFOAM
今野です.

エラーメッセージが添付されていないようです.

2017年4月14日金曜日 9時40分16秒 UTC+9 小南秀彰:

小南秀彰

unread,
Apr 17, 2017, 2:09:35 AM4/17/17
to OpenFOAM
今野さん

失礼しました。小南です。

エラーメッセージを添付します。
シングルCPUの設定でソルバー計算が正常に終了したのち、初期化して並列計算をするところからのログを添付します。

御教示 よろしく お願いします。

========
## EXEC ... . /home/dexcs/OpenFOAM/OpenFOAM-4.x/etc/bashrc;pyFoamClearCase.py . ; rm processor* -rf ... Completed.
. /home/dexcs/OpenFOAM/OpenFOAM-4.x/etc/bashrc;pyFoamDecompose.py --method=scotch . 2;pyFoamPlotRunner.py  --procn=2 simpleFoam &
/*---------------------------------------------------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
Build  : 4.x-be7fba6cff9b
Exec   : decomposePar -case /home/dexcs/Desktop/pipe_para -noFunctionObjects
Date   : Apr 17 2017
Time   : 14:55:41
Host   : "dexcs-VirtualBox"
PID    : 13550
Case   : /home/dexcs/Desktop/pipe_para
nProcs : 1
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster
allowSystemOperations : Allowing user-supplied system call operations

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



Decomposing mesh region0

Create mesh

Calculating distribution of cells
Selecting decompositionMethod scotch

Finished decomposition in 0.61 s

Calculating original mesh data

Distributing cells to processors

Distributing faces to processors

Distributing points to processors

Constructing processor meshes

Processor 0
    Number of cells = 155899
    Number of faces shared with processor 1 = 1465
    Number of processor patches = 1
    Number of processor faces = 1465
    Number of boundary faces = 42925

Processor 1
    Number of cells = 152980
    Number of faces shared with processor 0 = 1465
    Number of processor patches = 1
    Number of processor faces = 1465
    Number of boundary faces = 42062

Number of processor faces = 1465
Max number of cells = 155899 (0.94503% above average 154440)
Max number of processor patches = 1 (0% above average 1)
Max number of faces between processors = 1465 (0% above average 1465)

Time = 0

Processor 0: field transfer
Processor 1: field transfer

End

## EXEC ... . /home/dexcs/OpenFOAM/OpenFOAM-4.x/etc/bashrc;pyFoamDecompose.py --method=scotch . 2;pyFoamPlotRunner.py  --procn=2 simpleFoam & ... Completed.
 PyFoam WARNING on line 144 of file /usr/local/lib/python2.7/dist-packages/PyFoam-0.6.6-py2.7.egg/PyFoam/Execution/ParallelExecution.py : which can not find a match for simpleFoam . Hoping for the best 
/*---------------------------------------------------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
Build  : 4.x-be7fba6cff9b
Exec   : simpleFoam -parallel
Date   : Apr 17 2017
Time   : 14:55:49
Host   : "dexcs-VirtualBox"
PID    : 13622
Case   : /home/dexcs/Desktop/pipe_para
nProcs : 2
Slaves : 1("dexcs-VirtualBox.13623")
Pstream initialized with:
    floatTransfer      : 0
    nProcsSimpleSum    : 0
    commsType          : nonBlocking
    polling iterations : 0
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster
allowSystemOperations : Allowing user-supplied system call operations

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

Create mesh for time = 0


SIMPLE: convergence criteria
    field p tolerance 0.001
    field U tolerance 0.001
    field "(k|epsilon)" tolerance 0.001

Reading field p

Reading field U

Reading/calculating face flux field phi

Selecting incompressible transport model Newtonian
Selecting turbulence model type RAS
Selecting RAS turbulence model kEpsilon
kEpsilonCoeffs
{
    Cmu             0.09;
    C1              1.44;
    C2              1.92;
    C3              -0.33;
    sigmak          1;
    sigmaEps        1.3;
}

No MRF models present

No finite volume options present


Starting time loop

forces forces:
--> FOAM Warning :
    From function Foam::labelHashSet Foam::polyBoundaryMesh::patchSet(const Foam::UList<Foam::wordRe>&, bool, bool) const
    in file meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C at line 794
    Cannot find any patch or group names matching Dexcs
    Not including porosity effects
forces forceCoeffs:
--> FOAM Warning :
    From function Foam::labelHashSet Foam::polyBoundaryMesh::patchSet(const Foam::UList<Foam::wordRe>&, bool, bool) const
    in file meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C at line 794
    Cannot find any patch or group names matching Dexcs
    Not including porosity effects
forceCoeffs forceCoeffs:
--> FOAM Warning :
    From function Foam::labelHashSet Foam::polyBoundaryMesh::patchSet(const Foam::UList<Foam::wordRe>&, bool, bool) const
    in file meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C at line 794
    Cannot find any patch or group names matching Dexcs
    Not including porosity effects
[0]
[0]
[0] --> FOAM FATAL ERROR:
[0] surfaceRegion inletMassFlow: patch(inlet):
    Unknown patch name: inlet. Valid patch names are:
7
(
fillet
inlet1
inlet2
outlet
pipe1
pipe2
procBoundary0to1
)

[0]
[0]
[0]     From function void Foam::functionObjects::fieldValues::surfaceRegion::setPatchFaces()
[0]     in file fieldValues/surfaceRegion/surfaceRegion.C at line 194.
[0]
FOAM parallel run exiting
[0]
[1]
[1]
[1] --> FOAM FATAL ERROR:
[1] surfaceRegion inletMassFlow: patch(inlet):
    Unknown patch name: inlet. Valid patch names are:
7
(
fillet
inlet1
inlet2
outlet
pipe1
pipe2
procBoundary1to0
)

[1]
[1]
[1]     From function void Foam::functionObjects::fieldValues::surfaceRegion::setPatchFaces()
[1]     in file fieldValues/surfaceRegion/surfaceRegion.C at line 194.
[1]
FOAM parallel run exiting
[1]
--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 1.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------
[dexcs-VirtualBox:13615] 1 more process has sent help message help-mpi-api.txt / mpi-abort
[dexcs-VirtualBox:13615] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages

===終わり===

Masashi Imano

unread,
Apr 17, 2017, 11:12:21 PM4/17/17
to OpenFOAM
今野です.

直接のエラー原因は以下ですので,該当の設定ファイルをgrepなどで
探しだして見直してみてください.

[0] --> FOAM FATAL ERROR:
[0] surfaceRegion inletMassFlow: patch(inlet):
    Unknown patch name: inlet. Valid patch names are:
7
(
fillet
inlet1
inlet2
outlet
pipe1
pipe2
procBoundary0to1
)

2017年4月17日月曜日 15時09分35秒 UTC+9 小南秀彰:

小南秀彰

unread,
Apr 19, 2017, 4:15:26 AM4/19/17
to OpenFOAM
今野さん

小南です。

原因が判りました。

簡単に言えば、ソルバーのバグです。並列計算時だけinletという名前の境界patchが必要です。
( ソースコードまでは確認していません。 )

今回、問題が起きていたモデルでは、流入部は inlet1、inlet2 という名前のpatchが2つありました。
inlet1→inletと名前を変えたら、ソルバー計算が出来ました。
並列数2,3,4 のいずれも問題なくソルバー計算できました。

DEXCSのランチャーのデモ用モデルは、patchの名前がもともとinletでした。

outletのほうは大丈夫か気になるので検証してみます。

Hiroaki Fujio

unread,
Apr 19, 2017, 4:34:10 AM4/19/17
to open...@googlegroups.com
ソルバのバグではなくcontrolDictの設定ミスだと思います。

恐らく流量か何かの計算の為にsurfaceRegionの設定がしてあるのだと思われますが、
そこで指定されているpatch名をメッシュに合わせて変更する必要があるはずです。

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

小南秀彰

unread,
Apr 20, 2017, 6:09:00 AM4/20/17
to OpenFOAM
Hiroaki Fujio さん

回答ありがとうございます。

>ソルバのバグではなくcontrolDictの設定ミスだと思います。
>恐らく流量か何かの計算の為にsurfaceRegionの設定がしてあるのだと思われますが、
>そこで指定されているpatch名をメッシュに合わせて変更する必要があるはずです。

この前の返信でも記載しているように、
・DEXCSのデモ(流入部のpatchがinlet)、今回の合流管(流入部のpathが、inlet,inlet2の2つ)では、正常に並列計算ができています。
・今回の合流管は、シングル計算の場合は、inlet/inlet2 でも inlet1/inlet2でも正常に動作します。

よって
contolDictの設定は正しいと思われます。
並列計算をすると作成されるprocessorNというフォルダーの中にある各々のboundaryファイルは、シングル計算の時のboundaryファイルをコピーするだけだと思います、実際にファイルの中身を確認してもそうでした。

これらの事実より、Fujioさんが御指摘されている点は、あまり考えにくいと思います。

※ 正常に動作しなかった時の、processorNというフォルダー毎 添付しようとしましたが、あまりに大容量なので止めました。
  検証用に、もっと簡単な形状でメッシュ数の少ないモデルを作って、後日にアップロードしようと思います。
  DEXCSの環境のある方は、FreeCADのファイルとMeshDictがあれば、再現できますか?
  DEXCS以外の環境の方は、どんなファイルが必要になるのでしょうか?

以上 よろしく お願いします。

小南秀彰

unread,
Apr 21, 2017, 6:48:40 AM4/21/17
to OpenFOAM
今野さん、Fujioさん

小南です。

今日、簡単な形状で検証をしました。

やはり、simpleFOAMの並列計算時のバグだと思います。
並列計算時だけinletという名前の境界patchが必要でした。
outletにも同様のバグがあると思われます。

検証した内容の詳細は添付の画像の表を参照してください
下記に表のテキストを転記します。

解析フォルダーは大容量すぎて添付できませでした。
他の人が検証するために必要なファイルの拡張子を教えてください。

     境界名のあとの数字    動作
     inlet      outlet    CPU数
No Folder_Name 1つ目 2つ目 1つ目 2つ目 シングル 並列
1 komi_test  なし  2      なし   2   OK OK
2 komi_test_1 1    2   1    2   OK Error
3 komi_test_2 なし   2   1    2   OK Error
4 komi_test_3 なし   1   1    2   OK Error
5 komi_test_4 0   1   1    2   OK Error
6 komi_test_5 1   2   なし    2   OK Error


以上 よろしく お願いします。
無題.png

Hiroaki Fujio

unread,
Apr 21, 2017, 8:11:19 AM4/21/17
to open...@googlegroups.com
サイズが大きすぎるのであればメッシュや計算結果等はとりあえず不要だと思います。
まずはそれぞれのログやsystemディレクトリの中身を見せて下さい。

--

小南秀彰

unread,
Apr 24, 2017, 2:03:56 AM4/24/17
to OpenFOAM
Fujioさん、対応ありがとうございます。

それぞれのログとsystemディレクトリをアップロードします。
zip書庫になっています。

以上 よろしくお願いします。


To_Fujio.zip

Hiroaki Fujio

unread,
Apr 24, 2017, 2:17:13 AM4/24/17
to open...@googlegroups.com
controlDict内に下記のfunctionObjectの設定が有ります。

functions
{
    #include "forces"
    #include "forceCoeffs"
    #include "probes"
    #include "massFlow"
    #include "sampleDict"
}

エラーはここのmassFlowで起こっています。
massFlowの中身は下記のようになっています。
メッシュにここで指定されているパッチ(inlet, outlet)がなければエラーとなります。

inletMassFlow
    {
        type            surfaceRegion;
        libs ("libfieldFunctionObjects.so");
        writeControl   timeStep;
        log             true;
        // Output field values as well
        writeFields     false;
        regionType      patch;
        name            inlet; 
        operation       sum;

        fields
        (
phi
        );
    }

    outletMassFlow
    {
        type            surfaceRegion;
        libs ("libfieldFunctionObjects.so");
        writeControl   timeStep;
        log             true;
        // Output field values as well
        writeFields     false;
        regionType      patch;
        name            outlet; 
        operation       sum;

        fields
        (
phi
        );
    }

これはパッチから流入したり流出したりする流量に興味が無いのであれば削除可能です。
流量を見たいのであればinlet1, inlet2, outlet1, outlet2に対して同じように設定を作ってください。

他のforces, forceCoeffs, probes, sampleDictもメッシュが違うため意味のない設定になっていますので、修正してください。

シングル計算でエラーが起きない理由はわかりませんが、設定が違う以外には考えられません。

小南秀彰

unread,
Apr 26, 2017, 2:33:43 AM4/26/17
to OpenFOAM
Fujioさん、回答ありがとうございました。

なるほど
DEXCSのデモ用に始めから組み込んであるfunctionObjectについて、
controlDictの中で削除(コメントアウト)するか、
functionObjectの内容のほうを修正しないといけないのですね。

両方の方法を試して、どちらも並列計算(n=2)ができることを確認しました。

御教示ありがとうございました。

Reply all
Reply to author
Forward
0 new messages