Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Description

-----------
A collection of tools to compute the Spectral Energy Budget of a dry hydrostatic
Atmosphere (SEBA). This package is developed for application to global numerical
simulations of General Circulation Models (GCMs). SEBA is implemented based on the
formalism developed by Augier and Lindborg (2013) and includes the Helmholtz decomposition
into the rotational and divergent kinetic energy contributions to the nonlinear energy
fluxes introduced by Li et al. (2023). The Spherical Harmonic Transforms are carried out
with the high-performance SHTns C library. The analysis supports data sampled on a
regular (equally spaced in longitude and latitude) or Gaussian (equally spaced in
longitude, latitudes located at roots of ordinary Legendre polynomial of degree nlat)
horizontal grids. The vertical grid can be arbitrary; if data is not sampled on
pressure levels, it is interpolated to isobaric levels before the analysis.
References:
-----------
Augier, P., and E. Lindborg (2013), A new formulation of the spectral energy budget
of the atmosphere, with application to two high-resolution general circulation models,
J. Atmos. Sci., 70, 2293–2308, https://doi.org/10.1175/JAS-D-12-0281.1.
Li, Z., J. Peng, and L. Zhang, 2023: Spectral Budget of Rotational and Divergent Kinetic
Energy in Global Analyses. J. Atmos. Sci., 80, 813–831,
https://doi.org/10.1175/JAS-D-21-0332.1.
Schaeffer, N. (2013). Efficient spherical harmonic transforms aimed at pseudospectral
numerical simulations, Geochem. Geophys. Geosyst., 14, 751– 758,
https://doi.org/10.1002/ggge.20071.

Examples

This example demonstrates how to compute and visualize spectral energy diagnostics and nonlinear energy transfers using SEBA with reanalysis or model data.

1. Load atmospheric data

importxarrayasxrfromseba.sebaimportEnergyBudget# Define dataset path and modelmodel="ERA5"resolution="025deg"data_path="/path/to/simulations/"date_time="20200128"# Load atmospheric 3D fields and surface pressurefile_name="/path/to/simulations/data.nc"# Define external surface variables. Optional: read from input model data if available, override if specifiedsfc_pres=xr.open_dataset("/path/to/simulations/surface_data.nc")["sfc_pressure"]

2. Create an energy budget object

# Create budget object from data path or directly from loaded xarray.Datasetbudget=EnergyBudget(file_name, truncation=511, ps=sfc_pres)

The truncation parameter sets the spectral resolution of the spherical harmonic transform used internally. Default None: truncation is based on Gaussian grid resolution, e.g., n512


3. Compute energy diagnostics

dataset_energy=budget.energy_diagnostics()

This computes Horizontal kinetic energy (HKE), Vertical kinetic energy (VKE), Rotational/Divergent kinetic energy ([R/D]KE), and Available potential energy (APE) spectra for each time and pressure level.


4. Visualize energy spectra

layers= {"Troposphere": [250e2, 450e2], "Stratosphere": [50e2, 250e2]}
dataset_energy.visualize_energy(model=model, layers=layers, fig_name=f"figures/energy_spectra.pdf")

This produces a subplot per layer of the energy spectra. Variables can be specified via the variables argument, e.g., variables=['hke', 'vke', 'ape'].


5. Compute and visualize nonlinear energy fluxes

dataset_fluxes=budget.cumulative_energy_fluxes()
layers= {
"Lower troposphere": [450e2, 850e2],
"Free troposphere": [250e2, 450e2],
"Stratosphere": [20e2, 250e2],
}
y_limits= {
"Stratosphere": [-0.6, 1.0],
"Free troposphere": [-0.6, 1.0],
"Lower troposphere": [-0.9, 1.5],
}
dataset_fluxes.visualize_fluxes(
model=model,
variables=["pi_hke+pi_ape", "pi_hke", "pi_ape"],
layers=layers, y_limits=y_limits,
fig_name=f"figures/energy_fluxes.pdf"
)

This generates layer-wise flux plots showing Cumulative nonlinear spectral energy transfers.


6. Cross-section visualization

dataset_fluxes.visualize_sections(
variables=["cad", "vfd_dke"],
y_limits=[1000., 98.],
fig_name=f"figures/fluxes_section.pdf"
)

Plots vertical cross-sections of specific HKE budget terms (e.g., conversion from APE to HKE, vertical flux divergence) as a function of pressure and horizontal wavenumber.

About

Module to compute the Spectral Energy Budget of a dry hydrostatic Atmosphere

Resources

Stars

1 star

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages