Flat Shelf Upwelling Experiment (Part 2)
This week I returned to the flat shelf upwelling experiment that I began a few weeks ago. Part 1 of this experiment is described in a prior blog post.
We had identified several improvements that could be made:
- Stratify ocean with salinity rather than temperature
- Turn off atmospheric forcing and simulate wind usings just surface momentum fluxes
- Change salinity and 3d momentum boundary conditions to Gradient instead of Radiation Nudging
I’ve tried to address all of these suggestions (details below). I have also been slowly teaching myself some GFD so I can hopefully set up a more thoughtfully designed experiment.
Grid
As introduced in Part 1 of this experiment, I am using a flat-shelfed grid with a vertical wall at the coast. The grid is shown in Figure 1.

Fig 1. Flat-shelfed grid.
Forcing
To simplify this experiment, I have turned off tidal forcing, river forcing, and atmospheric forcing. The only types of forcing present are ocean forcing and surface momentum forcing.
Ocean Forcing
The following table lists the ocean forcing used in this model. The ocean does not introduce momentum to the system. Temperature is constant everywhere.
| Variable | Description | Value |
|---|---|---|
| salt* | sea water practical salinity | 30 to 33 g kg-1 |
| temp | sea water temperature | 10 C |
| zeta | free surface height | 0 m |
| ubar | x-dir barotropic velocity | 0 m s-1 |
| vbar | y-dir barotropic velocity | 0 m s-1 |
| u | x-dir sea water velocity | 0 m s-1 |
| v | y-dir sea water velocity | 0 m s-1 |
*Salinity is used to create a two-layered stratified ocean. The top 15 sigma layers have a salinity of 30 g kg-1, while the bottom 15 sigma layers have a salinity of 33 g kg-1. Since the bathymetry is flat, I can assume that stratifying the ocean with sigma layers will create two flat layers.
The resulting salinity and density profiles are shown in Figure 2.

Fig 2. Initial ocean salinity and density.
The salinity and/or temperature of the ocean can easily be changed in the future as needed. I am still learning about the physics of upwelling and have not yet decided on values to use for an extended model run.
Surface Momentum Stress Forcing
Previously, I defined the BULK_FLUXES option to create atmospheric forcing. This allowed me to define a wind speed, but it also required that I provide solar radiation.
To simplify the model, I have turned off BULK_FLUXES and atmospheric forcing. To simulate wind, I am now forcing ROMS with surface momentum stresses. To achieve this, I needed to do the following:
- Undefine ANA_SMFLUX. ROMS will overwrite .nc surface stress forcing if ANA_SMFLUX is defined. But I want ROMS to use the .nc file I generate.
- Create a forcing file to generate .nc files for sustr and svstr. I called this forcing folder smflux0. I needed to be careful of ROMS’s anticipated dimension types for sustr and svstr (u2dvar and v2dvar, respectively).
- List surface momentum flux in forcing_list.csv. I needed to tell ROMS to look for surface stress forcing.

- Tell ROMS which files contain surface momentum stress. This change was made in BLANK.in. I tell ROMS that there are 2 forcing input files, one called sustr.nc and one called svstr.nc. These files are of forcing type smflux and created in make_forcing_main.

The forcing inputs for this model are listed below.
| Variable | Description | Value |
|---|---|---|
| sustr | surface u-momentum stress | 0.1 N m-2 |
| svstr | surface v-momentum stress | 0 N m-2 |
Again, these values can be changed in the future after more reading.
Boundary Conditions
In the prior version of this experiment, the model seemed to be having issues with boundary conditions. Specifically, it seemed like momentum was circulating within the domain, rather than flowing in and out.
To fix this problem, I have switched temperature, salinity, and 3d momentum boundary conditions from Radiation Nudging to Gradient. I have also turned off nudging to climatology for these variables. Previously, the model would have nudged all inflows to values provided in climatology (based on the values in ocean forcing, there is zero momentum outside of the domain). Gradient boundary conditions force the inflowing value to be equal to the nearest interior value for each variable.
I have previously written a more detailed blog post about switching from Radiation Nudging boundary conditions to Gradient boundary conditions. While this blog post focuses on temperature, the steps are nearly identical for salinity and 3d momentum.
Preliminary Results
After all of these changes were implemented, I ran the model for 5 days. The video below shows the hourly surface salinity profile during these 5 days.
Saltier water does appear to be upwelling at the coast. The net flow of the water appears to be towards the South-East, which seems consistent with the eastward surface stress used to force the model.It seems like there is some flow of momentum in and out of the boundaries, which is a good indication that the boundary conditions are working. However, a longer run later on will make it more apparent whether the boundary conditions are actually working.
I am still trying to learn more about upwelling and GFD. In the next week, I am hoping to finalize what values to use to force this upwelling experiment, and to run the model for a longer period of time.
As always, any other suggestions are welcome.