後者について補足すると、
例えば、下図のように、WL1、WL2と2つの水位が与えらた場合にそれぞれ
それぞれの定義は難しい上に
マニング則についても以下のとおり若干の変更を加える。
ここに、
水位
運動方程式の生成項が摩擦損失のみの場合、マニング則を用いると以下のとおりになる。
一般断面の基礎式を用いて、限界水深、等流水深を矩形断面と同様に定義で設定することは難しいため、便宜的に以下のとおりに設定する。
全ての損失による水頭の勾配が河床勾配
なお、一般断面では水深を用いないため、正確には等流時の水位(以降、等流水位と定義)となる。
生成項が摩擦損失のみの場合は、
となり、これを満足する水位
フルード数が1となる水位を限界流時の水位(以降、限界水位と定義)とする。
フルード数は、
となるが、平方根の中に水深
そのため、水深
離散化は次式となる。
なお、
常流の場合、下流から逐次計算を行なうため未知数は
一般断面の場合、離散式の未知数
河道断面の座標を次図のように定義する。
河積
ここでは、水際位置と座標定義点が同一であるが、実計算ではその限りではないため、水面と河道断面の交点を求めて計算する必要がある。詳細は後述するプログラムを参照いただきたい。
ここまでは河道断面内で粗度係数が一定であることを前提としたが、上図のとおり、断面内で粗度係数が異なる場合について考える。
各潤辺の粗度の影響が及ぶ範囲を下図のように考えて、各領域の流速が
出典:椿東一郎 水理学1 pp.147
この方法は平均流速公式1a、
当然ではあるが水位によって合成粗度係数は変わる。
断面全体の流速
マニング則を用いると次式が導かれる。
となり、合成粗度が導かれる。
ある河川断面の座標が次図のとおりとする。
import matplotlib.pyplot as plt
L=[0, 5,93,100,200,206,294,300]
Z=[6, 3.5, 3.5, 0, 0, 3, 3, 6]
plt.plot(L,Z, c='k')
plt.show() # 描画
また、粗度係数は次のとおりとする。(個数は測点間で定義するためi-1個)
n=[0.041, 0.041,0.030,0.030,0.030,0.040,0.040]
断面特性を計算するプログラムは次のように記述できる。
def H2ABSKn(l, z, n, H):
A, B, S, SN = float(0), float(0), float(0), float(0)
for i in range(1, len(l)):
dx = l[i] - l[i-1]
dy = z[i] - z[i-1]
hb, hf = H - z[i-1], H - z[i]
if hb <= float(0) :
if hf > float(0) :
dx_dh = dx / (hf - hb)
B += hf * dx_dh
A += 0.5 * hf * hf * dx_dh
Sp = hf * np.sqrt( dx_dh * dx_dh + 1.0)
S += Sp
SN += Sp * n[i-1]**1.5
elif hf <= float(0) :
if hb > float(0) :
dx_dh = dx / (hf - hb)
B -= hb * dx_dh
A -= 0.5 * hb * hb * dx_dh
Sp = hb * np.sqrt(dx_dh * dx_dh + 1.0)
S += Sp
SN += Sp * n[i-1]**1.5
else :
B += dx
A += 0.5 * dx * (hf + hb)
Sp = np.sqrt(dx**2 + dy**2)
S += Sp
SN += Sp * n[i-1]**1.5
if S <= float(0):
nd = float(0)
K = float(0)
else:
nd = (SN/S)**(2.0/3.0)
K = A**(5.0/3.0)/nd/S**(2.0/3.0)
return A, B, S, K, nd
import numpy as np
A, B, S, K, nd = H2ABSKn(np.array(L), np.array(Z), np.array(n), 5.0)
print('河積:{}\n水面幅:{}\n潤辺:{}\n通水能:{}\n合成粗度係数:{}'.format(A, B, S, K, nd))
河積:858.0
水面幅:296.0
潤辺:298.3606797749979
通水能:47342.84520415623
合成粗度係数:0.03664910724429057
また、水位を0.01~6.0まで変化させた場合の通水能を計算すると以下となる。
Harr = np.arange(0.01,6.001,0.01)
Karr = np.zeros_like(Harr)
for i, H in enumerate(Harr) :
A, B, S, Karr[i], nd = H2ABSKn(np.array(L), np.array(Z), np.array(n), H)
fig, axes = plt.subplots(1, 2, figsize=(8,3), tight_layout=True, sharey="all")
axes[0].plot(x, y, c='k')
axes[1].plot(Karr, Harr , c='k')
axes[0].set_title('cross-section')
axes[1].set_title('K')
# plt.savefig('tmp.png', bbox_inches="tight", facecolor="white")
plt.show() # 描画
上図のように、水位と通水能の関係は低水路と高水敷の境界で単調増加にならない。これは後述する水位計算において問題となる。
![A](ref/fig01_3.jpg)