Atmosphere dynamical core, restricted to horizontal discretization only
Test Case 1 from the suite of shallow water test cases data-cites="Williamson1992">[1] has the following characteristics:
The advecting wind is given by
$$ \begin{eqnarray} u(\lambda, \theta) &=& u_0 (\cos \theta \cos \alpha + \sin \theta \cos \lambda \sin \alpha),\\ v(\lambda, \theta) &=& -u_0 \sin \lambda \sin \alpha. \end{eqnarray} $$
The initial cosine bell height field is given by
$$ h(\lambda, \theta) = \left\{ \begin{array}{lcr} (h_0/2)(1 + \cos (\pi r / R)) & \mbox{if} & r < R, \\ 0 & \mbox{if} & r \ge R, \end{array} \right. $$
where $r$ is the great circle distance between $(\lambda, \theta)$ and the initial bell center $(\lambda_c, \theta_c) = (3\pi / 2, 0)$:
$$ r = a \arccos [\sin \theta_c \sin \theta + \cos \theta_c \cos \theta \cos(\lambda - \lambda_c)], $$
and $R = a/3$ is the radius of the cosine bell.
$$ \begin{array}{ll} h & \mbox{Shallow water height field} \\ u & \mbox{Longitudinal velocity} \\ v & \mbox{Latitudinal velocity} \\ \lambda & \mbox{Longitude} \\ \theta & \mbox{Latitude} \\ \alpha & \mbox{Solid body rotation angle of orientation} \\ u_0 & \mbox{Advecting wind velocity, } 2\pi a/(12 \mbox{ days}) \\ h_0 & \mbox{Maximum height value, 1000m} \\ a & \mbox{Radius of the earth, $6.37122 \times 10^6$ m} \\ r & \mbox{Great circle distance from the center of the cosine bell} \\ R & \mbox{Radius of the cosine bell} \\ \lambda_c & \mbox{Longitudinal center of the initial cosine bell} \\ \theta_c & \mbox{Latitudinal center of the initial cosine bell} \end{array} $$
The initial height field, rendered on a cubed-sphere grid, for $(\lambda_c, \theta_c) = (0, \pi/4)$, looks like this:
from IPython.display import display, Image
display(Image(filename='InitialHeightField.png'))
The velocity field, which corresponds to solid body rotation, advects the cosine bell around the globe in 12 days. If $\alpha = 0$, the bell advects along the equator. If $\alpha = \pi / 2$, the bell advects over the north pole, and down past the south pole, before returning to its original position after 12 days.
Since the problem is purely advective, the cosine bell translates without changing shape, and the height field at $t$ = 12 days equals the initial hieght field at $t = 0$. Thus, a known analytic solution to the problem exists, and can be used to compute exact errors.
The test is run with values of $\alpha = 0, 0.05, \pi/2-0.05,$ and $\pi/2$. When $\alpha$ is near $\pi/2$, this an excellent test of how the dycore approximations to the horizontal derivatives behave near the poles. Historically, many dycores have had issues near the poles.
%matplotlib inline
from tools import plot_geopotential
plot_geopotential(time=0)
plot_geopotential(time=1)
1. Williamson, D.L.; Drake, J.B.; Hack, J.J.; Jakob, R.; Swarztrauber, P.N. A standard test set for numerical approximations of the shallow water equations in spherical geometry. Journal of Computational Physics 1992, 102, 211–224.