openfoam の境界条件をまとめよう!

11
Fumiya Nozaki 最終更新日: 2014年8月11日 日本語版 OpenFOAM 境界条件 Boundary Conditions

Upload: fumiya-nozaki

Post on 22-Nov-2014

1.501 views

Category:

Technology


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: OpenFOAM の境界条件をまとめよう!

Fumiya Nozaki

最終更新日: 2014年8月11日

日本語版

OpenFOAM

境界条件 Boundary Conditions

Page 2: OpenFOAM の境界条件をまとめよう!

2

cylindricalInletVelocity

“cylindricalInletVelocity” を使用することで,流速の境界条件を円柱座標系𝑈𝑟,𝑈𝜃,𝑈𝑧 で指定することができます.

myPatch

{

type cylindricalInletVelocity;

axis (0 0 1);

centre (0 0 0);

axialVelocity constant 30;

radialVelocity constant -10;

rpm constant 100;

}

書式

axis

𝑈𝑟 𝑈𝜃

𝑈𝑧

centre centre

Page 3: OpenFOAM の境界条件をまとめよう!

3

cylindricalInletVelocity

• 円柱座標系の軸 (Z) 方向を “axis” で指定します.規格化されるので単位ベクトルでなくても問題ありません.

• 上で指定した軸上の点を “centre” で指定します.

• 軸方向の速度成分 𝑈𝑧 の大きさを “axialVelocity” で指定します.指定値が正の場合には “axis” と同じ向き,負の場合には “axis” と逆向きになります.

• 径方向の速度成分 𝑈𝑟 の大きさを “radialVelocity” で指定します.指定値が正の場合には軸から離れる方向を向き,負の場合には軸の方を向きます.

• 周方向の速度成分 𝑈𝜃 は,”rpm” と軸からの距離より次式で計算されます.ここで,”rpm” は軸周りの1分間当たりの回転数を意味しています.

𝑈𝜃 =𝑟𝑝𝑚 × 2𝜋

60×軸からの距離

• 周方向速度の向きは,”rpm” が正の場合には右ねじの法則に従います.負の場合には逆向きになります.

axis

Page 4: OpenFOAM の境界条件をまとめよう!

4

cylindricalInletVelocity

void Foam::cylindricalInletVelocityFvPatchVectorField::updateCoeffs()

{

if (updated())

{

return;

}

const scalar t = this->db().time().timeOutputValue();

const scalar axialVelocity = axialVelocity_->value(t);

const scalar radialVelocity = radialVelocity_->value(t);

const scalar rpm = rpm_->value(t);

vector hatAxis = axis_/mag(axis_);

const vectorField r(patch().Cf() - centre_);

const vectorField d(r - (hatAxis & r)*hatAxis);

tmp<vectorField> tangVel

(

(rpm*constant::mathematical::pi/30.0)*(hatAxis) ^ d

);

operator==(tangVel + hatAxis*axialVelocity + radialVelocity*d/mag(d));

fixedValueFvPatchField<vector>::updateCoeffs();

}

Page 5: OpenFOAM の境界条件をまとめよう!

5

fixedMean

“fixedMean” を使用することで,フェイスの面積 𝑺𝑓 を重みとした境界上の物理量の平均値を指定することができます.

outlet

{

type fixedMean;

meanValue 10.0;

value uniform 0.0;

}

書式

outlet

𝑆𝑓 𝑝𝑓

𝑆𝑓𝑓

= 10.0

meanValue

Page 6: OpenFOAM の境界条件をまとめよう!

6

fixedMean

0100 template<class Type>

0101 void fixedMeanFvPatchField<Type>::updateCoeffs()

0102 {

0103 if (this->updated())

0104 {

0105 return;

0106 }

0107

0108 Field<Type> newValues(this->patchInternalField());

0109

0110 Type meanValuePsi =

0111 gSum(this->patch().magSf()*newValues)

0112 /gSum(this->patch().magSf());

0113

0114 if (mag(meanValue_) > SMALL && mag(meanValuePsi)/mag(meanValue_) > 0.5)

0115 {

0116 newValues *= mag(meanValue_)/mag(meanValuePsi);

0117 }

0118 else

0119 {

0120 newValues += (meanValue_ - meanValuePsi);

0121 }

0122

0123 this->operator==(newValues);

0124

0125 fixedValueFvPatchField<Type>::updateCoeffs();

0126 }

境界に隣接するセルのセル中心値

Page 7: OpenFOAM の境界条件をまとめよう!

7

fixedMean

• 110-113行:境界に隣接するセルのセル中心値を使って,meanValuePsi を計算します.これは,セル中心値で評価した平均値です.

• 114-121行:指定された平均値 meanValue_ と上で計算した meanValuePsi とから,次の関係を満たすように境界値を決定します.

𝑆𝑓 𝜙𝑓𝑓

𝑆𝑓𝑓

= 𝑚𝑒𝑎𝑛𝑉𝑎𝑙𝑢𝑒

境界値

Page 8: OpenFOAM の境界条件をまとめよう!

8

SRFVelocity

“SRFVelocity” を使用することで,SRFSimpleFoam や SRFPimpleFoam で解かれる相対速度 Urel に関する境界条件を,相対速度または絶対速度で指定することができます. 慣性座標系の 絶対速度 で指定する場合

• “relative” を “no” に設定 • “inletValue” で絶対速度の分布を指定

回転座標系の 相対速度 で指定する場合 • “relative” を “yes” に設定 • “inletValue” で相対速度の分布を指定

inlet

{

type SRFVelocity;

inletValue uniform ( 0 0 -10 );

relative no;

value uniform ( 0 0 0 );

}

書式

𝒖 = 𝒖𝑅 +𝜴 × 𝒓

絶対速度

相対速度

Page 9: OpenFOAM の境界条件をまとめよう!

9

SRFVelocity

void Foam::SRFVelocityFvPatchVectorField::updateCoeffs()

{

if (updated())

{

return;

}

// If not relative to the SRF include the effect of the SRF

if (!relative_)

{

// Get reference to the SRF model

const SRF::SRFModel& srf =

db().lookupObject<SRF::SRFModel>("SRFProperties");

// Determine patch velocity due to SRF

const vectorField SRFVelocity(srf.velocity(patch().Cf()));

operator==(-SRFVelocity + inletValue_);

}

// If already relative to the SRF simply supply the inlet value as a fixed

// value

else

{

operator==(inletValue_);

}

fixedValueFvPatchVectorField::updateCoeffs();

}

“relative” を “no” に設定した場合

𝜴 × 𝒓 の計算

𝒖𝑅 = −𝜴 × 𝒓 + 𝒖

“relative” を “yes” に設定した場合

SRFModel.C の 160 行目

Page 10: OpenFOAM の境界条件をまとめよう!

10

turbulentIntensityKineticEnergyInlet

“turbulentIntensityKineticEnergyInlet” 境界条件を使用することで,乱流エネルギー 𝑘 の境界値を乱流強度 𝐼 から設定できます.

境界上の各フェイス中心点における乱流エネルギーが次式から計算されます.

𝑘 =3

2 𝑈 𝐼 2

⇒ 流速が分布をもつ場合には,乱流エネルギーも分布をもちます.

𝐼: intensity

Inlet

{

type turbulentIntensityKineticEnergyInlet;

intensity 0.05; // 乱流強度 5%

U U; // 流速ベクトル名

value uniform 1; // 初期での可視化に使用 }

書式

Page 11: OpenFOAM の境界条件をまとめよう!

11

turbulentMixingLengthFrequencyInlet

“turbulentMixingLengthFrequencyInlet” 境界条件を使用することで,比散逸率 𝜔 の境界値を混合長 𝐿 から設定できます.

境界上の各フェイス中心点における比散逸率が次式から計算されます.

𝜔 =𝑘

𝐶𝜇0.25 𝐿

⇒ 乱流エネルギー 𝑘 が分布をもつ場合には,比散逸率も分布をもちます.

Inlet

{

type turbulentMixingLengthFrequencyInlet;

mixingLength 0.005; // 混合長[m]

value uniform 1;

}

書式

𝐿: mixingLength

モデル定数 𝐶𝜇 (デフォルト値 0.09)