粒子投入設定2011年11月11日 | |
はじめに粒子投入 (injection) の設定について。 使用バージョンOpenFOAM 2.0.1 使用ソルバーicoUncoupledKinematicParcelFoam 粒子投入設定粒子投入設定は constant/kinematicCloudProperties で行う。このファイル名はソルバーによって異なるが、似たような名前 (たとえば reactingParcelFoam ならば reactingCloud1Properties ) になっており、中身も似ている。 ここでは「粒子」と書いているが、正確には "parcel" で、これは "particle" (粒子) の集合として考えられている。粒子のようにふるまうが、粒子そのものというよりは粒子集合の代表粒子といったものである。 粒子投入のモデル粒子投入モデルには次のようなものがある。
patchInjectionパッチから粒子を飛ばす。パッチに接するセル中心から粒子が投入される。設定は次のように行う。
subModels
{
...
injectionModel patchInjection;
...
patchInjectionCoeffs
{
massTotal 0.01;
SOI 0;
parcelBasisType mass;
patchName in;
duration 1;
parcelsPerSecond 100;
U0 ( 0 -1 0 );
flowRateProfile constant 1;
sizeDistribution
{
type fixedValue;
fixedValueDistribution
{
value 1e-3;
}
}
}
patchName が patchInjection 特有のパラメタで、パッチの名前を指定する。その他の設定は以下の通り。
kinematicLookupTableInjectionテーブルで粒子投入条件を指定する。
subModels
{
...
injectionModel kinematicLookupTableInjection;
...
kinematicLookupTableInjectionCoeffs
{
massTotal 0;
SOI 0;
parcelBasisType fixed;
nParticle 1;
inputFile "parcelInjectionProperties";
duration 1;
parcelsPerSecond 100;
}
inputFile で粒子投入条件が書かれたファイル名を指定している。このファイルは次のようになっている。
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object scalarListList;
}
// (x y z) (u v w) d rho mDot
(
(0.025 0.075 0.005) (0 0 0) 1e-3 964 1
(0.05 0.075 0.005) (0 0 0) 1e-3 964 1
(0.075 0.075 0.005) (0 0 0) 1e-3 964 1
);
コメントにあるように、1 行に粒子投入位置、初期速度、径、密度、質量流量 (?) を指定する。mDot を 0 にすると粒子が出なくなる。また、mDot を変えても粒子の流入質量に影響を与えないように見える。 ここでの parcelsPerSecond は、投入位置 1 つあたりの値である。parcelsPerSecond が 100 で粒子投入位置が 3 つあれば、1 秒間で 300 個の粒子が投入されることになる。 1 時間ステップあたりに投入される粒子数が粒子投入位置の数と同じになるように時間刻みを調整しないと、粒子投入位置が偏る (最初の投入位置ばかりから出たりする)。言い換えると、1 時間ステップあたりに各粒子投入位置から粒子がちょうど 1 個出てくるようにする。つまり 時間刻みに parcelPerSecond の逆数を設定する。 粒子投入条件テーブルの作成粒子投入条件テーブルを作成するには、次のような Python スクリプトを用意すると楽である。
#!/usr/bin/python
# create parcel injections
from random import random
# input start
minx = 0
maxx = 0.05
miny = 0.075
maxy = 0.075
minz = 0
maxz = 0.1
nx = 3
ny = 1
nz = 1
turbdx = 1e-4
turbdy = 0
turbdz = 0
d = 1e-3
v = (0, -1, 0)
rho = 964
mdot = 1
# input end
rangex = maxx - minx
rangey = maxy - miny
rangez = maxz - minz
dx = rangex/(nx + 1)
dy = rangey/(ny + 1)
dz = rangez/(nz + 1)
for i in range(0, nx):
for j in range(0, ny):
for k in range(0, nz):
x = minx + dx*(i + 1) + turbdx*random()
y = miny + dy*(j + 1) + turbdy*random()
z = minz + dz*(k + 1) + turbdz*random()
print "(%f %f %f) (%f %f %f) %e %f %e" % ¥
(x, y, z, v[0], v[1], v[2], d, rho, mdot)
これは格子状に粒子投入位置を作成する。乱数で位置をずらして不整を作っている。 入力値
manualInjection粒子の配置を指定する。
subModels
{
...
injectionModel manualInjection;
...
manualInjectionCoeffs
{
massTotal 0;
SOI 0;
parcelBasisType fixed;
nParticle 1;
positionsFile "kinematicCloudPositions";
U0 ( 0 0 0 );
sizeDistribution
{
type fixedValue;
fixedValueDistribution
{
value 1e-3;
}
}
}
positionFile で粒子位置を記述したファイルの名前を指定する。このファイルは次のようになっている。
FoamFile
{
version 2.0;
format ascii;
class vectorField;
object kinematicCloudPositions;
}
(
(0.025 0.075 0.005)
(0.05 0.075 0.005)
(0.075 0.075 0.005)
)
これは粒子を直接配置するものである。kinematicLookupTableInjection のように粒子をどんどん投入するようなことはできない。 粒子位置ファイルの作成kinematicLookupTableInjection の粒子投入条件テーブル作成スクリプトを改造して使えばよい。 粒子投入のタイプ上記設定において、parcelBasisType で次のような粒子投入のタイプを指定できる。
mass質量ベース。粒子をすべて入れ終わる (SOI から during だけ時間が経過する) と、投入質量は massTotal で指定したものに一致する。粒子個数は parcelsPerSecond の値で決まるが、それでなぜ質量が massTotal になるかというと、代表粒子 (parcel) に含まれる粒子 (particle) の個数が調整されるからである。 fixed代表粒子 (parcel) に含まれる粒子 (particle) の個数が固定される。パラメタ nParticle で particle の数を指定する。ふつう nParticle は 1 に設定されるが、この場合は parcel = particle となり、見たまんまとなる。DEM 解析で使われる。massTotal は無視され、投入質量は入れた分で計算される。 粒径分布 のタイプ粒径分布指定 sizeDistribution には次のようなタイプがある。
fixedValue粒径固定。
sizeDistribution
{
type fixedValue;
fixedValueDistribution
{
value 1e-3;
}
}
general粒径ごとに質量分率 (%) を指定する (たぶん)。
sizeDistribution
{
type general;
generalDistribution
{
distribution
(
(10e-06 0.0025)
(15e-06 0.0528)
(20e-06 0.2795)
(25e-06 1.0918)
(30e-06 2.3988)
(35e-06 4.4227)
(40e-06 6.3888)
(45e-06 8.6721)
(50e-06 10.3153)
(55e-06 11.6259)
(60e-06 12.0030)
(65e-06 10.4175)
(70e-06 10.8427)
(75e-06 8.0016)
(80e-06 6.1333)
(85e-06 3.8827)
(90e-06 3.4688)
);
}
}
RosinRammlerRosin-Rammler 分布。
sizeDistribution
{
type RosinRammler;
RosinRammlerDistribution
{
minValue 5e-06;
maxValue 0.000565;
d 4.8e-05;
n 0.5;
}
}
| |
| PENGUINITIS | |