Zonal-symmetric model
This section documents the zonal-symmetric model: its assumptions, required inputs, typical outputs, and an example usage. For theoretical background information, see Paper … (see References)
Overview and outputs
Assumptions: Zonal symmetry, meridional variations only. The grid is equidistant from 90° N to −90° N. For diagnostic purposes, a stationary zonal periodic pseudo-orographic forcing in the jet region is assumed. The geographical latitude of the forcing is specified as jetlat. In addition, a sponge is used to dampen wave activity that leaves the jet region.
Core outputs:
Basic state plots: Zonal wind (u_0(\phi)), basic-state PV (q_0(\phi)), meridional PV gradient (q_{0y}(\phi)), and stationary wave number (\hat{K}_s).
Resonance plots: Maximum stationary perturbation streamfunction amplitude as a function of zonal wavenumber.
Solution for one zonal wavenumber (e.g. resonant wavenumber): spatial distribution of perturbation streamfunction, meridional enstrophy profile, enstrophy tendencies, and meridional Eliassen–Palm (EP) flux.
Further reading: For theory, variable definitions, and parameterization details, please refer to the paper PAPER2.
File structure
model_methods.py: Numerical routines for the model and routines for plotting.. Note: Users do not need to modify this file but can inspect it to understand the implementation.
zonal_symmetric_model.py: User-facing script to define the grid, the basic state wind profile, jet latitude and jet range, and to run diagnostics.
Grid and wind profile requirements
Equidistant meridional grid: Only the meridional resolution is specified; the grid spans from 90°N to −90°N.
Wind profile definition: Provide the basic-state zonal wind (u_0(\phi)) as a NumPy array with one value per grid point from 90°N to −90°N. An idealized wind profile is supplied as standard. A Gaussian jet stream is superimposed on a solid-body rotation.
Important: ⚠️ The wind profile must be strictly zonal-symmetric (only depends on latitude) and defined at every grid point on the equidistant meridional grid.
Jet range and sponge: Within the jet range, sponge damping is off; outside this range, damping increases toward the poles.
Example
import numpy as np
from model_methods import resonanceplot, solve_for_one_wavenumber
"""
Define grid:
The model requires an equidistant grid between the North Pole (90°N)
and the South Pole (−90°N). Only the meridional resolution (Δlat) is specified.
"""
dellat = 0.5 # meridional grid spacing in degrees
"""
Define basic state wind profile u0:
Provide a NumPy array with one value per grid point between 90°N and −90°N.
Example: idealized solid-body rotation with a superimposed Gaussian jet (code in github repository).
"""
# Example placeholder (replace with actual array of length N = 180/dellat + 1):
u0 = np.array([...])
"""
Specify jet characteristics:
- jetlat: latitude of the jet maximum (e.g., 45 for 45°N) where the pseudo-orographic forcing is placed.
- jetrange: latitudinal interval where sponge damping is off
Outside this range, damping increases toward the poles.
"""
jetlat = 45
jetrange = [0, 60]
# 1) Create basic-state plots for a single zonal wavenumber (e.g., s = 4)
solve_for_one_wavenumber(
wavenumber_s=4,
dellat=dellat,
u0=u0,
jetlat=jetlat,
jetrange=jetrange,
plot_basic_state_plots=True,
plot_solution_plots=False
)
# 2) Create resonance plot (streamfunction amplitude for several wavenumbers)
s_values, ampl, phase, sfampl, sfphase, Q_res, S_res = resonanceplot(
dellat=dellat,
u0=u0,
jetlat=jetlat,
jetrange=jetrange,
s_delta=0.25
)
# 3) Plot spatial distribution, EP flux, and enstrophy diagnostics at resonance
solve_for_one_wavenumber(
S_res,
dellat,
u0,
jetlat,
jetrange,
plot_basic_state_plots=False,
plot_solution_plots=True
)