Logo
Overview
Blasiusの第一公式

Blasiusの第一公式

kuuuya kuuuya
May 4, 2026
3 min read

循環をもつ一様流が円柱を過ぎる2次元ポテンシャル流れに対して Blasius の第一公式を使って円柱に働く力を計算してみます。

複素速度ポテンシャルで流れを表す

複素変数を z=x+iyz = x + \mathrm{i}y、一様流速 UU、円柱半径 aa、循環 Γ\Gamma、迎角 α\alphaとおくと、 完全流体中で循環をもつ一様流が円柱にあたるときの流れを表す複素速度ポテンシャルは以下の式で表される。

f(z)=U(zeiα+a2eiαz)+iΓ2πlog(za)f(z) = U\left( z e^{-\mathrm{i}\alpha} + \frac{a^2 e^{\mathrm{i}\alpha}}{z} \right) + \frac{\mathrm{i}\Gamma}{2\pi}\log\left(\frac{z}{a}\right)

複素速度は複素速度ポテンシャルを微分することにより

dfdz=U(eiαa2eiαz2)+iΓ2πz\frac{df}{dz} = U\left( e^{-\mathrm{i}\alpha} - \frac{a^2 e^{\mathrm{i}\alpha}}{z^2} \right) + \frac{\mathrm{i}\Gamma}{2\pi z}

で与えられる。

Blasiusの第一公式で力を計算する

ρ\rho を流体密度、複素速度を dfdz=uiv\frac{df}{dz}=u-iv、積分路 CC を反時計回りとすると、Blasius の第一公式は以下の式で定義される。

FxiFy=iρ2C(dfdz)2dzF_x - \mathrm{i}F_y = \frac{\mathrm{i}\rho}{2} \oint_C \left(\frac{df}{dz}\right)^2 dz

計算の際には以下のパラメータを設定した。

  • 一様流速 U=1.0U = 1.0
  • 円柱半径 a=1.0a = 1.0
  • 循環 Γ=4πUa\Gamma =4\pi Ua (>0>0 のとき円柱まわりの流れは時計回りで揚力は正の yy 方向に働く)
  • 迎角 α=0\alpha = 0^\circ
  • 密度 ρ=1.0\rho = 1.0

計算結果は以下のようになった。

  • Fx:0F_x: 0
  • Fy:12.5663F_y: 12.5663

なお、ここでの Fx,FyF_x,F_y は固定座標系での力の成分である。抗力・揚力を一様流方向に対して定義すると、抗力は常に 0 (ダランベールのパラドックス)、揚力の大きさは ρUΓ\rho U\Gamma (Kutta–Joukowskiの定理) になる。

数値的には、円柱表面または円柱を囲む任意の円周を離散化し、 W2dz\oint W^2dz を台形公式などで近似できる。被積分関数は円柱外部で解析的なので、円柱境界を横切らず、かつ円柱を一回囲むという条件を保つ限り、積分路を変形しても周回積分の値は変わらない。 例えば、円柱表面ではなく、より大きな半径を持つ円周上で積分しても同じ結果が得られる。(円柱内部にある特異点の留数により積分結果が決まる。)

一方、今回のように 複素速度 dfdz\frac{df}{dz} が明示的に分かっている場合は、 (dfdz)2\left(\frac{df}{dz}\right)^2 の Laurent 展開から 1/z1/z の係数を特定することで解析的に計算できる。

W=dfdz=U(eiαa2eiαz2)+iΓ2πzW = \frac{df}{dz} = U\left( e^{-\mathrm{i}\alpha} - \frac{a^2 e^{\mathrm{i}\alpha}}{z^2} \right) + \frac{\mathrm{i}\Gamma}{2\pi z}

とおくと、

W2=U2e2iα+UeiαiΓπz+O(1z2)W^2 = U^2 e^{-2\mathrm{i}\alpha} + Ue^{-\mathrm{i}\alpha}\frac{\mathrm{i}\Gamma}{\pi z} + O\left( \frac{1}{z^2} \right)

留数は UeiαiΓπUe^{-\mathrm{i}\alpha}\frac{\mathrm{i}\Gamma}{\pi} なのでBlasiusの公式に代入すると

FxiFy=iρ22πiUeiαiΓπ=iρUΓeiαF_x - \mathrm{i}F_y = \frac{\mathrm{i}\rho}{2} \cdot2\pi \mathrm{i}\cdot Ue^{-\mathrm{i}\alpha}\frac{\mathrm{i}\Gamma}{\pi} = -\mathrm{i}\rho U \Gamma e^{-\mathrm{i}\alpha} =iρUΓ(cosαisinα)= -\mathrm{i}\rho U \Gamma \left( \cos\alpha - \mathrm{i}\sin\alpha \right) =ρUΓsinαiρUΓcosα= -\rho U \Gamma \sin\alpha-\mathrm{i}\rho U \Gamma \cos\alpha Fx=ρUΓsinα,Fy=ρUΓcosα\therefore F_x = -\rho U \Gamma \sin\alpha, F_y = \rho U \Gamma \cos\alpha

迎角 α=0\alpha = 0^\circの場合は Fx=0F_x = 0, Fy=ρUΓF_y = \rho U \Gamma となり、働く力を解析的に計算することができた。

また、循環の量を変えながら流線と速度場を描いてみた。

迎角0度、循環3πUaの円柱まわりの流線
Γ=3πUa\Gamma = 3\pi Ua
迎角0度、循環4πUaの円柱まわりの流線
Γ=4πUa\Gamma = 4\pi Ua
迎角0度、循環5πUaの円柱まわりの流線
Γ=5πUa\Gamma = 5\pi Ua
迎角0度、循環3πUaの円柱まわりの速度場
Γ=3πUa\Gamma = 3\pi Ua
迎角0度、循環4πUaの円柱まわりの速度場
Γ=4πUa\Gamma = 4\pi Ua
迎角0度、循環5πUaの円柱まわりの速度場
Γ=5πUa\Gamma = 5\pi Ua

迎角45°の場合。

迎角45度、循環3πUaの円柱まわりの流線
Γ=3πUa\Gamma = 3\pi Ua
迎角45度、循環4πUaの円柱まわりの流線
Γ=4πUa\Gamma = 4\pi Ua
迎角45度、循環5πUaの円柱まわりの流線
Γ=5πUa\Gamma = 5\pi Ua
迎角45度、循環3πUaの円柱まわりの速度場
Γ=3πUa\Gamma = 3\pi Ua
迎角45度、循環4πUaの円柱まわりの速度場
Γ=4πUa\Gamma = 4\pi Ua
迎角45度、循環5πUaの円柱まわりの速度場
Γ=5πUa\Gamma = 5\pi Ua

まとめ

  • 実際に計算してみて初めてその式を自分が自由に扱える感覚が身につくような気がする。

  • “Allez en avant, et la foi vous viendra” (前進すれば信仰が訪れる) はダランベールの言葉らしい。

  • 圧力分布も計算したので時間があれば今後追記します。

今回のコード

今回の記事で使用したコードを載せておきます。

blasius.py
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import trapezoid
# フォント指定(文字化け対策)
plt.rcParams['font.family'] = 'Meiryo'
# パラメータ設定
U = 1.0 # 一様流速
a = 1.0 # 円柱の半径
Gamma = 4*np.pi*U*a # 循環
alpha = np.radians(0) # 迎角
#alpha = np.radians(45) # 迎角
rho = 1.0 # 密度
N = 100 # 格子数
# 複素速度ポテンシャル関数
def complex_potential(z, U, a, Gamma, alpha):
f = U * (z * np.exp(-1j * alpha) + a**2 * np.exp(1j * alpha) / z) + (1j * Gamma / (2 * np.pi)) * np.log(z / a)
return f
# 複素速度関数 (df/dz)
def complex_velocity(z, U, a, Gamma, alpha):
df_dz = U * (np.exp(-1j * alpha) - a**2 * np.exp(1j * alpha) / z**2) + (1j * Gamma / (2 * np.pi * z))
return df_dz
x = np.linspace(-4, 4, N)
y = np.linspace(-4, 4, N)
X, Y = np.meshgrid(x, y)
Z = X + 1j * Y
# 円柱内部へのマスク処理
mask = np.abs(Z) > a
Z_mask = np.where(mask, Z, np.nan)
# 複素速度ポテンシャル関数
f = complex_potential(Z_mask, U, a, Gamma, alpha)
phi = np.real(f) # 速度ポテンシャル
psi = np.imag(f) # 流れ関数
plt.figure(figsize=(8, 8))
plt.contour(X, Y, psi, levels=50, cmap='viridis')
circle = plt.Circle((0, 0), a, color='black', fill=False)
plt.gca().add_artist(circle)
plt.xlim(-4, 4)
plt.ylim(-4, 4)
plt.gca().set_aspect('equal')
plt.title(f'循環のある円柱を過ぎる流れ(alpha=0, $\Gamma$=4$\pi$Ua)')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# ブラジウスの第一公式の適用
theta = np.linspace(0, 2 * np.pi, 1000)
z_surf = a * np.exp(1j * theta)
df_dz = complex_velocity(z_surf, U, a, Gamma, alpha)
force_complex = (1j * rho / 2) * trapezoid((df_dz**2), z_surf)
Fx = force_complex.real
Fy = -force_complex.imag
print(f"Fx: {Fx:.4f}")
print(f"Fy: {Fy:.4f}")