今野先生の非圧縮性流体解析演習シリーズ第8回を参考にさせて頂き、buoyantBoussinesqSimpleFoamを水蒸気輸送も解けるようにカスタマイズしたbuoyantBoussinesqHumiditySimpleFoamを使用しています。
この度、圧力境界条件、圧力の残差の下げ方について分からないことがあり、質問させて頂きました。
解析領域2200 m (x1) × 600 m (x2) × 1000 m (x3)に対して、その中心部600 m (x1) ×600 m (x2) に建物ブロック30 m (x1) ×30 m (x2) × 35 m (x3)並べています。
保水性のあるパネルを市街地内の地面にcreatePatchで設定し、市街地内の気温、湿度にどう影響するか、というようなことを研究しております。
現在、定常計算で10000サイクル回しても、各物理量の残差が収束判定(10^(-5))を満たさず、困っています。
特に、圧力(p_rgh)が収束しません(5000サイクル以降から徐々に値は小さくなっていますが、判定とは程遠く、また振動しています)。(詳しくは添付ファイルのresidual.pngをご覧ください。)
また、Paraviewで、10000サイクル目の圧力(p_rgh)鉛直分布(x2=275)を見ると、上空の流入口付近で、うねりのような風の流れが発生しておりました。(詳しくは添付ファイルの10000.pngをご覧ください。)
自分なりには、圧力の境界条件に問題があるか、速度・圧力の連成手法に問題があるか、という風に考えております。
圧力の境界条件については、流入も流出もzeroGradientにしております。(出口をディリクレ条件にせず、)このために、何か他に設定しなければならない条件はありますでしょうか(天井に風速を与えて引っ張るなどでしょうか。その風速が詳細にわからないため、試したことはありません)。ただ、現在は特に他を設定せずとも計算ができています。流体計算の本質をつかめておらず、稚拙な質問申し訳ございません。
また、そもそも、熱・風・スカラー輸送を解くソルバーで、圧力を10^(-5)まで避けることは困難なのでしょうか。
風速、圧力の境界条件、fvSolutionの詳細を以下にまとめさせていただきます。
もし、何かお力添えを頂けたら大変嬉しいです。どうぞよろしくお願いいたします。
※風速の流入口は、setDiscreteFieldsで1/7べき乗則に沿った風速分布を与えています。
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 2.2.x |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
inlet
{
type fixedValue;
value uniform (4.0 0 0);
}
outlet
{
type zeroGradient;
}
Zmin
{
type fixedValue;
value uniform (0 0 0);
}
Zmax
{
type fixedValue;
value uniform (0 0 0);
}
Ymin
{
type symmetryPlane;
}
Ymax
{
type symmetryPlane;
}
oldInternalFaces
{
type fixedValue;
value uniform (0 0 0);
}
hosui
{
type fixedValue;
value uniform (0 0 0);
}
}
// ************************************************************************* //
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 2.2.1 |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p_rgh;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0];
internalField uniform 101325;
boundaryField
{
inlet
{
type zeroGradient;
}
outlet
{
type zeroGradient;
}
Zmin
{
type zeroGradient;
}
Zmax
{
type zeroGradient;
}
Ymin
{
type symmetryPlane;
}
Ymax
{
type symmetryPlane;
}
oldInternalFaces
{
type zeroGradient;
}
hosui
{
type zeroGradient;
}
}
// ************************************************************************* //
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 2.2.1 |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
p_rgh
{
solver GAMG;
smoother DIC;
agglomerator faceAreaPair;
nCellsInCoarsestLevel 10;
mergeLevels 1;
cacheAgglomeration on;
tolerance 1e-06;
relTol 0.01;
}
U
{
type coupled;
solver PBiCICG;
preconditioner DILU;
tolerance (1e-06 1e-06 1e-06);
relTol (0 0 0);
}
"(T|X|k|epsilon|R)"
{
solver smoothSolver;
smoother DILU;
tolerance 1e-06;
relTol 0;
}
}
SIMPLE
{
nNonOrthogonalCorrectors 0;
pRefCell 0;
pRefValue 0;
residualControl
{
p_rgh 1e-5;
U 1e-5;
T 1e-5;
// possibly check turbulence fields
"(X|k|epsilon|omega)" 1e-5;
}
}
relaxationFactors
{
fields
{
p_rgh 0.1;
}
equations
{
U 0.3;
T 0.3;
"(X|k|epsilon|R)" 0.3;
}
}
// ************************************************************************* //