Three years ago we did a Northeast Pacific simulation without tides. Ever since, we’ve been talking about adding tides to improve the vertical mixing over the shallow Bering Sea shelf. Here are a few of the things we’ve learned along the way.

First, there were steps we knew were necessary:

- Obtain the best bathymetry available (thanks to Seth Danielson).
- Change the minimum depth from 30 m to 10 m.
- Apply tidal boundary conditions from the global OTPS results.
- Incorporate Mike Foreman’s long-period tidal corrections.
- Add Paul Budgell’s tidal potential terms.
- Fix some MPI bugs in the various bits (see previous post).
- Decrease the timestep for stability.

I was having stability issues when I went to a meeting and heard that tides and the quadratic bottom drag don’t always play nicely. Switching to a linear bottom drag gave me a stable solution – but one in which the tides were too large, especially in Bristol Bay. In fact, the tides were so large in Bristol Bay that the water depth would go negative, leading to trouble. What sort of trouble? If the model wants to grow ice, the amount of ice growth has a term with Hz in it. Negative Hz leads to all sorts of wacky behavior.

I went down the path of trying the WET_DRY option for a bit, uncovering interesting compiler bugs with it. However, the tidal amplitudes were off and we needed to do something about it. Enter spatially variable bottom drag, as suggested by the NOAA fellows. My current implementation uses RDRG_GRID and expects to read a 2-D field from the grid file – a more complete version would also have an ANA_RDRG option and ana_rdrg to back it up. Through some trial and error we came up with a function of depth, increasing as depths shallow from 1000 m, uniform for deeper waters. The largest values are a factor of ten larger than the background value, so I was pleasantly surprised when it ran. The resulting tidal amplitudes are “good enough” except in upper Cook Inlet.

How about the rest of the simulation? It turns out we were getting vastly too much vertical mixing over the Bering Sea shelf. This is with LMD_MIXING with both top and bottom boundary layers turned on. That combination isn’t bad without tides, but with tides the bottom boundary layer grows to encompass the entire water column, even in deeper water than it should. Turning off the bottom boundary layer or trying one of the GLS schemes caused the model to blow up, back to the old tidal bottom drag instability mode.

After a conversation with Sasha Shchepetkin, I modified the bottom drag so that it is reduced in shallow water, so as to obey a stability limit of:

dt rdrg/Hz <= 0.5 or 0.6 or rdrg <= 0.6 Hz/dt Success! I did have one episode where the tides once again got too big in Bristol Bay with the old negative depth consequences, but managed to get through it by going to half the timestep for some months. Note that the maximum allowed drag goes up as the timestep gets shorter. I believe the quadratic version of this would be: rdrg <= 0.6 Hz / (dt*sqrt(u*u+v*v)) though this again gave me tides that were too large in Bristol Bay. That's what we get for being greedy and asking for N=60 in 10 m of water: the Hz's get small.