Change Log
View release history on PyPI, GitHub, or Zenodo.
Note
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
Changes
Fixed a bug in
Solution.screening_field_at_position()
(#106)
Version 0.10.1
Release date: 2023-09-08
Changes
Fixed a bug in
Polygon.resample()
(#105)
Version 0.10.0
Release date: 2023-08-03
Changes
Use matplotlib tri interpolators instead of scipy (#104)
Version 0.9.2
Release date: 2023-07-10
Changes
Version 0.9.1
Release date: 2023-05-17
Changes
Don’t build
MeshOperators
by default insuperscreen.Polygon.make_mesh()
(#101)
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.
Changes
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, thesuperscreen.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()
.
Reduced memory footprint and improved performance using numba JIT compiled functions.
Several costly numerical operations have been migrated from
numpy
/scipy
to customnumba
just-in-time (JIT) compiled functions. Thenumba
functions are automatically executed in parallel on multiple CPU cores and avoid the allocation of large intermediate arrays, which can cause significant memory usage innumpy
/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 fromfloat64
tofloat32
.
The linear system describing the magnetic response of each film is now LU factored only once per call to
superscreen.solve()
.
This dramatically speeds up self-consistent simulations involving multiple films and makes the solver code more modular.
The portions of the model that are independent of the applied field can be pre-factorized using
superscreen.factorize_model()
, which returns asuperscreen.FactorizedModel
object that can be saved for future use. Asuperscreen.FactorizedModel
instance can be passed directly tosuperscreen.solve()
.
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 tosuperscreen.solve()
has been removed, along with the (optional) dependency onjax
.
superscreen.solve_many()
has been removed, along with the dependency onray
.
All IO operations, including writing
superscreen.Device
andsuperscreen.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.
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
Changes
Version 0.8.1
Release date: 2023-04-03
Changes
Evaluating the magnetic field within a
Layer
is no longer supported insuperscreen.Solution.field_at_position()
and must be done usingsuperscreen.Solution.interp_fields()
(#91).
Version 0.8.0
Release date: 2022-12-15
Changes
Removed dependency on
optimesh
, as it is not longer open source.superscreen.Device.make_mesh()
andsuperscreen.Polygon.make_mesh()
now take an integer argument,smooth
, which specifies the number of Laplacian mesh smoothing iterations to perform.
Version 0.7.0
Release date: 2022-08-29
Changes
Added support for GPU-acceleration in
superscreen.solve()
, with JAX as an optional dependency (#75).Added
superscreen.TransportDevice
, a subclass ofsuperscreen.Device
on which one can define source/drain terminals for current biasing (#78).Updated
superscreen.Solution.field_at_position()
to use the 2D Biot-Savart directly, viasuperscreen.sources.biot_savart_2d()
(#78).Updated
superscreen.fluxoid.find_fluxoid_solution()
to use the mutual inductance matrix to solve for fluxoid states, which is much more efficient than the previous least-squares method, especially for multiple holes (#78).
Version 0.6.1
Release date: 2022-07-02
Changes
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.)
Changes
Added
Solution.vector_potential_at_position()
(#73).
Version 0.5.0
Release date: 2022-04-13
Changes
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
Changes
Remove support for Python 3.6, which has reached end-of-life (#69).
Version 0.3.0
Release date: 2022-01-27
Changes
Use
__slots__
forLayers
,Polygons
, andParameters
(#57).Add affine transformations for
Polygon
andDevice
(#59, #60).Allow
Parameters
to return scalar or vector quantities (# 61).Allow explicitly setting
num_cpus
insolve_many()
(#62).Add
SheetCurrentField
source and move mesh generation into its own module to enablePolygon.make_mesh()
(#65).Use
scipy.linalg.lu_solve()
insuperscreen.solve()
instead ofnumpy.linalg.inv()
(#67).
Version 0.2.0 (initial development release)
Release date: 2021-11-28