Upload
fumiya-nozaki
View
1.501
Download
8
Embed Size (px)
DESCRIPTION
Citation preview
Fumiya Nozaki
最終更新日: 2014年8月11日
日本語版
OpenFOAM
境界条件 Boundary Conditions
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
3
cylindricalInletVelocity
• 円柱座標系の軸 (Z) 方向を “axis” で指定します.規格化されるので単位ベクトルでなくても問題ありません.
• 上で指定した軸上の点を “centre” で指定します.
• 軸方向の速度成分 𝑈𝑧 の大きさを “axialVelocity” で指定します.指定値が正の場合には “axis” と同じ向き,負の場合には “axis” と逆向きになります.
• 径方向の速度成分 𝑈𝑟 の大きさを “radialVelocity” で指定します.指定値が正の場合には軸から離れる方向を向き,負の場合には軸の方を向きます.
• 周方向の速度成分 𝑈𝜃 は,”rpm” と軸からの距離より次式で計算されます.ここで,”rpm” は軸周りの1分間当たりの回転数を意味しています.
𝑈𝜃 =𝑟𝑝𝑚 × 2𝜋
60×軸からの距離
• 周方向速度の向きは,”rpm” が正の場合には右ねじの法則に従います.負の場合には逆向きになります.
axis
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();
}
5
fixedMean
“fixedMean” を使用することで,フェイスの面積 𝑺𝑓 を重みとした境界上の物理量の平均値を指定することができます.
outlet
{
type fixedMean;
meanValue 10.0;
value uniform 0.0;
}
書式
outlet
𝑆𝑓 𝑝𝑓
𝑆𝑓𝑓
= 10.0
meanValue
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 }
境界に隣接するセルのセル中心値
7
fixedMean
• 110-113行:境界に隣接するセルのセル中心値を使って,meanValuePsi を計算します.これは,セル中心値で評価した平均値です.
• 114-121行:指定された平均値 meanValue_ と上で計算した meanValuePsi とから,次の関係を満たすように境界値を決定します.
𝑆𝑓 𝜙𝑓𝑓
𝑆𝑓𝑓
= 𝑚𝑒𝑎𝑛𝑉𝑎𝑙𝑢𝑒
境界値
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 );
}
書式
𝒖 = 𝒖𝑅 +𝜴 × 𝒓
絶対速度
相対速度
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 行目
10
turbulentIntensityKineticEnergyInlet
“turbulentIntensityKineticEnergyInlet” 境界条件を使用することで,乱流エネルギー 𝑘 の境界値を乱流強度 𝐼 から設定できます.
境界上の各フェイス中心点における乱流エネルギーが次式から計算されます.
𝑘 =3
2 𝑈 𝐼 2
⇒ 流速が分布をもつ場合には,乱流エネルギーも分布をもちます.
𝐼: intensity
Inlet
{
type turbulentIntensityKineticEnergyInlet;
intensity 0.05; // 乱流強度 5%
U U; // 流速ベクトル名
value uniform 1; // 初期での可視化に使用 }
書式
11
turbulentMixingLengthFrequencyInlet
“turbulentMixingLengthFrequencyInlet” 境界条件を使用することで,比散逸率 𝜔 の境界値を混合長 𝐿 から設定できます.
境界上の各フェイス中心点における比散逸率が次式から計算されます.
𝜔 =𝑘
𝐶𝜇0.25 𝐿
⇒ 乱流エネルギー 𝑘 が分布をもつ場合には,比散逸率も分布をもちます.
Inlet
{
type turbulentMixingLengthFrequencyInlet;
mixingLength 0.005; // 混合長[m]
value uniform 1;
}
書式
𝐿: mixingLength
モデル定数 𝐶𝜇 (デフォルト値 0.09)