
3a: Tidal Environments¶
This week, we will have three notebooks: Notebooks 3a, 3b and 3c. Notebook 3a is about the tidal part of Chapter 4 of the Coastal Dynamics Open Textbook, which treats the global variation of the main processes that shape the coast (wind, waves, and tides). Notebook 3b is about wave form (wave asymmetry and skewness) and will come in handy when studying both wind waves and tides and related sediment transport, from Chapter 5 onwards. Notebook 3c is about radiation stresses, which are crucial in generating wave-induced currents and water level variations.
Tidal environments can be classified based on the following two variables:
Magnitude of the tide, characterised by the tidal range;
Tidal character, determined by the importance of diurnal vs. semi-diurnal components
In this notebook, we will explore both classifications using python code. The notebook consists of three parts with a total of twenty-one multiple-choice, multiple-selection or numeric questions (1 question in part 1, 12 questions in part 2 and 8 questions in part 3).
Import the required libraries and questions¶
Run the below cells to import all libraries and question files that we use for our analysis.
from pathlib import Path
import numpy as np
import pandas as pd
import pickle
import panel as pn
import coastal_dynamics as cd
pn.extension()import sys
sys.path.append('../')
from modules import mod_3aquestions = cd.read_questions(Path("../hashed_questions/3a_tidal_environments_hashed.json"))
question_industry = cd.QuestionIndustry(questions)
cd.UseAnswersApp("3a").serve()F_data_fp = Path("../database/2_wind_waves_tides/02_F_data.pkl")
F_data = pd.read_pickle(F_data_fp)Part 1: Classification of tidal environments¶
Tidal magnitude and character¶
The tidal wave is distorted by local differences in water depth and by the location and shape of land masses and large embayments. This results in a global variation in tidal range controlled by the large-scale coastal configuration. The tidal classification expressed through mean spring tidal range:
| Category | Mean spring tidal range |
|---|---|
| Micro-tidal | < 2m |
| Meso-tidal | 2m - 4m |
| Macro-tidal | > 4m |
The tidal character, on the other hand, is defined by the form factor F (Eq. 4.1 in the book): F = (K1 + O1)/(M2 + S2),
where K1, O1, M2, and S2 are the amplitudes of the corresponding tidal constituents.
| Category | Value of F |
|---|---|
| Semi-diurnal | 0 - 0.25 |
| Mixed, mainly semi-diurnal | 0.25 - 1.5 |
| Mixed, mainly diurnal | 1.5 - 3 |
| Diurnal | > 3 |
Global distribution¶
In the figure below, which consists of Figures 4.10 and 4.12 from the textbook, you can see the world distribution of mean spring tidal range (left) and tidal character (right). The attribution of the tidal types follows J.L. Davies and Clayton (1980). They classified the world’s coastlines using rough coastal data.

Questions for Part 1¶
Look into the semi-enclosed seas vs. open coasts and enclosed seas; do you notice anything? Why?
Compare the left and right figures: do you notice any repetitive patterns? Hint: Look at the tidal range for specific tidal characters.
Now run the cell below to get a multiple-selection question that will test your understanding.
q = [
"Q3a-classification-trends"
]
question_industry.serve(q)Part 2: Tidal classification using FES2014 global data¶
We can also make our own tidal character plot, once again using the FES2014 Global Tide data, which provides amplitude and phase information for 34 tidal constituents, distributed on 1/16˚ grids.
The code cell below plots the tidal characters across the globe obtained from the FES2014 dataset. This code is a bit slow, since it is doing a global contour! Therefore, we have commented out the code and will load the resulting figure for you below this text.
Compare this figure to the above tidal character plot (Figure 4.12 in the textbook and right panel of the above illustration). What could be the reasons behind the observed differences?
Note that the plot also shows four locations that we will consider next.

## FES2014 Tidal Characters
# the code is a bit slow, it is doing a global contour!
#mod_3a.tidal_characters(F_data) # Do not run this code, it is too slow on the hub. Instead we have loaded the resulting plot for you in the above cellTidal curves and tidal character at specific locations¶
Let’s now categorize the tide at the four locations marked in the plot by computing the form factor and look at the tidal curves.
For each location, we retrieve the tidal signal from the FES2014 Global Tide data as explained in Notebook 2d. We have labelled the locations 1 to 4; later in this notebook you will be asked to match the location labels with the location names.
Further, the amplitudes of the constituents from the FES2014 dataset, needed to compute the form factor, are shown in the table below. The table also shows the latitude and longitude.
| Tidal amplitudes [cm] | M2 | S2 | K1 | O1 | Longitude | Latitude |
|---|---|---|---|---|---|---|
| Scheveningen (Netherlands) | 75.78 | 17.74 | 8.39 | 11.85 | 4.25 | 52.125 |
| Galveston (US Gulf of Mexico) | 13.08 | 3.97 | 16.17 | 15.89 | -94.6875 | 29.25 |
| Jakarta (Indonesia) | 4.58 | 5.18 | 25.75 | 13.46 | 106.8125 | -6.0625 |
| Valparaiso (Chile) | 42.91 | 14.40 | 15.29 | 10.22 | -71.625 | -33 |
Questions about Part 2¶
Run the first cell below to get the tidal signals for a time-range that you can specify (select at least a month within the period of 1977-2017). Remember that you can further adjust the figure to your liking; you can pan (move the view) and zoom and the two axes are individually zoomable as well by hovering over them and using the wheelzoom tool. What differences between the curves do you observe?
Now compute the form factor F for each location. You can use the empty cell below to write your own code for this calculation.
Then run the subsequent cell to get some questions about your results and their interpretation.
# Choose a time window of at least a month to plot (has to be between 1977 - 2017)
start_date = pd.to_datetime("2000-05-01 00:00")
end_date = pd.to_datetime("2000-07-01 00:00")
dir_path = Path("../database/2_wind_waves_tides/")
figure, *_ = mod_3a.FES_tidal_signal(dir_path, start_date, end_date)
display(figure)## Write your code to compute F here.
# Run to get questions about Part 2
q = [
"Q3a-F-Scheveningen",
"Q3a-category-Scheveningen",
"Q3a-F-Galveston",
"Q3a-category-Galveston",
"Q3a-F-Jakarta",
"Q3a-category-Jakarta",
"Q3a-F-Valparaiso",
"Q3a-category-Valparaiso",
"Q3a-label-1",
"Q3a-label-2",
"Q3a-label-3",
"Q3a-label-4",
]
question_industry.serve(q)Part 3: Beating of tidal constituents¶
Now that we’ve identified the tidal characteristics of each location, we can visualize the tidal constituents that make up the total signal and address various questions. We already know from Notebook 2d that M2 and S2 combined give rise to a spring-neap tidal cycle of 14.77 days. We also know that the addition of the diurnal components K1, O1 and P1 leads to daily inequality (and in the extreme to a purely diurnal tide). Here, we are going to consider the beats between some other constituents as well.
We will generate a figure that displays the individual tidal components (upper plot) and their combined tidal signal (lower plot, total signal and sum of selected components) for two of the locations at the same time. The two left plots are for the one location, the two right plot for the other location; in this way you can determine, which of the locations you would like to compare with each other. These are the steps:
Choose the two locations and data range (within the full period of 1977-2017) in the code cell.
Execute the block below to generate an interactive figure.
Select which tidal constituents to display with tick boxes.
You can further adjust the time range in the plot using the Bokeh zoom and pan tools.
This allows you to experiment with different constituents, observe the resulting signals, and compare the locations.
Important note on the time range¶
Note that in the below code cell we choose two months as the default time range. You can extend this to a year where necessary, but this will be much slower, so only do this when you need to discern beating periods that exceed the monthly time-scale. You will notice that some of the beatings vary seasonally and that we need a longer time range to discern these. To look at these seasonal variations make sure you comment the appropriate two lines in the below code cell.
Note further that you can also zoom in using the Bokeh zoom tools.
# We choose one year to plot, 2000-2001 same as in the previous Notebook
start_date = pd.to_datetime("2000-01-01 00:00")
end_date = pd.to_datetime("2001-01-01 00:00")
# Pre-select a time range of to look at within this year (default: two months):
# Comment out the below two lines if you want to look at the full year
start_date = pd.to_datetime("2000-05-01 00:00")
end_date = pd.to_datetime("2000-07-01 00:00")
figure, FES1, FES2, FES3, FES4 = mod_3a.FES_tidal_signal(dir_path, start_date, end_date)# Choose tidal constituents, these will be included in the figure
comps = ['M2', 'S2', 'N2', 'K2', #semi-diurnal
'K1', 'O1', 'P1', 'Q1', #diurnal
'MF', 'MM', 'SSA', #long period
'M4', 'M6', 'S4', 'MN4'] #short period (overtides)
# We start with the M2, S2, K1 and O1 pre-selected
# Select any two out of the four locations, to display the beating of the tidal constituents
# "Scheveningen", "Valparaiso", "Jakarta", "Galveston"
# Examples:
#locs = ["Scheveningen", "Valparaiso"] # Example statement to select locations Scheveningen and Valparaiso
locs = ["Jakarta", "Galveston"] # Example statement to select locations Jakarta and Galvestion
mod_3a.plot_4timeseries_with_interactive_controls(locs, comps, start_date, end_date, FES1, FES2, FES3, FES4)Open questions about Part 3¶
In the code above, select the two locations with a (mainly) semi-diurnal character. Also choose the appropriate time ranges (note that you can further adjust the date range where necessary by using the zoom tools of the figure). Investigate the following:
a) Compare the amplitudes of the semi-diurnal components and diurnal components and explain the differences in the total signal based on this.
b) By selecting two components (which ones?), verify the previously computed spring-neap tidal cycle of 14.77 days.
c) What is the approximate beating period of M2 and N2? How would you describe this effect? What is the effect on subsequent spring tides?
d) Select S2 and K2. What is the approximate beating period of these two components? Are there certain times in the year that the resulting tidal amplitudes are largest?
e) Select all semi-diurnal components. Can you still identify the effects investigated above?
In the code, select the two locations with a (mainly) diurnal character. Investigate the following (note that you can further adjust the date range where necessary by using the zoom tools of the figure):
f) Compare the amplitudes of the semi-diurnal components and diurnal components and explain the differences in the total signal based on this.
g) What are the three strongest diurnal components at these locations?
h) Could there also be a fortnightly spring-neap tidal cycle from the beating of the most important diurnal component and one of the other diurnal components? Try to determine which other component.
i) Select K1 and P1. What is the approximate beating period of these two components? Are there certain times in the year that the resulting tidal amplitudes are largest?
j) Select all diurnal components. Can you still identify the effects investigated above?
Now revisit the signal for each location and activate all components, including some short period constituents that we will further explore next week.
k) Analyse the combined signals. What kind of signal do you see for each location? What are the dominant components and beatings at each location?
When you have finished the above steps, check your understanding by answering the questions below.
Question block about Part 3: Tidal Beating¶
Using the knowledge gained from Chapter 3 of the textbook and the interactive figure above, try to answer the questions below. You can use the next cell as a calculator. Give your numeric answer with at least three significant figures. You will need the information in the below table, that was first shown in Notebook 2d.
| Tidal constituents | Name | Equil. Amplitude [m] | Period [h] |
|---|---|---|---|
| Semi-diurnal | |||
| Principal lunar | M2 | 0.24 | 12.4206012 |
| Principal solar | S2 | 0.11 | 12 |
| Lunar elliptical | N2 | 0.046 | 12.65834751 |
| Lunar-solar declinational | K2 | 0.031 | 11.96723606 |
| Diurnal | |||
| Lunar-solar declinational | K1 | 0.14 | 23.93447213 |
| Principal lunar | O1 | 0.10 | 25.81933871 |
| Principal solar | P1 | 0.047 | 24.06588766 |
| Lunar elliptical | Q1 | 0.019 | 26.868350 |
| Long period | |||
| Fortnightly | Mf | 0.042 | 327.8599387 |
| Monthly | Mm | 0.022 | 661.3111655 |
| Semi-annual | Ssa | 0.019 | 4383.076325 |
# Write your code here to get answers to the questions below.
# Use the values from the table above and use at least 4 significant figures.
# Run this cell to get the questions
q = [
"Q3a-semi-diurnal-TC12",
"Q3a-semi-diurnal-D1",
"Q3a-diurnal-TC34",
"Q3a-diurnal-D2",
"Q3a-semi-diurnal-month12",
"Q3a-semi-diurnal-TC56",
"Q3a-diurnal-month34",
"Q3a-diurnal-TC78"
]
question_industry.serve(q)The end¶
You have reached the end of this Notebook 3a. You can continue with this week’s second notebook, which is Notebook 3b on wave asymmetry and skewness.