---
tags: 期中作業
---
# ***Computational Hydraulics***
## **Group 01:** N88071053 洪豪男 N88091011 黃彥鈞
## Shallow Water Equations (2D) on horizontal plane
$\quad\quad\dfrac{\partial h}{\partial t} +
\dfrac{\partial}{\partial x} \left(h\overline{u}\right)+\dfrac{\partial}{\partial y} \left(h\overline{v}\right) = 0$
$\quad\quad\dfrac{\partial}{\partial t}\left(h\overline{u}\right) +
\dfrac{\partial}{\partial x} \left(h\overline{u}^2 + \dfrac{1}{2}gh^2\right)+
\dfrac{\partial}{\partial y} \left(h\overline{u}\,\overline{v}\right) = -hg_z\dfrac{\partial z_B}{\partial x}- \dfrac{\tau_{bx}}{\rho}$
$\quad\quad\dfrac{\partial}{\partial t}\left(h\overline{v}\right) +
\dfrac{\partial}{\partial x} \left(h\overline{u}\,\overline{v}\right)+
\dfrac{\partial}{\partial y} \left(h\overline{v}^2 + \dfrac{1}{2}gh^2\right) = -hg_z\dfrac{\partial z_B}{\partial y}- \dfrac{\tau_{by}}{\rho}$
---
1. on horizontal plane -> $-hg_z\dfrac{\partial z_B}{\partial x}$ and $-hg_z\dfrac{\partial z_B}{\partial y}$ = 0
2. assume : drag can ignore -> $\dfrac{\tau_{bx}}{\rho}$ and $\dfrac{\tau_{by}}{\rho}$= 0
----
```
%% Midterm HW# - 2D shallow water equation :
%
% NOC scheme
% 2D Shallow Water Equation :
%
% Assumptions :
% Horizontal plane --> -hgz(zB_x) and -hgz(zB_y) = 0
% Ignore Drag force --> tau/tho = 0
%
% h_t + hu_x + hv_y = 0
% hu_t + (hu^2 + 0.5*g*h^2)_x + huv_y = 0
% hv_t + huv_x + (hv^2 + 0.5*g*h^2)_y = 0
%
% U(:,:,1) = h
% U(:,:,2) = hu
% U(:,:,3) = hv
% U(:,:,4) = u = U(:,:,2)/U(:,:,1)
% U(:,:,5) = v = U(:,:,3)/U(:,:,1)
close all ;
clc ;
clear all ;
mainFolder = pwd ;
%
% Sam Y. J. Huang, 2020.11.05
% Sam Y. J. Huang, 2020.12.11 modified
% Sam Y. J. Huang, 2021.01.02 modified
%% setting
x = -20:1:20;
y = -20:1:20;
dx = x(2)-x(1);
dy = y(2)-y(1);
[xx,yy] = meshgrid(x,y);
nx = length(x) ;
ny = length(y) ;
U0 = zeros(nx,ny,5);
g = 9.8;
CFL = 0.1;
xpos0 = 0.0;
ypos0 = 0.0;
vex0 = 0.0;
vey0 = 0.0;
Rwave = 5.0 ;
H0 = 1.0 ;
Hamp = 1.5;
Vel_bgn = 0.01;
% initial condition : sinus wave
for i = 1:length(x)
for j = 1:length(y)
xtmp = x(i) - xpos0;
ytmp = y(j) - ypos0;
dist = sqrt(xtmp^2+ytmp^2);
if dist <= Rwave
tmp = dist/Rwave;
U0(i,j,1) = Hamp*(1.0-tmp^2)+H0; % h
U0(i,j,4) = vex0; % u
U0(i,j,5) = vey0; % v
else
U0(i,j,1) = 0.0 + H0; % h
U0(i,j,4) = 0.1; % u
U0(i,j,5) = 0.1; % v
end
U0(i,j,2) = U0(i,j,1)*U0(i,j,4); % hu
U0(i,j,3) = U0(i,j,1)*U0(i,j,5); % hv
end
end
hcut = 1.0E-8; % E-12
figure(1);
mesh(x,y,U0(:,:,1)), colormap gray, axis([-20 20 -20 20 0 3])
title('initial condition')
xlabel x, ylabel y; zlabel h;
%% Calculation
U = U0;
u_two = zeros(size(U));
H_x = zeros(nx,ny);
H_y = zeros(nx,ny);
HU_x = zeros(nx,ny);
HU_y = zeros(nx,ny);
HV_x = zeros(nx,ny);
HV_y = zeros(nx,ny);
U_x = zeros(nx,ny);
U_y = zeros(nx,ny);
V_x = zeros(nx,ny);
V_y = zeros(nx,ny);
stepNo = 0;
TimeT = 0.0;
figure(2);
for nstep = 1:200
disp(nstep)
stepNo = stepNo + 1 ;
lmbdx1 = abs(U(:,:,4));
lmbdy1 = abs(U(:,:,5));
lmb2 = sqrt(U(:,:,1)*g);
lmbdx = lmbdx1+lmb2;
lmbdy = lmbdy1+lmb2;
lmbdx = abs(U(:,:,4)) + sqrt(U(:,:,1)*g);
lmbdy = abs(U(:,:,5)) + sqrt(U(:,:,1)*g);
ax_max = max(max(lmbdx));
ay_max = max(max(lmbdy));
a = max(ax_max,ay_max);
dt = CFL*dx/a;
TimeT = TimeT + dt;
for jj = 1:nx-1
for ii = 1:ny-1
H_x(jj,ii) = 0.5*(U(jj+1,ii+1,1)+U(jj,ii+1,1)) - ...
dt/dx*(U(jj+1,ii+1,2)-U(jj ,ii+1,2));
H_y(jj,ii) = 0.5*(U(jj+1,ii+1,1)+U(jj+1,ii,1)) - ...
dt/dx*(U(jj+1,ii+1,3)-U(jj+1,ii ,3));
HU_x(jj,ii) = 0.5*(U(jj+1,ii+1,2)+U(jj,ii+1,2)) - ...
dt/dx*(U(jj+1,ii+1,2).*U(jj+1,ii+1,4)+...
0.5*g*U(jj+1,ii+1,1).^2-U(jj,ii+1,2).*...
U(jj,ii+1,4)-0.5*g*U(jj,ii+1,1).^2);
HU_y(jj,ii) = 0.5*(U(jj+1,ii+1,2)+U(jj+1,ii,2)) - ...
dt/dy*(U(jj+1,ii+1,2).*U(jj+1,ii+1,5)-...
U(jj+1,ii,2).*U(jj+1,ii,5));
HV_x(jj,ii) = 0.5*(U(jj+1,ii+1,3)+U(jj,ii+1,3)) - ...
dt/dx*(U(jj+1,ii+1,2).*U(jj+1,ii+1,5)-...
U(jj,ii+1,2).*U(jj,ii+1,5));
HV_y(jj,ii) = 0.5*(U(jj+1,ii+1,3)+U(jj+1,ii,3)) - ...
dt/dy*(U(jj+1,ii+1,3).*U(jj+1,ii+1,5)+...
0.5*g*U(jj+1,ii+1,1).^2-U(jj+1,ii,3).*...
U(jj+1,ii,5)-0.5*g*U(jj+1,ii,1).^2);
U_x = HU_x(jj,ii)./H_x(jj,ii);
U_y = HU_y(jj,ii)./H_y(jj,ii);
V_x = HV_x(jj,ii)./H_x(jj,ii);
V_y = HV_y(jj,ii)./H_y(jj,ii);
end
end
lmbdx = abs(sqrt(U_x^2+U_y^2)) + sqrt(U(:,:,1)*g);
lmbdy = abs(sqrt(V_x^2+V_y^2)) + sqrt(U(:,:,1)*g);
ax_max = max(max(lmbdx));
ay_max = max(max(lmbdy));
a = max(ax_max,ay_max);
dt = CFL*dx/a;
TimeT = TimeT + dt;
% Second step u_two(jj) value at jj
for jj = 2:nx-1
for ii = 2:ny-1
u_two(jj,ii,1) = U(jj,ii,1)-dt/dx*(HU_x(jj,ii-1)-HU_x(jj-1,ii-1))...
-dt/dy*(HV_y(jj-1,ii)-HV_y(jj-1,ii-1));
u_two(jj,ii,2) = U(jj,ii,2) - dt/dx*((HU_x(jj,ii-1).^2./H_x(jj,ii-1)+...
0.5*g*H_x(jj,ii-1).^2)-(HU_x(jj-1,ii-1).^2./...
H_x(jj-1,ii-1)+0.5*g*H_x(jj-1,ii-1).^2))- dt/dy*...
(HU_y(jj-1,ii).*HV_y(jj-1,ii)./H_y(jj-1,ii)-...
HU_y(jj-1,ii-1).*HV_y(jj-1,ii-1)./H_y(jj-1,ii-1));
u_two(jj,ii,3) = U(jj,ii,3) - dt/dx*(HV_x(jj,ii-1).*HU_x(jj,ii-1)./...
H_x(jj,ii-1)-HV_x(jj-1,ii-1).*HU_x(jj-1,ii-1)./...
H_x(jj-1,ii-1))-dt/dy*((HV_y(jj-1,ii).^2./H_y(jj-1,ii)+...
0.5*g*H_y(jj-1,ii).^2)-(HV_y(jj-1,ii-1).^2./...
H_y(jj-1,ii-1) + 0.5*g*H_y(jj-1,ii-1).^2));
u_two(jj,ii,4) = u_two(jj,ii,2)./(u_two(jj,ii,1)+hcut);
u_two(jj,ii,5) = u_two(jj,ii,3)./(u_two(jj,ii,1)+hcut);
end
end
% B.C.
% h
u_two(:,1,:) = u_two(:,end-1,:);
u_two(:,end,:) = u_two(:,end-1,:);
u_two(1,:,:) = u_two(end-1,:,:);
u_two(end,:,:) = u_two(end-1,:,:);
% hu
u_two(:,1,2) = u_two(:,end-1,2);
u_two(:,end,2) = u_two(:,end-1,2);
u_two(1,:,2) = u_two(end-1,:,2);
u_two(end,:,2) = u_two(end-1,:,2);
% hv
u_two(:,1,3) = u_two(:,end-1,3);
u_two(:,end,3) = u_two(:,end-1,3);
u_two(1,:,3) = u_two(end-1,:,3);
u_two(end,:,3) = u_two(end-1,:,3);
U = u_two;
mesh(x,y,U(:,:,1)) ;
colormap gray
axis([-20 20 -20 20 0 3]);
xlabel x ;
ylabel y ;
zlabel('h') ;
text(-10,10,3,['Step Number = ', num2str(stepNo)])
text(-10,10,2.6,['Time = ', num2str(TimeT)])
pause(0.01);
end
```


