import numpy as np
import matplotlib.pyplot as plt
from boreflow import BCOvertopping, Geometry, SimulationSimulating Wave Overtopping
Example of simulating wave overtopping flow along a dike crest and landward slope.
# 1) Create geometry
x = np.array([0, 5, 14]) # X-coordinate x[i]
z = np.array([3, 3, 0]) # Elevation z[i] at x[i]
n = np.array([0.0175, 0.0175]) # Manning roughness (n) between x[i] and x[i+1]
geometry = Geometry(x, z, n)
# Plot the geometry
plt.figure()
plt.plot(x, z, color="black", label="Geometry")
plt.plot([x[0]], [z[0]], "o", color="red", label="Waterside crest line")
plt.plot([x[-1]], [z[-1]], "o", color="blue", label="Free outflow")
plt.legend()
plt.xlabel("x-coordinate [m]")
plt.ylabel("z-coordinate [m]")
plt.axis("equal")
plt.show()
# 2) Create boundary conditions for V = 1.0 m3/m
bc = BCOvertopping(volume=1.0, cota=3) # cota of the waterside slope
# 3) Initialize simulation settings
sim = Simulation(t_end=10.0, cfl=0.2, max_dt=0.01, nx=140) # nx = 140 give dx = 0.1m
# 4) Run the simulation
results = sim.run(geometry, bc)Simulating: 0%| | 0.00/10.00 sSimulating: 1%| | 0.06/10.00 sSimulating: 1%| | 0.11/10.00 sSimulating: 2%|▏ | 0.16/10.00 sSimulating: 2%|▏ | 0.20/10.00 sSimulating: 2%|▏ | 0.23/10.00 sSimulating: 3%|▎ | 0.27/10.00 sSimulating: 3%|▎ | 0.30/10.00 sSimulating: 3%|▎ | 0.34/10.00 sSimulating: 4%|▎ | 0.37/10.00 sSimulating: 4%|▍ | 0.41/10.00 sSimulating: 4%|▍ | 0.44/10.00 sSimulating: 5%|▍ | 0.48/10.00 sSimulating: 5%|▌ | 0.51/10.00 sSimulating: 5%|▌ | 0.54/10.00 sSimulating: 6%|▌ | 0.58/10.00 sSimulating: 6%|▌ | 0.61/10.00 sSimulating: 6%|▋ | 0.64/10.00 sSimulating: 7%|▋ | 0.68/10.00 sSimulating: 7%|▋ | 0.71/10.00 sSimulating: 7%|▋ | 0.74/10.00 sSimulating: 8%|▊ | 0.78/10.00 sSimulating: 8%|▊ | 0.81/10.00 sSimulating: 8%|▊ | 0.85/10.00 sSimulating: 9%|▉ | 0.88/10.00 sSimulating: 9%|▉ | 0.91/10.00 sSimulating: 9%|▉ | 0.95/10.00 sSimulating: 10%|▉ | 0.98/10.00 sSimulating: 10%|█ | 1.02/10.00 sSimulating: 11%|█ | 1.05/10.00 sSimulating: 11%|█ | 1.09/10.00 sSimulating: 11%|█ | 1.12/10.00 sSimulating: 12%|█▏ | 1.16/10.00 sSimulating: 12%|█▏ | 1.19/10.00 sSimulating: 12%|█▏ | 1.22/10.00 sSimulating: 13%|█▎ | 1.26/10.00 sSimulating: 13%|█▎ | 1.29/10.00 sSimulating: 13%|█▎ | 1.32/10.00 sSimulating: 14%|█▎ | 1.36/10.00 sSimulating: 14%|█▍ | 1.39/10.00 sSimulating: 14%|█▍ | 1.42/10.00 sSimulating: 15%|█▍ | 1.45/10.00 sSimulating: 15%|█▍ | 1.48/10.00 sSimulating: 15%|█▌ | 1.51/10.00 sSimulating: 15%|█▌ | 1.55/10.00 sSimulating: 16%|█▌ | 1.58/10.00 sSimulating: 16%|█▌ | 1.61/10.00 sSimulating: 16%|█▋ | 1.64/10.00 sSimulating: 17%|█▋ | 1.67/10.00 sSimulating: 17%|█▋ | 1.70/10.00 sSimulating: 17%|█▋ | 1.73/10.00 sSimulating: 18%|█▊ | 1.76/10.00 sSimulating: 18%|█▊ | 1.79/10.00 sSimulating: 18%|█▊ | 1.82/10.00 sSimulating: 19%|█▊ | 1.85/10.00 sSimulating: 19%|█▉ | 1.88/10.00 sSimulating: 19%|█▉ | 1.91/10.00 sSimulating: 19%|█▉ | 1.94/10.00 sSimulating: 20%|█▉ | 1.97/10.00 sSimulating: 20%|██ | 2.00/10.00 sSimulating: 20%|██ | 2.03/10.00 sSimulating: 21%|██ | 2.06/10.00 sSimulating: 21%|██ | 2.09/10.00 sSimulating: 21%|██ | 2.12/10.00 sSimulating: 21%|██▏ | 2.15/10.00 sSimulating: 22%|██▏ | 2.18/10.00 sSimulating: 22%|██▏ | 2.21/10.00 sSimulating: 22%|██▏ | 2.24/10.00 sSimulating: 23%|██▎ | 2.27/10.00 sSimulating: 23%|██▎ | 2.29/10.00 sSimulating: 23%|██▎ | 2.32/10.00 sSimulating: 24%|██▎ | 2.35/10.00 sSimulating: 24%|██▍ | 2.38/10.00 sSimulating: 24%|██▍ | 2.41/10.00 sSimulating: 24%|██▍ | 2.44/10.00 sSimulating: 25%|██▍ | 2.46/10.00 sSimulating: 25%|██▍ | 2.49/10.00 sSimulating: 25%|██▌ | 2.52/10.00 sSimulating: 25%|██▌ | 2.54/10.00 sSimulating: 26%|██▌ | 2.57/10.00 sSimulating: 26%|██▌ | 2.60/10.00 sSimulating: 26%|██▌ | 2.62/10.00 sSimulating: 26%|██▋ | 2.65/10.00 sSimulating: 27%|██▋ | 2.68/10.00 sSimulating: 27%|██▋ | 2.70/10.00 sSimulating: 27%|██▋ | 2.73/10.00 sSimulating: 28%|██▊ | 2.76/10.00 sSimulating: 28%|██▊ | 2.79/10.00 sSimulating: 28%|██▊ | 2.82/10.00 sSimulating: 28%|██▊ | 2.85/10.00 sSimulating: 29%|██▊ | 2.87/10.00 sSimulating: 29%|██▉ | 2.90/10.00 sSimulating: 29%|██▉ | 2.93/10.00 sSimulating: 30%|██▉ | 2.96/10.00 sSimulating: 30%|██▉ | 2.99/10.00 sSimulating: 30%|███ | 3.03/10.00 sSimulating: 31%|███ | 3.06/10.00 sSimulating: 31%|███ | 3.09/10.00 sSimulating: 31%|███ | 3.12/10.00 sSimulating: 32%|███▏ | 3.15/10.00 sSimulating: 32%|███▏ | 3.18/10.00 sSimulating: 32%|███▏ | 3.21/10.00 sSimulating: 32%|███▏ | 3.25/10.00 sSimulating: 33%|███▎ | 3.28/10.00 sSimulating: 33%|███▎ | 3.31/10.00 sSimulating: 33%|███▎ | 3.35/10.00 sSimulating: 34%|███▍ | 3.38/10.00 sSimulating: 34%|███▍ | 3.41/10.00 sSimulating: 34%|███▍ | 3.45/10.00 sSimulating: 35%|███▍ | 3.48/10.00 sSimulating: 35%|███▌ | 3.52/10.00 sSimulating: 36%|███▌ | 3.55/10.00 sSimulating: 36%|███▌ | 3.59/10.00 sSimulating: 36%|███▌ | 3.62/10.00 sSimulating: 37%|███▋ | 3.66/10.00 sSimulating: 37%|███▋ | 3.70/10.00 sSimulating: 37%|███▋ | 3.73/10.00 sSimulating: 38%|███▊ | 3.77/10.00 sSimulating: 38%|███▊ | 3.81/10.00 sSimulating: 38%|███▊ | 3.84/10.00 sSimulating: 39%|███▉ | 3.88/10.00 sSimulating: 39%|███▉ | 3.92/10.00 sSimulating: 40%|███▉ | 3.96/10.00 sSimulating: 40%|███▉ | 4.00/10.00 sSimulating: 40%|████ | 4.04/10.00 sSimulating: 41%|████ | 4.08/10.00 sSimulating: 41%|████ | 4.12/10.00 sSimulating: 42%|████▏ | 4.16/10.00 sSimulating: 42%|████▏ | 4.20/10.00 sSimulating: 42%|████▏ | 4.24/10.00 sSimulating: 43%|████▎ | 4.28/10.00 sSimulating: 43%|████▎ | 4.33/10.00 sSimulating: 44%|████▎ | 4.37/10.00 sSimulating: 44%|████▍ | 4.41/10.00 sSimulating: 45%|████▍ | 4.46/10.00 sSimulating: 45%|████▌ | 4.50/10.00 sSimulating: 45%|████▌ | 4.55/10.00 sSimulating: 46%|████▌ | 4.59/10.00 sSimulating: 46%|████▋ | 4.64/10.00 sSimulating: 47%|████▋ | 4.68/10.00 sSimulating: 47%|████▋ | 4.73/10.00 sSimulating: 48%|████▊ | 4.78/10.00 sSimulating: 48%|████▊ | 4.83/10.00 sSimulating: 49%|████▊ | 4.87/10.00 sSimulating: 49%|████▉ | 4.92/10.00 sSimulating: 50%|████▉ | 4.97/10.00 sSimulating: 50%|█████ | 5.02/10.00 sSimulating: 51%|█████ | 5.07/10.00 sSimulating: 51%|█████ | 5.12/10.00 sSimulating: 52%|█████▏ | 5.18/10.00 sSimulating: 52%|█████▏ | 5.23/10.00 sSimulating: 53%|█████▎ | 5.28/10.00 sSimulating: 53%|█████▎ | 5.34/10.00 sSimulating: 54%|█████▍ | 5.39/10.00 sSimulating: 54%|█████▍ | 5.45/10.00 sSimulating: 55%|█████▌ | 5.50/10.00 sSimulating: 56%|█████▌ | 5.56/10.00 sSimulating: 56%|█████▌ | 5.61/10.00 sSimulating: 57%|█████▋ | 5.67/10.00 sSimulating: 57%|█████▋ | 5.73/10.00 sSimulating: 58%|█████▊ | 5.79/10.00 sSimulating: 58%|█████▊ | 5.85/10.00 sSimulating: 59%|█████▉ | 5.91/10.00 sSimulating: 60%|█████▉ | 5.97/10.00 sSimulating: 60%|██████ | 6.03/10.00 sSimulating: 61%|██████ | 6.10/10.00 sSimulating: 62%|██████▏ | 6.16/10.00 sSimulating: 62%|██████▏ | 6.22/10.00 sSimulating: 63%|██████▎ | 6.29/10.00 sSimulating: 64%|██████▎ | 6.35/10.00 sSimulating: 64%|██████▍ | 6.42/10.00 sSimulating: 65%|██████▍ | 6.49/10.00 sSimulating: 66%|██████▌ | 6.56/10.00 sSimulating: 66%|██████▋ | 6.63/10.00 sSimulating: 67%|██████▋ | 6.70/10.00 sSimulating: 68%|██████▊ | 6.77/10.00 sSimulating: 68%|██████▊ | 6.84/10.00 sSimulating: 69%|██████▉ | 6.91/10.00 sSimulating: 70%|██████▉ | 6.98/10.00 sSimulating: 71%|███████ | 7.06/10.00 sSimulating: 71%|███████▏ | 7.13/10.00 sSimulating: 72%|███████▏ | 7.21/10.00 sSimulating: 73%|███████▎ | 7.29/10.00 sSimulating: 74%|███████▎ | 7.36/10.00 sSimulating: 74%|███████▍ | 7.44/10.00 sSimulating: 75%|███████▌ | 7.52/10.00 sSimulating: 76%|███████▌ | 7.60/10.00 sSimulating: 77%|███████▋ | 7.69/10.00 sSimulating: 78%|███████▊ | 7.77/10.00 sSimulating: 79%|███████▊ | 7.85/10.00 sSimulating: 79%|███████▉ | 7.94/10.00 sSimulating: 80%|████████ | 8.02/10.00 sSimulating: 81%|████████ | 8.11/10.00 sSimulating: 82%|████████▏ | 8.20/10.00 sSimulating: 83%|████████▎ | 8.29/10.00 sSimulating: 84%|████████▍ | 8.38/10.00 sSimulating: 85%|████████▍ | 8.47/10.00 sSimulating: 86%|████████▌ | 8.56/10.00 sSimulating: 87%|████████▋ | 8.66/10.00 sSimulating: 87%|████████▋ | 8.75/10.00 sSimulating: 88%|████████▊ | 8.84/10.00 sSimulating: 89%|████████▉ | 8.94/10.00 sSimulating: 90%|█████████ | 9.04/10.00 sSimulating: 91%|█████████▏| 9.14/10.00 sSimulating: 92%|█████████▏| 9.24/10.00 sSimulating: 93%|█████████▎| 9.34/10.00 sSimulating: 94%|█████████▍| 9.44/10.00 sSimulating: 95%|█████████▌| 9.54/10.00 sSimulating: 96%|█████████▋| 9.64/10.00 sSimulating: 97%|█████████▋| 9.74/10.00 sSimulating: 98%|█████████▊| 9.84/10.00 sSimulating: 99%|█████████▉| 9.94/10.00 sSimulating: 100%|██████████| 10.00/10.00 s
Simulation done in 21.92 sec
# Plot peak flow velocity, peak flow thickness, peak flow discharge
fig, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=[8, 3.5])
# Mark the transition between the crest and landward slope
[ax.axvline(5.0, color="grey", ls=":") for ax in [ax0, ax1, ax2]]
# Get results and plot peak flow characteristics
h, u, q = results.get_peak_flow()
ax0.plot(results.s, h, color="black")
ax1.plot(results.s, u, color="black")
ax2.plot(results.s, q, color="black")
# Plot layout
[ax.set_xlabel("Distance (s-coordinate) [m]") for ax in [ax0, ax1, ax2]]
ax0.set_ylabel("Peak flow thickness [m]")
ax1.set_ylabel("Peak depth-avg flow velocity [m/s]")
ax2.set_ylabel("Peak flow discharge [m2/s]")
[ax.set_xlim(0, np.max(results.s)) for ax in [ax0, ax1, ax2]]
[ax.set_ylim(0, None) for ax in [ax0, ax1, ax2]]
fig.suptitle("Peak Flow Characteristics along Geometry")
fig.tight_layout()
plt.show()
# Plot
fig, (ax0, ax1) = plt.subplots(1, 2, figsize=[8, 4])
# Get and plot the flow at s=12m
res_t, res_h, res_u = results.get_st(s=4.0)
ax0.plot(res_t, res_h, color="red", label="s = 4m")
ax1.plot(res_t, res_u, color="red")
# Get and plot the flow at s=12m
res_t, res_h, res_u = results.get_st(s=12.0)
ax0.plot(res_t, res_h, color="black", label="s = 12m")
ax1.plot(res_t, res_u, color="black")
# Plot layout
ax0.legend()
[ax.set_xlabel("Time [s]") for ax in [ax0, ax1]]
ax0.set_ylabel("Flow thickness [m]")
ax1.set_ylabel("Depth-avg flow velocity [m/s]")
[ax.set_xlim(0, np.max(res_t)) for ax in [ax0, ax1]]
[ax.set_ylim(0, None) for ax in [ax0, ax1]]
fig.suptitle("Temporal Evolution of Flow at s = 4m and s = 12m")
fig.tight_layout()
plt.show()