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)
パラメータ | 型 | 必須 | 説明 | 単位 |
K | float | 〇 | Loss coefficient | [ ] |
rho | float | 〇 | Density of fluid | [kg/m^3] |
V | float | 〇 | Velocity 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')
パラメータ一覧
パラメータ | 型 | 必須 | 説明 | 単位 |
Di | float | 〇 | Inside diameter of pipe | [m] |
angle | float | 〇 | Angle of bend | [m] |
fd | float | Darcy friction factor | [-] | |
rc | float | △ | Radius of curvature of the entrance | [m] |
bend_diameters | float | Number of diameters of pipe making up the bend radius | [-] | |
Re | float | △ | Reynolds number of the pipe | [-] |
roughness | float | Roughness of bend wall | [m] | |
L_unimpeded | float | The length of unimpeded pipe without any fittings, instrumentation, or flow disturbances downstream; used only in Miller method | [m] | |
method | str | One 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')
パラメータ | 型 | 必須 | 説明 | 単位 |
Di1 | float | 〇 | Inside diameter of original (larger) pipe | [m] |
Di2 | float | 〇 | Inside diameter of following (smaller) pipe | [m] |
fd | float | Darcy friction factor in original pipe; used only in the Hooper method and will be calculated from Re if not given | [-] | |
Re | float | Reynolds number of the pipe (used in Hooper method | [-] | |
roughness | float | Roughness of original pipe (used in Hooper method only if no friction factor given) | [m] | |
method | str | The 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')
型 | 必須 | 説明 | 単位 | |
Di1 | float | 〇 | Inside diameter of original (larger) pipe | [m] |
Di2 | float | 〇 | Inside diameter of following (smaller) pipe | [m] |
rc | float | 〇 | Radius of curvature of the contraction | [m] |
method | str | The calculation method to use; one of ‘Rennels’, ‘Miller’, or ‘Idelchik’ | [-] |
3つの計算方法があり、いずれでも与えるパラメータは同じです。
パラメータを与えない場合は、Rennels’になります。
C) 円錐型の縮小
図のように計算方法によって、全く異なる結果となるため注意が必要である。
そのため、ここでは’Rennels’に限定する。理由は、以下で説明します。
fluids.contraction_conical(Di1, Di2, fd=None, l=None,
angle=None, Re=None, roughness=0.0,
method='Rennels')
パラメータ | 型 | 必須 | 説明 | 単位 |
Di1 | float | 〇 | Inside diameter of original (larger) pipe | [m] |
Di2 | float | 〇 | Inside diameter of following (smaller) pipe | [m] |
angle | float | 〇 | Angle of bend | [m] |
fd | float | Darcy friction factor | [-] | |
l | float | Length of the contraction | [m] | |
Re | float | Reynolds number of the pipe | [-] | |
roughness | float | Roughness of bend wall | [m] | |
method | str | one 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')
パラメータ | 型 | 必須 | 説明 | 単位 |
Di1 | float | 〇 | Inside diameter of original (larger) pipe | [m] |
Di2 | float | 〇 | Inside diameter of following (smaller) pipe | [m] |
angle | float | 〇 | Angle of bend | [m] |
fd | float | Darcy friction factor | [-] | |
l | float | The contraction along the pipe axis | [m] | |
Re | float | Reynolds number of the pipe | [-] | |
roughness | float | Roughness of bend wall | [m] | |
method | str | one 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)
パラメータ | 型 | 必須 | 説明 | 単位 |
Di1 | float | 〇 | Inside diameter of original (larger) pipe | [m] |
Di2 | float | 〇 | Inside diameter of following (smaller) pipe | [m] |
l | float | 〇 | Length 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')
パラメータ | 型 | 必須 | 説明 | 単位 |
Di1 | float | 〇 | Inside diameter of original (larger) pipe | [m] |
Di2 | float | 〇 | Inside diameter of following (smaller) pipe | [m] |
fd | float | Darcy friction factor | [-] | |
Re | float | Reynolds number of the pipe | [-] | |
roughness | float | Roughness of bend wall | [m] | |
method | str | The 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
関連記事
プログラミングの勉強に悩んだら、、
プログラミングの勉強に悩んだら、『Udemy』をオススメします。
私自身は、基本的なことは『Udemy』で学びました。具体的な、オススメのポイントは以下の4つです。
オススメのポイント
1.全ての講座がオンライン
スマホでもパソコンでどこからでも受講できます。
2.リーズナブルな価格で、実用的なスキル
セール時に購入すれば、2000~3000円程度で受講できる講座もあります。
また、プロに講師による講座になるため、体系的、かつ実用的に学べます。
3.購入した講座を何度でも見直せる
プログラミングに暗記は必要ありません。見返せば良いです。
4.プログラミングの講座が豊富
特にPython流行りであることもあり、非常に豊富です