Skip to main content

JAX implementation of the virtual casing principle with high-order quadrature

Project description

CI CI-Large Coverage PyPI Python License

virtual_casing_jax

virtual_casing_jax is a JAX implementation of the virtual casing principle for computing magnetic-field contributions from plasma currents using high-order singular quadrature. It is based on the C++ reference implementation in hiddenSymmetries/virtual-casing and on the SIMSOPT virtual-casing interface in hiddenSymmetries/simsopt.

Documentation is available at virtual-casing-jax.readthedocs.io.

Installation

Install the latest release from PyPI:

pip install virtual-casing-jax

Or install from a local source checkout:

git clone https://github.com/uwplasma/virtual_casing_jax.git
cd virtual_casing_jax
pip install -e .

Basic Usage

The SIMSOPT-compatible wrapper can be used as a drop-in virtual-casing calculation when SIMSOPT is installed:

from virtual_casing_jax import VirtualCasing

vc = VirtualCasing.from_vmec(
    "wout_example.nc",
    src_nphi=32,
    trgt_nphi=32,
    trgt_ntheta=32,
    filename="auto",
)

B_external_normal = vc.B_external_normal

For lower-level JAX workflows, use VirtualCasingJAX directly after preparing surface coordinates and magnetic-field arrays:

from virtual_casing_jax import VirtualCasingJAX

vc_jax = VirtualCasingJAX()
vc_jax.setup(digits, nfp, stellsym, Nt, Np, gamma, Nt, Np, Nt, Np)
B_external = vc_jax.compute_external_B(B_total)

Performance features:

  • Source/target tiling with auto-tuned chunk sizes.
  • Rematerialization hooks for GradB singular correction.
  • Optional target-scan mode to reduce GradB peak memory (scan_targets).
  • Mixed-precision POU/patch tables with float64 outputs.
  • Bundled Quas3/LHD/W7X geometry assets (converted from SCTL .mat).

SIMSOPT compatibility: The package ships a SIMSOPT-compatible VirtualCasing class that mirrors simsopt.mhd.virtual_casing.VirtualCasing while using the JAX backend. Import it as from virtual_casing_jax import VirtualCasing. See docs/using_simsopt.rst and the examples in examples/ for full scripts.

Bundled test data: To make the SIMSOPT-style examples and tests self-contained, the repo includes a small subset of SIMSOPT test assets under tests/test_files/ and the VMEC input examples/inputs/input.QH_finitebeta. These files originated from the SIMSOPT repository (SIMSOPT) and are used only for validation and example runs.

Docs

Sphinx documentation lives in docs/ and is configured for ReadTheDocs. It includes the equations, numerics, implementation details, and validation strategy. Run locally:

pip install -r docs/requirements.txt
sphinx-build -b html docs docs/_build/html

Profiling

Use the profiling harness to capture JAX traces and inspect performance:

JAX_ENABLE_X64=1 python tools/profile_vc.py --case case_vc --op B --jit \
  --repeat 5 --trace-dir /tmp/vc_trace

tensorboard --logdir /tmp/vc_trace

For the new tuning knobs:

JAX_ENABLE_X64=1 XLA_FLAGS="--xla_dump_to=/tmp/vc_xla --xla_dump_hlo_as_text" \
  python tools/profile_vc.py --case case_vc_large --op GradB --jit \
  --chunk-size auto --target-chunk-size auto --pou-dtype float32 --patch-dtype float32 \
  --interp-block-size auto --remat --donate \
  --repeat 2 --trace-dir /tmp/vc_trace_case_vc_large_GradB

tensorboard --logdir /tmp/vc_trace_case_vc_large_GradB

This writes JAX traces under /tmp/vc_trace_* and HLO dumps under /tmp/vc_xla_*. See docs/performance.rst for detailed interpretation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

virtual_casing_jax-0.0.2.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

virtual_casing_jax-0.0.2-py3-none-any.whl (1.6 MB view details)

Uploaded Python 3

File details

Details for the file virtual_casing_jax-0.0.2.tar.gz.

File metadata

  • Download URL: virtual_casing_jax-0.0.2.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for virtual_casing_jax-0.0.2.tar.gz
Algorithm Hash digest
SHA256 f1cfda68df3569d36131cfd0652ded7fa25a6e9e9edd5657fbef7a69fd0d295c
MD5 3d61c2e14a8c8f682d555409a1120cf6
BLAKE2b-256 87fe5ac7a4958e800c359606722e802be3e6cdce83b42e3d9e6b54c7b3647dcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for virtual_casing_jax-0.0.2.tar.gz:

Publisher: publish.yml on uwplasma/virtual_casing_jax

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file virtual_casing_jax-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for virtual_casing_jax-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 89ebcc89d078aa238ea71ec4f7c54b222ceb5c00353b9939de59c0e0dfc2d321
MD5 18d7ee29e3d67b5e39f20ff261008d4b
BLAKE2b-256 346e1374f200d2959eeebf0302b15704ed791186da2be387a8bfb3029a7e4ac6

See more details on using hashes here.

Provenance

The following attestation bundles were made for virtual_casing_jax-0.0.2-py3-none-any.whl:

Publisher: publish.yml on uwplasma/virtual_casing_jax

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page