openfoamquest

OpenFOAMや流体解析の使い方を紹介しています

PCスペック2 NVMe PCIe M.2 2242 SSD

 

以前記事にも書きましたが

小型のベアボーンASRock 4x4BOX-V1000M/JP

でOpenFOAMを使用しています。

openfoamquest.hatenablog.jp

今回SSDの新しい部品を購入してみました。

このベアボーンでは短いタイプの2242のNVMeしか取付られないので

今はあまり種類がなかったです。

 

 取付にはねじが必要です。

 

 

f:id:openfoamquest:20210113220807j:plain

無事に認識できました。

f:id:openfoamquest:20210113220828p:plain

 

OpenFOAM v2012 averageNeighbour tetra mesh test

 

openfoamquest.hatenablog.jp

OpenFOAM v2012の機能を確認。

https://www.openfoam.com/releases/openfoam-v2012/numerics.php#numerics-runtime-geometry-selection

averageNeighbourというものがあります。

Google翻訳によると

*******************************************************************

averageNeighbourスキームは、四面体および高アスペクト比のプリズム境界層メッシュに非常に効果的です。これらは、トランケーションエラーとアライメントのために、プリズム境界層で非常に高い非直交角を持っている可能性があります。

*******************************************************************

四面体に非常に効果がありそうです。

過去記事でテトラメッシュの設定方法を記載したので、これで比較してみました。

openfoamquest.hatenablog.jp

チュートリアル mesh/snappyHexMesh/airfoilWithLayersの
fvSchemesとfvSolutionをコピーして貼り付け後

fvSchemesを編集します。

fvSchemes

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
FoamFile
{
   version 2;
   format ascii;
   class dictionary;
   object fvSchemes;
}

ddtSchemes
{
   default steadyState;
}

gradSchemes
{
   default Gauss linear;
   grad(p) Gauss linear;
   unlimitedGrad(U) Gauss linear;
}

divSchemes
{
   default none;
   div(phi,U) bounded Gauss linearUpwindV unlimitedGrad(U);
   turbulence bounded Gauss limitedLinear 1;
   div(phi,k) bounded Gauss limitedLinear 1;
   div(phi,omega) bounded Gauss limitedLinear 1;
   div(phi,nuTilda) bounded Gauss limitedLinear 1;
   div(phi,epsilon) bounded Gauss limitedLinear 1;
   div(phi,phit) bounded Gauss limitedLinear 1;
   div(phi,f) bounded Gauss limitedLinear 1;
   div(phi,gammaInt) bounded Gauss linearUpwind grad;
   div(phi,ReThetat) bounded Gauss linearUpwind grad;
   div((nuEff*dev2(T(grad(U))))) Gauss linear;
}

laplacianSchemes
{
   default Gauss linear limited corrected 0.33;
}

interpolationSchemes
{
   default linear;
}

snGradSchemes
{
   default limited corrected 0.33;
}

wallDist
{
   method meshWave;
}

geometry
{
   type highAspectRatio;
   minAspect 10;
   maxAspect 100;
}


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

fvSolution

\*---------------------------------------------------------------------------*/
FoamFile
{
   version 2.0;
   format ascii;
   class dictionary;
   object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
   p
   {
     solver GAMG;
     smoother GaussSeidel;
     tolerance 1e-06;
     relTol 0.1;
   }

  "(U|k|omega|nuTilda|gammaInt|ReThetat)"
   {
     solver smoothSolver;
     smoother symGaussSeidel;
     tolerance 1e-08;
     relTol 0.1;
     maxIter 50;
   }

  "(epsilon|phit)"
   {
     solver PBiCGStab;
     preconditioner DILU;
     tolerance 1e-8;
     relTol 0;
   }

  f
  {
     solver PBiCGStab;
     preconditioner DIC;
     tolerance 1e-8;
     relTol 0;
   }
}

SIMPLE
{
   nNonOrthogonalCorrectors 0;
   consistent true;
   convergence 1e-5;
}

relaxationFactors
{
   equations
   {
     ".*" 0.9;
     "(gammaInt|ReThetat|k|nuTilda)" 0.8;
     "(phit|f)" 0.7;
     epsilon 0.5;
   }
}


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

fvSchemesのgeometryのtypeをaverageNeighbourに変更します。

コードを確認すると

nIters、relax、minRatioの設定がいるようですが

デフォルト設定でnItersは1、minRatioは0.5になるようです。

relaxは0より大きく1以下のため、今回は1にしてみました。

geometry
{
  type averageNeighbour;
  minAspect 10;
  maxAspect 100;
  relax 1;
}

 

v2006 過去記事の残差

f:id:openfoamquest:20210103223308p:plain

 

 v2012 今回の残差

 

f:id:openfoamquest:20210103213601p:plain

今までは収束しづらかったのが残差も改善されて、

公式通りに非常に効果がありそうです。

ただ乱流モデルkEpsilonでは結果がよくなかったため、今後に期待。

 当分は以下の方法がよさそう。

openfoamquest.hatenablog.jp

 

OpenFOAM 残差の確認

OpenFOAM v2006やv2012を使用する場合、

計算中の残差の確認はgnuplotを使用しています。

PNGUINITISさんのサイトを参考しました。

 

事前に以下の内容でplotというファイルを作成します。

////////////////////////////////////////////////////////////////

#!/usr/bin/gnuplot -persist

set title 'Residuals'
set xlabel 'Time'
set ylabel 'Initial residual'
set logscale y
set format y "%.0e"
set grid

plot 'logs/Ux_0' title 'Ux' w l
replot 'logs/Uy_0' title 'Uy' w l
replot 'logs/Uz_0' title 'Uz' w l
replot 'logs/p_0' title 'p' w l
replot 'logs/p_rgh_0' title 'p_rgh' w l
replot 'logs/T_0' title 'T' w l
replot 'logs/h_0' title 'h' w l
replot 'logs/k_0' title 'k' w l
replot 'logs/epsilon_0' title 'epsilon' w l
replot 'logs/omega_0' title 'omega' w l
replot 'logs/Rxx_0' title 'Rxx' w l
replot 'logs/Rxy_0' title 'Rxy' w l
replot 'logs/Rxz_0' title 'Rxz' w l
replot 'logs/Ryy_0' title 'Ryy' w l
replot 'logs/Ryz_0' title 'Ryz' w l
replot 'logs/Rzz_0' title 'Rzz' w l

set terminal png
set output 'residual.png'
replot

////////////////////////////////////////////////////////////////

foamJobでソルバー実行後、以下のコマンドを入力すれば残差が確認できます。

$foamLog log

$./plot

f:id:openfoamquest:20210103213601p:plain

residual.pngという名前で保存されるため、残差の確認が便利です。

参考P27~28 2.5.5定常流動計算

OpenFOAMによる熱移動と流れの数値解析

OpenFOAM foamJob 計算中止させるには

OpenFOAMのfoamJobで計算開始したけどやっぱり中止したい場合は

psコマンドを入力します。(simpleFoamの場合)

$ps

例えば並列計算の場合

PID TTY TIME CMD
31072 pts/0 00:00:00 bash
33101 pts/0 00:00:00 mpirun
33105 pts/0 00:02:37 simpleFoam
33106 pts/0 00:02:37 simpleFoam
33107 pts/0 00:02:37 simpleFoam
33110 pts/0 00:02:37 simpleFoam
34712 pts/0 00:00:00 ps

ここでmpirunのPID 33101をkillコマンドで停止させます。

$kill 33101

(PIDは都度変わります。)

controlDictをendTimeを直近のTimeに合わせて変更すれば終了させることも可能です。

OpenFOAM ESI版 Ubuntu インストール(2) v2012

 

openfoamquest.hatenablog.jp

 前回の続き

(2)v2012の場合

公式サイトよりSourceからインストールを選びOpenFOAM-v2012.tgz ThirdParty-v2012.tgzをダウンロード

https://www.openfoam.com/download/install-source.php

$HOME/OpenFOAMにてダウンロードした圧縮ファイルを解凍します。

HOMEディレクトリのbashrcの最下部に以下を追加。(隠しファイルの表示が必要)

. ~/OpenFOAM/OpenFOAM-v2012/etc/bashrc

bashrc再読込

$ source ~/.bashrc

ディレクトリを移動

$cd $WM_PROJECT_DIR

コンパイル実行

$./Allwmake

 

次からは以下のサイトを参考にしました。

https://www.cfd-online.com/Forums/openfoam-installation/219297-qt5-openfoam-7-v1906-ubuntu-18-04-a.html

 

$sudo apt-get install qt5-default

$sudo apt-get install apt-file

$sudo apt-file update

$sudo apt-get install libqt5x11extras5-dev

$sudo apt-get install qttools5-dev

ディレクトリの移動

$cd $WM_THIRD_PARTY_DIR

$./makeParaView

$./Allwmake

エラーがなければ、以下のチュートリアルで確認します。

ユーザーhomeディレクトリ作成
mkdir -p $FOAM_RUN

cd $FOAM_RUN
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily .
cd pitzDaily
blockMesh
simpleFoam
paraFoam

以上。

OpenFOAM ESI版 Ubuntu インストール(1)v2006

最近はOpenFOAMのESI版を使用しています。

以下はインストールのメモです。

OSはUbuntu 20.04です。

時間はかかりますが、ソースからコンパイルして使用しています。

(1)V2006の場合

https://sourceforge.net/projects/openfoam/files/

上のサイトよりOpenFOAM-v2006 と ThirdParty-v2006をダウンロードします。

$HOME/OpenFOAMにてダウンロードした圧縮ファイルを解凍します。

HOMEディレクトリのbashrcの最下部に以下を追加。

source ~/OpenFOAM/OpenFOAM-v2006/etc/bashrc

bashrcの再読込

$ source ~/.bashrc

コンパイルするためにディレクトリを移動

$cd $WM_PROJECT_DIR

コンパイル実行

$./Allwmake

ThirdPartyコンパイル時にエラーになったため、以下をインストール(2回目以降は無視)

$sudo apt-get install libqt5x11extras5-dev

ThirdPartyのディレクトリに移動しParaviewとThirdPartyをコンパイル

$cd $WM_THIRD_PARTY_DIR

$./makeParaView -mpi

$cd $FOAM_UTILITIES/postProcessing/graphics/PVReader/(変更される場合あり)

$./Allwmake

PCのスペックによりますが、私のPCでは約半日ぐらいかかっています。

 

openfoamquest.hatenablog.jp

 

OpenFOAM 乱流モデル turbulence model

 

OpenFOAM simpleFoamの乱流モデルで多孔質モデルを使用するときに

kEpsilonでは発散して計算できない場合がありました。

kOmegaSSTだと計算できる場合があります。

乱流モデルは以下の4つは切り替えられるようにしておいた方がよさそう。

///////////////////////////////////////////////////////////////////////////////////

FoamFile
{
 version 2.0;
 format ascii;
 class dictionary;
 object turbulenceProperties;
}
simulationType RAS;
RAS
{
 RASModel kOmegaSST;
// RASModel kEpsilon;

//    RASModel realizableKE;

//    RASModel RNGkEpsilon; 
 turbulence on;
 printCoeffs on;
}

///////////////////////////////////////////////////////////////////////////////////

 

k,epsilon,omegaやmixinglengthの設定は以下の本が参考になりました。

数値流体力学第3章乱流とモデリング P74

Amazonはこちら 数値流体力学 [第2版]

 

 原著

 

OpenFOAMによる熱移動と流れの数値解析 4.5.5 乱流諸量の条件 P77

Amazonはこちら OpenFOAMによる熱移動と流れの数値解析