Geopack-2008 — GEOPACK-2008 geomagnetic field model for Python
Geopack-2008 (imported as geopack) is a high-performance, self-contained, zero-dependency Python package for the
GEOPACK-2008 geomagnetic field model: the International Geomagnetic
Reference Field (IGRF), the dipole field, the Tsyganenko (1989)
external field model (T89), the Shue et al. (1998) and Tsyganenko (1996)
magnetopause models, the Sun position computation, and the standard
solar-terrestrial coordinate transforms (GEO, GSW, GSE, SM, MAG, GEI, GSM).
It is a Python binding over a C# port of GEOPACK-2008
compiled ahead-of-time with NativeAOT into a shared library (geopack.dylib /
geopack.so / geopack.dll), loaded through ctypes from the Python standard
library. No .NET runtime is required at runtime, and there are no Python
dependencies (no NumPy/SciPy).
- High performance: native compiled code with SIMD vectorization and other optimized mathematical operations
- Double precision: accuracy matches the original Fortran code to 12–13 decimal digits
- Standard library only — no third-party runtime dependencies
- Thread-safe immutable computation contexts
- Platform wheels for Linux (x64/arm64), Windows (x64/arm64) and macOS (arm64)
Install
pip install geopack-2008
Pre-built wheels are published to PyPI for Linux (x64/arm64, manylinux),
Windows (x64/arm64) and macOS (arm64) — no .NET SDK or C toolchain required.
To build the wheel from source (e.g. for another platform or during
development), see BUILDING.md.
Usage
import geopack
ctx = geopack.recalc(1997, 12, 16, 21, 0, 0, vx=-304, vy=13.78, vz=4)
b = ctx.igrf_gsw(1, 1, 1) # (bx, by, bz) nT in GSW
r = ctx.gsw_to_geo(1, 1, 1) # (x, y, z) Earth radii in GEO
ctx.close()
# A datetime works too, and contexts are context managers:
with geopack.recalc(datetime(1997, 12, 16, 21, 0), vx=-304, vy=13.78, vz=4) as ctx:
b = ctx.igrf_gsw(1, 1, 1)
s = geopack.sun(1997, 12, 16, 21, 0, 0) # (gst, slong, srasn, sdec), radians
mp = geopack.shu_mgnp(xn_pd=2.0, vel=400.0, bz_imf=0.0, x=10, y=0, z=0)
print(mp.boundary, mp.dist, mp.position) # Vector3, float, MagnetopausePosition
# Tsyganenko (1989) external field — input GSW, output GSM (nT):
b = geopack.t89(iopt=3, psi=ctx.psi, x=-6.6, y=0, z=0)
b = ctx.t89(iopt=3, x=-6.6, y=0, z=0) # psi defaults to ctx.psi
A runnable example with all of the above (sun position, IGRF/dipole fields,
coordinate transforms, magnetopause models) is in
python/example.py:
python3 python/example.py
Implemented models and coordinate systems
| Category | Model | Python API |
|---|---|---|
| Internal field | IGRF (geomagnetic main field) | Context.igrf_gsw, Context.igrf_geo |
| Internal field | Dipole | Context.dip |
| External field | Tsyganenko (1989) — T89 | Context.t89, geopack.t89 |
| Magnetopause | Shue et al. (1998) | geopack.shu_mgnp |
| Magnetopause | Tsyganenko (1996) | geopack.t96_mgnp |
| Sun position | Greenwich sidereal time, solar ephemeris | geopack.sun |
Supported coordinate systems (see CoordinateSystem): GEO (geographic),
GSW (geocentric solar wind), GSE (geocentric solar ecliptic),
SM (solar magnetic), MAG (geomagnetic), GEI (geocentric solar
equatorial inertial) and GSM (geocentric solar magnetospheric).
API
All coordinates are in Earth radii; magnetic fields are in nT; angles are in radians; solar wind velocity is in km/s.
recalc(date_or_year, month=None, day=None, hour=0, minute=0, second=0, vx=-400, vy=0, vz=0) -> ContextContextmethods:- fields:
igrf_gsw(x,y,z),dip(x,y,z),igrf_geo(r,theta,phi),t89(iopt,x,y,z, psi=None), propertypsi(dipole tilt, radians) - transforms:
gsw_to_gse,gse_to_gsw,geo_to_mag,mag_to_geo,gei_to_geo,geo_to_gei,mag_to_sm,sm_to_mag,sm_to_gsw,gsw_to_sm,geo_to_gsw,gsw_to_geo— each(x,y,z) -> (x,y,z) - lifecycle:
close(), context manager
- fields:
sun(...) -> Sun(gst, slong, srasn, sdec)— no context neededshu_mgnp(xn_pd, vel, bz_imf, x, y, z)andt96_mgnp(xn_pd, vel, x, y, z)returnMagnetopauseResult(boundary, dist, position)— no context neededt89(iopt, psi, x, y, z, parmod=None) -> Vector3— Tsyganenko (1989) external field, input GSW, output GSM (nT);parmodis a dummy accepted for parity with the .NETIT89.Calculatecontract (unused) — no context needed
GEOPACK_LIBRARY environment variable points the loader at a specific library
path if the packaged one is not present.
How to Cite
If you use this software in your research, please cite it — see the
How to Cite
section of the main repository README (APA and BibTeX entries with a Zenodo DOI).
References
The implementation is based on the GEOPACK-2008 library and the following scientific works:
-
Tsyganenko, N. A. (1989). A magnetospheric magnetic field model with a warped tail current sheet. Planetary and Space Science, 37(1), 5–20. https://doi.org/10.1016/0032-0633(89)90066-4
-
Tsyganenko, N. A. (1996). Effects of the solar wind conditions on the global magnetospheric configuration as deduced from data-based field models. ESA SP-389, 181–185.
-
Shue, J.-H., et al. (1998). Magnetopause location under extreme solar wind conditions. Journal of Geophysical Research, 103(A8), 17691–17700. https://doi.org/10.1029/98JA01103
-
Hapgood, M. A. (1992). Space physics coordinate transformations: A user guide. Planetary and Space Science, 40(5), 711–717. https://doi.org/10.1016/0032-0633(92)90012-D
-
Tsyganenko, N. A. (2002). A model of the near magnetosphere with a dawn-dusk asymmetry 1. Mathematical structure. Journal of Geophysical Research, 107(A8). https://doi.org/10.1029/2001JA000219
-
Tsyganenko, N. A., & Sitnov, M. I. (2005). Modeling the dynamics of the inner magnetosphere during strong geomagnetic storms. Journal of Geophysical Research: Space Physics, 110(A3), A03208. https://doi.org/10.1029/2004JA010798
Metadata
Release files for Geopack-2008 2.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| geopack_2008-2.4.0-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| geopack_2008-2.4.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| geopack_2008-2.4.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| geopack_2008-2.4.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl | Python 3 | none | Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 | Details |
| geopack_2008-2.4.0-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Total release size: 3.5 MB
Release files / geopack_2008-2.4.0-py3-none-win_arm64.whl
| Download URL | geopack_2008-2.4.0-py3-none-win_arm64.whl |
|---|---|
| Size | 693.0 kB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
91e76bdf319518a2ccb4fd1a8aae0a54f48f5497e925fd2b9872e22ad65d8bdc
|
|
BLAKE2b-256 checksum How to use checksums |
2c1caf10885d4bdd3035c17bb16b78f7c00bc8666393226cfafbf59e175d2b03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / geopack_2008-2.4.0-py3-none-win_amd64.whl
| Download URL | geopack_2008-2.4.0-py3-none-win_amd64.whl |
|---|---|
| Size | 722.4 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4f9d9bc3df72b41f3c898dadbc43011813569794710e0c1c3601fdd7a6318245
|
|
BLAKE2b-256 checksum How to use checksums |
4b3eab9fb24b38f021346a21557b69b00c097462f8022b16ad609f918a1bf562
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / geopack_2008-2.4.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | geopack_2008-2.4.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 732.2 kB |
| Tags | Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
712dbd5b267cba3444e2210b723529ad6ee013e2b5842ba027fc8e9c84d80141
|
|
BLAKE2b-256 checksum How to use checksums |
d7f3dcb456402bb77302269b30258914706c7259b8e021ec851282b8161ce6d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / geopack_2008-2.4.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
| Download URL | geopack_2008-2.4.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 706.0 kB |
| Tags | Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
367a95e7a2145079d49f6d13c622e75a0f7b02d0e3ce3c84dc6c3cd23fb89c54
|
|
BLAKE2b-256 checksum How to use checksums |
7bb88c5f9f00424e2787957094641264c0c4a8b1c735dd4f3080a46b4b545be1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / geopack_2008-2.4.0-py3-none-macosx_14_0_arm64.whl
| Download URL | geopack_2008-2.4.0-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 694.1 kB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
257b6174395485c34c034778746a8342331f5edbc8457972b28943f0e10b542a
|
|
BLAKE2b-256 checksum How to use checksums |
e363743221550179aa0234563ec3b0ab0574b1d7db0632566400069cff50732f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency log