SlideShare a Scribd company logo
1 of 49
Download to read offline
OpenFOAMにおけるDEM
計算の⼒力力モデルの解読
⼤大阪⼤大学⼤大学院基礎⼯工学研究科
  博⼠士2年年  ⼭山本卓也
第44回OpenCAE勉強会@関西	
  
2015/12/13
OpenFOAMでのDEM	
OpenFOAM-­‐2.0.0よりDEM解析が実装された。	
2011/6/16 	
  OpenFOAM-­‐2.0.0でDEM(Discrete	
  Element	
  
	
   	
  Method)の機能追加	
  
	
   	
  (Lagrangianライブラリが追加)	
  
2014/2/17 	
  OpenFOAM-­‐2.3.0でDPM(Discrete	
  ParHcle	
  
	
   	
  Modeling)が実装	
  
	
   	
  MP-­‐PIC(MulHphase	
  ParHcle-­‐in-­‐Cell)法が実装	
Release	
  History	
OpenFOAMのDEMについてあまりdocumentがないので調査する。	
  
	
  
粒子に働く力のモデルについて	
  
力のモデル	
Ver.	
  2.3.x	
13	
  
(	
  
ErgunWenYuDrag	
  
PlessisMasliyahDrag	
  
SRF	
  
SaffmanMeiLiSForce	
  
TomiyamaLiS	
  
WenYuDrag	
  
gravity	
  
nonInerHalFrame	
  
nonSphereDrag	
  
paramagneHc	
  
pressureGradient	
  
sphereDrag	
  
virtualMass	
  
)	
constant/kinemaHcCloudProperHesに適当な文字入れてerrorをはき出すと	
13種類の粒子に働くモデル	
それぞれどのような力を表しているか?
力のモデル	
$FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces	
このフォルダ中に力のモデルが書かれている	
.	
  
├──	
  Drag	
  
├──	
  Gravity	
  
├──	
  LiS	
  
├──	
  NonInerHalFrame	
  
├──	
  ParamagneHc	
  
├──	
  ParHcleForce	
  
├──	
  PressureGradient	
  
├──	
  SRF	
  
├──	
  VirtualMass	
  
└──	
  forceSuSp	
$tree	
  -­‐L	
  1	
Drag/	
  
├──	
  ErgunWenYuDrag	
  
├──	
  NonSphereDrag	
  
├──	
  PlessisMasliyahDrag	
  
├──	
  SphereDrag	
  
└──	
  WenYuDrag	
LiS	
  
├──	
  LiSForce	
  
├──	
  SaffmanMeiLiS	
  
└──	
  TomiyamaLiS	
各tree構造内に	
抵抗モデル	
  
(5種類)	
揚力モデル	
  
(2種類)
抵抗モデル	
抵抗モデル(5種類)	
  
•  ErgunWenYuDrag	
  
•  NonSphereDrag	
  
•  PlessisMasliyahDrag	
  
•  SphereDrag	
  
•  WenYuDrag	
 具体的にどういう定式化で	
  
どのように実装されているか?	
粒子Re数	
ρ:	
  密度	
  
u:	
  速度	
  
d:	
  粒子直径	
  
µ:	
  粘度	
Re =
ρf uf −us ds
µf
抵抗モデル(Sphere)	
Sphereモデル	
Re <1000
else.
F = Cd Ap
ρf u2
2
Ap = π
ds
2
!
"
#
$
%
&
2
ms = ρsVs = ρs
4
3
π
ds
2
!
"
#
$
%
&
3
Ap =
3
4
ms
ρs
2
ds
!
"
#
$
%
&
球の場合の投影面積	
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
Ap:	
  投影面積	
  
Cd:	
  抵抗係数	
  
ρ:	
  密度	
  
u:	
  速度差(=|uf-­‐us|)	
  
V: 体積	
  
d:	
  粒子直径	
ρf =
Reµf
uds
Reの定義より	
F =
3
4
msCd Re
µf
ρsds
2
u
(1)	
(2)	
(3)	
(1)に(2),(3)を代入	
Cd =
24
Re
1+
1
6
Re
2
3
!
"
#
$
%
&
Cd = 0.424
抵抗モデル(Sphere)	
F =
3
4
msCd Re
µf
ρsds
2
u
	
  value.Sp()	
  =	
  mass*0.75*muc*CdRe(Re)/(p.rho()*sqr(p.d()));	
SphereDragForce.C中	
OpenFOAM内ではSpとして力の係数として実装	
	
  if	
  (Re	
  >	
  1000.0)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  0.424*Re;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  else	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  24.0*(1.0	
  +	
  1.0/6.0*pow(Re,	
  2.0/3.0));	
  
	
  	
  	
  	
  }	
Re <1000
else.
Cd =
24
Re
1+
1
6
Re
2
3
!
"
#
$
%
&
Cd = 0.424
Cd値	
CdRe値	
SphereDragForce.C中
抵抗モデル
(NonSphere)	
Cd =
24
Re
1+ a⋅Reb
( )+
c⋅Re
Re+ d
NonSphereモデル	
A.	
  Haier	
  and	
  O.	
  Levenspiel,	
  Powder	
  Technol.,	
  58,	
  63-­‐70	
  (1989)	
a φ( )= exp 2.3288− 6.4581φ + 2.4486φ2
( )
b φ( )= 0.0964+ 0.5565φ
c φ( )= exp 4.9050 −13.8944φ +18.4222φ2
−10.2599φ3
( )
d φ( )= exp 1.4681+12.2584φ − 20.7322φ2
+15.8855φ3
( )
F =
3
4
msCd Re
µf
ρsds
2
uf −us
抵抗モデル
(NonSphere)	
Cd値	
 CdRe値	
	
  return	
  24.0*(1.0	
  +	
  a_*pow(Re,	
  b_))	
  +	
  Re*c_/(1	
  +	
  d_/(Re	
  +	
  ROOTVSMALL));	
Cd =
24
Re
1+ a⋅Reb
( )+
c
1+ d / Re+ small( )
value.Sp()	
  =	
  mass*0.75*muc*CdRe(Re)/(p.rho()*sqr(p.d()));	
F =
3
4
msCd Re
µf
ρsds
2
u
a,	
  b,	
  c,	
  dもNonSphereDragForce.C中で定義しているが長いので割愛	
NonSphereDragForce.Cの中	
NonSphereDragForce.Cの中
抵抗モデル(WenYu)	
nRe <1000
else.
β =
3
4
Cd
ρf 1− n( )
ds
uf −us n−2.65
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
β:	
  相関係数	
  
Cd:	
  抵抗係数	
  
n:	
  空隙率	
  
d:	
  直径	
  
ρ:	
  密度	
  
u:	
  速度	
  
V: 体積	
Wen-­‐Yuモデル	
Cd =
24
nRe
1+ 0.15 nRe( )
0.687
( )
Cd = 0.44
固体粒子に働く抗力	
Ff =
β
1− n
uf −us( )Vs
C.	
  Y.	
  Wen	
  and	
  Y.	
  H.	
  Yu,	
  Chem.	
  Eng.	
  Prog.	
  S.	
  Ser.,	
  62,	
  100-­‐113	
  (1966).	
Res = nRe =
nρf ds uf −us
µf
抵抗モデル(WenYu)	
β =
3
4
Cd
1− n( )
ds
ρf uf −us n−2.65
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
β:	
  相関係数	
  
Cd:	
  抵抗係数	
  
n:	
  空隙率	
  
d:	
  直径	
  
ρ:	
  密度	
  
u:	
  速度	
  
V: 体積	
固体粒子に働く抗力	
Ff =
β
1− n
uf −us( )Vs
C.	
  Y.	
  Wen	
  and	
  Y.	
  H.	
  Yu,	
  Chem.	
  Eng.	
  Prog.	
  S.	
  Ser.,	
  62,	
  100-­‐113	
  (1966).	
Ff =
Vs
1− n
3
4
Cd
1− n( )
ds
ρf n−2.65
uf −us
2
Ff =
ms
ρs
3
4
Cd Res µf
nds
2
n−2.65
uf −us
Vs =
ms
ρs
,ρf =
Res µf
n uf −us ds
抵抗モデル(WenYu)	
	
  return	
  forceSuSp	
  
	
  	
  	
  	
  (	
  
	
  	
  	
  	
  	
  	
  	
  	
  vector::zero,	
  
	
  	
  	
  	
  	
  	
  	
  	
  (mass/p.rho())	
  
	
  	
  	
  	
  	
  	
  	
  *0.75*CdRe(alphac*Re)*muc*pow(alphac,	
  -­‐2.65)/(alphac*sqr(p.d()))	
  
	
  	
  	
  	
  );	
Suはゼロ	
ms
ρs
3
4
Cd Reµcαc
−2.65
αcds
2
Ff =
ms
ρs
3
4
Cd Res µf
nds
2
n−2.65
uf −us
WenYuDragForce.Cの中
抵抗モデル
(ErgunWenYu)	
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
β:	
  相関係数	
  
Cd:	
  抵抗係数	
  
n:	
  空隙率	
  
d:	
  直径	
  
ρ:	
  密度	
  
u:	
  速度	
  
µ:	
  密度	
Wen-­‐Yuモデル	
  (n	
  >	
  0.8)	
Ergunモデル	
  (n	
  <	
  0.8)	
β =150
1− n( )
2
n2
µf
ds
2
+1.75
1− n( )
n
ρf
ds
uf −us
空隙率によって	
  
モデルを切り替え	
S.	
  Ergun,	
  Chem.	
  Eng.	
  Prog.,	
  48,	
  89-­‐94	
  (1952).	
nRe <1000
else.
β =
3
4
Cd
ρf 1− n( )
ds
uf −us n−2.65
Cd =
24
nRe
1+ 0.15 nRe( )
0.687
( )
Cd = 0.44
抵抗モデル
(ErgunWenYu)	
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
β:	
  相関係数	
  
Cd:	
  抵抗係数	
  
n:	
  空隙率	
  
d:	
  直径	
  
ρ:	
  密度	
  
u:	
  速度	
  
V: 体積	
固体粒子に働く抗力	
Ff =
β
1− n
uf −us( )Vs
C.	
  Y.	
  Wen	
  and	
  Y.	
  H.	
  Yu,	
  Chem.	
  Eng.	
  Prog.	
  S.	
  Ser.,	
  62,	
  100-­‐113	
  (1966).	
Ff =
ms
ρs
µf
nd2
s
150
1− n( )
n
+1.75Re
!
"
#
$
%
&
uf −us
Vs =
ms
ρs
ρf =
Reµf
uf −us ds
Ff =
ms
ρs
β
1− n
uf −us( )
β =150
1− n( )
2
n2
µf
ds
2
+1.75
1− n( )
n
Reµf
ds
2
β =150
1− n( )
2
n2
µf
ds
2
+1.75
1− n( )
n
ρf
ds
uf −us
抵抗モデル
(ErgunWenYu)	
	
  if	
  (alphac	
  <	
  0.8)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  forceSuSp	
  
	
  	
  	
  	
  	
  	
  	
  	
  (	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  vector::zero,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (mass/p.rho())	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  *(150.0*(1.0	
  -­‐	
  alphac)/alphac	
  +	
  1.75*Re)*muc/(alphac*sqr(p.d()))	
  
	
  	
  	
  	
  	
  	
  	
  	
  );	
  
	
  	
  	
  	
  }	
ms
ρs
150
1−αc( )
αc
+1.75Re
!
"
#
$
%
&
µf
αcd2
s
Ff =
ms
ρs
µf
nd2
s
150
1− n( )
n
+1.75Re
!
"
#
$
%
&
uf −us
ErgunWenYuDragForce.Cの中
抵抗モデル
(PlessisMasliyah)	
Plessis-­‐Masliyahモデル	
  (RUCモデル)	
A =
26.8n3
1− n( )
2
3 1− 1− n( )
1
3
!
"
#
$
%
& 1− 1− n( )
2
3
!
"
#
$
%
&
2
B =
n2
1− 1− n( )
2
3
!
"
#
$
%
&
2
β = A
1− n( )
2
n2
µf
ds
2
+ B
1− n( )
n
ρf
ds
uf −us
Ergunモデルの係数変更	
J.	
  P.	
  Du	
  Plessis	
  and	
  J.	
  H.	
  Masliyah,	
  Trans.	
  Porous	
  	
  Media,	
  3,	
  145-­‐161	
  (1988).	
  
抵抗モデル
(PlessisMasliyah)	
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
β:	
  相関係数	
  
Cd:	
  抵抗係数	
  
n:	
  空隙率	
  
d:	
  直径	
  
ρ:	
  密度	
  
u:	
  速度	
  
V: 体積	
固体粒子に働く抗力	
Ff =
β
1− n
uf −us( )Vs
Ff =
ms
ρs
µf
nd2
s
A
1− n( )
n
+ BRe
!
"
#
$
%
&
uf −us
Vs =
ms
ρs
ρf =
Reµf
uf −us ds
Ff =
ms
ρs
β
1− n
uf −us( )
β = A
1− n( )
2
n2
µf
ds
2
+ B
1− n( )
n
Reµf
ds
2
β = A
1− n( )
2
n2
µf
ds
2
+ B
1− n( )
n
ρf
ds
uf −us
抵抗モデル
(PlessisMasliyah)	
	
  scalar	
  A	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  26.8*pow3(alphac)	
  
	
  	
  	
  	
  	
  	
  	
  /(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  sqr(cbrtAlphap)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  *(1.0	
  -­‐	
  cbrtAlphap)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  *sqr(1.0	
  -­‐	
  sqr(cbrtAlphap))	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  SMALL	
  
	
  	
  	
  	
  	
  	
  	
  	
  );	
	
  scalar	
  B	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  sqr(alphac)	
  
	
  	
  	
  	
  	
  	
  	
  /sqr(1.0	
  -­‐	
  sqr(cbrtAlphap));	
	
  vector::zero,	
  
	
  	
  	
  	
  	
  	
  	
  	
  (mass/p.rho())	
  
	
  	
  	
  	
  	
  	
  	
  *(A*(1.0	
  -­‐	
  alphac)/alphac	
  +	
  B*Re)*muc/(alphac*sqr(p.d()))	
ms
ρs
A
1−αc( )
αc
+ BRe
!
"
#
$
%
&
µf
αcd2
s
A =
26.8n3
1− n( )
2
3 1− 1− n( )
1
3
!
"
#
$
%
& 1− 1− n( )
2
3
!
"
#
$
%
&
2
B =
n2
1− 1− n( )
2
3
!
"
#
$
%
&
2
Ff =
ms
ρs
µf
nd2
s
A
1− n( )
n
+ BRe
!
"
#
$
%
&
uf −us
PlessisMasliyahDragForce.Cの中
揚力モデル	
抵抗モデル(2種類)	
  
•  SaffmanMeiLiS	
  
•  TomiyamaLiS	
  
具体的にどういう定式化で	
  
どのように実装されているか?	
Re =
ρf uf −us ds
µf
粒子Re数	
ρ:	
  密度	
  
u:	
  速度	
  
d:	
  粒子直径	
  
µ:	
  粘度
揚力モデル	
	
  scalar	
  Cl	
  =	
  this-­‐>Cl(p,	
  curlUc,	
  Re,	
  muc);	
  
	
  
	
  value.Su()	
  =	
  mass/p.rho()*p.rhoc()*Cl*((p.Uc()	
  -­‐	
  p.U())^curlUc);	
LiSForce.Cの中	
F =
ms
ρs
ρcCl uc −us( )× ∇×uc( )( )
揚力モデル(SaffmanMei)	
固体粒子に働く揚力	
Fl = Cl Ap
ρf uf −us
2
2
固体粒子に働く揚力(Saffmanモデル)	
Fl,Sa = 6.46µf Δu
d
2
!
"
#
$
%
&
2
G
ν
!
"
#
$
%
&
1
2
固体粒子に働く揚力(Saffman-­‐Meiモデル)	
Fl
Fl,Sa
= 1− 0.3314α
1
2
!
"
#
$
%
&exp −
Res
10
!
"
#
$
%
&+ 0.3314α
1
2
= 0.0524 α Res( )
1
2
Res ≤ 40
Res > 40
R.	
  Mei,	
  Int.	
  J.	
  MulHphase	
  Flow,	
  18,	
  145-­‐147	
  (1992)	
Res =
Δuds
ν
α =
1
2
Res ε2
=
1
2
ReG
Res
ε =
ReG
1
2
Res
ReG =
Gds
2
ν
G =
dul
dy
Δu = uf −us
揚力モデル(SaffmanMei)	
Fl,Sa = 6.46µf uf −us
ds
2
!
"
#
$
%
&
2
∇×u
ν
!
"
#
$
%
&
1
2
= 6.46µf
ds
4
ReG uf −us
= 6.46
3
π
ms
ρs
1
ReG
ρf uf −us ∇×u
2
Res =
Δuds
ν
α =
1
2
Res ε2
=
1
2
ReG
Res
ε =
ReG
1
2
Res
ReG =
Gds
2
ν
G =
dul
dy
= ∇×u
Δu = uf −us
固体粒子に働く揚力(Saffmanモデル)	
Fl
Fl,Sa
= mei とおくと	
Fl = 6.46mei
3
π
ms
ρs
1
ReG
ρf uf −us ∇×u
2
=
3
2π
1
ReG
6.46mei
ms
ρs
ρf uf −us ∇×u
Cl	
  (OpenFOAM内での定義で)
揚力モデル(SaffmanMei)	
	
  scalar	
  Rew	
  =	
  p.rhoc()*mag(curlUc)*sqr(p.d())/(muc	
  +	
  ROOTVSMALL);	
  
	
  scalar	
  beta	
  =	
  0.5*(Rew/(Re	
  +	
  ROOTVSMALL));	
  
	
  scalar	
  alpha	
  =	
  0.3314*sqrt(beta);	
  
	
  scalar	
  f	
  =	
  (1.0	
  -­‐	
  alpha)*exp(-­‐0.1*Re)	
  +	
  alpha;	
  
...	
  
	
  if	
  (Re	
  <	
  40)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  Cld	
  =	
  6.46*f;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  else	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  Cld	
  =	
  6.46*0.0524*sqrt(beta*Re);	
  
	
  	
  	
  	
  }	
  
	
  
	
  return	
  3.0/(mathemaHcal::twoPi*sqrt(Rew))*Cld;	
SaffmanMeiLiSForce.Cの中	
Rew =
ρl ∇×u ds
2
µl
α = 0.3314 β
= 0.3314
Rew
2Re
β =
Rew
2Re
Cld = 6.46×0.0524× β Re
= 6.46×0.0524×
Rew
2
Cld = 6.46× f f = 1−α( )×exp −0.1× Re( )+α
= 1− 0.3314
Rew
2Re
#
$
%
&
'
(×exp −
Re
10
#
$
%
&
'
(+ 0.3314
Rew
2Re
ゆえに前のページ(原著論文中)のαはOpenFOAM中でβ,	
  
OpenFOAMのCldは原著論文中のFL/FLSax6.46である	
  
Cl =
3
2π
1
ReG
6.46mei
Cld	
  (OpenFOAMで)
揚力モデル(Tomiyama)	
気泡に働く揚力	
A.	
  Tomiyama	
  et	
  al.,	
  Chem.	
  Eng.	
  Sci.,	
  57,	
  1849-­‐1858	
  (2002)	
  	
Cl = min 0.288tanh 0.121Res( ), f( )
= f
Fl =
Clρf ms
ρs
Δu× ∇×uf( )
Eod < 4
4 ≤ Eod ≤10.7
f = 0.00105Eod
3
− 0.0159Eod
2
− 0.0204Eod + 0.474
Eod =
g ρf − ρs( )dH
2
σ
Eo:	
  Eötvös数	
  
dH:	
  水平方向最大直径	
  
dv:	
  垂直方向最大直径	
  
E:	
  アスペクト比	
  
ds:	
  粒子(気泡)径	
  
E =
dV
dH
=
1
1+ 0.163Eo0.757
dH = 1+ 0.163Eo0.757
( )dV
dH = 1+ 0.163Eo0.757
( )
1
3 ds
揚力モデル(Tomiyama)	
	
  scalar	
  Eo	
  =	
  p.Eo(g,	
  p.d(),	
  sigma_);	
  
	
  	
  	
  	
  scalar	
  dH	
  =	
  p.d()*cbrt(1.0	
  +	
  0.163*pow(Eo,	
  0.757));	
  
	
  	
  	
  	
  scalar	
  Eod	
  =	
  p.Eo(g,	
  dH,	
  sigma_);	
  
	
  	
  	
  	
  scalar	
  f	
  =	
  0.00105*pow3(Eod)	
  -­‐	
  0.0159*sqr(Eod)	
  -­‐	
  0.0204*Eod	
  +	
  0.474;	
  
	
  
	
  	
  	
  	
  if	
  (Eod	
  <=	
  4)	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  min(0.288*tanh(0.121*Re),	
  f);	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  else	
  if	
  ((Eod	
  >	
  4)	
  &&	
  (Eod	
  <=	
  10))	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  f;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  else	
  
	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  -­‐0.27;	
  
	
  	
  	
  	
  }	
TomiyamaLiSForce.Cの中	
Eo =
g ρp − ρc( )ds
2
σ
dH = ds 1+ 0.163Eo0.7573
Eod =
g ρp − ρc( )dH
2
σ
f = 0.00105Eod
3
− 0.0159Eod
2
− 0.0204Eod + 0.474
その他のモデル	
その他モデル(6種類)	
  
•  SRF	
  
•  gravity	
  
•  nonInerHalFrame	
  
•  paramagneHc	
  
•  pressureGradient	
  
•  virtualMass	
  
具体的にどういう定式化で	
  
どのように実装されているか?
SRFモデル	
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
F:	
  外力	
  
m:	
  質量	
  
g:	
  重力加速度	
  
ρ:	
  密度	
  
V:	
  体積	
  
	
  value.Su()	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  mass*(1.0	
  -­‐	
  p.rhoc()/p.rho())	
  
	
  	
  	
  	
  	
  	
  	
  *(2.0*(p.U()	
  ^	
  omega)	
  +	
  (omega	
  ^	
  (r	
  ^	
  omega)));	
SRF	
  (Single	
  RotaTng	
  Frame)	
回転座標系での力(コリオリ力、遠心力)を加える	
FSRF = ms ⋅ 2v ×ω +ω × r ×ω( )
コリオリ力	
 遠心力	
粒子の存在する流体部の値を取り除く必要あり	
  
(存在しないはずの流体分のコリオリ力と遠心力を除く)	
FSRF = ms 1−
ρf
ρs
"
#
$
%
&
'⋅ 2v ×ω +ω × r ×ω( )
SRFForce.C	
v =
dr
dt
重力モデル(gravity)	
粒子に働く重力	
Fg = ms g − ρl gVs
重力	
 浮力	
小文字	
  
f:	
  流体	
  
s:	
  固体	
変数	
  
F:	
  外力	
  
m:	
  質量	
  
g:	
  重力加速度	
  
ρ:	
  密度	
  
V:	
  体積	
  Vs =
ms
ρs
Fg = ms g 1−
ρl
ρs
"
#
$
%
&
'
OpenFOAMの重力モデルでは重力による力と浮力	
	
  value.Su()	
  =	
  mass*g_*(1.0	
  -­‐	
  p.rhoc()/p.rho());	
GravityForce.C
非慣性系モデル	
  
(nonInerTalFrame)	
FnIF = ms ⋅ −w + 2v ×ω +ω × r ×ω( )
Lagragian系で観測したときに現れる見かけの力	
コリオリ力	
 遠心力	
等加速度運動の見かけの力	
v =
dr
dt
全て非慣性系で見られる
見かけの力	
	
  value.Su()	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  mass	
  
	
  	
  	
  	
  	
  	
  	
  *(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐W_	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  (r	
  ^	
  omegaDot_)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  2.0*(p.U()	
  ^	
  omega_)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  (omega_	
  ^	
  (r	
  ^	
  omega_))	
  
	
  	
  	
  	
  	
  	
  	
  	
  );	
NonInerHalFrameForce.C
常磁性モデル	
  
(paramagneTc)	
粒子に働く磁力	
Fmg = ms ⋅
3µ0
ρ
χ
χ +3
H ⋅∇H
#
$
%
&
'
(
?	
	
  value.Su()=	
  
	
  	
  	
  	
  	
  	
  	
  	
  mass*3.0*constant::electromagneHc::mu0.value()/p.rho()	
  
	
  	
  	
  	
  	
  	
  	
  *magneHcSuscepHbility_/(magneHcSuscepHbility_	
  +	
  3)	
  
	
  	
  	
  	
  	
  	
  	
  *HdotGradHInterp.interpolate(p.posiHon(),	
  p.currentTetIndices());	
ParamagneHcForce.C
圧力勾配モデル	
  
(pressureGradient)	
Fp = ms
ρf
ρs
∂uf
∂t
+uf ⋅∇uf
!
"
#
$
%
&
= ms
ρf
ρs
Duf
Dt
粒子に働く圧力勾配力	
なぜか圧力勾配ではなく、流体側の慣性力を用いている。	
OpenFOAMのBugレポートにもあげられているが、問題無いという結論	
  
(Bug	
  #0001302)	
	
  value.Su()	
  =	
  mass*p.rhoc()/p.rho()*DUcDt;	
PressureGradientForce.C	
  
仮想質量モデル	
  
(virtualMass)	
Fvm = cvmFp
= cvmms
ρf
ρs
Duf
Dt
粒子に働く仮想質量力	
Cvm: 	
  仮想質量の係数	
  
	
  (ソースコード内で典型的には0.5と記載)	
粒子を加速または減速させるときに流体側から得るもしくは失う力	
	
  forceSuSp	
  value	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  PressureGradientForce<CloudType>::calcCoupled(p,	
  dt,	
  mass,	
  Re,	
  muc);	
  	
  
value.Su()	
  *=	
  Cvm_;	
VirtualMassForce.C	
  
まとめ	
•  OpenFOAMで用いられているDEMの力のモデル
を調査した。	
  
•  Ver.2.3.x時点で13種類のモデルが含まれており、
それぞれの力のモデルを説明した。	
  
•  常磁性モデル・圧力勾配モデル・仮想質量モデ
ルについては今後編集予定	
  
•  間違いがあれば連絡してください。
forceのクラス構造	
template<class	
  CloudType>	
  
class	
  SphereDragForce	
  
:	
  
	
  	
  	
  	
  public	
  ParHcleForce<CloudType>	
SphereDrag/SphereDragForce.H	
すべてのforceでParHcleForce<CloudType>のクラスを継承	
  
クラスの継承	
class	
  derive	
  :	
  public	
  base	
baseの基底クラスをderiveの派生ク
ラスで継承する。	
「C++の絵本」 (株)アンク 翔泳社	
$FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/
ParHcleForces/ParHcleForce/	
このフォルダ内で一番基底となるParHcleForce<CloudType>クラスを記述
forceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
ParHcleForce.H	
	
  virtual	
  forceSuSp	
  calcCoupled	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  const	
  typename	
  CloudType::parcelType&	
  p,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  const	
  scalar	
  dt,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  const	
  scalar	
  mass,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  const	
  scalar	
  Re,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  const	
  scalar	
  muc	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  const;	
virtual:	
  仮想関数として指定	
  
(派生クラスで再定義した際に派生クラス側
のメンバ関数が呼ばれるようにするため)	
「C++の絵本」 (株)アンク 翔泳社	
ParHcleForce<CloudType>ではcalcCoupled,	
  
calcNonCoupled,	
  massAddは初期化している。	
  
(値として0を代入する。つまり、派生クラスにお
いてオーバーライドすること前提にしている。)
DragForceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
SphereDragForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
SpereDragForceはcalcCoupledのメンバのみ定義	
  
オーバーライドしてcalcCoupledを設定	
  
(Dragの各モデルはすべて同じ構造(ErgunWenYuDrag,	
  
NonSphereDrag,	
  PlessisMasliyahDrag,	
  WenYuDrag))	
CdRe	
ParHcleForce<CloudType>クラス	
各DragForceクラス	
派生クラス上で
定義するメンバ
Li[Forceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
LiSForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
Li[ForceはcalcCoupled,	
  cacheFieldsのメンバをオーバーライド
する。また、新しくClを派生クラス上で定義	
  
オーバーライドしたメンバではcurlUc,	
  Suを計算	
   ∇×Uc,Su
Cl	
派生クラス上で
定義するメンバ
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
LiSForceクラス	
  
メンバ	
Cl	
継承	
クラス	
TomiyamaLiSForceクラス	
  
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
Cl	
継承したメンバ	
 オーバーライド
したメンバ	
TomiyamaLi[ForceクラスはClのメンバのみ定義	
  
オーバーライドしてClを設定	
  
(LiSForceの各モデルはすべて同じ構造(TomiyamaLiSForce,	
  
SaffmanMeiLiSForce))	
ParHcleForce<CloudType>クラス	
 LiSForceクラス	
 各LiSForceクラス	
Li[Forceのクラス構造
GravityForceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
GravityForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
GravityForceはオーバーライドして
calcNonCoupledを設定,	
  gメンバを新しく定義	
  
g	
ParHcleForce<CloudType>クラス	
GravityForceクラス	
派生クラス上で
定義するメンバ
NonInerTalForceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
NonInerHalForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
NonInerTalForceはオーバーライドして
calcNonCoupled,	
  cacheFieldsを設定,	
  W,	
  omega,	
  
omegaDot,	
  CentreOfRotaTonメンバを新しく定義	
  
W	
派生クラス上で
定義するメンバ	
ParHcleForce<CloudType>クラス	
NonInerHalForceクラス	
omega	
 omegaDot	
centreOfRotaHon
ParamagneTcForceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
ParamagneHcForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
NonInerTalForceはオーバーライドしてcalcNonCoupled,	
  
cacheFieldsを設定,	
  HdotGradHName,	
  magneTcSuscepTbility
メンバを新しく定義	
  
HdotGradHName	
派生クラス上で
定義するメンバ	
ParHcleForce<CloudType>クラス	
ParamegneHcForceクラス	
magneHcSuscepHbility
PressureGradientForceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
PressureGradientForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
PressureGradientForceはオーバーライドして
calcCoupled,	
  massAdd,	
  cacheFieldsを設定,	
  
DUcDtInterpメンバを新しく定義	
  
DUcDtInterp	
派生クラス上で
定義するメンバ	
ParHcleForce<CloudType>クラス	
PressureGradientForceクラス
VirtualMassForceのクラス構造	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
VirtualMassForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
Vi_ualMassForceはオーバーライドして
calcCoupled,	
  massAdd,	
  cacheFieldsを設定	
  
ParHcleForce<CloudType>クラス	
PressureGradientForceクラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
PressureGradientForceクラス	
  
DUcDtInterp	
VirtualMassForceクラス	
DUcDtInterp
SRFForceのクラス構造	
ParHcleForce<CloudType>クラス	
Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
メンバ	
 クラス	
継承	
 Owner	
 Mesh	
 Coeffs	
cacheFields	
 calcCoupled	
calcNonCoupled	
 massAdd	
SRFForceクラス	
  
継承したメンバ	
 オーバーライド
したメンバ	
SRFForceはオーバーライドして
calcNonCoupled,	
  cacheFieldsを設定	
  
ParHcleForce<CloudType>クラス	
SRFForceクラス
coupled	
  or	
  nonCoupled	
Coupled	
 nonCoupled	
LiSForce	
  
(TomiyamaLiSForce,	
  	
  
SaffmanMeiLiSForce)	
DragForce	
  
(SphereDrag,	
  ErgunWenYuDrag,	
  	
  
NonSphereDrag,	
  PlessisMasliyahDrag,	
  	
  
WenYuDra)	
GravityForce	
NonInerHalForce	
ParamegneHcForce	
PressureGradientForce	
VirtualMassForce	
SRFForce	
そもそもcoupledとnonCoupledの違いは?
力のモデル	
$FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces/forceSuSp	
forceSuSp.H	
  
コメント文	
F = Sp U −Up( )+ Su
F:	
   	
  力	
  
Su:	
   	
  陽的な力(単位は力)	
  
Sp: 	
  陰的な力の係数(単位は力/速度)	
  
•  粒子に働く力に速度のデータを用いるときにcoupled	
  
(陰的に力の係数をSpとして加える)	
  
•  粒子に働く力に速度のデータを用いないときにnonCoupled	
  
(陽的に力をSuに加える)
forceSuSpのクラス構造	
class	
  forceSuSp	
  
:	
  
	
  	
  	
  	
  public	
  Tuple2<vector,	
  scalar>	
forceSuSp.H中	
   クラスの継承	
class	
  derive	
  :	
  public	
  base	
baseの基底クラスをderiveの派生ク
ラスで継承する。	
「C++の絵本」 (株)アンク 翔泳社	
派生クラスforceSuSpはTuple2<vector,	
  scalar>の基底クラスを継承	
  
Tuple2<vector,	
  scalar>クラス	
first	
 second	
 reverseTuple2	
forceSuSpクラス	
first	
 second	
 reverseTuple2	
Su	
 Sp	
メンバ	
 クラス	
継承したメンバ	
 派生クラス上で
定義するメンバ	
継承
forceSuSpのクラス構造	
forceSuSpI.H中	
  
inline	
  Foam::vector&	
  Foam::forceSuSp::Su()	
  
{	
  
	
  	
  	
  	
  return	
  first();	
  
}	
  
	
  
inline	
  Foam::scalar&	
  Foam::forceSuSp::Sp()	
  
{	
  
	
  	
  	
  	
  return	
  second();	
  
}	
Su()メンバ関数は基底クラスで
あるTuple2<vector,	
  scalar>クラ
スのfirst()、Sp()メンバ関数は
second()を呼び出している。	
Suはベクトル	
  
Spはスカラー	
2組で保存しておくためのクラス	
  
代数演算しやすいように実装されている
References	
•  A. Haier and O. Levenspiel, Powder Technol., 58, 63-70
(1989).
•  C. Y. Wen and Y. H. Yu, Chem. Eng. Prog. S. Ser., 62,
100-113 (1966).
•  S. Ergun, Chem. Eng. Prog., 48, 89-94 (1952).	
•  J. P. Du Plessis and J. H. Masliyah, Trans. Porous Media,
3, 145-161 (1988).
•  R. Mei, Int. J. Multiphase Flow, 18, 145-147 (1992).
•  A. Tomiyama et al., Chem. Eng. Sci., 57, 1849-1858 (2002).
•  「C++の絵本」 (株)アンク 翔泳社

More Related Content

What's hot

About multiphaseEulerFoam
About multiphaseEulerFoamAbout multiphaseEulerFoam
About multiphaseEulerFoam守淑 田村
 
OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化takuyayamamoto1800
 
Boundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAMBoundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAMFumiya Nozaki
 
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-Fumiya Nozaki
 
OpenFOAMにおけるDEM計算の衝突モデルの解読
OpenFOAMにおけるDEM計算の衝突モデルの解読OpenFOAMにおけるDEM計算の衝突モデルの解読
OpenFOAMにおけるDEM計算の衝突モデルの解読takuyayamamoto1800
 
OpenFOAMの壁関数
OpenFOAMの壁関数OpenFOAMの壁関数
OpenFOAMの壁関数Fumiya Nozaki
 
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてOpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてFumiya Nozaki
 
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』Fumiya Nozaki
 
OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMソルバの実行時ベイズ最適化OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMソルバの実行時ベイズ最適化Masashi Imano
 
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方takuyayamamoto1800
 
OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算takuyayamamoto1800
 
OpenFOAM LES乱流モデルカスタマイズ
OpenFOAM LES乱流モデルカスタマイズOpenFOAM LES乱流モデルカスタマイズ
OpenFOAM LES乱流モデルカスタマイズmmer547
 
OpenFOAMのinterfoamによる誤差
OpenFOAMのinterfoamによる誤差OpenFOAMのinterfoamによる誤差
OpenFOAMのinterfoamによる誤差takuyayamamoto1800
 
桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜
桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜
桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜Daisuke Matsubara
 
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』Fumiya Nozaki
 
Limited Gradient Schemes in OpenFOAM
Limited Gradient Schemes in OpenFOAMLimited Gradient Schemes in OpenFOAM
Limited Gradient Schemes in OpenFOAMFumiya Nozaki
 
Mixer vessel by cfmesh
Mixer vessel by cfmeshMixer vessel by cfmesh
Mixer vessel by cfmeshEtsuji Nomura
 
Dynamic Mesh in OpenFOAM
Dynamic Mesh in OpenFOAMDynamic Mesh in OpenFOAM
Dynamic Mesh in OpenFOAMFumiya Nozaki
 

What's hot (20)

interFoamの検証
interFoamの検証interFoamの検証
interFoamの検証
 
rhoCentralFoam in OpenFOAM
rhoCentralFoam in OpenFOAMrhoCentralFoam in OpenFOAM
rhoCentralFoam in OpenFOAM
 
About multiphaseEulerFoam
About multiphaseEulerFoamAbout multiphaseEulerFoam
About multiphaseEulerFoam
 
OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化OpenFoamの混相流solver interFoamのパラメータによる解の変化
OpenFoamの混相流solver interFoamのパラメータによる解の変化
 
Boundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAMBoundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAM
 
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
 
OpenFOAMにおけるDEM計算の衝突モデルの解読
OpenFOAMにおけるDEM計算の衝突モデルの解読OpenFOAMにおけるDEM計算の衝突モデルの解読
OpenFOAMにおけるDEM計算の衝突モデルの解読
 
OpenFOAMの壁関数
OpenFOAMの壁関数OpenFOAMの壁関数
OpenFOAMの壁関数
 
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件についてOpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
 
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』
 
OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMソルバの実行時ベイズ最適化OpenFOAMソルバの実行時ベイズ最適化
OpenFOAMソルバの実行時ベイズ最適化
 
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
 
OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算OpenFOAMにおける混相流計算
OpenFOAMにおける混相流計算
 
OpenFOAM LES乱流モデルカスタマイズ
OpenFOAM LES乱流モデルカスタマイズOpenFOAM LES乱流モデルカスタマイズ
OpenFOAM LES乱流モデルカスタマイズ
 
OpenFOAMのinterfoamによる誤差
OpenFOAMのinterfoamによる誤差OpenFOAMのinterfoamによる誤差
OpenFOAMのinterfoamによる誤差
 
桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜
桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜
桜の花の落ちるスピードは秒速5センチメートルか? 〜OpenFOAM編〜
 
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
 
Limited Gradient Schemes in OpenFOAM
Limited Gradient Schemes in OpenFOAMLimited Gradient Schemes in OpenFOAM
Limited Gradient Schemes in OpenFOAM
 
Mixer vessel by cfmesh
Mixer vessel by cfmeshMixer vessel by cfmesh
Mixer vessel by cfmesh
 
Dynamic Mesh in OpenFOAM
Dynamic Mesh in OpenFOAMDynamic Mesh in OpenFOAM
Dynamic Mesh in OpenFOAM
 

Viewers also liked

How to get contour surface position by openfoam
How to get contour surface position by openfoamHow to get contour surface position by openfoam
How to get contour surface position by openfoamtakuyayamamoto1800
 
OpenFOAMを用いた計算後の等高面データの取得方法
OpenFOAMを用いた計算後の等高面データの取得方法OpenFOAMを用いた計算後の等高面データの取得方法
OpenFOAMを用いた計算後の等高面データの取得方法takuyayamamoto1800
 
熱流体解析における離散スキームの評価
熱流体解析における離散スキームの評価熱流体解析における離散スキームの評価
熱流体解析における離散スキームの評価takuyayamamoto1800
 
Paraviewの等高面を綺麗に出力する
Paraviewの等高面を綺麗に出力するParaviewの等高面を綺麗に出力する
Paraviewの等高面を綺麗に出力するtakuyayamamoto1800
 
Estimation of numerical schemes in heat convection by OpenFOAM
Estimation of numerical schemes in heat convection by OpenFOAMEstimation of numerical schemes in heat convection by OpenFOAM
Estimation of numerical schemes in heat convection by OpenFOAMtakuyayamamoto1800
 
ParaviewでのParticle Tracerを用いた可視化
ParaviewでのParticle Tracerを用いた可視化ParaviewでのParticle Tracerを用いた可視化
ParaviewでのParticle Tracerを用いた可視化takuyayamamoto1800
 
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)takuyayamamoto1800
 
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)takuyayamamoto1800
 
ParaView による可視化 Tips
ParaView による可視化 TipsParaView による可視化 Tips
ParaView による可視化 TipsFumiya Nozaki
 

Viewers also liked (9)

How to get contour surface position by openfoam
How to get contour surface position by openfoamHow to get contour surface position by openfoam
How to get contour surface position by openfoam
 
OpenFOAMを用いた計算後の等高面データの取得方法
OpenFOAMを用いた計算後の等高面データの取得方法OpenFOAMを用いた計算後の等高面データの取得方法
OpenFOAMを用いた計算後の等高面データの取得方法
 
熱流体解析における離散スキームの評価
熱流体解析における離散スキームの評価熱流体解析における離散スキームの評価
熱流体解析における離散スキームの評価
 
Paraviewの等高面を綺麗に出力する
Paraviewの等高面を綺麗に出力するParaviewの等高面を綺麗に出力する
Paraviewの等高面を綺麗に出力する
 
Estimation of numerical schemes in heat convection by OpenFOAM
Estimation of numerical schemes in heat convection by OpenFOAMEstimation of numerical schemes in heat convection by OpenFOAM
Estimation of numerical schemes in heat convection by OpenFOAM
 
ParaviewでのParticle Tracerを用いた可視化
ParaviewでのParticle Tracerを用いた可視化ParaviewでのParticle Tracerを用いた可視化
ParaviewでのParticle Tracerを用いた可視化
 
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧)
 
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
Setting and Usage of OpenFOAM multiphase solver (S-CLSVOF)
 
ParaView による可視化 Tips
ParaView による可視化 TipsParaView による可視化 Tips
ParaView による可視化 Tips
 

Similar to OpenFOAMにおけるDEM計算の力モデルの解読

東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2hirokazutanaka
 
Rによるデータサイエンス:12章「時系列」
Rによるデータサイエンス:12章「時系列」Rによるデータサイエンス:12章「時系列」
Rによるデータサイエンス:12章「時系列」Nagi Teramo
 
Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離 Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離 wada, kazumi
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...Toru Tamaki
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」technocat
 
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video RecognitionToru Tamaki
 
20030203 doctor thesis_presentation_makotoshuto
20030203 doctor thesis_presentation_makotoshuto20030203 doctor thesis_presentation_makotoshuto
20030203 doctor thesis_presentation_makotoshutoMakoto Shuto
 
Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Taiji Suzuki
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...Toru Tamaki
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習Masahiro Suzuki
 
R言語勉強会#4.pdf
R言語勉強会#4.pdfR言語勉強会#4.pdf
R言語勉強会#4.pdfTakuya Kubo
 
状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較Hiroki Itô
 

Similar to OpenFOAMにおけるDEM計算の力モデルの解読 (20)

ADVENTURE_Thermalの概要
ADVENTURE_Thermalの概要ADVENTURE_Thermalの概要
ADVENTURE_Thermalの概要
 
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
 
Rによるデータサイエンス:12章「時系列」
Rによるデータサイエンス:12章「時系列」Rによるデータサイエンス:12章「時系列」
Rによるデータサイエンス:12章「時系列」
 
R seminar on igraph
R seminar on igraphR seminar on igraph
R seminar on igraph
 
Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離 Rによるlm関数を使わない回帰と梃子比・cookの距離
Rによるlm関数を使わない回帰と梃子比・cookの距離
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
 
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
Rcppのすすめ
RcppのすすめRcppのすすめ
Rcppのすすめ
 
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
文献紹介:X3D: Expanding Architectures for Efficient Video Recognition
 
20030203 doctor thesis_presentation_makotoshuto
20030203 doctor thesis_presentation_makotoshuto20030203 doctor thesis_presentation_makotoshuto
20030203 doctor thesis_presentation_makotoshuto
 
Chap. 6(nakagawa)
Chap. 6(nakagawa)Chap. 6(nakagawa)
Chap. 6(nakagawa)
 
Sparse estimation tutorial 2014
Sparse estimation tutorial 2014Sparse estimation tutorial 2014
Sparse estimation tutorial 2014
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
 
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
 
CMSI計算科学技術特論B(13) 大規模量子化学計算(2)
CMSI計算科学技術特論B(13) 大規模量子化学計算(2)CMSI計算科学技術特論B(13) 大規模量子化学計算(2)
CMSI計算科学技術特論B(13) 大規模量子化学計算(2)
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習
 
R言語勉強会#4.pdf
R言語勉強会#4.pdfR言語勉強会#4.pdf
R言語勉強会#4.pdf
 
状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (8)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

OpenFOAMにおけるDEM計算の力モデルの解読

  • 2. OpenFOAMでのDEM OpenFOAM-­‐2.0.0よりDEM解析が実装された。 2011/6/16  OpenFOAM-­‐2.0.0でDEM(Discrete  Element      Method)の機能追加      (Lagrangianライブラリが追加)   2014/2/17  OpenFOAM-­‐2.3.0でDPM(Discrete  ParHcle      Modeling)が実装      MP-­‐PIC(MulHphase  ParHcle-­‐in-­‐Cell)法が実装 Release  History OpenFOAMのDEMについてあまりdocumentがないので調査する。     粒子に働く力のモデルについて  
  • 3. 力のモデル Ver.  2.3.x 13   (   ErgunWenYuDrag   PlessisMasliyahDrag   SRF   SaffmanMeiLiSForce   TomiyamaLiS   WenYuDrag   gravity   nonInerHalFrame   nonSphereDrag   paramagneHc   pressureGradient   sphereDrag   virtualMass   ) constant/kinemaHcCloudProperHesに適当な文字入れてerrorをはき出すと 13種類の粒子に働くモデル それぞれどのような力を表しているか?
  • 4. 力のモデル $FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces このフォルダ中に力のモデルが書かれている .   ├──  Drag   ├──  Gravity   ├──  LiS   ├──  NonInerHalFrame   ├──  ParamagneHc   ├──  ParHcleForce   ├──  PressureGradient   ├──  SRF   ├──  VirtualMass   └──  forceSuSp $tree  -­‐L  1 Drag/   ├──  ErgunWenYuDrag   ├──  NonSphereDrag   ├──  PlessisMasliyahDrag   ├──  SphereDrag   └──  WenYuDrag LiS   ├──  LiSForce   ├──  SaffmanMeiLiS   └──  TomiyamaLiS 各tree構造内に 抵抗モデル   (5種類) 揚力モデル   (2種類)
  • 5. 抵抗モデル 抵抗モデル(5種類)   •  ErgunWenYuDrag   •  NonSphereDrag   •  PlessisMasliyahDrag   •  SphereDrag   •  WenYuDrag 具体的にどういう定式化で   どのように実装されているか? 粒子Re数 ρ:  密度   u:  速度   d:  粒子直径   µ:  粘度 Re = ρf uf −us ds µf
  • 6. 抵抗モデル(Sphere) Sphereモデル Re <1000 else. F = Cd Ap ρf u2 2 Ap = π ds 2 ! " # $ % & 2 ms = ρsVs = ρs 4 3 π ds 2 ! " # $ % & 3 Ap = 3 4 ms ρs 2 ds ! " # $ % & 球の場合の投影面積 小文字   f:  流体   s:  固体 変数   Ap:  投影面積   Cd:  抵抗係数   ρ:  密度   u:  速度差(=|uf-­‐us|)   V: 体積   d:  粒子直径 ρf = Reµf uds Reの定義より F = 3 4 msCd Re µf ρsds 2 u (1) (2) (3) (1)に(2),(3)を代入 Cd = 24 Re 1+ 1 6 Re 2 3 ! " # $ % & Cd = 0.424
  • 7. 抵抗モデル(Sphere) F = 3 4 msCd Re µf ρsds 2 u  value.Sp()  =  mass*0.75*muc*CdRe(Re)/(p.rho()*sqr(p.d())); SphereDragForce.C中 OpenFOAM内ではSpとして力の係数として実装  if  (Re  >  1000.0)          {                  return  0.424*Re;          }          else          {                  return  24.0*(1.0  +  1.0/6.0*pow(Re,  2.0/3.0));          } Re <1000 else. Cd = 24 Re 1+ 1 6 Re 2 3 ! " # $ % & Cd = 0.424 Cd値 CdRe値 SphereDragForce.C中
  • 8. 抵抗モデル (NonSphere) Cd = 24 Re 1+ a⋅Reb ( )+ c⋅Re Re+ d NonSphereモデル A.  Haier  and  O.  Levenspiel,  Powder  Technol.,  58,  63-­‐70  (1989) a φ( )= exp 2.3288− 6.4581φ + 2.4486φ2 ( ) b φ( )= 0.0964+ 0.5565φ c φ( )= exp 4.9050 −13.8944φ +18.4222φ2 −10.2599φ3 ( ) d φ( )= exp 1.4681+12.2584φ − 20.7322φ2 +15.8855φ3 ( ) F = 3 4 msCd Re µf ρsds 2 uf −us
  • 9. 抵抗モデル (NonSphere) Cd値 CdRe値  return  24.0*(1.0  +  a_*pow(Re,  b_))  +  Re*c_/(1  +  d_/(Re  +  ROOTVSMALL)); Cd = 24 Re 1+ a⋅Reb ( )+ c 1+ d / Re+ small( ) value.Sp()  =  mass*0.75*muc*CdRe(Re)/(p.rho()*sqr(p.d())); F = 3 4 msCd Re µf ρsds 2 u a,  b,  c,  dもNonSphereDragForce.C中で定義しているが長いので割愛 NonSphereDragForce.Cの中 NonSphereDragForce.Cの中
  • 10. 抵抗モデル(WenYu) nRe <1000 else. β = 3 4 Cd ρf 1− n( ) ds uf −us n−2.65 小文字   f:  流体   s:  固体 変数   β:  相関係数   Cd:  抵抗係数   n:  空隙率   d:  直径   ρ:  密度   u:  速度   V: 体積 Wen-­‐Yuモデル Cd = 24 nRe 1+ 0.15 nRe( ) 0.687 ( ) Cd = 0.44 固体粒子に働く抗力 Ff = β 1− n uf −us( )Vs C.  Y.  Wen  and  Y.  H.  Yu,  Chem.  Eng.  Prog.  S.  Ser.,  62,  100-­‐113  (1966). Res = nRe = nρf ds uf −us µf
  • 11. 抵抗モデル(WenYu) β = 3 4 Cd 1− n( ) ds ρf uf −us n−2.65 小文字   f:  流体   s:  固体 変数   β:  相関係数   Cd:  抵抗係数   n:  空隙率   d:  直径   ρ:  密度   u:  速度   V: 体積 固体粒子に働く抗力 Ff = β 1− n uf −us( )Vs C.  Y.  Wen  and  Y.  H.  Yu,  Chem.  Eng.  Prog.  S.  Ser.,  62,  100-­‐113  (1966). Ff = Vs 1− n 3 4 Cd 1− n( ) ds ρf n−2.65 uf −us 2 Ff = ms ρs 3 4 Cd Res µf nds 2 n−2.65 uf −us Vs = ms ρs ,ρf = Res µf n uf −us ds
  • 12. 抵抗モデル(WenYu)  return  forceSuSp          (                  vector::zero,                  (mass/p.rho())                *0.75*CdRe(alphac*Re)*muc*pow(alphac,  -­‐2.65)/(alphac*sqr(p.d()))          ); Suはゼロ ms ρs 3 4 Cd Reµcαc −2.65 αcds 2 Ff = ms ρs 3 4 Cd Res µf nds 2 n−2.65 uf −us WenYuDragForce.Cの中
  • 13. 抵抗モデル (ErgunWenYu) 小文字   f:  流体   s:  固体 変数   β:  相関係数   Cd:  抵抗係数   n:  空隙率   d:  直径   ρ:  密度   u:  速度   µ:  密度 Wen-­‐Yuモデル  (n  >  0.8) Ergunモデル  (n  <  0.8) β =150 1− n( ) 2 n2 µf ds 2 +1.75 1− n( ) n ρf ds uf −us 空隙率によって   モデルを切り替え S.  Ergun,  Chem.  Eng.  Prog.,  48,  89-­‐94  (1952). nRe <1000 else. β = 3 4 Cd ρf 1− n( ) ds uf −us n−2.65 Cd = 24 nRe 1+ 0.15 nRe( ) 0.687 ( ) Cd = 0.44
  • 14. 抵抗モデル (ErgunWenYu) 小文字   f:  流体   s:  固体 変数   β:  相関係数   Cd:  抵抗係数   n:  空隙率   d:  直径   ρ:  密度   u:  速度   V: 体積 固体粒子に働く抗力 Ff = β 1− n uf −us( )Vs C.  Y.  Wen  and  Y.  H.  Yu,  Chem.  Eng.  Prog.  S.  Ser.,  62,  100-­‐113  (1966). Ff = ms ρs µf nd2 s 150 1− n( ) n +1.75Re ! " # $ % & uf −us Vs = ms ρs ρf = Reµf uf −us ds Ff = ms ρs β 1− n uf −us( ) β =150 1− n( ) 2 n2 µf ds 2 +1.75 1− n( ) n Reµf ds 2 β =150 1− n( ) 2 n2 µf ds 2 +1.75 1− n( ) n ρf ds uf −us
  • 15. 抵抗モデル (ErgunWenYu)  if  (alphac  <  0.8)          {                  return  forceSuSp                  (                          vector::zero,                          (mass/p.rho())                        *(150.0*(1.0  -­‐  alphac)/alphac  +  1.75*Re)*muc/(alphac*sqr(p.d()))                  );          } ms ρs 150 1−αc( ) αc +1.75Re ! " # $ % & µf αcd2 s Ff = ms ρs µf nd2 s 150 1− n( ) n +1.75Re ! " # $ % & uf −us ErgunWenYuDragForce.Cの中
  • 16. 抵抗モデル (PlessisMasliyah) Plessis-­‐Masliyahモデル  (RUCモデル) A = 26.8n3 1− n( ) 2 3 1− 1− n( ) 1 3 ! " # $ % & 1− 1− n( ) 2 3 ! " # $ % & 2 B = n2 1− 1− n( ) 2 3 ! " # $ % & 2 β = A 1− n( ) 2 n2 µf ds 2 + B 1− n( ) n ρf ds uf −us Ergunモデルの係数変更 J.  P.  Du  Plessis  and  J.  H.  Masliyah,  Trans.  Porous    Media,  3,  145-­‐161  (1988).  
  • 17. 抵抗モデル (PlessisMasliyah) 小文字   f:  流体   s:  固体 変数   β:  相関係数   Cd:  抵抗係数   n:  空隙率   d:  直径   ρ:  密度   u:  速度   V: 体積 固体粒子に働く抗力 Ff = β 1− n uf −us( )Vs Ff = ms ρs µf nd2 s A 1− n( ) n + BRe ! " # $ % & uf −us Vs = ms ρs ρf = Reµf uf −us ds Ff = ms ρs β 1− n uf −us( ) β = A 1− n( ) 2 n2 µf ds 2 + B 1− n( ) n Reµf ds 2 β = A 1− n( ) 2 n2 µf ds 2 + B 1− n( ) n ρf ds uf −us
  • 18. 抵抗モデル (PlessisMasliyah)  scalar  A  =                  26.8*pow3(alphac)                /(                          sqr(cbrtAlphap)                        *(1.0  -­‐  cbrtAlphap)                        *sqr(1.0  -­‐  sqr(cbrtAlphap))                      +  SMALL                  );  scalar  B  =                  sqr(alphac)                /sqr(1.0  -­‐  sqr(cbrtAlphap));  vector::zero,                  (mass/p.rho())                *(A*(1.0  -­‐  alphac)/alphac  +  B*Re)*muc/(alphac*sqr(p.d())) ms ρs A 1−αc( ) αc + BRe ! " # $ % & µf αcd2 s A = 26.8n3 1− n( ) 2 3 1− 1− n( ) 1 3 ! " # $ % & 1− 1− n( ) 2 3 ! " # $ % & 2 B = n2 1− 1− n( ) 2 3 ! " # $ % & 2 Ff = ms ρs µf nd2 s A 1− n( ) n + BRe ! " # $ % & uf −us PlessisMasliyahDragForce.Cの中
  • 19. 揚力モデル 抵抗モデル(2種類)   •  SaffmanMeiLiS   •  TomiyamaLiS   具体的にどういう定式化で   どのように実装されているか? Re = ρf uf −us ds µf 粒子Re数 ρ:  密度   u:  速度   d:  粒子直径   µ:  粘度
  • 20. 揚力モデル  scalar  Cl  =  this-­‐>Cl(p,  curlUc,  Re,  muc);      value.Su()  =  mass/p.rho()*p.rhoc()*Cl*((p.Uc()  -­‐  p.U())^curlUc); LiSForce.Cの中 F = ms ρs ρcCl uc −us( )× ∇×uc( )( )
  • 21. 揚力モデル(SaffmanMei) 固体粒子に働く揚力 Fl = Cl Ap ρf uf −us 2 2 固体粒子に働く揚力(Saffmanモデル) Fl,Sa = 6.46µf Δu d 2 ! " # $ % & 2 G ν ! " # $ % & 1 2 固体粒子に働く揚力(Saffman-­‐Meiモデル) Fl Fl,Sa = 1− 0.3314α 1 2 ! " # $ % &exp − Res 10 ! " # $ % &+ 0.3314α 1 2 = 0.0524 α Res( ) 1 2 Res ≤ 40 Res > 40 R.  Mei,  Int.  J.  MulHphase  Flow,  18,  145-­‐147  (1992) Res = Δuds ν α = 1 2 Res ε2 = 1 2 ReG Res ε = ReG 1 2 Res ReG = Gds 2 ν G = dul dy Δu = uf −us
  • 22. 揚力モデル(SaffmanMei) Fl,Sa = 6.46µf uf −us ds 2 ! " # $ % & 2 ∇×u ν ! " # $ % & 1 2 = 6.46µf ds 4 ReG uf −us = 6.46 3 π ms ρs 1 ReG ρf uf −us ∇×u 2 Res = Δuds ν α = 1 2 Res ε2 = 1 2 ReG Res ε = ReG 1 2 Res ReG = Gds 2 ν G = dul dy = ∇×u Δu = uf −us 固体粒子に働く揚力(Saffmanモデル) Fl Fl,Sa = mei とおくと Fl = 6.46mei 3 π ms ρs 1 ReG ρf uf −us ∇×u 2 = 3 2π 1 ReG 6.46mei ms ρs ρf uf −us ∇×u Cl  (OpenFOAM内での定義で)
  • 23. 揚力モデル(SaffmanMei)  scalar  Rew  =  p.rhoc()*mag(curlUc)*sqr(p.d())/(muc  +  ROOTVSMALL);    scalar  beta  =  0.5*(Rew/(Re  +  ROOTVSMALL));    scalar  alpha  =  0.3314*sqrt(beta);    scalar  f  =  (1.0  -­‐  alpha)*exp(-­‐0.1*Re)  +  alpha;   ...    if  (Re  <  40)          {                  Cld  =  6.46*f;          }          else          {                  Cld  =  6.46*0.0524*sqrt(beta*Re);          }      return  3.0/(mathemaHcal::twoPi*sqrt(Rew))*Cld; SaffmanMeiLiSForce.Cの中 Rew = ρl ∇×u ds 2 µl α = 0.3314 β = 0.3314 Rew 2Re β = Rew 2Re Cld = 6.46×0.0524× β Re = 6.46×0.0524× Rew 2 Cld = 6.46× f f = 1−α( )×exp −0.1× Re( )+α = 1− 0.3314 Rew 2Re # $ % & ' (×exp − Re 10 # $ % & ' (+ 0.3314 Rew 2Re ゆえに前のページ(原著論文中)のαはOpenFOAM中でβ,   OpenFOAMのCldは原著論文中のFL/FLSax6.46である   Cl = 3 2π 1 ReG 6.46mei Cld  (OpenFOAMで)
  • 24. 揚力モデル(Tomiyama) 気泡に働く揚力 A.  Tomiyama  et  al.,  Chem.  Eng.  Sci.,  57,  1849-­‐1858  (2002)   Cl = min 0.288tanh 0.121Res( ), f( ) = f Fl = Clρf ms ρs Δu× ∇×uf( ) Eod < 4 4 ≤ Eod ≤10.7 f = 0.00105Eod 3 − 0.0159Eod 2 − 0.0204Eod + 0.474 Eod = g ρf − ρs( )dH 2 σ Eo:  Eötvös数   dH:  水平方向最大直径   dv:  垂直方向最大直径   E:  アスペクト比   ds:  粒子(気泡)径   E = dV dH = 1 1+ 0.163Eo0.757 dH = 1+ 0.163Eo0.757 ( )dV dH = 1+ 0.163Eo0.757 ( ) 1 3 ds
  • 25. 揚力モデル(Tomiyama)  scalar  Eo  =  p.Eo(g,  p.d(),  sigma_);          scalar  dH  =  p.d()*cbrt(1.0  +  0.163*pow(Eo,  0.757));          scalar  Eod  =  p.Eo(g,  dH,  sigma_);          scalar  f  =  0.00105*pow3(Eod)  -­‐  0.0159*sqr(Eod)  -­‐  0.0204*Eod  +  0.474;            if  (Eod  <=  4)          {                  return  min(0.288*tanh(0.121*Re),  f);          }          else  if  ((Eod  >  4)  &&  (Eod  <=  10))          {                  return  f;          }          else          {                  return  -­‐0.27;          } TomiyamaLiSForce.Cの中 Eo = g ρp − ρc( )ds 2 σ dH = ds 1+ 0.163Eo0.7573 Eod = g ρp − ρc( )dH 2 σ f = 0.00105Eod 3 − 0.0159Eod 2 − 0.0204Eod + 0.474
  • 26. その他のモデル その他モデル(6種類)   •  SRF   •  gravity   •  nonInerHalFrame   •  paramagneHc   •  pressureGradient   •  virtualMass   具体的にどういう定式化で   どのように実装されているか?
  • 27. SRFモデル 小文字   f:  流体   s:  固体 変数   F:  外力   m:  質量   g:  重力加速度   ρ:  密度   V:  体積    value.Su()  =                  mass*(1.0  -­‐  p.rhoc()/p.rho())                *(2.0*(p.U()  ^  omega)  +  (omega  ^  (r  ^  omega))); SRF  (Single  RotaTng  Frame) 回転座標系での力(コリオリ力、遠心力)を加える FSRF = ms ⋅ 2v ×ω +ω × r ×ω( ) コリオリ力 遠心力 粒子の存在する流体部の値を取り除く必要あり   (存在しないはずの流体分のコリオリ力と遠心力を除く) FSRF = ms 1− ρf ρs " # $ % & '⋅ 2v ×ω +ω × r ×ω( ) SRFForce.C v = dr dt
  • 28. 重力モデル(gravity) 粒子に働く重力 Fg = ms g − ρl gVs 重力 浮力 小文字   f:  流体   s:  固体 変数   F:  外力   m:  質量   g:  重力加速度   ρ:  密度   V:  体積  Vs = ms ρs Fg = ms g 1− ρl ρs " # $ % & ' OpenFOAMの重力モデルでは重力による力と浮力  value.Su()  =  mass*g_*(1.0  -­‐  p.rhoc()/p.rho()); GravityForce.C
  • 29. 非慣性系モデル   (nonInerTalFrame) FnIF = ms ⋅ −w + 2v ×ω +ω × r ×ω( ) Lagragian系で観測したときに現れる見かけの力 コリオリ力 遠心力 等加速度運動の見かけの力 v = dr dt 全て非慣性系で見られる 見かけの力  value.Su()  =                  mass                *(                        -­‐W_                      +  (r  ^  omegaDot_)                      +  2.0*(p.U()  ^  omega_)                      +  (omega_  ^  (r  ^  omega_))                  ); NonInerHalFrameForce.C
  • 30. 常磁性モデル   (paramagneTc) 粒子に働く磁力 Fmg = ms ⋅ 3µ0 ρ χ χ +3 H ⋅∇H # $ % & ' ( ?  value.Su()=                  mass*3.0*constant::electromagneHc::mu0.value()/p.rho()                *magneHcSuscepHbility_/(magneHcSuscepHbility_  +  3)                *HdotGradHInterp.interpolate(p.posiHon(),  p.currentTetIndices()); ParamagneHcForce.C
  • 31. 圧力勾配モデル   (pressureGradient) Fp = ms ρf ρs ∂uf ∂t +uf ⋅∇uf ! " # $ % & = ms ρf ρs Duf Dt 粒子に働く圧力勾配力 なぜか圧力勾配ではなく、流体側の慣性力を用いている。 OpenFOAMのBugレポートにもあげられているが、問題無いという結論   (Bug  #0001302)  value.Su()  =  mass*p.rhoc()/p.rho()*DUcDt; PressureGradientForce.C  
  • 32. 仮想質量モデル   (virtualMass) Fvm = cvmFp = cvmms ρf ρs Duf Dt 粒子に働く仮想質量力 Cvm:  仮想質量の係数    (ソースコード内で典型的には0.5と記載) 粒子を加速または減速させるときに流体側から得るもしくは失う力  forceSuSp  value  =                  PressureGradientForce<CloudType>::calcCoupled(p,  dt,  mass,  Re,  muc);     value.Su()  *=  Cvm_; VirtualMassForce.C  
  • 33. まとめ •  OpenFOAMで用いられているDEMの力のモデル を調査した。   •  Ver.2.3.x時点で13種類のモデルが含まれており、 それぞれの力のモデルを説明した。   •  常磁性モデル・圧力勾配モデル・仮想質量モデ ルについては今後編集予定   •  間違いがあれば連絡してください。
  • 34. forceのクラス構造 template<class  CloudType>   class  SphereDragForce   :          public  ParHcleForce<CloudType> SphereDrag/SphereDragForce.H すべてのforceでParHcleForce<CloudType>のクラスを継承   クラスの継承 class  derive  :  public  base baseの基底クラスをderiveの派生ク ラスで継承する。 「C++の絵本」 (株)アンク 翔泳社 $FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ ParHcleForces/ParHcleForce/ このフォルダ内で一番基底となるParHcleForce<CloudType>クラスを記述
  • 35. forceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス ParHcleForce.H  virtual  forceSuSp  calcCoupled                          (                                  const  typename  CloudType::parcelType&  p,                                  const  scalar  dt,                                  const  scalar  mass,                                  const  scalar  Re,                                  const  scalar  muc                          )  const; virtual:  仮想関数として指定   (派生クラスで再定義した際に派生クラス側 のメンバ関数が呼ばれるようにするため) 「C++の絵本」 (株)アンク 翔泳社 ParHcleForce<CloudType>ではcalcCoupled,   calcNonCoupled,  massAddは初期化している。   (値として0を代入する。つまり、派生クラスにお いてオーバーライドすること前提にしている。)
  • 36. DragForceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd SphereDragForceクラス   継承したメンバ オーバーライド したメンバ SpereDragForceはcalcCoupledのメンバのみ定義   オーバーライドしてcalcCoupledを設定   (Dragの各モデルはすべて同じ構造(ErgunWenYuDrag,   NonSphereDrag,  PlessisMasliyahDrag,  WenYuDrag)) CdRe ParHcleForce<CloudType>クラス 各DragForceクラス 派生クラス上で 定義するメンバ
  • 37. Li[Forceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd LiSForceクラス   継承したメンバ オーバーライド したメンバ Li[ForceはcalcCoupled,  cacheFieldsのメンバをオーバーライド する。また、新しくClを派生クラス上で定義   オーバーライドしたメンバではcurlUc,  Suを計算   ∇×Uc,Su Cl 派生クラス上で 定義するメンバ
  • 38. Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd LiSForceクラス   メンバ Cl 継承 クラス TomiyamaLiSForceクラス   Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd Cl 継承したメンバ オーバーライド したメンバ TomiyamaLi[ForceクラスはClのメンバのみ定義   オーバーライドしてClを設定   (LiSForceの各モデルはすべて同じ構造(TomiyamaLiSForce,   SaffmanMeiLiSForce)) ParHcleForce<CloudType>クラス LiSForceクラス 各LiSForceクラス Li[Forceのクラス構造
  • 39. GravityForceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd GravityForceクラス   継承したメンバ オーバーライド したメンバ GravityForceはオーバーライドして calcNonCoupledを設定,  gメンバを新しく定義   g ParHcleForce<CloudType>クラス GravityForceクラス 派生クラス上で 定義するメンバ
  • 40. NonInerTalForceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd NonInerHalForceクラス   継承したメンバ オーバーライド したメンバ NonInerTalForceはオーバーライドして calcNonCoupled,  cacheFieldsを設定,  W,  omega,   omegaDot,  CentreOfRotaTonメンバを新しく定義   W 派生クラス上で 定義するメンバ ParHcleForce<CloudType>クラス NonInerHalForceクラス omega omegaDot centreOfRotaHon
  • 41. ParamagneTcForceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd ParamagneHcForceクラス   継承したメンバ オーバーライド したメンバ NonInerTalForceはオーバーライドしてcalcNonCoupled,   cacheFieldsを設定,  HdotGradHName,  magneTcSuscepTbility メンバを新しく定義   HdotGradHName 派生クラス上で 定義するメンバ ParHcleForce<CloudType>クラス ParamegneHcForceクラス magneHcSuscepHbility
  • 42. PressureGradientForceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd PressureGradientForceクラス   継承したメンバ オーバーライド したメンバ PressureGradientForceはオーバーライドして calcCoupled,  massAdd,  cacheFieldsを設定,   DUcDtInterpメンバを新しく定義   DUcDtInterp 派生クラス上で 定義するメンバ ParHcleForce<CloudType>クラス PressureGradientForceクラス
  • 43. VirtualMassForceのクラス構造 メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd VirtualMassForceクラス   継承したメンバ オーバーライド したメンバ Vi_ualMassForceはオーバーライドして calcCoupled,  massAdd,  cacheFieldsを設定   ParHcleForce<CloudType>クラス PressureGradientForceクラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd PressureGradientForceクラス   DUcDtInterp VirtualMassForceクラス DUcDtInterp
  • 44. SRFForceのクラス構造 ParHcleForce<CloudType>クラス Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd メンバ クラス 継承 Owner Mesh Coeffs cacheFields calcCoupled calcNonCoupled massAdd SRFForceクラス   継承したメンバ オーバーライド したメンバ SRFForceはオーバーライドして calcNonCoupled,  cacheFieldsを設定   ParHcleForce<CloudType>クラス SRFForceクラス
  • 45. coupled  or  nonCoupled Coupled nonCoupled LiSForce   (TomiyamaLiSForce,     SaffmanMeiLiSForce) DragForce   (SphereDrag,  ErgunWenYuDrag,     NonSphereDrag,  PlessisMasliyahDrag,     WenYuDra) GravityForce NonInerHalForce ParamegneHcForce PressureGradientForce VirtualMassForce SRFForce そもそもcoupledとnonCoupledの違いは?
  • 46. 力のモデル $FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces/forceSuSp forceSuSp.H   コメント文 F = Sp U −Up( )+ Su F:    力   Su:    陽的な力(単位は力)   Sp:  陰的な力の係数(単位は力/速度)   •  粒子に働く力に速度のデータを用いるときにcoupled   (陰的に力の係数をSpとして加える)   •  粒子に働く力に速度のデータを用いないときにnonCoupled   (陽的に力をSuに加える)
  • 47. forceSuSpのクラス構造 class  forceSuSp   :          public  Tuple2<vector,  scalar> forceSuSp.H中   クラスの継承 class  derive  :  public  base baseの基底クラスをderiveの派生ク ラスで継承する。 「C++の絵本」 (株)アンク 翔泳社 派生クラスforceSuSpはTuple2<vector,  scalar>の基底クラスを継承   Tuple2<vector,  scalar>クラス first second reverseTuple2 forceSuSpクラス first second reverseTuple2 Su Sp メンバ クラス 継承したメンバ 派生クラス上で 定義するメンバ 継承
  • 48. forceSuSpのクラス構造 forceSuSpI.H中   inline  Foam::vector&  Foam::forceSuSp::Su()   {          return  first();   }     inline  Foam::scalar&  Foam::forceSuSp::Sp()   {          return  second();   } Su()メンバ関数は基底クラスで あるTuple2<vector,  scalar>クラ スのfirst()、Sp()メンバ関数は second()を呼び出している。 Suはベクトル   Spはスカラー 2組で保存しておくためのクラス   代数演算しやすいように実装されている
  • 49. References •  A. Haier and O. Levenspiel, Powder Technol., 58, 63-70 (1989). •  C. Y. Wen and Y. H. Yu, Chem. Eng. Prog. S. Ser., 62, 100-113 (1966). •  S. Ergun, Chem. Eng. Prog., 48, 89-94 (1952). •  J. P. Du Plessis and J. H. Masliyah, Trans. Porous Media, 3, 145-161 (1988). •  R. Mei, Int. J. Multiphase Flow, 18, 145-147 (1992). •  A. Tomiyama et al., Chem. Eng. Sci., 57, 1849-1858 (2002). •  「C++の絵本」 (株)アンク 翔泳社