Skip to main content

Geopack-2008 — GEOPACK-2008 geomagnetic field model for Python

Python Python Package License: GPL v3+ GitHub Stars PyPI

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) -> Context
  • Context methods:
    • fields: igrf_gsw(x,y,z), dip(x,y,z), igrf_geo(r,theta,phi), t89(iopt,x,y,z, psi=None), property psi (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
  • sun(...) -> Sun(gst, slong, srasn, sdec) — no context needed
  • shu_mgnp(xn_pd, vel, bz_imf, x, y, z) and t96_mgnp(xn_pd, vel, x, y, z) return MagnetopauseResult(boundary, dist, position) — no context needed
  • t89(iopt, psi, x, y, z, parmod=None) -> Vector3 — Tsyganenko (1989) external field, input GSW, output GSM (nT); parmod is a dummy accepted for parity with the .NET IT89.Calculate contract (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:

  1. 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

  2. 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.

  3. 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

  4. 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

  5. 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

  6. 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.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for Geopack-2008 2.3.1
File
geopack_2008-2.3.1-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details
geopack_2008-2.3.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
geopack_2008-2.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
geopack_2008-2.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
geopack_2008-2.3.1-py3-none-macosx_12_0_arm64.whl Python 3 none macOS 12.0+ ARM64 Details

Total release size: 3.5 MB

Release files / geopack_2008-2.3.1-py3-none-win_arm64.whl

Download URL geopack_2008-2.3.1-py3-none-win_arm64.whl
Size 665.1 kB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
c8bfcf16314f6f347ae3028fc938cd4f6f3be44a383a1c2403346490238d456a
BLAKE2b-256 checksum
How to use checksums
04d8d35607bb8ac9779d6dea22db38f0f36ab041885c594e2c315dc21bc340d4
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 Aug 24, 2026.

Transparency log

Release files / geopack_2008-2.3.1-py3-none-win_amd64.whl

Download URL geopack_2008-2.3.1-py3-none-win_amd64.whl
Size 711.5 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
9188494aefc451d2bce10e3d8a0af89892d7b7c0ecdf84cd8a044c2ab7faf153
BLAKE2b-256 checksum
How to use checksums
cd3d681eaeec2cc324c467a068121e1d5337ee80928df9494be401430fba7164
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 Aug 24, 2026.

Transparency log

Release files / geopack_2008-2.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl

Download URL geopack_2008-2.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Size 737.8 kB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
9670e56e467b1a8bf1310482e1e629b4a0d2bd3706e670d149e2de8e0926a9ad
BLAKE2b-256 checksum
How to use checksums
f22eb3a64523f94869c98725e8c570885ef315c2dfd391235bfd8811dd3c0066
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 Aug 24, 2026.

Transparency log

Release files / geopack_2008-2.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl

Download URL geopack_2008-2.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl
Size 698.7 kB
Tags Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
6c600e7bcba9edac7c9cb0e11b518d54bb775460c4159f64a80fdc7fd200426a
BLAKE2b-256 checksum
How to use checksums
b58bbb4df38b1b436a46aa30d23395763a358eb387bf6087ad149cddf0e9150d
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 Aug 24, 2026.

Transparency log

Release files / geopack_2008-2.3.1-py3-none-macosx_12_0_arm64.whl

Download URL geopack_2008-2.3.1-py3-none-macosx_12_0_arm64.whl
Size 678.9 kB
Tags Python 3 macOS 12.0+ ARM64
SHA-256 checksum
How to use checksums
68cc2efd2172f1fd5bd3328320b69ac7bf00a2416f9d6b6e81a851de6bf17772
BLAKE2b-256 checksum
How to use checksums
2dc4ead221756610282a529a11dacf7026da177a3a2289873ccf36ca214396af
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 Aug 24, 2026.

Transparency log

Release history Release notifications | RSS feed

2.4.0

5 release files

This release

2.3.1 This release

5 release files

2.3.0

5 release files

2.2.5

5 release files

2.2.3

5 release files

2.2.2

5 release files

2.2.1

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page