13. Calculation of the flow and bed deformation in meandering channels (practical edition)
13.1. Method for calculating 2D sediment transport
13.1.1. The direction of the bottom shear stress resulting from secondary flow
[The information in this section is described in detail in the paper by Nishimura et al. [Ref:40]]
Uniform flow conditions are assumed along the streamline of depth-averaged flow. When Manning’s law is adapted as the law of resistance, then the relationship between the depth-averaged velocity and the bottom shear force is given by Equation (12).
Where, assuming that \(V\) is the resultant composite velocity in the streamline direction, then \(V=\sqrt{u_s^2+u_n^2}\) for the coordinates \(s, n\). The resultant composite non-dimensional tractive force in the streamline direction is given by the following equation.
By using \(\tau_\ast\), the bedload transport in the streamline direction can be obtained from various bedload transport equations mentioned under sediment transport equations in the previous chapter. Let us denote the bedload transport in the streamline direction as \(q_b\).
The bedload transported by secondary flows can be determined by the following equation, assuming that (12.9) is also valid on a depth-averaged streamline.
Where, \(q_{bn_s}\) is the bedload transported by secondary flow perpendicular to the streamline, \(N_\ast\) is the secondary flow intensity of Equation (194) (7.0 in general), and \(r_s\) is the radius of curvature of the streamline.
13.1.2. Correction due to the effect of gravity
As shown in Figure 13.2, when there is a slope perpendicular to the sediment transport direction, which is the direction of the streamline, then the component of gravity in the slope direction acts on the sediment transport and causes the direction of that transport to bend. For the effects of gravity for a slope in the transverse direction, Hasegawa’s Equation [Ref:27], which takes into account the effects of gravity for the transverse slope together with the aforementioned secondary current effects, is well known.
Where, \(\mu_s, \mu_k\) are the static friction coefficient and the dynamic friction coefficient of sand grains, respectively, \(\tau_{\ast c}\) is the non-dimensional critical tractive force ((8.14)), \(\tau_\ast\) is the non-dimensional tractive force ((8.10)), \(z_b\) is the bed elevation, and \(n_s\) is the direction perpendicular to the streamline of the depth-averaged velocity.
Gravity acts not only in the transverse direction, but also in the longitudinal direction. Watanabe et al. [Ref:39] have proposed a formula that expresses the effects of gravity on the general coordinate system. The effects are shown in the direction of the depth-averaged streamlines and in the direction of the secondary current, which is perpendicular to the streamline, as follows.
Where, \(s_s, n_s\) are the coordinate in the direction of the depth-averaged velocity and the axis of coordinate perpendicular to that coordinate, \(q_{bs_s}, q_{bn_s}\), are the unit width bedload transport rates in the \(s_s, n_s\) directions, \(u_{sb}, u_{nb}\) are the bottom flow velocities in the \(s_s, n_s\) directions, and \(\phi\) is an angle between \(s_s\) and \(n_s\). In this section, we assume that \(\cos \phi = 0\). The secondary flow velocity is usually at least one order of magnitude smaller than the main flow velocity and \({u_{nb}}^2 << {u_{sb}}^2\). Therefore,
Adopting Equation (12.8) for the bed flow velocity in the transverse direction, Equation (13.5) is converted as follows.
Regarding \(\cfrac{\partial z_b}{\partial s_s}\) and \(\cfrac{\partial z_b}{\partial n_s}\),
When bed deformation calculations are made on the \(s,n\) coordinates, we need to determine sediment transport, \(q_{bs}, q_{bn}\), in the directions of the \(s,n\) axes. They are calculated from the following equation by using \(q_{bs_s}, q_{bn_s}\) given by Equation (13.7).
Where, \(\cos \theta_s = \cfrac{u_s}{V}\), \(\sin \theta_s = \cfrac{u_n}{V}\) (Figure 13.1 refers to the bottom left figure.)
Consequently, based on equations (13.7), (13.8), and (13.9), we have…
13.1.3. The introduction of a slope failure model
As shown in Figure 13.3, let us assume that the slope angle between adjacent grids in a certain part of the cross section exceeds the angle of repose, \(\phi_c\). In this case, even if there is no sediment transport, implicit sediment transport occurs when slope failures are considered to occur. Now, we set the bed heights of the two adjacent points as \(z_{b1}, z_{b2}\) and, the distance between them as \(\Delta n\). This gives us…
At this time, from the difference expression of the continuity equation of sediment transport, we have…
Where, \(q_{dn}\) is the slope failure-derived sediment flux, converted to unit width sediment transport rate, \(\Delta t\) is the time interval for numerical calculations, \(\Delta z_d\) is the ground level reduction in the upper slope from slope failure (= the ground elevation increase in the lower slope due to sediment supplied by the slope failure), \(\Delta n\) is the distance between the two points, and \(\lambda\) is the void ratio. Slope failure causes the slope gradient between the two points to moderate to the angle of repose, i.e., the gradient after the change in ground level is the angle of repose. This gives us…
Consequently, (13.12) and (13.13) give us
Similarly, for
We rewrite these as a single equation. Then, we have….
Similarly for the \(s\) axis direction…
Where, \(q_{ds}\) is the converted value of the slope failure sediment amount in the \(s\) axis direction. When you take into account the slope failure, the slope failure sediment amounts given by equations (13.17) and (13.18) are added to Equation (13.10).
13.2. The equation of continuity for sediment transport on a 2D riverbed
The equation of continuity for the coordinates \(s,n\) (Cartesian curvilinear coordinates) is converted into the following equation by replacing the water flux part in the equation of continuity for water, (129), which is derived from Derivation of the equation of continuity on the s-n coordinates (alternative solution), with the sediment transport flux and by taking the void ratio into account.
Where, \(q_{bs}, q_{bn}\) are the unit width sediment transport rates in the directions of \(s, n\), respectively. Similar to (11.4), the temporal changes in bed elevation are given by the following equation.
13.3. Procedure for 2D bed deformation calculation
The procedure for calculating the riverbed deformation is as follows.
Set the calculation girds and the initial bed elevation.
Calculate the curvature (\(1/r\)) along the grid [Equation (10.12)].
Set the calculation conditions (boundary conditions, initial conditions and hydraulic variables).
Time \(t=0\)
Calculate the water velocity and the water depth by using the calculation method shown by [Calculation of 2D flow in meandering channels (practical edition)]
Calculate the curvature of the streamline (\(1/r_s\)) [Equations (12.17), \(\sim\) and (12.20)] d
Calculate the bed shear force and the total sediment transport.
Calculate the sediment transport in the directions of \(s, n\) [Equation (13.10)].
When slope failure is taking into account, use Equation (13.18) and combine the calculation results with the sediment transport in the directions of \(s, n\).
Calculate the bed deformation [Equation (13.20)].
Update the time \(t=t+\Delta t\)
Return to “5.” and repeat the calculations (until a preset time has elapsed).
13.4. Calculation code and calculation results
The calculation codes for flow in a 2D meandering channel and for bed deformation following the explanation thus far are given here.
https://github.com/YasuShimizu/Nays2d_Bed_Deformation
Hasegawa [Ref:27] conducted movable bed experiment (Me-2) shown in Figure 13.4. Figure 13.5 is an example of a reproduction that uses this code for the movable bed experiment (Me-2). The calculation results seem to closely reproduce the experimental results.
All the parameters and calculation conditions used in the examples of Figure 13.5 are described in a file named “me-2.yml” in the GitHub Repository, where the above source code is available. When executing the calculation, these conditions are read and then the calculation proceeds.
https://github.com/YasuShimizu/Nays2d_Bed_Deformation/blob/main/me-2.yml
Each parameter is described next to each item. In this text, I do not discuss all of the parameters. You can see what the parameter means by comparing it with the source code. Basically, using default values for the parameters should be fine.
The contents of “me-2.yml” are as follows.
j_rep: 1 # periodic boundary conditions (0: no periodic boundary conditions, 1: periodic boundary conditions)
lam : 2.2 # channel wavelength (m) nx0 : 41 # number of girds/wavelength ny : 21 # number of girds in the transverse direction (Use an odd number is recommended) wn : 1 # wave number chb : 0.3 # channel width (m) t0_degree : -30 # max. mender deflection angle (degree) slope: 0.00333 # channel gradient xsize: 20 # transverse scale of the figure for plotting the calculation results
amp : 0.0 # wave height of the initial bed bar (m) delta : 0. # phase difference of the initial bed bar (m) beta_0: 0. # rate of channel narrowing at the inner bank amp_0: 0.0 # bed elevation of the narrowed section (m)
snu_0 : 1e-6 # coefficient of kinematic viscosity hmin : 0.0001 # min. water depth (m) vmin : 0.0001 # min. water velocity (m) cw: 0.001 # sidewall friction coefficient ep_alpha: 1. # eddy viscosity coefficient
qp: 0.00187 # discharge (m^3/s) snm: 0.021 # Manning’s roughness coefficient g: 9.8 # gravitational acceleration (m/s^2) diam: 0.00043 # average grain diameter of bed materials (m) slambda: 0.4 # void ratio musk: 0.1 # μs × μk “static friction coefficient” × “dynamic friction coefficient” nsta: 7.0 # secondary flow intensity
j_west: 0 # upstream condition (0: open, 1: closed) j_east: 0 # downstream condition (0: open, 1: closed) j_hdown: 1 # water level condition at the downstream end (0: free flow, 1: neutral depth, 2: constant water level) h_down : 1. # constant water level when j_hdown=2 (m) j_inih: 2 # initial longitudinal water surface profile (0: straight, 1: uniform flow calculation, 2: non-uniform flow calculation)
alh: 0.7 # relaxation factor for the water level convergence calculation lmax: 10 # max. number of repetitions of water level convergence calculation at each time step
etime: 2400. # calculation end time (sec) tuk: 10. # output interval of calculation results (sec) dt: 0.002 # calculation time step (sec) stime: 0. # output start time (sec) bstime: 60. # bed deformation start time (sec)
j_obst: 0 # obstacles (0=No, 1=Yes) jo_type: 2 # method for installing obstacles (1=read from a file, 2=specify the conditions) jo_method: 4 # 0=No, 1=only right bank, 2=only left bank, 3=right & left banks (alternately), 4=right & left banks (at the same longitudinal locations) f_dike_pos: 0.8 # position of the first spur dike (m) dike_dis: 0.8 # interval of spur dikes (m) dike_length: 0.1 # length of spur dike (m) dike_thick: 0.02 # width of spur dike (m) num_dike : 3 # number of spur dikes (per bank)
iskip: 1 # i-direction thinning of vector plots jskip: 1 # j-direction thinning of vector plots jscale: 10 # flow vector scale factor
alpha_upu : 0.1 # relaxation factor of periodic boundary conditions
vcolor : yellow # vector color rrmax: 1 # max. curvature plot value on an axis (1/m)
dz_min: -0.05 # min. bed deformation contour plot (m) dz_max: 0.03 # max. bed deformation contour plot (m) dz_step: 0.005 # step of above contour
The main code is in “main.py”, which executes other functions to define the grid, calculate the flow and the riverbed deformation, and create various plots and animations. (In Python, everything is called a function, not a subroutine. In fact, the functions work as subroutines.) Various hourly plots will be rendered and saved in the folders [png], [ping_q], [ping_r], [sed] and [bed]. Please create these folders in advance.
After the calculation starts, the following diagrams are created and saved in each folder.
[ini_contour.png] A contour diagram of the initial bed elevation (flat by default)
[curvature.png] A longitudinal curvature diagram of the calculated grid coordinates along the channel centerline
[longitudinal_prof.png] Longitudinal diagrams of the initial riverbed and the initial water surface profile
[grid.png] A planar diagram of the calculation grids
After this, the calculation starts, and the following diagrams are created and saved in each folder for each [tuk calculation result output interval (sec)] that is specified in the “yml file”.
[png] folder: “png” files of the water depth contour and of mean velocity vector diagrams
[ping_q] folder: the discharge, depth-averaged velocity at the channel center, and longitudinal diagrams of the bed and water level along the channel center, near the left bank, and near the right bank.
[ping_r] folder: calculation grids and the curvature of the streamline along the channel center and the longitudinal distributions of the curvature of the streamlines near the right bank and the left bank
[sed] folder: a vector diagram of the bedload transport
[bed] folder: a contour diagram of the bed elevation (the amount of change from the initial bed) and vector diagrams of water depth and velocity
Once all of the calculations have been completed, the following animations in gif and mp4 formats are created using still images that have been created at each output time and that have been saved in each of the above folders.
[vec.gif] [vec.mp4] Animations of the water depth contour and of mean flow velocity vector diagrams that change over time
[longi.gif] [longi.mp4] Animations of longitudinal diagrams of discharge, flow velocity, channel centerline and bed and water levels
[radius.gif] [radius.mp4] Animations of grids and of the curvature of the streamline
[sed.gif] [sed.mp4] Animations of the sediment transport vector
[bed.gif] [bed.mp4] Animations of variations in the bed elevation contour and of vector diagrams of the water depth and velocity
The calculated results for bed deformation shown in Figure 13.5 are pasted directly from the above [bed.gif].