Change Log

View release history on PyPI, GitHub, or Zenodo.


SuperScreen uses semantic versioning, with version numbers specified as MAJOR.MINOR.PATCH. In particular, note that:

  • Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

  • Version 1.0.0 defines the public API.

Version 0.10.2

Release date: 2023-09-19


  • Fixed a bug in Solution.screening_field_at_position() (#106)

Version 0.10.1

Release date: 2023-09-08


  • Fixed a bug in Polygon.resample() (#105)

Version 0.10.0

Release date: 2023-08-03


  • Use matplotlib tri interpolators instead of scipy (#104)

Version 0.9.2

Release date: 2023-07-10


  • Constrain the stream function on mesh boundary (#102)

  • Use less memory in gradient_vertices (#103)

Version 0.9.1

Release date: 2023-05-17


Version 0.9.0

Release date: 2023-05-16

SuperScreen v0.9.0 is a significant update intended to improve the CPU/memory efficiency and ergonomics of the package. The major upgrades are contained in the following Pull Requests: #96, #99.


  1. Rather than creating a single mesh containing all films in a device, each film now gets its own mesh and finite element operators.

  • This approach avoids meshing large vacuum regions between films, which is costly.

  • This approach also means that films with transport terminals can exist in the same superscreen.Device as films without terminals. As a result, the superscreen.TransportDevice class is no longer needed and has been removed.

  • It is no longer necessary to explicitly define a bounding box around the film(s) being modeled. A suitable bounding box is automatically generated for each film within superscreen.Device.make_mesh().

  1. Reduced memory footprint and improved performance using numba JIT compiled functions.

  • Several costly numerical operations have been migrated from numpy/scipy to custom numba just-in-time (JIT) compiled functions. The numba functions are automatically executed in parallel on multiple CPU cores and avoid the allocation of large intermediate arrays, which can cause significant memory usage in numpy/scipy.

  • For devices with multiple films, the inductive coupling between films is now calculated using the supercurrent density and a numba implementation of the Biot-Savart law, rather than the stream function and Ampere’s law. The new approach is both more robust for closely-stacked films and avoids storage of large temporary arrays.

  • The default for superscreen.Device.solve_dtype() has been changed from float64 to float32.

  1. The linear system describing the magnetic response of each film is now LU factored only once per call to superscreen.solve().

  1. As a result of the above optimizations, GPU support using jax and parallel processing with shared memory using ray no longer seem to add much value to the package, so they have been removed.

  • The gpu argument to superscreen.solve() has been removed, along with the (optional) dependency on jax.

  • superscreen.solve_many() has been removed, along with the dependency on ray.

  1. All IO operations, including writing superscreen.Device and superscreen.Solution objects to disk, are now performed using the HDF5 file format via h5py.

  • All objects within superscreen that can be serialized to disk now have .to_hdf5() and .from_hdf5() methods.

  1. SuperScreen has dropped support for Python 3.7, which will reach end-of-life in June 2023.

  • Added support for Python 3.11, which was being blocked by the dependency on ray.

Version 0.8.2

Release date: 2023-05-06


  • Added Python 3.10 support (#93)

  • Removed cdist_batched(), which was added in v0.8.1 and had a bug (#95)

Version 0.8.1

Release date: 2023-04-03


Version 0.8.0

Release date: 2022-12-15


Version 0.7.0

Release date: 2022-08-29


Version 0.6.1

Release date: 2022-07-02


  • Fixed an off-by-one error in the \(k\)-space coordinates used to calculate the field from a Pearl vortex in superscreen.sources.pearl_vortex() (#74).

Version 0.6.0

Release date: 2022-05-20.

Note: On GitHub, this version was accidentally tagged as v0.6.6 rather than v0.6.0 (see here.)


  • Added Solution.vector_potential_at_position() (#73).

Version 0.5.0

Release date: 2022-04-13


  • Added \(\vec{\nabla}\Lambda(x, y)\) term and clarified documentation about the model in the context of inhomogeneous films (#72).

Version 0.4.0

Release date: 2022-03-15


Version 0.3.0

Release date: 2022-01-27


  • Use __slots__ for Layers, Polygons, and Parameters (#57).

  • Add affine transformations for Polygon and Device (#59, #60).

  • Allow Parameters to return scalar or vector quantities (# 61).

  • Allow explicitly setting num_cpus in solve_many() (#62).

  • Add SheetCurrentField source and move mesh generation into its own module to enable Polygon.make_mesh() (#65).

  • Use scipy.linalg.lu_solve() in superscreen.solve() instead of numpy.linalg.inv() (#67).

Version 0.2.0 (initial development release)

Release date: 2021-11-28