Darcy-Weisbach式で直管圧力損失を求める|流量・内径・摩擦係数からPython計算

「Darcy-Weisbach式で直管圧力損失を求める|流量・内径・摩擦係数からPython計算」の内容を表す技術イラスト

配管を流体が流れると、管壁との摩擦によって圧力が低下します。

油圧回路、冷却水配管、空調設備、ポンプ設備などでは、この直管圧力損失を見積もることが重要です。

代表的な計算式がDarcy-Weisbach式です。

圧力損失として表すと、Δp=fDLDρv22\Delta p = f_D \frac{L}{D} \frac{\rho v^2}{2}

となります。

ここで、

  • Δp\Delta p:直管による圧力損失
  • fDf_D:Darcy摩擦係数
  • LL:管長
  • DD:管内径
  • ρ\rho:流体密度
  • vv:管内平均流速

です。

米国エネルギー省の技術資料でも、Darcy-Weisbach式を用いて流速、管径、管長、摩擦係数から配管損失を評価しています。

式そのものは単純ですが、実務では先に流速とレイノルズ数を求め、流れの状態に応じて摩擦係数を決める必要があります。

目次

Darcy-Weisbach式

直管の圧力損失は、Δp=fDLDρv22\Delta p = f_D \frac{L}{D} \frac{\rho v^2}{2}

です。

各変数をSI単位で整理すると、

記号意味単位
Δp\Delta p圧力損失Pa
fDf_DDarcy摩擦係数無次元
LL管長m
DD管内径m
ρ\rho密度kg/m³
vv平均流速m/s

L/DL/Dは無次元です。

また、ρv22\frac{\rho v^2}{2}

は動圧と同じ次元を持つため、最終的に圧力単位Paが得られます。

水頭損失として表す場合

Darcy-Weisbach式は水頭損失、hf=fDLDv22gh_f = f_D \frac{L}{D} \frac{v^2}{2g}

として表されることもあります。

DOEのポンプシステム資料でも、この形式が使われています。

圧力損失との関係は、Δp=ρghf\Delta p=\rho g h_f

です。

したがって、ρg(fDLDv22g)\rho g \left( f_D\frac{L}{D}\frac{v^2}{2g} \right)

とするとggが消えて、Δp=fDLDρv22\Delta p = f_D\frac{L}{D}\frac{\rho v^2}{2}

になります。

配管設計では、ポンプ揚程との比較ならm、水圧・油圧回路ならPa、kPa、MPaなど、目的に応じて表現を選べます。

流量から流速を求める

Darcy-Weisbach式には流速vvが必要ですが、実務では流量QQが入力として与えられる場合が多くあります。

円管の断面積は、A=πD24A=\frac{\pi D^2}{4}

です。

したがって、v=QAv=\frac{Q}{A}

なので、v=4QπD2v= \frac{4Q}{\pi D^2}

となります。

つまり計算の最初は、Q→vQ \rightarrow v

です。

ここで重要なのは、内径が2乗で効くことです。

同じ流量なら管径を小さくするほど流速が急激に上昇します。

圧力損失は流速の2乗に比例する

Darcy-Weisbach式には、v2v^2

が含まれます。

摩擦係数を一定と仮定すれば、流速が2倍になれば、22=42^2=4

なので圧力損失は4倍になります。

DOEも、Darcy-Weisbach式のV2V^2項から、同じ管径で流速が高くなると摩擦損失が急増することを説明しています。

実際には流速の変化によってレイノルズ数と摩擦係数も変わるため、常に厳密な2乗比例になるわけではありません。

それでも、

細い配管へ大流量を流すと圧力損失が急増する

という設計上の重要な傾向を理解できます。

摩擦係数は固定値ではない

式の中で最も扱いに注意が必要なのが、fDf_D

です。

Darcy摩擦係数は一定の材料定数ではありません。

少なくとも、

  • レイノルズ数
  • 管内面の粗さ
  • 管内径

などに影響されます。

したがって、計算手順は、

流量
↓
流速
↓
レイノルズ数
↓
摩擦係数
↓
Darcy-Weisbach式
↓
圧力損失

となります。

前段のレイノルズ数計算と直管圧力損失計算は別々の式ですが、実際の計算処理ではつながっています。

層流では摩擦係数を直接求められる

円管内の十分に発達した層流では、Darcy摩擦係数は、fD=64Ref_D=\frac{64}{Re}

です。

DOE/NREL資料でも層流の摩擦係数としてこの式が示されています。

したがって層流なら、Re→fDRe \rightarrow f_D

を直接計算できます。

一方、乱流では管粗さの影響が加わるため、Colebrook式、Moody線図、または適用可能性を確認した近似式などを使用します。

「配管だから摩擦係数は0.02」のように固定するのではなく、計算条件から決定する構造にしておく方が安全です。

Darcy係数とFanning係数を混同しない

摩擦係数にはDarcy摩擦係数とFanning摩擦係数があります。

両者には、fD=4fFf_D=4f_F

という関係があります。

Darcy-Weisbach式で、Δp=fDLDρv22\Delta p = f_D \frac{L}{D} \frac{\rho v^2}{2}

を使う場合はDarcy摩擦係数です。

層流式、fD=64Ref_D=\frac{64}{Re}

もDarcy係数です。

他の資料から摩擦係数だけを取り出して使用するときは、その資料がDarcyかFanningか確認する必要があります。

4倍の差になるため、計算ロジックでは明示的に区別する方がよいでしょう。

計算例

次の配管を考えます。

  • 内径:20 mm
  • 管長:5 m
  • 流量:20 L/min
  • 密度:850 kg/m³
  • 動粘度:30 mm²/s

まずSI単位へ変換します。D=0.020 mD=0.020\ \mathrm{m}Q=20×10−360≈3.33×10−4 m3/sQ = \frac{20\times10^{-3}}{60} \approx 3.33\times10^{-4}\ \mathrm{m^3/s}

動粘度は、ν=30×10−6 m2/s\nu = 30\times10^{-6}\ \mathrm{m^2/s}

です。

断面積

A=π(0.020)24A= \frac{\pi(0.020)^2}{4}

より、A≈3.14×10−4 m2A \approx 3.14\times10^{-4}\ \mathrm{m^2}

です。

平均流速

v=QAv=\frac{Q}{A}

より、v≈1.061 m/sv\approx1.061\ \mathrm{m/s}

となります。

レイノルズ数

Re=vDνRe=\frac{vD}{\nu}

なので、Re=1.061×0.02030×10−6Re = \frac{ 1.061\times0.020 }{ 30\times10^{-6} }Re≈707Re\approx707

です。

この例では層流として摩擦係数を、fD=64Ref_D=\frac{64}{Re}

から求めます。fD=64707≈0.0905f_D = \frac{64}{707} \approx0.0905

です。

圧力損失

Darcy-Weisbach式へ代入します。Δp=0.0905×50.020×850×1.06122\Delta p = 0.0905 \times \frac{5}{0.020} \times \frac{ 850\times1.061^2 }{2}

計算すると、Δp≈10800 Pa\Delta p \approx10800\ \mathrm{Pa}

です。

つまり、Δp≈10.8 kPa\Delta p \approx10.8\ \mathrm{kPa}

または、Δp≈0.0108 MPa\Delta p \approx0.0108\ \mathrm{MPa}

となります。

この値は5 mの直管部分だけの摩擦損失です。

エルボ、バルブ、ティー、フィルタなどの損失は別途考える必要があります。

局所損失とは分けて考える

実際の配管には直管だけでなく、

  • エルボ
  • ティー
  • バルブ
  • 継手
  • 入口・出口
  • フィルタ

などがあります。

これらは一般に損失係数KKを使って、ΔpK=Kρv22\Delta p_K = K\frac{\rho v^2}{2}

のように評価できます。

DOEのPumping System Assessment Toolでも、バルブ、エルボ、ティーなどの損失を速度水頭と損失係数を用いて扱っています。

したがって実際の回路全体では、Δptotal=Δppipe+∑ΔpK+Δpequipment\Delta p_{\mathrm{total}} = \Delta p_{\mathrm{pipe}} + \sum \Delta p_K + \Delta p_{\mathrm{equipment}}

という考え方になります。

Darcy-Weisbach式だけで配管系全体の圧損を表しているわけではありません。

Pythonで計算する

計算処理は、流速、レイノルズ数、摩擦係数、圧力損失を分けて関数化すると検証しやすくなります。

import math


def pipe_velocity(
    flow_l_min: float,
    diameter_mm: float,
) -> float:
    if flow_l_min <= 0:
        raise ValueError("流量は0より大きい必要があります")

    if diameter_mm <= 0:
        raise ValueError("内径は0より大きい必要があります")

    flow_m3_s = flow_l_min * 1e-3 / 60
    diameter_m = diameter_mm * 1e-3

    area = math.pi * diameter_m**2 / 4

    return flow_m3_s / area


def reynolds_number(
    velocity_m_s: float,
    diameter_mm: float,
    kinematic_viscosity_mm2_s: float,
) -> float:
    if kinematic_viscosity_mm2_s <= 0:
        raise ValueError("動粘度は0より大きい必要があります")

    diameter_m = diameter_mm * 1e-3
    viscosity_m2_s = kinematic_viscosity_mm2_s * 1e-6

    return velocity_m_s * diameter_m / viscosity_m2_s


def laminar_darcy_friction_factor(
    reynolds: float,
) -> float:
    if reynolds <= 0:
        raise ValueError("Reは0より大きい必要があります")

    return 64 / reynolds


def darcy_weisbach_pressure_loss(
    friction_factor: float,
    length_m: float,
    diameter_mm: float,
    density_kg_m3: float,
    velocity_m_s: float,
) -> float:
    if friction_factor < 0:
        raise ValueError("摩擦係数は0以上である必要があります")

    if length_m < 0:
        raise ValueError("管長は0以上である必要があります")

    if density_kg_m3 <= 0:
        raise ValueError("密度は0より大きい必要があります")

    diameter_m = diameter_mm * 1e-3

    return (
        friction_factor
        * length_m
        / diameter_m
        * density_kg_m3
        * velocity_m_s**2
        / 2
    )

計算例は、

velocity = pipe_velocity(
    flow_l_min=20,
    diameter_mm=20,
)

re = reynolds_number(
    velocity_m_s=velocity,
    diameter_mm=20,
    kinematic_viscosity_mm2_s=30,
)

f = laminar_darcy_friction_factor(re)

pressure_loss_pa = darcy_weisbach_pressure_loss(
    friction_factor=f,
    length_m=5,
    diameter_mm=20,
    density_kg_m3=850,
    velocity_m_s=velocity,
)

print(velocity)
print(re)
print(f)
print(pressure_loss_pa / 1000)

およそ、

1.061
707
0.0905
10.8

となります。

摩擦係数の決定を独立させる

上のコードで重要なのは、Darcy-Weisbach関数自身に、

f = 64 / Re

を書いていないことです。

これは意図的です。

圧力損失計算と摩擦係数決定を分離すれば、

層流
→ 64 / Re

乱流
→ 別の相関式

既知の実験値
→ 指定値

のように摩擦モデルを切り替えられます。

将来的には、

{
  "friction_factor_model": "laminar_64_over_re"
}

のようにモデル名をデータとして保持することもできます。

計算入力をデータ化する

再利用するなら、入力値と単位を分離して保持すると安全です。

{
  "pipe": {
    "inside_diameter": {
      "value": 20,
      "unit": "mm"
    },
    "length": {
      "value": 5,
      "unit": "m"
    }
  },
  "fluid": {
    "density": {
      "value": 850,
      "unit": "kg/m3"
    },
    "kinematic_viscosity": {
      "value": 30,
      "unit": "mm2/s"
    }
  },
  "flow_rate": {
    "value": 20,
    "unit": "L/min"
  }
}

処理側では、

入力
↓
単位検証
↓
SI変換
↓
流速
↓
Re
↓
摩擦係数
↓
直管圧力損失

という計算パイプラインにできます。

この構造なら、PythonだけでなくWeb計算ツールやAPIでも同じ計算規則を利用できます。

適用範囲を明示する

Darcy-Weisbach式自体は広く利用できますが、計算モデルを使うときは前提条件を明示する必要があります。

今回の例では、

  • 円形直管
  • 単相流
  • 平均流速を使用
  • 一定内径
  • 密度を一定として扱う
  • 直管摩擦のみ
  • 層流時は64/Re64/Re

という前提です。

圧縮性が大きい気体、高速流、多相流、非ニュートン流体などでは、単純なモデルでは不足する場合があります。

油圧油でも、温度によって粘度が大きく変化すれば、Re→fD→ΔpRe \rightarrow f_D \rightarrow \Delta p

が変化します。

したがって油圧配管計算では、使用温度に対応した粘度を入力することが重要です。

まとめ

Darcy-Weisbach式による直管圧力損失は、Δp=fDLDρv22\Delta p = f_D \frac{L}{D} \frac{\rho v^2}{2}

で求められます。

ただし実際の計算では、いきなりこの式へ値を代入するのではなく、Q→v→Re→fD→ΔpQ \rightarrow v \rightarrow Re \rightarrow f_D \rightarrow \Delta p

という順序で処理します。

特に摩擦係数は固定値ではありません。

層流では、fD=64Ref_D=\frac{64}{Re}

を使用できますが、乱流ではレイノルズ数と相対粗さを考慮する必要があります。

さらに実配管では、

直管摩擦損失
+
継手・バルブ等の局所損失
+
機器損失

を合計して回路全体の圧力損失を評価します。

流速、レイノルズ数、摩擦係数、直管損失を独立した計算モジュールへ分解しておけば、配管径選定やポンプ選定まで発展させやすくなります。

参考情報

  • U.S. Department of Energy — Improving Pumping System Performance
  • U.S. Department of Energy / NREL — LDV HVAC Model Development and Validation
  • U.S. Department of Energy — Pumping System Assessment Tool User’s Manual
参考になったらシェアしてください
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

機械設計・油圧・CAD・Python・AIなど、ものづくりに関わる技術を扱っています。工学知識を整理・構造化し、設計や自動化に再利用できる形へ変えていくことを目指しています。

目次