CoastalCodeBook
  1. Week 4
  2. 4a: Bound long waves
  • Introduction
  • About the Codebook
    • Introduction
    • Course structure
    • Notebook overview
    • Acknowledgements
  • Usage
    • Installation Guide
    • Getting Started
    • Troubleshooting
    • Building the book
  • Week 1
    • 1a: Tectonic classification
    • 1b: Process-based coastal classification
  • Week 2
    • 2a: Pre-knowledge waves
    • 2b: Wave dispersion and grouping
    • 2c: Generation of the tide
    • 2d: Tidal constituents
  • Week 3
    • 3a: Tidal Environments
    • 3b: Wave asymmetry and skewness
    • 3c: Radiation stresses and wave forces
  • Week 4
    • 4a: Bound long waves
    • 4b: Shallow-water Tides
  • Week 5
    • 5: Coastal Classification and Beach States
  • Week 6
    • 6: Cross-shore transport
  • Week 7
    • 7: Alongshore transport
  • Week 8
    • 8a: Escoffier curve
    • 8b: Tide-induced residual transport (Van de Kreeke and Robaczewska)
    • 8c: Equilibrium concentration versus lag effects
    • 8d: Interventions and natural changes
  1. Week 4
  2. 4a: Bound long waves
image

4a: Bound long waves

Welcome at this first notebook of week 4 on bound long waves. When we discussed radiation stress in Notebook 3c, we did not consider the variations of radiation stress and wave forces within a wave group yet. We will do so in this Notebook.

Due to the wave height variations within a group, the wave energy and radiation stresses vary as well. In this notebook, our starting point is the expression for the wave envelope that we dealt with in Notebook 2a. We will use this envelope to determine how the wave energy and radiation stress vary within a wave group and how this forces a long wave motion on the scale of a wave group.

This notebook consists of two parts: 1. Part 1: Slowly-varying wave energy and radiation stress (coding exercises and one multiple-choice and one multiple-selection question) 2. Part 2: Bound long wave (coding exercises and one multiple-selection question)

Theory

In Notebook 2b, we considered a bichromatic wave train on a horizontal bed, with the frequencies of the components close together, and equal amplitudes. This resulted in a wave group consisting of a so-called carrier wave \(\sin(\bar\omega t - \bar k x)\) with a slowly-varying amplitude \(a(x,t)\) given as:

\[\begin{equation} \tag{1} A (x,t) = 2a \cos(\frac{\Delta\omega}{2}t - \frac{\Delta k}{2}x) \end{equation}\]

So far, for instance in Notebook 3c, we have considered the wave energy \(E\) as a resultant quantity integrated over the wave period and any wave groups: \(E=\bar E\). In this notebook, however, we will consider the temporal variation within the wave group by taking into account the slowly-varying amplitude \(a (x,t)\). We get:

\[\begin{equation} \tag{2} E (x,t) = \frac{1}{2} \rho g a(x,t)^2 \end{equation}\]

The radiation stress \(S_{xx}\) varies as:

\[\begin{equation} \tag{4} S_{xx} (x,t) = (2 n - 0.5) E(x,t) \end{equation}\]

with:

\[\begin{equation} \tag{5} n = \frac{c_g}{\bar c} \mathrm{\enspace with \enspace} c_g = \frac{\Delta\omega }{\Delta k} \mathrm{\enspace and \enspace} \bar c = \frac{\bar \omega }{ \bar k } \end{equation}\]

In Part 1 of this Notebook, we will determine \(E(x,t)\) and \(S_{xx}(x,t)\). In part 2 we will see how this time-variation forces a bound long wave associated with the group.

Import libraries that we use for our analysis

Let’s first import the libraries that we use for our analysis by running the next cells.

from pathlib import Path

import numpy as np
import holoviews as hv
from IPython.display import display 
import panel as pn

import coastal_dynamics as cd

pn.extension()
import sys

sys.path.append('../')

from modules import mod_4a
questions = cd.read_questions(Path("../hashed_questions/4a_bound_long_wave_hashed.json"))

question_industry = cd.QuestionIndustry(questions)

cd.UseAnswersApp("Q4a").serve()

Fenton approximation

Also in this notebook, you will need the Fenton approximation for solving the dispersion relationship. Copy your code in the below cell.

## Fenton approximation to the linear dispersion relationship
def waveNumber_Fenton(T, h):
    """Complete the code here"""
    k = None
    
    return k

Part 1: Slowly-varying wave energy and radiation stress

In Notebook 2b, we discussed the wave group and wave envelope for two harmonic components with equal amplitude, and you coded functions for the surface elevation and wave envelope yourself. Below we will assume that you know how to determine the wave envelope and continue from there.

Exercise

Can you code the wave energy \(E(x,t)\) and radiation stresses and \(S_{xx}(x,t)\) as they vary within the bichromatic wave group with equal amplitudes? In the below code cell you are asked to provide two functions for the wave energy: \(E(x = x_p, t)\) and \(E(x,t = t_p)\) and two functions for the radiation stress: \(S_{xx}(x = x_p, t)\) and \(S_{xx}(x,t = t_p)\). Your functions will be checked automatically and plotted together with the correct functions. It is also possible to first run the code cell without already supplying your own functions, so that you can get an idea of what the resulting plot should look like.

NB. In your function you can call your above defined Fenton function as follows: “k = waveNumber_Fenton(T, h)”.

input_values = {
    "a": 1,                          # amplitude of second harmonic component [m]
    "T1": 5,                         # period of first harmonic component [s]
    "T2": 4.5,                       # period of second harmonic component [s]
    "tp": 0,                         # constant t-value for spatial plot (0 is default)
    "xp": 0,                         # constant x-value for time plot (0 is default)
    "t": [],                         # t-range, will be determined automatically to cover n_groups wave groups starting from t = 0 
    "x": [],                         # x-range, will be determined automatically to cover n_groups wave groups starting from x = 0 
    "h": 7,                          # water depth [m]
    "n_groups": 4,                   # number of wave groups that will be shown in time and space [-] (axes start from 0)   
    "rho": 1025,                     # density of the water [kg/m^3]
    "g": 9.81,                       # acceleration due to gravity [m/s^2]
}

def Energy_Radiation_Stress(a, T1, T2, tp, xp, t, x, h, rho, g):
    """  
    Args:
        see definition at input_values
        
    Returns:
        E_t: Calculated time-varying wave energy for x = xp, E(x = xp, t) (referred to as Function 1).
        E_x: Calculated spatially-varying wave energy for t = tp, E(x,t = tp) (referred to as Function 2).
        Sxx_t: Calculated time-varying radiation stress for x = xp, Sxx(x = xp, t) (referred to as Function 3).    
        Sxx_x: Calculated spatially-varying radiation stress for t = tp, Sxx(x,t = tp) (referred to as Function 4).    
    """
    
    E_t = None  # Replace None by your own function 1
    E_x = None  # Replace None by your own function 2
    Sxx_t = None  # Replace None by your own function 3
    Sxx_x = None  # Replace None by your own function 4

    
    return E_t, E_x, Sxx_t, Sxx_x  

output, figure = mod_4a.check_envelope_E(input_values, Energy_Radiation_Stress)

print(output)
display(figure)
Your function is: 
Function 1 is incorrect.
Function 2 is incorrect.
Function 3 is incorrect.
Function 4 is incorrect.
# Run this cell to get questions about Part 1

q = [
    "Q4a_part1_radiation_stress_variation",
    "Q4a_part1_set_down_variation"
]

question_industry.serve(q)

Rewrite formulations for wave energy and radiation stress

The variation of \(E\) and \(S_{xx}\) in a wave group can be better understood if we rewrite Eqs. (2) and (4). Since \(\cos^2x = \frac{1}{2}(\cos2x + 1)\), we can write:

\[\begin{equation} \tag{6} E (x,t) = 2 \rho g a^2 \cos^2 (\frac{\Delta\omega}{2}t - \frac{\Delta k}{2}x) = \rho g a^2 \left( 1 + \cos (\Delta\omega t - \Delta k x) \right) \end{equation}\]

Clearly, the wave energy consists of a mean part \(\bar E = \rho g a^2\) and a fluctuating part \(\tilde E = \rho g a^2 \cos (\Delta\omega t - \Delta k x)\).

Similarly, the radiation stress \(S_{xx}\) consists of a mean part \(\bar S_{xx}\) and a fluctuating part \(\tilde S_{xx}\) and varies as:

\[\begin{equation} \tag{7} S_{xx} (x,t) = (2 n - 0.5) E(x,t) = \rho g a^2 (2 n - 0.5) \left( 1 + \cos (\Delta\omega t - \Delta k x) \right) \end{equation}\]

From the term \(\cos (\Delta\omega t - \Delta k x)\) in \(\tilde E\) and \(\tilde S_{xx}\) as well as from the above figures, we can see that the wave energy and radiation stresses fluctuate on the scale of the wave group (\(\Delta\omega\), \(\Delta k\)).

Part 2: Bound long wave

Theory

In Notebook 3c, we have seen that the radiation stress gradients in the shoaling zone result in a set-down that increases towards the seaward edge of the surf zone. We found that this set-down depends on the wave height (see Section 5.5.4 and Equation 5.64 in the Coastal Dynamics Open Textbook). Due to variation of the wave height and radiation stresses in the groups, the set-down varies varies as well, being the largest under the highest waves. This results in a mean water level fluctuation on the scale of the wave group with the largest depression under the highest waves in the group. This is equivalent to a long wave motion, the so-called bound long wave, which is forced by the group and travels at the speed of this group (so \(c_g\)). For a perfect bound long wave, the phase-shift between the long wave and the short-wave envelope is \(\pi\) ; the wave trough of the bound long waves coincides with the maximum of the wave envelope and the wave crest coincides with the minimum of the wave envelope. This negative correlation changes to a positive correlation as the waves enter the surf zone. This can be understood from intermittent wave-breaking in the group, generating a time-varying set-up. See also Section 5.8.2 in the textbook.

In summary, the bound long wave varies on the scale of the wave group, as the wave energy and radiation stress do. We can thus write for the bound long wave:

\[\begin{equation} \tag{8} \eta_b = \hat\eta_b \cos (\Delta\omega t - \Delta k x) \end{equation}\]

In here, the bound long wave surface elevation amplitude \(\hat\eta_b\) must be negative. Can you see why?

A formula for the bound long wave surface elevation amplitude for this situation was derived by Longuet-Higgins and Stewart (1962). It can be found as Eq. 3.134 in a Guide to Modeling Coastal Morphology by Dano Roelvink and Ad Reniers. It reads:

\[\begin{equation} \tag{9} \hat\eta_b = \frac{\Delta k^2 ga^2 (2n-0.5)}{\Delta \omega^2-gh\Delta k^2} = \frac{-ga^2(2n-0.5)}{gh-\frac{\Delta \omega^2}{\Delta k^2}} = \frac{-ga^2(2n-0.5)}{gh-c_g^2} \end{equation}\]

Verify for yourself that Eq. (9) will indeed yield a negative value!

Exercise: bound long wave

Let’s check whether Eqs. (8-9) make any sense. Do this by coding the bound long wave surface elevation. As before, you can code your function in the below code cell. By running this code cell, your code will automatically be checked and plotted in the figures, together with the correct answers. If you run the code cell without adjustments (so with “None” where your functions should appear), you will get a figure showing only the correct results.

Also, try to determine whereabout in the shoaling zone we are, for the given wave conditions. Can you change the water depth such, that the bound long wave amplitude becomes smaller?

input_values = {
    "a": 1,                          # amplitude of second harmonic component [m]
    "T1": 5,                         # period of first harmonic component [s]
    "T2": 4.5,                       # period of second harmonic component [s]
    "tp": 0,                         # constant t-value for spatial plot (0 is default)
    "xp": 0,                         # constant x-value for time plot (0 is default)
    "t": [],                         # t-range, will be determined automatically to cover n_groups wave groups starting from t = 0 
    "x": [],                         # x-range, will be determined automatically to cover n_groups wave groups starting from x = 0 
    "h": 7,                          # water depth [m]
    "n_groups": 4,                   # number of wave groups that will be shown in time and space [-] (axes start from 0)   
    "rho": 1025,                     # density of the water [kg/m^3]
    "g": 9.81,                       # acceleration due to gravity [m/s^2]
}


def Bound_long_wave(a, T1, T2, tp, xp, t, x, h, rho, g):
    """  
    Args:
        see definition at input_values
        
    Returns:
        etab_t: Calculated time-varying long wave wave energy for x = xp, etab(x = xp, t) (referred to as Function 1).
        etab_x: Calculated spatially-varying long wave for t = tp, etab(x,t = tp) (referred to as Function 2).
    """
    
    etab_t = None  # Replace None by your own function 1
    etab_x = None  # Replace None by your own function 2

    
    return etab_t, etab_x

output, figure = mod_4a.check_boundwave_eta(input_values, Bound_long_wave)
print(output)
display(figure)
Your function is: 
Function 1 is incorrect.
Function 2 is incorrect.

Reflection

You can see in the figure that the trough of the bound long wave coincides with the maximum of the wave envelope and that the crest coincides with the minimum of the wave envelope. What would that mean for the direction of the orbital velocities of the bound long wave under the highest waves in the group? We are going to use this in chapter 7 to explain the role of long waves in cross-shore sediment transport.

# Run this cell to get a questions about Part 2

q = [
    "Q4a_part2_orbital_velocities"
]

question_industry.serve(q)

The end

You have reached the end of this Notebook 4a. You may proceed with the second and last notebook of this week on shallow-water tides.

3c: Radiation stresses and wave forces
4b: Shallow-water Tides