プラントエンジニアリング

【Python,流体解析】Pythonで配管圧力損失の計算

プラントエンジニアリング

Pythonには、流体解析に便利なライブラリがいくつもあります。今回は、それらを用いて配管圧力損失を計算してみたいと思います。

使用するライブラリ

使用するライブラリは、fluidsと呼ばれる流体解析のライブラリを使用しています。詳しくは、以下の記事をご覧ください。

fluidsで配管の圧力損失を計算する場合、それぞれの配管条件における配管損失係数【K】を求め、足し算していき、最後に配管圧力損失【Δp】に変換します。

K は以下とします。

\[ k = \lambda \frac{L}{D} \]

これを、Darcy-Weisbachの式に当てはめると、以下のようになります。

\[ \Delta p = \lambda \frac{L}{D} \frac{\rho v^{2}}{2} = k \frac{\rho v^{2}}{2} \]

Kを求めた後に、密度と速度の値を代入して求める手順となります。

計算方法

KからdPへの変換

\[ dP = 0.5K\rho V^2 \]
fluids.dP_from_K(K, rho, V)
パラメータ必須説明単位
KfloatLoss coefficient[ ]
rhofloatDensity of fluid[kg/m^3]
VfloatVelocity of fluid in pipe[m/s]

この計算は、一番最後に実施します。計算するのを忘れないようにしましょう。

直管部

\[ K = f_dL/D \]
fluids.K_from_f(fd=fd, L=15, D=0.05)

このとき、パラメータは以下とします。

Parameters
———-
fd : float friction factor of pipe, []
L : float Length of pipe, [m]
D : float Inner diameter of pipe, [m]

配管への入口損失

配管入口での圧力損失は、配管の形状によって異なります。

それぞれ導出方法について解説します。
A)角端、B)突き出し、C)傾斜、D)丸みつき、E)隅切り

A) 角端

fluids.entrance_sharp(method='Rennels')

角端の場合、計算はなく、methodの選択によって、数値が変わります。
methodによる数値は、以下のようになります。

‘Swamee’, ‘Blevins’, ‘Idelchik’ : 0.5 
‘Crane’; ‘Miller’       : 0.5093
‘Rennels’          : 0.57

B)突き出し

\[ K = 1.12 – 22\frac{t}{d} + 216\left(\frac{t}{d}\right)^2 + 80\left(\frac{t}{d}\right)^3 \]
K = fluids.entrance_distance(Di, t=None, l=None, method='Rennels')

Di : float, Inside diameter of pipe, [m]
t : float, optinal, Thickness of pipe wall, [m]
l : float, optinal, The distance the pipe extends into the reservoir, [m]
method : str, optinal, ‘Rennels’, ‘Miller’, ‘Idelchik’, ‘Harris’, ‘Crane’

配管内径だけを指定すると、強制的に‘Crane’になり、K=0.78で返ってきます。
厚みを指定すると、t/Diの数値によって、‘Rennels’, ‘Miller’, ‘Idelchik’が選択されます。

各計算方法によるKは、以下のグラウのような変化となります。

C)傾斜

\[ K = 0.57 + 0.30\cos(\theta) + 0.20\cos(\theta)^2 \]
K = fluids.entrance_angled(angle, method='Idelchik')

angle : float, Angle of inclination (90° = straight, 0° = parallel to pipe wall), [degrees]
method : str, optinal, only ‘Idelchik’ is supported

計算方法は、‘Idelchik’のみになります。
角度を与えるだけで計算可能です。

D)丸みつき

The Rennels formulas: \[ K = 0.0696\left(1 – 0.569\frac{r}{d}\right)\lambda^2 + (\lambda-1)^2 \] \[ \lambda = 1 + 0.622\left(1 – 0.30\sqrt{\frac{r}{d}} – 0.70\frac{r}{d}\right)^4 \] The Swamee formula : \[ K = 0.5\left[1 + 36\left(\frac{r}{D}\right)^{1.2}\right]^{-1} \]
K = fluids.entrance_rounded(Di, rc, method='Rennels')

Di : float, Inside diameter of pipe, [m]
rc : float, optinal, Radius of curvature of the entrance, [m]
method : str, optinal, ‘Rennels’, ‘Crane’, ‘Miller’, ‘Idelchik’, ‘Harris’, or ‘Swamee’

曲率半径(rc) と配管内径(Di)を指定することで計算ができます。
計算方法による圧力損失の違いは、以下の図のようになります。

E)隅切り

\[ K = 0.0696\left(1 – C_b\frac{l}{d}\right)\lambda^2 + (\lambda-1)^2 \] \[ \lambda = 1 + 0.622\left[1-1.5C_b\left(\frac{l}{d} \right)^{\frac{1-(l/d)^{1/4}}{2}}\right] \] \[ C_b = \left(1 – \frac{\theta}{90}\right)\left(\frac{\theta}{90} \right)^{\frac{1}{1+l/d}} \]
fluids.entrance_beveled(Di, l, angle, method='Rennels')

Di : float, Inside diameter of pipe, [m]
l : float, optinal, Length of bevel measured parallel to the pipe length, [m]
angle : float, Angle of bevel with respect to the pipe length, [degrees]
method : str, optinal, One of ‘Rennels’, or ‘Idelchik’

methodを指定しない場合、‘Rennels’で計算されます。
l/Di と各計算方法による違いは、以下のグラフのようになります。

ベンド(曲がり部)

The Rennels [1] formula is:

\[ K = f\alpha\frac{r}{d} + (0.10 + 2.4f)\sin(\alpha/2) + \frac{6.6f(\sqrt{\sin(\alpha/2)}+\sin(\alpha/2))} {(r/d)^{\frac{4\alpha}{\pi}}} \]

The Swamee [5] formula is:

\[ K = \left[0.0733 + 0.923 \left(\frac{d}{rc}\right)^{3.5} \right] \theta^{0.5} \]
K = fluids.bend_rounded(Di, angle, fd=None, rc=None, 
                        bend_diameters=None, Re=None, 
                        roughness=0.0, L_unimpeded=None, 
                        method='Rennels')

パラメータ一覧

パラメータ必須説明単位
DifloatInside diameter of pipe[m]
angle floatAngle of bend[m]
fd floatDarcy friction factor[-]
rcfloatRadius of curvature of the entrance[m]
bend_diametersfloatNumber of diameters of pipe making up the bend radius[-]
RefloatReynolds number of the pipe[-]
roughness floatRoughness of bend wall[m]
L_unimpededfloatThe length of unimpeded pipe without any fittings, instrumentation, or flow disturbances downstream; used only in Miller method[m]
methodstrOne of ‘Rennels’, ‘Miller’, ‘Crane’, ‘Crane standard’, ‘Ito’, or ‘Swamee’

計算方法は、全部で6つある。方法によって、必要なパラメータは変化するが、曲率半径(rc)とレイノルズ数(Re)については与えておいた方が良い。

曲率半径(rc)がない場合は、強制的にbend_diameters=5.0として、曲率半径(rc)を計算されるためである。レイノルズ数がない場合は、パラメータに応じて‘Crane’、’Crane standard’、’Swamee’の計算方法となるが、いずれもクセがあるので、他の計算方法が無難である。

逆に、L_unimpededは’Miller’でしか使用されないので、基本的に不要である。
ちなみに、’Miller’は、この中で最も複雑で遅い計算方法となる。

計算方法としては、‘Rennels’ と‘Ito’ が比較的使いやすい印象である。
‘Swamee’はシンプルすぎて、他の計算方法と整合が取れないことが多い、‘Crane’ は与えるパラメータに左右されることがあることなどから、使用していない。

Contractions/Reducers

それぞれ導出方法について解説します。
A)角端による縮小、B)丸端のよる縮小、C)円錐型の縮小

A) 角端による縮小

The Rennels formulas : \[ K_1 = 0.0696(1-\beta^5)\lambda^2 + (\lambda-1)^2 \] \[ \lambda = 1 + 0.622(1-0.215\beta^2 – 0.785\beta^5) \] \[ \beta = d_2/d_1 \] The Hooper formulas :
If Re ≤ 2500 : \[ K_1 = \left[1.2 + \frac{160}{\text{Re}_1}\right] \left[ \left(\frac{D_1} {D_2} \right)^4 -1 \right] \] If Re > 2500 : \[ K_1 = \left[0.6 + 0.48f_1\right] \left(\frac{D_1} {D_2} \right)^2 \left[ \left(\frac{D_1} {D_2} \right)^2 -1 \right] \]
K = fluids.contraction_sharp(Di1, Di2, fd=None, 
                             Re=None, roughness=0.0, 
                             method='Rennels')
パラメータ必須説明単位
Di1floatInside diameter of original (larger) pipe[m]
Di2floatInside diameter of following (smaller) pipe[m]
fdfloatDarcy friction factor in original pipe; used only in the Hooper method and will be calculated from Re
 if not given
[-]
RefloatReynolds number of the pipe (used in Hooper method[-]
roughnessfloatRoughness of original pipe (used in Hooper method only if no friction factor given)[m]
methodstrThe calculation method to use; one of ‘Hooper’, ‘Rennels’

計算方法は、‘Hooper’, ‘Rennels’ となる。‘Crane’も選択できるが、あまり使用しない。

‘Rennels’は、配管径の比のみを用いた単純な計算であるため、Di1とDi2を与えれば計算ができる。この計算は、『乱流』の場合に用いられる。

‘Hooper’は、レイノルズ数のよって計算が異なる。‘Hooper’で計算する場合、レイノルズ数(Re)が必須である。摩擦係数も基本的に必須であるが、配管荒さ(roughness)が与えられていれば、不要である。

B) 丸端による縮小

The Rennels formulas : \[ K = 0.0696\left(1 – 0.569\frac{r}{d_2}\right)\left(1-\sqrt{\frac{r} {d_2}}\beta\right)(1-\beta^5)\lambda^2 + (\lambda-1)^2 \] \[ \lambda = 1 + 0.622\left(1 – 0.30\sqrt{\frac{r}{d_2}} – 0.70\frac{r}{d_2}\right)^4 (1-0.215\beta^2-0.785\beta^5) \] \[ \beta = d_2/d_1 \]
K = fluids.contraction_round(Di1, Di2, rc, 
                method='Rennels')
必須説明単位
Di1floatInside diameter of original (larger) pipe[m]
Di2floatInside diameter of following (smaller) pipe[m]
rcfloatRadius of curvature of the contraction[m]
methodstrThe calculation method to use; one of ‘Rennels’, ‘Miller’, or ‘Idelchik’[-]

3つの計算方法があり、いずれでも与えるパラメータは同じです。
パラメータを与えない場合は、Rennels’になります。

C) 円錐型の縮小

図のように計算方法によって、全く異なる結果となるため注意が必要である。
そのため、ここでは’Rennels’に限定する。理由は、以下で説明します。

The ‘Rennels’ formulas: \[ K_2 = K_{fr,2} + K_{conv,2} \] \[ K_{fr,2} = \frac{f_d ({1 – \beta^4})}{8\sin(\theta/2)} \] \[ K_{conv,2} = 0.0696[1+C_B(\sin(\alpha/2)-1)](1-\beta^5)\lambda^2 + (\lambda-1)^2 \] \[ \lambda = 1 + 0.622(\alpha/180)^{0.8}(1-0.215\beta^2-0.785\beta^5) \] \[ \beta = d_2/d_1 \]
fluids.contraction_conical(Di1, Di2, fd=None, l=None, 
                           angle=None, Re=None, roughness=0.0,
                           method='Rennels')
パラメータ必須説明単位
Di1floatInside diameter of original (larger) pipe[m]
Di2floatInside diameter of following (smaller) pipe[m]
angle floatAngle of bend[m]
fd floatDarcy friction factor[-]
lfloatLength of the contraction[m]
RefloatReynolds number of the pipe[-]
roughness floatRoughness of bend wall[m]
methodstrone of ‘Rennels’, ‘Idelchik’, ‘Crane’, ‘Swamee’ ‘Hooper’, ‘Miller’, or ‘Blevins’

‘Rennels’の計算では、摩擦係数(fd)が必要となるが、ない場合にはレイノルズ数(Re)と配管荒さ(roughness )でも補完可能である。

他の計算方法については、以下の理由で使用していない。
‘Blevins’、‘Miller’ :データが断続的であるため、急激に値が変化することがある
‘Idelchik’    :低角、特に25°以下では値が大きい傾向がある
‘Swamee’    :配管の収縮比率に応じない値となる

‘Crane’と ‘Hooper’については、必要応じて使用できると考えられる。

Expansions/Diffusers

それぞれ導出方法について解説します。
A)円錐型の拡張、B)曲部のよる拡張、C)急激な拡張

A) 円錐型の拡張#document

式が複雑なため省略。別途公式ドキュメントを参照

fluids.diffuser_conical(Di1, Di2, l=None, angle=None, 
             fd=None, Re=None, roughness=0.0, 
             method='Rennels')
パラメータ必須説明単位
Di1floatInside diameter of original (larger) pipe[m]
Di2floatInside diameter of following (smaller) pipe[m]
angle floatAngle of bend[m]
fd floatDarcy friction factor[-]
lfloatThe contraction along the pipe axis[m]
RefloatReynolds number of the pipe[-]
roughness floatRoughness of bend wall[m]
methodstrone of ‘Rennels’, ‘Crane’, ‘Miller’, ‘Swamee’, ‘Idelchik’, or ‘Hooper’

下図のように‘Miller’以外で計算結果に大きな相違はない。
そのため、どの計算方法でも相違はないが、レイノルズ数(Re)があると様々計算方法で算出できる。

B) 曲部のよる拡張#document

\[ K_1 = \phi(1.43-1.3\beta^2)(1-\beta^2)^2 \] \[ \phi = 1.01 – 0.624\frac{l}{d_1} + 0.30\left(\frac{l}{d_1}\right)^2 – 0.074\left(\frac{l}{d_1}\right)^3 + 0.0070\left(\frac{l}{d_1}\right)^4 \]
fluids.diffuser_curved(Di1, Di2, l)
パラメータ必須説明単位
Di1floatInside diameter of original (larger) pipe[m]
Di2floatInside diameter of following (smaller) pipe[m]
lfloatLength of the curve along the pipe axis[m]

今回は、計算は1つだけです。また、パラメータも上記の3つ全て代入する必要があるため、正しい値であればエラーはほぼ起きないと思います。

C) 急激な拡張#document

The Rennels formula : \[ K_2 = (1-\beta^2)^2 \] The Hooper formulas :
If Re ≥ 4000 : \[ K_1 = 2 \left[1 – \left( \frac{D_1}{D_2} \right)^4 \right] \] else: \[ K_1 = \left[1 + 0.8 f_{d,1}\right] \left\{ \left[1 – \left( \frac{D_1}{D_2}\right)^2 \right]^2 \right\} \]
fluids.diffuser_sharp(Di1, Di2, Re=None, 
                      fd=None, roughness=0.0,
                      method='Rennels')
パラメータ必須説明単位
Di1floatInside diameter of original (larger) pipe[m]
Di2floatInside diameter of following (smaller) pipe[m]
fd floatDarcy friction factor[-]
RefloatReynolds number of the pipe[-]
roughness floatRoughness of bend wall[m]
methodstrThe method to use for the calculation; one of ‘Rennels’, ‘Hooper’

どちらの計算でも正確です。迷ったら、レイノルズ数による場合がある‘Hooper’の方がいいかもしれません。

‘Rennels’の場合は、配管径だけで算出可能です。
‘Hooper’の場合は、レイノルズ数(Re)と摩擦係数(fd)が必要です。ただし、摩擦係数は、配管の粗さ(roughness )から算出することも可能です。

具体的な計算例

Re = Reynolds(V=3, D=0.05, rho=1000, mu=1E-3)
fd = friction_factor(Re, eD=1E-5/0.05)
K = K_from_f(fd=fd, L=15, D=0.05)
K += entrance_sharp()
K += exit_normal()
K += 2*bend_miter(angle=30)
K += bend_rounded(Di=0.05, angle=45, fd=fd)
K += contraction_sharp(Di1=0.05, Di2=0.025)
K += diffuser_sharp(Di1=0.025, Di2=0.05)
dP_from_K(K, rho=1000, V=3)

>>> 37920.511

関連記事

プログラミングの勉強に悩んだら、、

icon

プログラミングの勉強に悩んだら、『Udemy』をオススメします。
私自身は、基本的なことは『Udemy』で学びました。具体的な、オススメのポイントは以下の4つです。

オススメのポイント
1.全ての講座がオンライン
  スマホでもパソコンでどこからでも受講できます。
2.リーズナブルな価格で、実用的なスキル
  セール時に購入すれば、2000~3000円程度で受講できる講座もあります。
  また、プロに講師による講座になるため、体系的、かつ実用的に学べます。
3.購入した講座を何度でも見直せる
  プログラミングに暗記は必要ありません。見返せば良いです。
4.プログラミングの講座が豊富
  特にPython流行りであることもあり、非常に豊富です

プログラミング言語の人気オンラインコース 開発の人気オンラインコース

プラントエンジニアリング
最新情報をチェックしよう!