[Re:15] Reboot : ゼロから始める OpenFOAM @ windows 外部流れ、じたばた記

症状

–> FOAM FATAL IO ERROR:
Unable to set reference cell for field p
Please supply either pRefCell or pRefPointfile: C:/data

原因

モデルとメッシュの大きさ。メッシュの精細さ不足。

対策

  • メッシュをより細かくする。
  • メッシュに見合う厚みを持たせる。

 

さて、もう少し実用に向けて、タービンを具体化、二次元化して少し塾雑なモデルで二次元外部流れの計算に挑戦してみます。

形状;こんな感じ

基本直径(半径)は 100 (50) mm。

モデル厚さは 初期、2 mm、のち、 5 mm。

  1. stl形式モデルを作ってメッシュを切る
    当初、厚みを極薄の 2 mm で模型を作成。
    XSim でメッシュ階層化して、流速 10 m/s 、時間ステップ 0.002、
    境界条件は、モデルは静止壁、上流は速度指定、下流、側壁は自由流入出。
    で設定ファイルを取得。
    実行すると、エラーは出なかったけど一定の時間経過で終了。
    ・イタレーションが行われてない。
    ・速度、圧力の物理量が出力されていない。
    ・ParaVIEW でみると、模型が認識されているけど、階層メッシュはできている。
    とりあえず、XSim のメッシュの画面で、何かの加減で反映されたときに、きっちり形状が表示されていないと、どうも STL の領域データーがうまくいってないようです。以下のような感じ。
  2. FreeCADでモデル修正
    原因がわからないので、手当たり次第に修正。
    ・厚みを少し増す。 5 mm に。
    ・ついでに三本のアームの付け根に フィレット を追加。
    これまでは、スケッチは sketch、押し出しを part、パターンを draft、と分けて作成しました。
    ところがどうも、part design ワークベンチには、これらがオールインワンになっているようです。
    角Rも面取りも、ほぼこのワークベンチで完了するようです。
    この操作で作成しなおしたモデルは、上述のようにアーム部分まで認識してくれました。
    作成方法なのか、厚みが原因なのか、XSim の計算領域追加の方法なのか、改善理由はあいまいです。
  3. モデルは認識、流れ場はからっぽ
    上記モデルで計算すると、とりあえず物体は認識されました。
    計算も、最初のように動きましが、中身がからっぽでおかしい。
    ・クーラン数の自動調整を解除
    ・初期速度場をオールゼロにしていたが、0.3 m/s 少し速度を与える。
    ・上流流入速度を 10 m/s から 2 m/s に減じる。
    その結果、速度、圧力場が得られるが、一様流が発生していないようでおかしな速度場が表示される。
    以下は、時間発展。



    初期速度場が最初は残こるが、すぐに入り口速度が減少し、物体後方からたぶん初期速度の名残で流線が発生、第4層の円筒境界も影響を与えている。

      // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    Create time
    Create mesh for time = 0PIMPLE: No convergence criteria found
    PIMPLE: Operating solver in transient mode with 1 outer corrector
    PIMPLE: Operating solver in PISO modeReading 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
    RAS
    {
    RASModel kEpsilon;
    turbulence on;
    printCoeffs on;
    Cmu 0.09;
    C1 1.44;
    C2 1.92;
    C3 0;
    sigmak 1;
    sigmaEps 1.3;
    }No MRF models presentNo finite volume options present
    Courant Number mean: 0.196582 max: 2.09842Starting time loopCourant Number mean: 0.196582 max: 2.09842
    Time = 0.002DILUPBiCG: Solving for Ux, Initial residual = 1, Final residual = 9.92714e-08, No Iterations 6
    DILUPBiCG: Solving for Uy, Initial residual = 1, Final residual = 3.91147e-06, No Iterations 5
    DILUPBiCG: Solving for Uz, Initial residual = 1, Final residual = 2.18296e-07, No Iterations 5
    DICPCG: Solving for p, Initial residual = 1, Final residual = 0.27948, No Iterations 1000
    time step continuity errors : sum local = 0.000295434, global = -4.79381e-20, cumulative = -4.79381e-20
    DICPCG: Solving for p, Initial residual = 0.551695, Final residual = 0.081401, No Iterations 1000
    time step continuity errors : sum local = 0.000228357, global = 4.52934e-20, cumulative = -2.64466e-21
    DILUPBiCG: Solving for epsilon, Initial residual = 0.0101997, Final residual = 1.70111e-06, No Iterations 3
    bounding epsilon, min: -0.000781087 max: 2.05743 average: 0.00244692
    DILUPBiCG: Solving for k, Initial residual = 1, Final residual = 8.42596e-06, No Iterations 4
    ExecutionTime = 98.604 s ClockTime = 99 sCourant Number mean: 0.0339379 max: 3.28391
    Time = 0.004
  4. 条件の変更
    イタレーションが行われていないことは変化せず。
    境界条件を変更する。
    境界条件は、
    流速指定、静圧指定、自由入出流の3種と、
    上流(Xmin)、下流(Xmax)、側壁(Ymin, Ymax) 、
    の組み合わせ。
    ・上流 = 流速指定
    ・下流 = 自由流入出、静圧指定
    ・側壁 = 自由入出力、静圧指定?
    上流は変えないとして組み合わせは実質二通り、だけど。
    下流を静圧指定に戻すと以下のように圧力設定が不足で実行できません。

    –> FOAM FATAL IO ERROR:
    Unable to set reference cell for field p
    Please supply either pRefCell or pRefPointfile: C:/data/c3bs/t3bs5mmr/system/fvSolution/PIMPLE from line 50 to line 51.From function bool Foam::setRefCell(const volScalarField&, const volScalarField&, const Foam::dictionary&, Foam::label&, Foam::scalar&, bool)
    in file cfdTools/general/findRefCell/findRefCell.C at line 102.FOAM exiting
  5. 境界条件変えたけど
    境界条件を、側壁に静圧指定x2、下流を自由流出入、にしたけれどダメでした。こうなると、まずは側壁を滑り条件に、、、でもダメでした。

    Crea
    te time
    Create mesh for time = 0
    PIMPLE: No convergence criteria found
    PIMPLE: Operating solver in transient mode with 1 outer corrector
    PIMPLE: Operating solver in PISO mode
    Reading field pReading field U
    Reading/calculating face flux field phi–> FOAM FATAL IO ERROR:
    Unable to set reference cell for field p
    Please supply either pRefCell or pRefPointfile: C:/data/c3bs/t3bs5mmr/system/fvSolution/PIMPLE from line 50 to line 51.
    From function bool Foam::setRefCell(const volScalarField&, const volScalarField&, const Foam::dictionary&, Foam::label&, Foam::scalar&, bool)
    in file cfdTools/general/findRefCell/findRefCell.C at line 102.FOAM exiting

    こうなってくると、何が原因だかわかりませんが、そもそも、入口流速が設定できていないのがおかしいように思います。計算は進むけど、いろいろ試した真野の、流入条件がうまく設定されていないようです。
      計算開始から 0.2 秒まで: m.avi

  6. 直接圧力参照点を定義する必要があるのか
    CASE 流入 流出 側壁 結果
    1 流速 静圧 0 すべり壁 × 圧力設定不足
    Unable to set reference cell for field p
    2 流速 静圧 0 自由流入出 × 圧力設定不足
    Unable to set reference cell for field p
    3 流速 静圧 0 静圧 0 × 圧力設定不足
    Unable to set reference cell for field p
    4 流速 自由流入出 すべり壁 × p, U データーが空っぽ(※ 1)
    5 流速 自由流入出 自由流入出 × p, U データーが空っぽ(※ 1)

     

    ※1
    DICPCG: Solving for p, Initial residual = 0, Final residual = 0, No Iterations 0
    time step continuity errors : sum local = 0, global = 0, cumulative = 0
    DICPCG: Solving for p, Initial residual = 0, Final residual = 0, No Iterations 0
    time step continuity errors : sum local = 0, global = 0, cumulative = 0

  7. モデルの形状をチェック。
    その後試したことは、

    • 外部領域をXSim で加えていたが、FreeCAD で製作
    • 模型を交換して計算量井伊を製作結局
  8. メッシュ生成後のモデルをチェック。
    XSim上の形状チェックではそれほど悪くなさそうです。


    ParaVIEW でみたメッシュの結果。模型の形状もしっかり維持できてるようです。でも、あれ?なんか領域が狭くなっていますね。そういえば四隅の角も丸みを帯びています。


    メッシュを見てみると、確かに、再分割領域しかありません。丸くなっていたのは、最外部の領域との接続部分だったからですね。


    拡大してみると、厚みのメッシュは1層だけです。ということは、この外側の領域は、メッシュサイズからこぼれて無視されてしまったようです。当然、境界条件を指定した領域は影も形もありません。

  9. 以上より、いろいろな計算のおかしかった理由は、個々にあったのかもしれません。二次元上がればの計算、ということで、気合いを入れて薄い領域を設定してしまったことで、最も荒い領域が無視されてしまってたことが原因のようです。

まとめ

やっぱり OpenFOAM は大規模計算ツールで、二次元計算なんていうケチな計算をすることは考えていないんですね。最初っからスーパーコンピューター使って3D大規模計算するくらいのまっとうな数値計算研究者や技術者用、ってことですね。