31
2015 7 21 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹 介する。 Ⅰ.入出力画面 データ入力はゲート上流水深(h0)、ゲート下流水深(h2)(潜り流出の場合)、ゲート 幅(B)、ゲートの開き(a)である。流量(Q)、収縮係数(Cc)または流量係数(C1C)は計算により求めるものである。 収縮係数または流量係数は、事前に求めたデータから求めるようにプログラミングし ている。求めた係数が正しいものであるかを視覚的に確認できるようにしている。

スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

1

スルースゲートの水理計算

益永八尋

ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

介する。

Ⅰ.入出力画面

データ入力はゲート上流水深(h0)、ゲート下流水深(h2)(潜り流出の場合)、ゲート

幅(B)、ゲートの開き(a)である。流量(Q)、収縮係数(Cc)または流量係数(C1、

C)は計算により求めるものである。

収縮係数または流量係数は、事前に求めたデータから求めるようにプログラミングし

ている。求めた係数が正しいものであるかを視覚的に確認できるようにしている。

Page 2: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

2

Page 3: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

3

Page 4: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

4

Ⅱ.プログラムの考え方

潜り流出における流出係数 C1は図 3-2.4 により求めることができる(水

理公式集 による)。しかし、この図から精度の高い C1を求めるには、

目視により方法では困難であると言わざるを得ない。精度の高い C1は、コ

ンピュータにより図のデータを取得し、適切な処理を行うことにより求める

ことが可能となる。どのような処理(プログラミング)をすればそれは可能

であるか。図を見れば、X軸、Y軸とも普通目盛(対数目盛ではない)であ

るため、処理方法は簡単に思える。

Ⅱ-1.潜り流出における C1の求め方 1

①C1を過程する

②h2/a=Kiのときの h0/aの値を求める。この値をMiとする

ただし、imax=7

③h2/a=Ki+1のときの h0/aの値を求める。この値をMi+1とする。

④MiとMi+1の値から h2/a=Kのときの h0/aの値Mを求める

⑤Mの値が条件として与えられたM0と等しく(ABS(M-M0)<=0.0001)なるまで C1

を仮定し直し、②に戻り試算を繰り返す。

⑥ABS(M-M0)<=0.0001になれば試算を終了し、そのときの C1が求める C1となる。

ただし、C1<=0.59 図 3-2.4による C1の最大値

Page 5: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

5

使用する h2/a=Kiの

データを決定し、h0/a

の値Miを求める

条件

M=M0

K=K0

C1を仮

使用するh2/a=K

i+1の

データを決定し、Mi+1

の値を求める

MiとM

i+1からh

2/a=K

のときの h0/a=Mの値

を求める。

ABS(M-M0)<=

0.0001

出力

終了

Yes

No

Page 6: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

6

Ⅱ-2.潜り流出における C1の求め方 2

図 3-2.4に示される中で、ハッチをした部分の範囲内にある場合には求め方が異なるためこ

の処理が必要となる。

① i=1~4

a.「①自由流出と潜り流出の境界線」の式(回帰式)と仮定した C1から h0/aの値を

求める

①-1 i=1~2

C1=0.519~0.5539の場合

b.仮定した C1のときの h0/aの値を h2/a=3のデータ群から求める。

c.「a」から求めた h2/a と h2/a=2 から仮定した C1のときの初期条件 h2/a のときの

h0/aの値を求め、この値が初期条件として与えた h0/aと等しくなるまで試算する。

①-2 i=2~3

C1=0.554~0.5739の場合

b.仮定した C1のときの h0/aの値を h2/a=4のデータ群から求める。

c.「a」から求めた h2/a と h2/a=2 から仮定した C1のときの初期条件 h2/a のときの

h0/aの値を求め、この値が初期条件として与えた h0/aと等しくなるまで試算する。

①-3 i=3~4

C1=0.574~0.5859の場合

b.仮定した C1のときの h0/aの値を h2/a=5のデータ群から求める。

c.「a」から求めた h2/aと h2/a=2から仮定した C1のときの初期条件 h2/aのときの

h0/aの値を求め、この値が初期条件として与えた h0/aと等しくなるまで試算する

② i=4~5

C1=0.536~0.5860 且つ (h0/a>=12.017 and h0/a<=16)の場合

初期条件 h0/aの値と h2/a=5および h2/a=6のデータ群から初期条件 h2/a=Xのと

きの C1を求める

② i=5~6

C1=0.498~0.536 且つ (h0/a>=13.515 and h0/a<=16)の場合

初期条件 h0/aの値と h2/a=6および h2/a=7のデータ群から初期条件 h2/a=Xのとき

の C1を求める

④ i=6~7

C1=0.455~0.498 且つ (h0/a>=13.685 and h0/a<=16)の場合

初期条件 h0/aの値と h2/a=7および h2/a=8のデータ群から初期条件 h2/a=Xのとき

Page 7: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

7

の C1を求める

Ⅱ-1とⅡ-2以外の場合にはコンピュータによりC1を求めることは極めて困難である

と思われる(筆者のプログラミング能力では)。

Page 8: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

8

図の説明

ハッチのない部分は(h2/a >=2)C1の求め方 1の範囲である。

図に表示されている値はコンピュータにより求めたものであり、目視により求めた値より

精度が高い。

自由流出の範囲

C1を求めることができない範囲

C1の求め方 2の範囲

h0/a=2.642

C1=0.519

h0/a=5.377

C1=0.554

h0/a=8.768

C1=0.574

h0/a=13.152

C1=0.586

h0/a=16.000

C1=0.593 h0/a=16.000

C1=0.536

h0/a=16.000

C1=0.498

h0/a=16.000

C1=0.455

h0/a=5.140

C1=0.519 h0/a=8.647

C1=0.554

h0/a=8.768

C1=0.574

h0/a=12.017

C1=0.536

h0/a=13.515

C1=0.498

h0/a=13.685

C1=0.455

Page 9: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

9

h2/a=2 h0/a C1

X軸の値 Y軸の値2.0000 0.0000 12.0234 0.1023 22.0796 0.2028 32.1733 0.3014 42.3232 0.4018 52.4356 0.4581 62.5855 0.5023 72.6417 0.5189 8

データ番号h2/a=3 h0/a C1

X軸の値 Y軸の値3.0000 0.0000 13.0351 0.1032 23.0539 0.1705 33.1101 0.2028 43.2974 0.2415 53.4848 0.2783 63.6721 0.3032 73.9344 0.3401 84.2529 0.3760 94.4590 0.4018 104.7213 0.4378 115.0398 0.4793 125.2834 0.5143 135.3770 0.5456 145.3770 0.5539 15

データ番号

h2/a=4 h0/a C1

X軸の値 Y軸の値4.0000 0.0000 14.1030 0.0479 24.2717 0.1014 34.4778 0.1631 44.6464 0.2018 54.9087 0.2507 65.2459 0.3023 75.5269 0.3364 85.8454 0.3677 96.1452 0.3917 106.4824 0.4157 116.8571 0.4396 127.1569 0.4544 137.5129 0.4719 147.8501 0.4885 158.1311 0.5041 168.3747 0.5207 178.5433 0.5346 188.6557 0.5502 198.7119 0.5622 208.7682 0.5733 21

データ番号 h2/a=5 h0/a C1

X軸の値 Y軸の値5.0000 0.0000 15.2084 0.0783 25.3208 0.1060 35.4520 0.1475 45.6019 0.1816 55.6956 0.2065 65.8642 0.2406 75.9953 0.2581 86.1077 0.2774 96.2951 0.2959 106.5761 0.3171 116.8759 0.3419 127.2693 0.3677 137.6253 0.3908 148.0749 0.4157 158.5808 0.4359 169.0117 0.4535 179.5738 0.4664 18

10.0796 0.4756 1910.6604 0.4866 2011.2974 0.5005 2111.8408 0.5143 2212.2904 0.5300 2312.7026 0.5484 2412.9836 0.5659 2513.1522 0.5853 26

データ番号

Ⅲ.グラフからの読み取りデータと相関分析

表 3-1 h2/a=2のデータ 表 3-2 h2/a=3のデータ

表 3-3 h2/a=4のデータ 表 3-4 h2/a=5のデータ

Page 10: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

10

h2/a=6 h0/a C1

X軸の値 Y軸の値6.0000 0.0000 16.0515 0.0323 26.0515 0.0710 36.1077 0.1051 46.2763 0.1475 56.4262 0.1779 66.5948 0.2037 76.8571 0.2415 87.1756 0.2719 97.5504 0.3014 107.9251 0.3244 118.3185 0.3493 128.7494 0.3696 139.1616 0.3871 149.6862 0.4074 15

10.1546 0.4230 1610.8103 0.4433 1711.4848 0.4590 1812.2155 0.4747 1913.0773 0.4894 2014.0141 0.5051 2114.8759 0.5171 2215.6253 0.5253 2315.8689 0.5290 24

データ番号 h2/a=7 h0/a C1

X軸の値 Y軸の値7.0000 0.0000 17.1382 0.0341 27.2131 0.0719 37.3068 0.1041 47.4567 0.1392 57.6066 0.1687 67.8314 0.1972 78.0187 0.2212 88.2810 0.2461 98.5995 0.2700 108.8993 0.2931 119.3489 0.3171 129.8361 0.3410 13

10.3981 0.3631 1410.8853 0.3797 1511.4098 0.3963 1611.9719 0.4129 1712.6838 0.4313 1813.3583 0.4452 1914.0890 0.4618 2014.9134 0.4747 2115.8876 0.4922 22

データ番号

h2/a=8 h0/a C1

X軸の値 Y軸の値8.0000 0.0000 18.2248 0.0304 28.3934 0.0747 38.5621 0.1041 48.7494 0.1336 59.0304 0.1677 69.2740 0.1945 79.6674 0.2276 89.9672 0.2507 9

10.4543 0.2820 1010.9227 0.3069 1111.3536 0.3290 1211.9344 0.3539 1312.4778 0.3724 1413.1897 0.3935 1513.8642 0.4138 1614.6136 0.4295 1715.2506 0.4442 1815.9251 0.4562 19

データ番号

表 3-5 h2/a=6のデータ 表 3-6 h2/a=7のデータ

表 3-7 h2/a=8のデータ

Page 11: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

11

X軸の値 Y軸の値

h0/a C1 h2/a

1 0.8806 0.46542 1.5550 0.49033 2.0796 0.50514 2.6230 0.5189 25 3.4473 0.53096 4.3653 0.54387 4.9461 0.55028 5.3770 0.5539 39 6.1639 0.5594

10 7.2319 0.565911 8.2248 0.570512 8.7682 0.5742 413 9.7611 0.577914 11.1288 0.581615 12.1405 0.584316 13.1335 0.585317 13.1520 0.5860 518 13.9016 0.587119 14.8946 0.587120 15.8501 0.5853

番号

潜り流出・自由流出の境界線

y = 0.001x3 - 0.0168x2 + 0.0991x + 0.3795R² = 1

0.5100

0.5200

0.5300

0.5400

0.5500

0.5600

0.5700

0.5800

0.5900

0 2 4 6

流量係数C1

X=h2/a

流量係数C1

系列1

多項式 (系列1)

表 3-8 流出状態境界線のデータ

Page 12: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

12

y = 0.0562x3 - 0.178x2 + 2.5574x - 2.2108R² = 1

0.000

2.000

4.000

6.000

8.000

10.000

12.000

14.000

0 2 4 6

Y=h

0/a

X=h2/a

①自由流出と潜り流出の境界線

系列1

多項式 (系列1)

y = 0.0003x3 - 0.0162x2 + 0.4818x + 0.8354R² = 1

0

1

2

3

4

5

6

0.000 5.000 10.000 15.000

Y=h

2/a

X=h0/a

②自由流出と潜り流出の境界線

系列1

多項式 (系列1)

Page 13: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

13

y = 7E-05x3 - 0.0024x2 + 0.0283x + 0.4594R² = 1

0.510

0.520

0.530

0.540

0.550

0.560

0.570

0.580

0.590

0.000 5.000 10.000 15.000

流量係数

C

X=h0/a

③自由流出と潜り流出の境界での流量係数 C1

系列1

多項式 (系列1)

y = -3E-05x4 + 0.0009x3 - 0.0093x2 + 0.0523x + 0.436

R² = 0.9989

0.48

0.5

0.52

0.54

0.56

0.58

0.6

0.000 5.000 10.000 15.000

Y=流

量係数

C

X=h0/a

Henryの実験曲線式(自由流出)

系列1

多項式 (系列1)

Page 14: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

14

y = 0.1163x3 + 0.0492x2 + 0.0111x + 0.6092

R² = 0.9996

0.6

0.62

0.64

0.66

0.68

0.000 0.200 0.400 0.600 0.800

収縮係数Cc

X=a/h0

Mullerの理論式

系列1

多項式 (系列1)

y = -0.3113x4 + 0.3432x3 - 0.0442x2 -0.0316x + 0.6091

R² = 0.9948

0.602

0.603

0.604

0.605

0.606

0.607

0.608

0.609

0.61

0.000 0.200 0.400 0.600

収縮係数Cc

X=a/h0

Pajerの理論式

系列1

多項式 (系列1)

Page 15: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

15

Ⅲ.プログラム

1.モジュール構成

2.プログラムコード

2.1 Microsoft Excel Objects Sheets1(ゲートの水理計算)

Private Sub CommandButton1_Click()

Call Module2.Initial_Set_Top_Left

MsgBox "コネクタの初期値を取得し、設定値を変更しました"

End

End Sub

Private Sub CommandButton2_Click()

Dim h2a As Single

Dim h0a As Single

Dim a As Single

Dim B As Single

Dim C As Single

Dim CX As Single

Dim h0 As Single

Dim h2 As Single

CommandButton1

CommandButton2

Page 16: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

16

Dim Q As Single

Dim g As Single

'--------------------

g = 9.80653

'--------------------

Sheets("ゲートの水理計算").Select

h0 = Cells(14, 4)

h2 = Cells(15, 4)

B = Cells(17, 4)

a = Cells(18, 4)

' ------------------

h0a = h0 / a

h2a = h2 / a

CX = Serch_CX(h2a, h0a)

Q = CX * a * B * (2 * g * h0) ^ 0.5

'----------------------------

Cells(13, 4) = Q

Cells(16, 4) = CX

Cells(16, 5) = "潜り流出"

Call Module2.Get_Top_Left(CX, h0a)

MsgBox "計算は正常に終了しました。"

End

End Sub

Private Sub CommandButton3_Click()

Dim a As Single

Dim B As Single

Dim C As Single

Dim CC As Single

Dim h0 As Single

Dim Q As Single

Dim g As Single

Dim strMas(3) As String

'--------------------

Page 17: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

17

g = 9.80653

UserForm1.Show

'----------------------

Sheets("ゲートの水理計算").Select

'----------------------

h0 = Cells(14, 4)

B = Cells(17, 4)

a = Cells(18, 4)

'----------------------

Select Case Select_No

Case 1

strMas(1) = "Henryの実験式"

'X=h0/a

X = h0 / a

CC = -0.00003 * X ^ 4 + 0.0009 * X ^ 3 - 0.0093 * X ^ 2 + 0.0523 * X + 0.436

Q = CC * a * B * (2 * g * h0) ^ 0.5

Cells(16, 2) = "流量係数 C)"

Case 2

strMas(2) = "Mullerの理論曲線"

'X=a/h0

X = a / h0

CC = 0.1163 * X ^ 3 + 0.0492 * X ^ 2 + 0.0111 * X + 0.6092

Q = CC * a * B * ((2 * g * (h0 - CC * a)) / (1 - (CC * a / h0) ^ 2)) ^ 0.5

Cells(16, 2) = "収縮係数 Cc)"

Case 3

strMas(3) = "Pajer の理論曲線"

'X=a/h0

X = a / h0

CC = -0.3113 * X ^ 4 + 0.3432 * X ^ 3 - 0.0442 * X ^ 2 - 0.0316 * X + 0.6091

Q = CC * a * B * ((2 * g * (h0 - CC * a)) / (1 - (CC * a / h0) ^ 2)) ^ 0.5

Cells(16, 2) = "収縮係数 Cc)"

End Select

'----------------------------

Cells(13, 4) = Q

Cells(16, 4) = CC

Cells(16, 5) = strMas(Select_No)

Page 18: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

18

MsgBox "計算は正常に終了しました。"

End

End Sub

2.2 Microsoft Excel Objects Sheets3(流量係数の求値)

Private Sub CommandButton1_Click()

Dim X(40) As Single

Dim Y(40) As Single

Dim N As Integer

Dim I As Integer

Dim J As Integer

Dim AA As String

Dim h0a As Single

Dim h2a As String

'--------------------

h2a = Cells(85, 4)

h0a = Cells(82, 4)

'------------------------

For I = 1 To 100

AA = Sheets("ゲートの水理計算").Cells(33 + I, 3)

'--------------------------

If Right(AA, 1) = h2a Then

For J = 1 To 40

If Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 4) = "" Then

N = J

Exit For

Else

X(J) = Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 4)

Y(J) = Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 5)

CommandButton1

Page 19: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

19

End If

Next J

End If

'-------------

If N <> 0 Then

Exit For

End If

Next I

'---------------------

C1 = Serch_C1(N, X(), Y(), h0a)

Sheets("流量係数の求値").Select

Cells(85, 3) = C1

End Sub

Page 20: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

20

2.3 Userform

Private Sub CommandButton1_Click()

If UserForm1.OptionButton1 = True Then

Select_No = 1

ElseIf UserForm1.OptionButton2 = True Then

Select_No = 2

ElseIf UserForm1.OptionButton3 = True Then

Select_No = 3

End If

'------------------------

Unload Me

End Sub

Private Sub CommandButton2_Click()

End

End Sub

Private Sub UserForm_Click()

End Sub

CommandButton1

CommandButton2

OptionButton1

OptionButton2

OptionButton3

Page 21: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

21

2.4 標準Module

2.4.1 Module1

Public C1 As Single

Public C2 As Single

Public h0aM(2) As Single

Public Hantei As String

Public Select_No As Integer

Public Function Serch_h0aX(N As Integer, X() As Single, Y() As Single, CX As Single, m As Integer)

'CXを仮定したときの h0aの値を求める Function

Dim I As Integer

'---------------------

For I = 1 To N

If CX >= Y(I) And CX < Y(I + 1) Then

Serch_h0aX = (X(I + 1) - X(I)) / (Y(I + 1) - Y(I)) * (CX - Y(I)) + X(I)

h0aM(m) = Serch_h0aX

Sheets("ゲートの水理計算").Select

Cells(14 + m, 12) = h0aM(m)

Exit For

End If

Next I

'----------------------------------------

End Function

Public Function Serch_CX(h2a As Single, h0a As Single)

'CXを仮定し、試算により流量係数 C1を求める Function

Dim X(40) As Single

Dim Y(40) As Single

Dim N As Integer

Dim N1 As Integer

Dim N2 As Integer

Dim I As Integer

Dim J As Integer

Dim AA As String

Dim h2a1 As String

Dim h2a2 As String

Dim h0ax(2) As Single

Page 22: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

22

Dim h0aXX As Single

Dim h2aX As Single

Dim CX As Single

Dim m As Integer

Dim cnt As Integer

'------------------------

C1 = 0

C2 = 0.59

CX = 0.0001

cnt = 0

'-----------------------

L1000:

m = 1

N1 = 0

N2 = 0

h2a1 = ""

h2a2 = ""

'*******************************************

Select Case CX

Case 0 To 0.519

'---------------------------------------

For K = 1 To 7

If K + 1 <= h2a And h2a < K + 2 Then

'--------------------------------

h2aX = h2a - (K + 1)

h2a1 = Str(K + 1)

'--------------------

For I = 1 To 200

AA = Sheets("ゲートの水理計算").Cells(33 + I, 3)

'--------------------------

If Val(Right(AA, 1)) = K + 1 Then

For J = 1 To 40

If Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 4) = "" Then

N1 = J - 1

Exit For

Else

Page 23: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

23

X(J) = Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 4)

Y(J) = Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 5)

End If

Next J

'----------------------------------------------------------------------------

h0ax(m) = Serch_h0aX(N1, X(), Y(), CX, m) 'h2/a(K+1)のときの h0/aの

'----------------------------------------------------------------------------

End If

'-------------

If N <> 0 Then

Exit For

End If

Next I

If m = 1 Then

m = 2

N2 = 0

End If

'----------------------------------------

ElseIf h2a < K + 1 Then

'--------------------------------

For I = 1 To 200

AA = Sheets("ゲートの水理計算").Cells(33 + I, 3)

'--------------------------

If Val(Right(AA, 1)) = K + 1 Then

For J = 1 To 40

If Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 4) = "" Then

N2 = J - 1

h2a2 = Str(K + 1)

Exit For

Else

X(J) = Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 4)

Y(J) = Sheets("ゲートの水理計算").Cells(33 + I + J + 1, 5)

End If

Next J

Page 24: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

24

'-------------------------------------------------------------------------------

h0ax(m) = Serch_h0aX(N2, X(), Y(), CX, m) 'h2/a(K+2)のときの h0/a値

'-------------------------------------------------------------------------------

End If

'-------------

If N2 <> 0 Then

Exit For

Else

h2a2 = ""

N2 = 0

End If

Next I

'----------------------------

End If

'-------------------------

If h2a2 <> "" Then

Exit For

End If

'-------------------------

Next K

'---------------------

h0aXX = h2aX * (h0ax(2) - h0ax(1)) + h0ax(1)

Cells(15, 11) = CX

Cells(16, 11) = CX

'----------------------------------

If Abs(h0aXX - h0a) <= 0.001 Then

Sheets("ゲートの水理計算").Select

Cells(15, 10) = h2a1

Cells(16, 10) = h2a2

Cells(15, 11) = CX

Cells(16, 11) = CX

Cells(15, 12) = h0aM(1)

Cells(16, 12) = h0aM(2)

'-----------------

Serch_CX = CX

Exit Function

Page 25: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

25

Else

If h0aXX >= h0a Then

C2 = CX

Else

C1 = CX

End If

'---------

CX = (C1 + C2) / 2

cnt = cnt + 1

'--------------------

If cnt >= 5000 Then

MsgBox "5000回試算しましたが収束しませんでしたので終了します"

End

End If

'-------------------

GoTo L1000

End If

'************************************************************************

Case 0.5191 To 0.554

'h2/a >= 2 and h2/a < 3 , h0/a >=2.642 and h0/a < 5.377

'与えられた C1 から自由流出と潜り流出の境界線上の h2/aと h0/aの値を求める

'h2/a1=X h0/a1 , h0/a2=

Call Calc_h0a(CX, h2a, 3, h0a, 15, 46)

Case 0.5541 To 0.573

'h2/a >= 3 and h2/a < 4 , h0/a >=5.378 and h0/a < 8.768

Call Calc_h0a(CX, h2a, 4, h0a, 21, 64)

Case 0.5731 To 0.585

'h2/a >= 4 and h2/a < 5 , h0/a >=8.769 and h0/a < 13.152

Call Calc_h0a(CX, h2a, 5, h0a, 26, 88)

Case 0.5291 To 0.585

'h2/a >= 5 and h2/a < 6 , h0/a >=13.153 and h0/a < 16.000

'C1 >= 0.529 and C1 <= 0.585

Case 0.4921 To 0.529

Page 26: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

26

'h2/a >= 5 and h2/a < 6 , h0/a >=13.153 and h0/a < 16.000

'C1 >= 0.492 and C1 <= 0.529

Case 0.456 To 0.492

'h2/a >= 5 and h2/a < 6 , h0/a >=13.153 and h0/a < 16.000

'C1 >= 0.456 and C1 <= 0.492

Case Else

MsgBox "自由流出です"

End

End Select

'************************************************************************

If Hantei <> "Print Out" Then

GoTo L1000

End If

'-----------------

Serch_CX = CX

Exit Function

End Function

Sub Test()

Dim h2a As Double

Dim h0a As Double

'--------------------

Sheets("ゲートの水理計算").Select

h2a = Cells(15, 8)

h0a = Cells(14, 8)

CX = Serch_CX(h2a, h0a)

End

End Sub

Public Function SanjiShiki(Atai As Single)

'C1を仮定し、h2/aの値を近似式(3 次方程式)の解を求める

X1 = 0

X2 = 8

Page 27: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

27

Kai_X = (X1 + X2) / 2

L1000:

KaiX = 0.001 * Kai_X ^ 3 - 0.0168 * Kai_X ^ 2 + 0.0991 * Kai_X + 0.3795

If Abs(KaiX - Atai) > 0.00001 Then

If KaiX >= Atai Then

X2 = Kai_X

Else

X1 = Kai_X

End If

'----------------

Kai_X = (X1 + X2) / 2

GoTo L1000

End If

'----------------

SanjiShiki = Kai_X

End Function

Sub Test1()

Dim Atai As Single

Atai = 0.54

Y = SanjiShiki(Atai)

End

End Sub

Sub Calc_h0a(CX As Single, h2a As Single, h2a2 As Single, h0a As Single, N As Integer, Gyou As

Integer)

Dim X(40) As Single

Dim Y(40) As Single

Dim h0ax(2) As Single

Hantei = ""

h2a1 = SanjiShiki(CX)

h0a1 = 0.0562 * h2a1 ^ 3 - 0.178 * h2a1 ^ 2 + 2.5574 * h2a1 - 2.2108

'-------------------

'C1=CXのときの h0a2(h2/a=4も時)を求める。データ表から内挿によりもとめる

Page 28: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

28

For J = 1 To N

X(J) = Sheets("ゲートの水理計算").Cells(Gyou + J, 4)

Y(J) = Sheets("ゲートの水理計算").Cells(Gyou + J, 5)

Next J

'-------------------------------------------------------------------------------

h0a2 = Serch_h0aX(N, X(), Y(), CX, 2) 'h2/a(K+2)のときの h0/a値

'-------------------------------------------------------------------------------

'h0/aの値が初期条件と一致するまで繰り返す

h0ax(1) = (h0a2 - h0a1) / (h2a2 - h2a1) * (h2a - h2a1) + h0a1

'--------------------------------------

If Abs(h0ax(1) - h0a) > 0.00001 Then

If h0ax(1) >= h0a Then

C2 = CX

Else

C1 = CX

End If

'-----------

CX = (C1 + C2) / 2

cnt = cnt + 1

'--------------------

If cnt >= 5000 Then

MsgBox "5000回試算しましたが収束しませんでしたので終了します"

End

End If

'----------------

Hantei = "Repeat"

Exit Sub

Else

Hantei = "Print Out"

End If

'--------------------

'結果の出力

Sheets("ゲートの水理計算").Select

Cells(15, 10) = h2a1

Cells(16, 10) = h2a2

Cells(15, 11) = CX

Page 29: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

29

Cells(16, 11) = CX

Cells(15, 12) = h0aM(1)

Cells(16, 12) = h0aM(2)

'-----------------

End Sub

2.4.2 Module2

Sub Get_Top_Left(CX As Single, h0ax As Single)

Sheets("ゲートの水理計算").Activate

Top1 = ActiveSheet.Cells(24, 4)

Left1 = ActiveSheet.Cells(24, 5)

Width1 = ActiveSheet.Cells(24, 6)

Height1 = ActiveSheet.Cells(24, 7)

'----------------------------------

Top2 = ActiveSheet.Cells(25, 4)

Left2 = ActiveSheet.Cells(25, 5)

Width2 = ActiveSheet.Cells(25, 6)

Height2 = ActiveSheet.Cells(25, 7)

'-----------------------------------------

'コネクタを X軸、Y軸にセットする

ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Top = Top1

ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Left = Left1

ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Width = Width1

ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Height = Height1

'-----------------------------------------

ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Top = Top2

ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Left = Left2

ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Width = Width2

ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Height = Height2

'---------------------------------------------------------------------

'直線コネクタ 3、6を平行移動させる

Scale_X = Width2 / 16

Scale_Y = Height1 / 0.6

'-----------------------------------------

ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Left = Left1 + Scale_X * h0ax

ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Top = Top2 - Scale_Y * CX

Page 30: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

30

'-----------------------------------------

'直線コネクタ 3、6を平行移動させたときのプロパティを取得し、シートにその値を出力する

Top1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Top

Left1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Left

Width1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Width

Height1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Height

'-----------------------------------------

Top2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Top

Left2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Left

Width2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Width

Height2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Height

'---------------------------------------------------------------------

ActiveSheet.Cells(29, 4) = Top1

ActiveSheet.Cells(29, 5) = Left1

ActiveSheet.Cells(29, 6) = Width1

ActiveSheet.Cells(29, 7) = Height1

'----------------------------------

ActiveSheet.Cells(30, 4) = Top2

ActiveSheet.Cells(30, 5) = Left2

ActiveSheet.Cells(30, 6) = Width2

ActiveSheet.Cells(30, 7) = Height2

'-----------------------------------------

End Sub

Sub Initial_Set_Top_Left()

Sheets("ゲートの水理計算").Activate

'-----------------------------------------

'直線コネクタ 3、6 を X 軸、Y 軸にセットしたときのプロパティを取得し、シートにその値を出力す

Top1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Top

Left1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Left

Width1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Width

Height1 = ActiveSheet.Shapes.Range(Array("Straight Connector 3")).Height

'-----------------------------------------

Top2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Top

Left2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Left

Page 31: スルースゲートの水理計算 - Agrimasagrimas.sakura.ne.jp/Gate_Flow.pdf2015 年7 月21 日 1 スルースゲートの水理計算 益永八尋 ゲートの水理計算(潜り流出と自由流出の場合)を行うプログラムを作成したので紹

2015年 7月 21日

31

Width2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Width

Height2 = ActiveSheet.Shapes.Range(Array("Straight Connector 6")).Height

'---------------------------------------------------------------------

ActiveSheet.Cells(24, 4) = Top1

ActiveSheet.Cells(24, 5) = Left1

ActiveSheet.Cells(24, 6) = Width1

ActiveSheet.Cells(24, 7) = Height1

'----------------------------------

ActiveSheet.Cells(25, 4) = Top2

ActiveSheet.Cells(25, 5) = Left2

ActiveSheet.Cells(25, 6) = Width2

ActiveSheet.Cells(25, 7) = Height2

'-----------------------------------------

End Sub

Sub Test()

Call Module2.Get_Top_Left(0.405, 8)

End

End Sub