境界条件の設定2015年8月25日 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
はじめに境界条件の設定について。 使用バージョンOpenFOAM 2.4.0 境界タイプの設定OpenFOAM のメッシュファイル群 (constant/polyMesh) には boundary ファイルという境界情報を含むファイルがある。これは以下のような内容になっている。 5 ( inlet { type patch; nFaces 30; startFace 24170; } outlet { type patch; nFaces 57; startFace 24200; } upperWall { type wall; nFaces 223; startFace 24257; } lowerWall { type wall; nFaces 250; startFace 24480; } frontAndBack { type empty; inGroups 1(empty); nFaces 24450; startFace 24730; } ) この情報はふつうメッシュ作成ソフトあるいはメッシュ変換ユーティリティが書き出すが、境界条件に合わせて境界のタイプを設定する必要がある。境界のタイプにはつぎのものがある。
パッチ (patch) というのは、入口や出口で使用されるタイプである。cyclic, cyclicAMI については "neighbourPatch" で対応する境界を指定する。2 次元問題の場合は、計算しない方向の両面に empty を指定する。2 次元軸対称については、実際の 3 次元モデルの 5°以下の楔形のモデルを作り、計算しない両面を wedge に設定すればよい。 境界条件の設定境界条件の設定は 0 ディレクトリ内の各フィールドファイルで行う。必要なフィールドファイルはソルバーごとに異なる。乱流モデルに k-εモデルを用いる場合、simpleFoam、buoyantBoussinesqSimpleFoam、buoyantSimpleFoam で必要になるフィールドファイルはそれぞれつぎのようになる。
ただし、圧力の単位に注意する。simpleFoam と buoyantBoussinesqSimpleFoam の圧力は密度で割ったものであるが、buoyantSimpleFoam の圧力は本来の圧力である。 基本設定U についてフィールドファイルの基本設定を示す。 U FoamFile { version 2.0; format ascii; class volVectorField; object U; } dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { inlet { type fixedValue; value uniform (1 0 0); } outlet { type zeroGradient; } wall { type fixedValue; value uniform (0 0 0); } } ヘッダーヘッダーは「おまじない」と思えばよい。 FoamFile { version 2.0; format ascii; class volVectorField; object U; } フィールドデータの場合、class には以下のようなフィールドのクラスを書くようになっている。
dimensionsdimensions で単位を設定する。次のような形式で各単位の指数を指定する。 [kg m s K mol A Cd] "[0 1 -1 0 0 0 0]" は m/s を表している。つぎのような表現も可能である。 dimensions [m/s]; internalFieldフィールド内部の値を設定する。0 ディレクトリの場合、初期値を設定する。 boundaryField境界条件を設定する。境界条件はつぎのような形式で設定する。 inlet { type fixedValue; value uniform (10 0 0); } メッシュの boundary に記述された境界名に対して、境界条件のタイプと設定を設定する。基本的な境界条件タイプを以下に挙げる。
境界名では、二重引用符で囲んで "..." のような書き方をすると、正規表現を使うことができる。"inlet.*" と書くと "inlet-1" や "inlet-2" などに当てはまり、"(inlet-1|inlet-2)" と書くと "inlet-1" か "inlet-2" に当てはまる。".*" と書くとすべての境界に当てはまる。正規表現はもっともよく適合するものが優先されるため、".*" で基本的な設定をしておき、それ以外は個別に設定するような書き方ができる。たとえば、次のような内容のファイルをテンプレートして用意しておけばよいかもしれない。 FoamFile { version 2.0; format ascii; class volVectorField; object U; } dimensions [0 1 -1 0 0 0 0]; internalField uniform (0 0 0); boundaryField { #includeEtc "caseDicts/setConstraintTypes" ".*" { type fixedValue; value uniform (0 0 0); } } #includeEtc 文では、symmetryPlane や empty などの拘束型 (constraint) の境界条件の設定を読み込み、これらの設定を記述しなくてもよいようにしている。これは次のように書いたものと同じである。 #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes" 代表的なフィールドの基本設定代表的なフィールドの基本設定を以下に示す。"基本設定" の中身は、type と value を表しており、追加のパラメタがあればそれを示している。 非圧縮性共通
圧縮性共通
buoyantBoussinesqSimpleFoam
buoyantSimpleFoam
ここで、R (レイノルズ応力) の volSymmTensorField は対称テンソル場で、対称テンソルは 6 成分からなり、各成分を (xx xy xz yy yz zz) の順番で指定する。 0 ディレクトリのバックアップ0 ディレクトリの中身はたまに標準ユーティリティなどにより書き換えられてしまうことがあるため、基本的な設定をしたあとに、"0.org" などといった名前でオリジナルをコピーしておくとよい。 $ cp -r 0 0.org 入口・出口条件単純な条件単純な入口・出口条件は、つぎのようになる。 入口
出口
逆流を考慮した出口条件つぎのような設定により、逆流を考慮した出口条件を設定できる。ただし、逆流は計算上好ましくないので、極力逆流が起こらないように出口を設定したほうがよい。
pressureInletOutletVelocity はつぎのように設定する。 outlet { type pressureInletOutletVelocity; value uniform (0 0 0); } totalPressure はつぎのように設定する。 outlet { type totalPressure; value uniform 0; gamma 1.4; p0 uniform 0; } p0 で圧力を指定、gamma は比熱比である。 inletOutlet はつぎのように設定する。 outlet { type inletOutlet; value uniform 300; inletValue uniform 300; } 流速の条件流入速度を指定するために fixedValue では不便な場合がある。以下に fixedValue 以外の流入境界条件を挙げる。 面の法線方向の流速の指定inlet { type surfaceNormalFixedValue; refValue uniform 10; // [m/s] } refValue で面の法線方向の流速の大きさを指定。 メッシュによっては面の方向が領域の内側ではなく外側に向いている場合があり、注意が必要。 体積流量の指定inlet { type flowRateInletVelocity; volumetricFlowRate constant 2.54e-4; // [m3/s] value uniform (0 0 0); } 質量流量の指定inlet { type flowRateInletVelocity; massFlowRate constant 2.54e-4; // [kg/s] rhoInlet 1; // [kg/m3] value uniform (0 0 0); } 非圧縮性流体ソルバーの場合、rhoInlet で流入する流体の密度を指定する。圧縮性ソルバーの場合は rho の値が用いられる。 乱流流入条件inlet { type turbulentInlet; referenceField uniform (10 0 0); // 流速 [m/s] fluctuationScale (0.02 0.01 0.01); // 変動スケール } 変動を含んだ流入条件を設定する。 乱流諸量の条件入口の k や ε、ωなどにどのような値を指定すべきかは、一般的にははっきりしない。実験値が得られない場合、適当に見積もる必要がある。k、ε、ωはそれぞれ次式で表される。 k = (3/2)*(U*I)^2 ε = Cmu^(3/4)*k^(3/2)/Lm ω = ε/k = k^(1/2)/(Cmu^(1/4)*Lm) Cmu = 0.09 I は乱流強度 (turbulent intensity)、Lm は混合長 (mixing length) である。乱流強度は、十分に発達した流れでは数%の値をとる。混合長は、ダクト内の十分発達した流れでは次式で近似できる。 Lm = 0.07*L L は代表長さで、円形のダクトであれば直径、そうでなければ水力直径 (4×断面積/断面周長) とする。 レイノルズ応力 R については、対角成分に (3/2)*k を入れておけばよい。 k やεなどを直接指定するのではなく、乱流強度や混合長で指定するための特別な境界条件がある。 kinlet { type turbulentIntensityKineticEnergyInlet; intensity 0.05; // 5 % value uniform 1; } intensity に乱流強度を設定する。乱流強度が 5 % ならば 0.05 を指定する。 εinlet { type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; // [m] value uniform 1; } mixingLength に混合長を設定する。 ωinlet { type turbulentMixingLengthFrequencyInlet; mixingLength 0.005; // [m] k k; value uniform 1; } mixingLength に混合長を設定する。 buoyantSimpleFoam などの圧縮性流体ソルバーの場合、εとωについては、タイプ名の頭に "compressible::" を付ける (たとえば "compressible::turbulentMixingLengthDissipationRateInlet")。 壁面速度の設定壁面速度の設定は fixedValue でそのまま指定すればよい。いくつか特殊な設定について以下で述べる。 スリップ壁面をスリップ条件にしたい場合は、U で slip を指定する。 wall { type slip; } それ以外の変数については zeroGradient にする。 回転速度の設定円筒の壁が回転するような場合は、つぎのようにして回転速度を設定する。 wall { type rotatingWallVelocity; orgin (0 0 0); // 回転軸の位置 axis (0 0 1); // 回転軸ベクトル omega constant 10; // 角速度 [rad/s] } 速度 v を指定したい場合、円筒半径を r とすると、omega = v/r を指定すればよい。 熱の境界条件の設定熱の境界条件としては、断熱である zeroGradient、温度指定である fixedValue 以外に以下のようなものがある。 熱流束の設定壁面に熱流束を設定するには turbulentHeatFluxTemperature を使う。 buoyantSimpleFoam などではつぎのように設定する。 wall { type compressible::turbulentHeatFluxTemperature; heatSource flux; // flux (熱流束) または power (熱量) q uniform 100; // 熱流束 [W/m2] または 熱量 [W] kappa fluidThermo; kappaName none; value uniform 300; } buoyantBoussinesqSimpleFoam などではつぎのように設定する。 wall { type turbulentHeatFluxTemperature; heatSource flux; // flux (熱流束) または power (熱量) q uniform 100; // 熱流束 [W/m2] または 熱量 [W] alphaEff alphaEff; value uniform 300; } ただし、constant/transportProperties で Cp0 (密度×比熱) を設定する必要がある。 壁面熱伝達の設定壁面熱伝達を設定するには wallHeatTransfer を使う。 wall { type wallHeatTransfer; Tinf uniform 300; // 外部温度 alphaWall uniform 1; // 熱伝達係数 value uniform 300; } buoyantBoussinesqSimpleFoam などでは利用できない。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PENGUINITIS |