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
)