All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
StateDensity{T}
type which combinesEnergyOccupancy{T}
with a density of states value at the energy provided.ByCoordinate
traits:ByCartesianCoordinate
andByFractionalCoordinate
.ShiftVector{S,D,T} <: AbstractCoordinateVector{S,ByFractionalCoordinate,D,T}
, representing a potentially weighted vector which shifts a data grid.require_same_space
,require_dual_space
, andrequire_same_coordinate
functions for checking whetherBySpace
andByCoordinate
traits are compatible in an operation.AbstractCoordinateVector{S<:Electrum.BySpace,C<:Electrum.ByCoordinate,D,T}
type for coordinate vectors in real or reciprocal space with either fractional or Cartesian coordinates.CoordinateVector{S,C,D,T}
and aliases:RealCartesianCoordinate
RealFractionalCoordinate
ReciprocalCartesianCoordinate
ReciprocalFractionalCoordinate
- [BREAKING]
KPoint{D}
is nowKPoint{D,T}
, equivalent toShiftVector{ByReciprocalSpace,D,T}
. BySpace
traits are now part of the public API.BySpace{D}
and its subtypes have lost their dimension type parameter.
- [BREAKING]
AbstractBasis
type alias forLatticeBasis{<:BySpace}
(which did not work anyway) Electrum.DataSpace(x)
has been replaced withBySpace(x)
.
- Ambiguity tests exclude
Base.Sort.defalg
on all versions due to a potential false positive. writeXYZ()
methods are simplified and better documented.
writeXYZ()
no longer references removed functions from prerelease versions.
0.1.17: 2023-11-29
This is the final feature release in the 0.1 series. All future 0.1 series releases will only include deprecations and bug fixes.
eachvertex
iterator for the vertices of the parallelepiped representation of a unit cell.SpinBivector
type representing spin direction in a dimension-agnostic way.dual(b::LatticeBasis)
returns the dual lattice associated withb
.dualbasis(x)
returns the dual lattice basis vectors associated withx
.
- The Types section of the documentation has been split up into separate sections for lattice basis vectors, atoms and crystal representations, and data grids.
KPoint{D}
is nowKPoint{D,T}
, which is an alias forShiftVector{ByReciprocalSpace,D,T}
.
- The default definition of
Electrum.DataSpace(x)
is nowDataSpace(typeof(x))
, notDataSpace(typeof(basis(x)))
. inv(b::LatticeBasis)
returns the matrix inverse ofb
, not the dual lattice basis.Tuple
constructors forStaticMatrix
subtypes are properly prefixed.
0.1.16: 2023-11-16
[compat]
bounds are now provided for testing dependencies (Aqua.jl, Test.jl, TOML.jl).- New
Multiplicity{M}
type for valid spin values associated with multiplicityM
.
- Increased
[compat]
minimum version of NormalForms.jl to 0.1.7 Electrum.LatticeBasis{S,D,T}
now has the type boundS<:Electrum.BySpace
instead of the less conciseUnion{Electrum.ByRealSpace,Electrum.ByReciprocalSpace}
.Base.lstrip
andBase.rstrip
are have temporarily been removed from method ambiguity testing (see this PR for InlineStrings.jl)
- Generic methods for
energies
andoccupancies
call theEnergiesOccupancies
constructor instead ofEnergyOccupancy
.
0.1.15 - 2023-11-13
- New
EnergyOccupancy{T<:Real}
data structure for energy/occupancy pairs. - New
EnergiesOccupancies{T,N}
type alias forArray{EnergyOccupancy{T},N}
. A constructor for this type should be defined for all data structures containing energies and occupancies. - New functions:
energy
,occupancy
,energies
,occupancies
EnergiesOccupancies
constructor forPlanewaveWavefunction
- New
nonzero_g_indices
andnonzero_g_vectors
functions forPlanewaveWavefunction
min_energy
,max_energy
,min_occupancy
,max_occupancy
, andfermi
all have generic definitions based onAbstractArray{<:EnergyOccupancy}
.PlanewaveWavefunction
uses these generic definitions via the constructor.
- Missing export of
nspin
0.1.14: 2023-11-02
- New
RealBasis
/ReciprocalBasis
constructors forElectrum.ABINITHeader
. - New constructor for an empty
PlanewaveWavefunction
with knownKPointMesh
.
read_abinit_WFK
now correctly stores theKPointMesh
from the wavefunction file header.
0.1.13: 2023-10-31
The developers would like to wish you a happy Halloween!
readDOSCAR
,readPROCAR
, andget_fermi
now return energies in Hartree rather than eV.
0.1.12: 2023-10-30
- New
min_energy
andmax_energy
functions forPlanewaveWavefunction
. - New internal
Electrum.dimension
function, which returns the type parameter ofElectrum.DataSpace{D}
(usually a number). For objects and types with aElectrum.DataSpace
trait, this returns the associated dimension object. - Provided a fallback defintion for
Electrum.DataSpace(::Type{T}) where T
.
BySpace{D}
did not subtypeDataSpace{D}
.
0.1.11: 2023-10-22
- New dependency on InlineStrings.jl
NamedAtom
now uses theInlineString15
type instead of anNTuple{8,Char}
for thename
field. Atom labels of up to 15 Unicode characters are supported.name(a::NamedAtom)
returns aString
;a.name
returns anInlineStrings.InlineString15
, as doesgetfield(a, :name)
.
- Admonition boxes in documentation now render correctly.
0.1.10: 2023-10-19
- Support for POSCAR and CONTCAR files with Cartesian coordinates.
- All exported functions have docstrings, and those docstrings are included in the online documentation.
NamedAtom(::AbstractString)
now performs a more robust check for a valid atomic symbol. Strings such as"Cl2"
are checked from the start to the first non-letter character.
readPOSCAR()
andreadCONTCAR()
now throw errors if the coordinate specification is missing.- Consolidated docstrings for several closely related types and functions, including
readPOSCAR()
andreadCONTCAR()
,Electrum.DataGrid
and its aliases, andElectrum.LatticeBasis
and its aliases. basis(x)
performs a type assertion to ensure anElectrum.LatticeBasis
is returned.
0.1.9: 2023-07-13
- Constructor for
KPoint{D}
does not automatically truncate the coefficients: this should prevent bugs arising from imprecision in k-points with coefficients that are not exactly 0.5.
- Reading of WAVECAR files should now index correctly: this was broken due to automatic rounding.
0.1.8: 2023-07-13
- Import of abinit binary outputs have the correct basis vectors associated with the data
0.1.7: 2023-07-12
Electrum.BySpace{D}
as a supertype forByRealSpace{D}
andByReciprocalSpace{D}
AbstractBasis{D,T}
as a type alias forElectrum.LatticeBasis{<:Electrum.BySpace,D,T}
- Cartesian indexing for
DataGrid
skips out on unnecessary bounds checking (due to periodicity).
0.1.6: 2023-07-03
- Support for reading abinit 9.10.1 binary outputs
- Support for writing TOML files (optional thanks to Requires.jl dependency)
Electrum.get_abinit_version(::IO)
now strips spaces before constructing the version string
- Some abinit docstrings had incorrect function names/arguments
0.1.5: 2023-07-02
- When reading XSF files, the fractional coordinates are stored relative to the unit cell
- Unit conversions weren't implemented for reading/writing XSF files
0.1.4: 2023-06-28
The developers would like to wish you a happy Tau Day!
- Tests for XSF writing
- More outstanding bugs for XSF writing
0.1.3: 2023-06-27
- Reference to old field name for previous data grid type was corrected
- Added dependency on Requires.jl for optional features
0.1.2: 2023-06-26
partial_derivative()
,gradient()
, anddirectional_derivative()
functions for real space dataElectrum.SUnitVector{D,T}
data type for generating unit vectors. A unit vector of dimensionD
and typeT
can be constructed with the unit at indexi
withElectrum.SUnitVector{D,T}(i)
, providedoneunit(T)
is defined.
0.1.1 - 2023-06-21
- Unexported methods for reading anaddb inputs/outputs now have more standard signatures
voxelsize(::DataGrid)
now correctly uses the grid length, not the basis vector lengthlengths(::LatticeBasis)
now correctly uses a column iterator to return the length values
0.1.0 - 2023-05-25
Initial release of Electrum.jl