Mô hình sóng FUNWAVE
FUNWAVE-TVD được phân phối trong một fie nén. Để cài đặt các chương trình, đầu tiên, giải nén các gói. Sau đó sử dụng > tar xvf * .tar ,để trích xuất tập tin từ gói nén.
+ Các tập tin sẽ được phân phối trong ba thư mục: / src , / work và /examples
+ Để chạy các mô hình, đi vào /examples . Sửa INPUT.TXT và obstacle.txt nếu cần thiết và chạy.
+ Chạy mô hình trên môi trường Cygwin.
Bài toán
1. Sóng đơn độc trên một đảo hình nón
Input:
+ Nhập dữ liệu đầu vào trong file input.txt : thay đổi một số câu lệnh trong mô hình để ta thấy được sự thay đổi của mực nước, địa hình …tại nơi khảo sát, thì nghiệm:
Kích thước chia ô lưới ta lấy theo phương x: 702
Kích thước chia ô lưới ta lấy theo phương y: 602
+ Loại địa hình lấy theo DATA( từ 1 tập tin về độ sâu) : DEPTH_TYPE = DATA
+ Mục PRINT : chuyển RESULT_FOLDER = /Users/fengyanshi/tmp/ thành RESULT_FOLDER = "."
+ Mục TIME: ta điều chỉnh TOTAL_TIME = 0.005s (Tổng thời gian tính toán sao cho phù hợp ). Trước khi khai báo thay đổi ở TOTAL_TIME ta phải khai báo trước trên ! all in seconds 25.0 , 1.0, 0.5, 1.0, 0.005.
Chú ý: luôn làm tròn sau dấu (.) 1 chữ số.
+ Mục WAVEMAKER: Trong bài nghiên cứu này chạy con sóng đơn độc nên WAVEMAKER = INI_SOL, với chuỗi thời gian 1505, số liệu chạy lấy trong file ../fft/wavemk_per_amp_pha.txt.
-Biên độ mực nước ban đầu
Sóng đơn độc: AMP = 0.0144, độ sâu nước tại vị trí khảo sát (WAVEMAKER = INI_SOL) có DEP = 0.5
Sóng đều (Wei and Kirby regular wave): AMP_WK = 0.0232, độ sâu tại vị trí khảo sát DEP_WK = 0,45
+ Mục OBSTACLES: File vật cản, sử dụng tập tin mask_struc:
1:Điểm nước 0 : Điểm khô vĩnh viễn
Thiết lập file vật cản đuôi .txt với số hàng, số cột theo Mloc x Nloc
Thêm file OBSTACLE_FILE= obstacle.txt dưới file OBSTACLE_FILE = struc2m4m.txt để chương trình đọc được file dữ liệu .txt vật cản đầu vào.
+ Mục PHYSICS: tính toán theo điều kiện phân tán tuyến tính và phi tuyến
+ Mục Friction: Lấy hệ số ma sát Cd=0.01
Mã lệnh chạy chương trình
! INPUT FILE FOR BOUSS_TVD
! NOTE: all input parameter are capital sensitive
! --------------------TITLE-------------------------------------
! title only for log file
TITLE = TEST RUN
! -------------------HOT START---------------------------------
HOT_START = F
FileNumber_HOTSTART = 1
! -------------------PARALLEL INFO-----------------------------
!
! PX,PY - processor numbers in X and Y
! NOTE: make sure consistency with mpirun -np n (px*py)
!
PX = 1
PY = 4
! --------------------DEPTH-------------------------------------
! Depth types, DEPTH_TYPE=DATA: from depth file
! DEPTH_TYPE=FLAT: idealized flat, need depth_flat
! DEPTH_TYPE=SLOPE: idealized slope,
! need slope,SLP starting point, Xslp
! and depth_flat
DEPTH_TYPE = DATA
! Depth file
! depth format NOD: depth at node (M1xN1), ELE: depth at ele (MxN)
! where (M1,N1)=(M+1,N+1)
DEPTH_FILE = ../input/depth.txt
DepthFormat = ELE
! if depth is flat and slope, specify flat_depth
DEPTH_FLAT = 0.47
if depth is slope, specify slope and starting point
SLP = 0.05
Xslp = 10.0
! -------------------PRINT---------------------------------
! PRINT*,
! result folder
RESULT_FOLDER = "."
! ------------------DIMENSION-----------------------------
! global grid dimension
Mglob = 702
Nglob = 602
! ----------------- TIME----------------------------------
! time: total computational time/ plot time / screen interval
! all in seconds 25.0 , 1.0, 0.5, 1.0, 0.005
TOTAL_TIME = 0.005
PLOT_INTV = 0.5
PLOT_INTV_STATION = 0.05
SCREEN_INTV = 0.5
HOTSTART_INTV = 360000000000.0
! -----------------GRID----------------------------------
! if use spherical grid, in decimal degrees
StretchGrid = F
Lon_West = 120.0
Lat_South = 0.0
Dphi = 0.0042
Dtheta = 0.0042
!DX_FILE = ../input/dx_str.txt
!DY_FILE = ../input/dy_str.txt
CORIOLIS_FILE = ../input/cori_str.txt
! cartesian grid sizes
DX = 0.5
DY = 0.5
! --------------- INITIAL UVZ ---------------------------
! INI_UVZ - initial UVZ e.g., initial deformation
! must provide three (3) files
INI_UVZ = F
! if true, input eta u and v file names
ETA_FILE = z.txt
U_FILE = u.txt
V_FILE = v.txt
! ----------------WAVEMAKER------------------------------
! wave makeer
! LEF_SOL- left boundary solitary, need AMP,DEP, LAGTIME
! INI_SOL- initial solitary wave, WKN B solution,
! need AMP, DEP, XWAVEMAKER
! INI_REC - rectangular hump, need to specify Xc,Yc and WID
! WK_REG - Wei and Kirby 1999 internal wave maker, Xc_WK,Tperiod
! AMP_WK,DEP_WK,Theta_WK, Time_ramp (factor of period)
! WK_IRR - Wei and Kirby 1999 TMA spectrum wavemaker, Xc_WK,
! DEP_WK,Time_ramp, Delta_WK, FreqPeak, FreqMin,FreqMax,
! Hmo,GammaTMA,ThetaPeak
! WK_TIME_SERIES - fft time series to get each wave component
! and then use Wei and Kirby 1999
! need input WaveCompFile (including 3 columns: per,amp,pha)
! NumWaveComp,PeakPeriod,DEP_WK,Xc_WK,Ywidth_WK
WAVEMAKER = INI_SOL
! wave components based on fft time series
NumWaveComp = 1505
PeakPeriod = 1.0
WaveCompFile = ../fft/wavemk_per_amp_pha.txt
! solitary wave
AMP = 0.0144
DEP = 0.5
LAGTIME = 5.0
XWAVEMAKER = 8.0
! Xc, Yc and WID (degrees) are for rectangular hump with AMP
Xc = 501.00
Yc = 501.00
WID = 100.0
! Wei and Kirby 1999
Time_ramp = 1.0
Delta_WK = 0.5 ! width parameter 0.3-0.6
DEP_WK = 0.45
Xc_WK = 3.0
Ywidth_WK = 10000.0
! Wei and Kirby regular wave
Tperiod = 1.0
AMP_WK = 0.0232
Theta_WK = 0.0
! Wei and Kirby irregular wave
FreqPeak = 0.2
FreqMin = 0.1
FreqMax = 0.4
Hmo = 1.0
GammaTMA = 5.0
ThetaPeak = 10.0
Sigma_Theta = 15.0
! ---------------- PERIODIC BOUNDARY CONDITION -------
!
PERIODIC = F
! ---------------- SPONGE LAYER ------------------------
! DHI type sponge layer
! need to specify widths of four boundaries and parameters
! set width=0.0 if no sponge
! R_sponge: decay rate
! A_sponge: maximum decay rate
! e.g., sharp: R=0.85
! mild: R=0.90, A=5.0
! very mild, R=0.95, A=5.0
SPONGE_ON = F
Sponge_west_width = 2.0
Sponge_east_width = 2.0
Sponge_south_width = 0.0
Sponge_north_width = 0.0
R_sponge = 0.90
A_sponge = 5.0
! ----------------OBSTACLES-----------------------------
! obstacle structures using mask_struc file
! mask_struc =0 means structure element
! give a file contains a mask array with Mloc X Nloc
!OBSTACLE_FILE= struc2m4m.txt
OBSTACLE_FILE= obstacle.txt
! ----------------PHYSICS------------------------------
! parameters to control type of equations
! dispersion: all dispersive terms
! gamma1=1.0,gamma2=0.0: NG's equations
! gamma1=1.0,gamma2=1.0: Fully nonlinear equations
DISPERSION = T
Gamma1 = 1.0
Gamma2 = 1.0
Gamma3 = 1.0
Beta_ref=-0.531
SWE_ETA_DEP = 0.80
!----------------Friction-----------------------------
Friction_Matrix= F
Cd_file= btrad.txt
Cd = 0.01
! ----------------NUMERICS----------------------------
! time scheme: runge_kutta for all types of equations
! predictor-corrector for NSWE
! space scheme: second-order
! fourth-order
! construction: HLLC
! cfl condition: CFL
! froude number cap: FroudeCap
Time_Scheme = Runge_Kutta
!Time_Scheme = Predictor_Corrector
! spacial differencing
HIGH_ORDER = FOURTH
!HIGH_ORDER = THIRD
CONSTRUCTION = HLLC
! CFL
CFL = 0.5
! Froude Number Cap (to avoid jumping drop, set 10)
FroudeCap = 10.0
! --------------WET-DRY-------------------------------
! MinDepth for wetting-drying
MinDepth=0.001
! -----------------
! MinDepthfrc to limit bottom friction
MinDepthFrc = 0.001
! -------------- SHOW BREAKING -----------------------
! breaking is calculated using shock wave capturing scheme
! the criteria is only for demonstration or bubble calculation
! Cbrk1=0.65,Cbrk2=0.35, for irregular waves, there are much small!
SHOW_BREAKING = F
Cbrk1 = 0.1
Cbrk2 = 0.075
! ----------------- MIXING ---------------------------
! if use smagorinsky mixing, have to set -DMIXING in Makefile
! and set averaging time interval, T_INTV_mean, default: 20s
T_INTV_mean = 25.0
C_smg = 0.25
! ----------------- COUPLING -------------------------
! if do coupling, have to set -DCOUPLING in Makefile
COUPLING_FILE = coupling.txt
! -----------------OUTPUT-----------------------------
! stations
! if NumberStations>0, need input i,j in STATION_FILE
NumberStations = 16
STATIONS_FILE = gauges.txt
! output variables, T=.TRUE, F = .FALSE.
DEPTH_OUT = T
U = F
V = F
ETA = T
Hmax = F
Hmin = F
MFmax = F
Umax = F
VORmax = F
Umean = F
Vmean =F
ETAmean = F
MASK = T
MASK9 = F
SXL = F
SXR = F
SYL = F
SYR = F
SourceX = F
SourceY = F
P = F
Q = F
Fx = F
Fy = F
Gx = F
Gy = F
AGE = F
TMP = F
WaveHeight = F
Chạy trên môi trường Cygwin
+ Tạo lớp tương thích giữa mô hình Funwave vào môi trường Cygwin (là môi trường *nix trong windows)
+ Khai báo link dẫn dữ liệu vào môi trường Cygwwin:
cd /cygdrive/c/nckh2/funwave-version2.1//funwave-version2.1/examples/car_conical_island/work_case_A
+ Chạy file ./mytvd.exe
- Output
+ Các tập tin đầu ra sẽ được lưu trong thư mục kết quả được xác định bởi RESULT FOLDER trong INPUT.TXT, work_case_A.
+ Tên tập tin là một sự kết hợp của tên biến và một số series sản lượng như vậy: “.” Eta_ 0001, “.” Eta_ 0002,”.” Dep.out , “.”mask_0001 .... Đầu ra cho các trạm là một loạt các tập tin được đánh số như “.” Sta_ 0001, “.”sta _0002 ....
+ Biến đầu ra, T = .TRUE, F = .FALSE.
DEPTH_OUT = T
ETA = T
MASK = T
2. Sóng nước nông và sóng vỡ gần bờ
Nghiên cứu tính chất ngẫu nhiên của làn sóng nước nông và phá vỡ, Mase và Kirby (1992) đã tiến hành một thí nghiệm trong phòng thí nghiệm truyền sóng ngẫu nhiên trên một bãi biển phẳng. Bố trí thí nghiệm nơi có độ sâu không đổi 0,47 m ,độ dốc 01:20. Hai bộ sóng ngẫu nhiên với tần số cao nhất là 0,6 Hz (run1) và 1,0 Hz (run 2) được tạo ra bởi các wavemaker bên trái. Phổ biến cố mục tiêu là một phổ PiersonMoskowitz. Sóng đo ở độ sâu h = 47, 35, 30, 25, 20, 17.5, 15, 12.5, 10, 7,5, 5, và 2,5 cm chuỗi thời gian của độ cao bề mặt. Thời gian và thông tin giai đoạn cho mỗi thành phần trong các tập tin có tên là wavemk_ per_ amp_ pha.txt
Các tính toán tên miền là từ x = 0 m đến 20 m với kích thước lưới là 0,04 m. Chân của độ dốc bắt đầu tại x = 10 m.
Loại địa hình DEPTH_TYPE = SLOPE: Bãi phẳng cùng hướng với x, nó cần các thông số độ dốc: SLP, Xslp và DEPTH_FLAT
_ Kích thước chia ô lưới ta lấy theo phương x: 500
Kích thước chia ô lưới ta lấy theo phương y: 3
_ Tổng thời gian tính toán : 100.0s ( số liệu này có thể thay đổi sao cho phù hợp)
_ WAVEMAKER = WK_TIME_SERIES: Làn sóng thành phần dựa trên chuỗi thời gian fft, với chuỗi thời gian 1505, số liệu chạy lấy trong file ../fft/wavemk_per_amp_pha.txt.
-Biên độ mực nước ban đầu
Sóng đơn độc: AMP = 1.0, độ sâu nước tại vị trí khảo sát (WAVEMAKER = WK_TIME_SERIES) có DEP = 0.78
Sóng đều (Wei and Kirby regular wave): AMP_WK = 0.0232, độ sâu tại vị trí khảo sát DEP_WK = 0,47
+ Mục OBSTACLES: File vật cản, sử dụng tập tin mask_struc:
1:Điểm nước 0 : Điểm khô vĩnh viễn
Thiết lập file vật cản đuôi .txt với số hàng , số cột theo Mloc x Nloc, lấy mask_struc = 1( điểm nước)
Thêm file OBSTACLE_FILE= obstacle.txt dưới file OBSTACLE_FILE = struc2m4m.txt để chương trình đọc được file dữ liệu .txt vật cản đầu vào.
Mã lệnh chạy chương trình
!INPUT FILE FOR BOUSS_TVD
! NOTE: all input parameter are capital sensitive
! --------------------TITLE-------------------------------------
! title only for log file
TITLE = TEST RUN
! -------------------HOT START---------------------------------
HOT_START = F
FileNumber_HOTSTART = 1
! -------------------PARALLEL INFO-----------------------------
!
! PX,PY - processor numbers in X and Y
! NOTE: make sure consistency with mpirun -np n (px*py)
!
PX = 1
PY = 4
! --------------------DEPTH-------------------------------------
! Depth types, DEPTH_TYPE=DATA: from depth file
! DEPTH_TYPE=FLAT: idealized flat, need depth_flat
! DEPTH_TYPE=SLOPE: idealized slope,
! need slope,SLP starting point, Xslp
! and depth_flat
DEPTH_TYPE = SLOPE
! Depth file
! depth format NOD: depth at node (M1xN1), ELE: depth at ele (MxN)
! where (M1,N1)=(M+1,N+1)
DEPTH_FILE = grid_b
DepthFormat = ELE
! if depth is flat and slope, specify flat_depth
DEPTH_FLAT = 0.47
if depth is slope, specify slope and starting point
SLP = 0.05
Xslp = 10.0
! -------------------PRINT---------------------------------
! PRINT*,
! result folder
RESULT_FOLDER ="."
! ------------------DIMENSION-----------------------------
! global grid dimension
Mglob = 500
Nglob = 3
! ----------------- TIME----------------------------------
! time: total computational time/ plot time / screen interval
! all in seconds 2.0, 5.0 ,10.0, 100.0
TOTAL_TIME = 100.0
PLOT_INTV = 10.0
PLOT_INTV_STATION = 0.05
SCREEN_INTV = 1.0
HOTSTART_INTV = 360000000000.0
! -----------------GRID----------------------------------
! if use spherical grid, in decimal degrees
StretchGrid = F
Lon_West = 120.0
Lat_South = 0.0
Dphi = 0.0042
Dtheta = 0.0042
!DX_FILE = ../input/dx_str.txt
!DY_FILE = ../input/dy_str.txt
CORIOLIS_FILE = ../input/cori_str.txt
! cartesian grid sizes
DX = 0.04
DY = 0.10
! --------------- INITIAL UVZ ---------------------------
! INI_UVZ - initial UVZ e.g., initial deformation
! must provide three (3) files
INI_UVZ = F
! if true, input eta u and v file names
ETA_FILE = z.txt
U_FILE = u.txt
V_FILE = v.txt
! ----------------WAVEMAKER------------------------------
! wave makeer
! LEF_SOL- left boundary solitary, need AMP,DEP, LAGTIME
! INI_SOL- initial solitary wave, WKN B solution,
! need AMP, DEP, XWAVEMAKER
! INI_REC - rectangular hump, need to specify Xc,Yc and WID
! WK_REG - Wei and Kirby 1999 internal wave maker, Xc_WK,Tperiod
! AMP_WK,DEP_WK,Theta_WK, Time_ramp (factor of period)
! WK_IRR - Wei and Kirby 1999 TMA spectrum wavemaker, Xc_WK,
! DEP_WK,Time_ramp, Delta_WK, FreqPeak, FreqMin,FreqMax,
! Hmo,GammaTMA,ThetaPeak
! WK_TIME_SERIES - fft time series to get each wave component
! and then use Wei and Kirby 1999
! need input WaveCompFile (including 3 columns: per,amp,pha)
! NumWaveComp,PeakPeriod,DEP_WK,Xc_WK,Ywidth_WK
WAVEMAKER = WK_TIME_SERIES
! wave components based on fft time series
NumWaveComp = 1505
PeakPeriod = 1.0
WaveCompFile = ../fft/wavemk_per_amp_pha.txt
! solitary wave
AMP = 1.0
DEP = 0.78
LAGTIME = 5.0
XWAVEMAKER = 400.0
! Xc, Yc and WID (degrees) are for rectangular hump with AMP
Xc = 501.00
Yc = 501.00
WID = 100.0
! Wei and Kirby 1999
Time_ramp = 1.0
Delta_WK = 0.4 ! width parameter 0.3-0.6
DEP_WK = 0.47
Xc_WK = 10.0
Ywidth_WK = 10000.0
! Wei and Kirby regular wave
Tperiod = 1.0
AMP_WK = 0.0232
Theta_WK = 0.0
! Wei and Kirby irregular wave
FreqPeak = 0.2
FreqMin = 0.1
FreqMax = 0.4
Hmo = 1.0
GammaTMA = 5.0
ThetaPeak = 10.0
Sigma_Theta = 15.0
! ---------------- PERIODIC BOUNDARY CONDITION ---------
! South-North periodic boundary condition
!
PERIODIC = F
! ---------------- SPONGE LAYER ------------------------
! DHI type sponge layer
! need to specify widths of four boundaries and parameters
! set width=0.0 if no sponge
! R_sponge: decay rate
! A_sponge: maximum decay rate
! e.g., sharp: R=0.85
! mild: R=0.90, A=5.0
! very mild, R=0.95, A=5.0
SPONGE_ON = T
Sponge_west_width = 2.0
Sponge_east_width = 0.0
Sponge_south_width = 0.0
Sponge_north_width = 0.0
R_sponge = 0.90
A_sponge = 5.0
! ----------------OBSTACLES-----------------------------
! obstacle structures using mask_struc file
! mask_struc =0 means structure element
! give a file contains a mask array with Mloc X Nloc
OBSTACLE_FILE= OBSTACLE.txt
! ----------------PHYSICS------------------------------
! parameters to control type of equations
! dispersion: all dispersive terms
! gamma1=1.0,gamma2=0.0: NG's equations
! gamma1=1.0,gamma2=1.0: Fully nonlinear equations
DISPERSION = T
Gamma1 = 1.0
Gamma2 = 1.0
Gamma3 = 1.0
Beta_ref=-0.531
SWE_ETA_DEP = 0.80
!----------------Friction-----------------------------
Friction_Matrix= F
Cd_file= btrad.txt
Cd = 0.01
! ----------------NUMERICS----------------------------
! time scheme: runge_kutta for all types of equations
! predictor-corrector for NSWE
! space scheme: second-order
! fourth-order
! construction: HLLC
! cfl condition: CFL
! froude number cap: FroudeCap
Time_Scheme = Runge_Kutta
!Time_Scheme = Predictor_Corrector
! spacial differencing
HIGH_ORDER = FOURTH
!HIGH_ORDER = THIRD
CONSTRUCTION = HLLC
! CFL
CFL = 0.5
! Froude Number Cap (to avoid jumping drop, set 10)
FroudeCap = 10.0
! --------------WET-DRY-------------------------------
! MinDepth for wetting-drying
MinDepth=0.001
! -----------------
! MinDepthfrc to limit bottom friction
MinDepthFrc = 0.001
! -------------- SHOW BREAKING -----------------------
! breaking is calculated using shock wave capturing scheme
! the criteria is only for demonstration or bubble calculation
! Cbrk1=0.65,Cbrk2=0.35, for irregular waves, there are much small!
SHOW_BREAKING = F
Cbrk1 = 0.1
Cbrk2 = 0.075
! ----------------- MIXING ---------------------------
! if use smagorinsky mixing, have to set -DMIXING in Makefile
! and set averaging time interval, T_INTV_mean, default: 20s
T_INTV_mean = 25.0
C_smg = 0.25
! ----------------- COUPLING -------------------------
! if do coupling, have to set -DCOUPLING in Makefile
COUPLING_FILE = coupling.txt
! -----------------OUTPUT-----------------------------
! stations
! if NumberStations>0, need input i,j in STATION_FILE
NumberStations = 12
STATIONS_FILE = gauges_004.txt
! output variables, T=.TRUE, F = .FALSE.
DEPTH_OUT = T
U = F
V = F
ETA = T
Hmax = F
Hmin = F
MFmax = F
Umax = F
VORmax = F
Umean = F
Vmean =F
ETAmean = F
MASK = F
MASK9 = F
SXL = F
SXR = F
SYL = F
SYR = F
SourceX = F
SourceY = F
P = F
Q = F
Fx = F
Fy = F
Gx = F
Gy = F
AGE = F
TMP = F
WaveHeight = F
Chạy trên môi trường Cygwin
+ Tạo lớp tương thích giữa mô hình Funwave vào môi trường Cygwin (là môi trường *nix trong windows)
+ Khai báo link dẫn dữ liệu vào môi trường Cygwwin:
cd /cygdrive/c/nckh2/funwave-version2.1/funwave-version2.1/examples/car_mase_kirby/work
+ Chạy file ./mytvd.exe
- Output
+ Các tập tin đầu ra sẽ được lưu trong thư mục kết quả được xác định bởi RESULT FOLDER trong INPUT.TXT, work.
+ Tên tập tin là một sự kết hợp của tên biến và một số series sản lượng như vậy: “.” Eta_ 0001, “.” Eta_ 0002,”.” Dep.out ,.... Đầu ra
cho các trạm là một loạt các tập tin được đánh số như “.” Sta_ 0001, “.”sta _0002 ....
+ Biến đầu ra, T = .TRUE, F = .FALSE.
DEPTH_OUT = T
ETA = T
…Nghiên cứu vẫn đang tiếp tục thực hiện....