つりびとの勉強記録

趣味のつりや職業分野の海に関しておもしろいなと思ったことを書いていきます。

海の波について

竿先に集中しつつ、海を眺めるのは至福の時ですよね。
あっという間に時間が流れていきます。
水面に目を向けると大小問わず波を見ます。

今日はそんな波の性質を見ていきます。
波を知ることは海底の地形を想像したり、事前に危険を察知することもできますので、
波の理論を勉強しておくとなにかと役立ちます。
釣れないときには海面を眺めるだけでも面白いです。笑

工学的な話になりますので、できるだけ平易な説明を心がけますが、
難しかったらごめんなさい。波だけでもかなり奥が深いので、今回は規則波だけで考えます。
 

波の性質

実際の海では様々な大きさ、向きの波が複雑に重なりあって、押し寄せます。
工学上では基本的な波の性質は規則波(三角関数)で考えることが多いです。
なぜなら、実際の波は非常に複雑で、性質を理解するのは難しいからです。

単純な波でどこまで進んでも変化しないと仮定すれば、波の形(波形)は次の式で表されます。

η = \dfrac{H}{2}\cos(kx-σt) = \dfrac{H}{2}\cos k(x-Ct)

 ここで、η(イータと読みます)は水面の上昇量(m)、Hは波高(m)、kは波数(m^{-1})、σは角振動数(s^{-1})です。
Cは波速(m/s)を示します。xとtはそれぞれ位置と時間を表す変数です。
専門用語の説明は波形を用いて後ほど説明します。

例えば、η = \dfrac{H}{2}\cos(kx-σt) を用いて、水深10m、波高1.0m、周期6sの波を規則波で表現すると次のようになります。
水面が波のように振動していますよね。
f:id:suisan_engineer:20210725114417g:plain
 
先ほどあった専門用語の説明です。
波高:波の峰から谷の高さ
※天気予報などでいわれる波高は一般に有義波高を示しています。詳しいことは後日。
波長:波の峰から次の波の峰までの距離
周期:波の峰から次の波の峰が来るまでの時間
波数:2 \pi / L(m^{-1}) ;Lは波長です。
角振動数:2 \pi / T(s^{-1}) ;Tは周期です。
f:id:suisan_engineer:20210725120532p:plain

グラフを描画するソースコード

fortrangnuplotのプログラムを使える人はこちらのソースコードを使うと同じ波形を表現できます。
波長は任意水深に対応したものとなっています。波高、周期、水深を変えて実行してみてください。プログラムを実行するとgifが出力されます。

fortranコード

PROGRAM CALC_ETA
IMPLICIT NONE
REAL(8)::WH,H,T,L,C,K !波高、水深、周期,波長,波速,波数
REAL(8)::COTH,X1,XX,L0,A,D,N,SIGMA !COTH、一次近似、二次近似、沖波波長、変数A、変数D、係数N
REAL(8)::PI2=3.14*2,G=9.8
REAL(8)::DX,XGRID(300),ETA(100,300)
INTEGER::I,TS
CHARACTER*128::FILENAME

!SET PARAMTER
WRITE(*,*)"INPUT DEPTH(M) (DEPTH>0)"
READ(*,*)H
IF (H<0)STOP
WRITE(*,*)"INPUT WAVE PERIOD(S) (PERIOD>0)"
READ(*,*)T
IF (T<0)STOP
WRITE(*,*)"INPUT WAVE HEIGHT(M) (HEIGHT>0)"
READ(*,*)WH
IF (T<0)STOP
WRITE(*,"(A10,F10.2,A10,F10.2,A10,F10.2)")"DEPTH =",H,"PERIOD = ",T,"HEIGHT = ",WH

!WRITE(*,*)"CALC L0"
L0 = (G*T*T)/PI2
WRITE(*,"(A10,F10.2,A5)")"L0 =",L0,"m"
WRITE(*,"(A10,F10.2,A5)")"C =",L0/T,"m/s"

!WRITE(*,*)"SET INITIAL VALUE"
A = (PI2*H)/L0
IF(A>=1.0)THEN
 X1 = A
ELSE
 X1 = SQRT(A)
END IF

!NEWTON-RAPHSON METHOD
DO WHILE(DABS(1-X1/XX)>1.0E-5)
 COTH = 1.0/DTANH(X1)
 XX = X1 - (X1-A*COTH)/(1+A*(COTH**2-1.0))
 X1 = XX
END DO
L = PI2*H/XX
C = PI2*H/XX/T
K = PI2/L
SIGMA = PI2/T

!SET GRID 1波長を100分割
DX = L*0.01
 DO TS = 1,100
  DO I = 1,300
   XGRID(I)=DX*I
   ETA(TS,I) = 0.5*WH*COS(K*XGRID(I)-SIGMA*TS)
  END DO
 END DO
 
!OUTPUT
OPEN(10,FILE="ETA.DAT")
 DO I = 1,300
 WRITE(10,"(101F10.2)")XGRID(I),(ETA(TS,I),TS=1,100) 
 END DO
CLOSE(10)

WRITE(*,*)"PRESS ENTER IF YOU WANT TO FINISH"
READ *
END PROGRAM

gnuplotコード

reset
set nokey
set xrange [0:150]
set xlabel "x(m)"
set yrange [-1:1]
set ylabel "eta(m)"
set term gif animate
set output "eta.gif"

do for [i=1:100]{
  plot "eta.dat" using 1:i+1 with lines
}

set terminal png
set output "eta.png"
plot "eta.dat" using 1:2 with lines
set out

本日のところはここまでです。
人間が作り出した概念である数や数式で自然現象を記述できるのは不思議ですよね。

参考文献:合田良實,わかり易い土木講座 17 海岸・港湾 p27
     合田良實,海の波の波長計算プログラム,土木学会論文報告集,第179号・1970 p97-98(https://www.jstage.jst.go.jp/article/jscej1969/1970/179/1970_179_97/_pdf/-char/ja)

※このプログラムを利用した場合において生じた損害について筆者は責任を負いかねます。予めご了承ください。間違い等あればご指摘いただけると大変幸いです。