schupy -- A Python Package for Modeling Schumann Resonances
schupy is an open-source Python package aimed at modeling and analyzing Schumann resonances (SRs), the global electromagnetic resonances of the Earth-ionosphere cavity resonator in the extremely low frequency (ELF) band (<100 Hz).
Installation
pip install schupy
Dependencies
numpy >= 1.20scipy >= 1.5(for exact hypergeometric closed-form calculations)
Features
forward_tdte: General forward model for arbitrary source-observer configurations using Legendre polynomial series summation (Bozóki et al., 2019).forward_tdte_pole: Fast axisymmetric forward model assuming that the source is located on the North Pole.forward_hyper: Exact closed-form forward model using Gauss hypergeometric function (Prácser et al., 2021).forward_hyper_pole: Exact closed-form assuming that the source is located on the North Pole.- Finite Decay Time (
tau): For simulating the effect of lightning continuing currents (Bozóki et al., 2025). - Height Models: Mushtak & Williams (2002) knee model and Kulak & Mlynarczyk (2013) day/night model.
Field Components
| Component | Description | Spherical Field Component | Measured In |
|---|---|---|---|
E_Z |
Vertical electric field | $E_Z$ | $\text{mV}^2 / \text{m}^2 / \text{Hz}$ |
B_NS |
Meridional horizontal magnetic field | $B_\theta$ | $\text{pT}^2 / \text{Hz}$ |
B_EW |
Azimuthal horizontal magnetic field | $B_\varphi$ | $\text{pT}^2 / \text{Hz}$ |
Quickstart
1. General Forward Calculation (forward_tdte)
import schupy as sp
import numpy as np
# Define source and observer
source_latitudes = [10.0, 0.0, 0.0]
source_longitudes = [10.0, -80.0, 110.0]
source_intensities = [1e5, 8e4, 7e4] # C^2 km^2 / s
obs_latitude = 47.6
obs_longitude = 16.7
frequencies = np.arange(4.0, 35.0, 0.1)
# Run model
spectrum = sp.forward_tdte(
s_lat=source_latitudes,
s_lon=source_longitudes,
s_int=source_intensities,
m_lat=obs_latitude,
m_lon=obs_longitude,
freq=frequencies,
h="mushtak",
tau=0.0 # Impulsive excitation (Dirac delta)
)
# Access fields as attributes or unpack
print(spectrum.freq)
print(spectrum.E_Z)
print(spectrum.B_NS)
print(spectrum.B_EW)
# Or unpack directly:
E_Z, B_NS, B_EW = spectrum
2. Fast Exact Hypergeometric Model (forward_hyper)
# Exact closed-form solution via Gauss hypergeometric functions (Prácser et al., 2021)
spec_exact = sp.forward_hyper(
s_lat=source_latitudes,
s_lon=source_longitudes,
s_int=source_intensities,
m_lat=obs_latitude,
m_lon=obs_longitude,
freq=frequencies,
)
3. Source at the North Pole (forward_tdte_pole / forward_hyper_pole)
# Observer at colatitude theta = 42.4 degrees
spec_pole = sp.forward_tdte_pole(
theta=42.4,
s_int=1.0e5,
freq=frequencies,
)
# Note: B_NS is identically 0 by rotational symmetry
4. Lightning with Continuing Current (tau > 0)
# Model lightning with a 20 ms decay time constant (Bozóki et al., 2025)
spec_cc = sp.forward_tdte(
s_lat=[0.0],
s_lon=[0.0],
s_int=[1.0e5],
m_lat=0.0,
m_lon=60.0,
freq=frequencies,
tau=0.020 # 20 ms
)
References & Citation
If you use schupy in your research, please cite:
@article{bozoki2019schupy,
title = {Modeling Schumann resonances with schupy},
author = {Boz{'o}ki, Tam{'a}s and Pr{'a}cser, Ern{\H{o}} and S{'a}tori, Gabriella and D{'a}lya, Gergely and Kap{'a}s, Korn{'e}l and Tak{'a}tsy, J{'a}nos},
journal = {Journal of Atmospheric and Solar-Terrestrial Physics},
volume = {196},
pages = {105144},
year = {2019},
doi = {10.1016/j.jastp.2019.105144}
}
Additional foundational literature implemented in schupy:
- Bozóki, T. et al. (2025): Modeling the Global Electromagnetic Resonance Field Produced by Lightning Discharges With a Continuing Current, J. Geophys. Res. Atmos., 130, e2025JD043989.
- Prácser, E. et al. (2021): Two Approaches for Modeling ELF Wave Propagation in the Earth-Ionosphere Cavity With Day-Night Asymmetry, IEEE Trans. Antennas Propag., 69(7), 4093-4099.
- Kulak, A., & Mlynarczyk, J. (2013): ELF Propagation Parameters for the Ground-Ionosphere Waveguide With Finite Ground Conductivity, IEEE Trans. Antennas Propag., 61(4), 2269-2275.
- Mushtak, V. C., & Williams, E. R. (2002): ELF propagation parameters for uniform models of the Earth-ionosphere waveguide, J. Atmos. Sol.-Terr. Phys., 64, 1989-2001.
Release files for schupy 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| schupy-2.0.1.tar.gz | 15.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| schupy-2.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.1 kB
Release files / schupy-2.0.1.tar.gz
| Download URL | schupy-2.0.1.tar.gz |
|---|---|
| Size | 15.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7d5c4a8569d8ec682c0b4579ed5e5b3c139a9fa09518f7493e111374f208a78c
|
|
BLAKE2b-256 checksum How to use checksums |
6efb24eca109537a7a5879a9a5702cf7792cec3cab2612b2a379ef518e5e6139
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|
Release files / schupy-2.0.1-py3-none-any.whl
| Download URL | schupy-2.0.1-py3-none-any.whl |
|---|---|
| Size | 15.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c95f4f44d90e24241cfd4996405a7d17ba7699733cb457b867cf7deea616b88
|
|
BLAKE2b-256 checksum How to use checksums |
08097bcb75082537a12629e6fb036bb4f4f27c5aae46e248318f304ad91f5ba7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|