2.42 (11/3/25)
----

Read .cell files whose first character is 0x0a (newline)
Add --rhs option
Ensure axes form right hand set for Vasp output
Make _EIG read obey -b=
Read kgridMonkhorstPack [ list ] from fdf file
Read number of electrons from QE XML file
Support reading Castep .phonon file
Fix bug reading QE .in file with ibrav=-13
Add Bloechl tetragonal interpolation for DoS
Add --bravais for identifying Bravais lattices
Add --bands_gnu and --bands_eps
Add --title
Add --dos_gnu, --dos_eps and --dos_raw
Fix k-point initialisation in MP grid expansion
Fix double free in super.c
Support VASP ELFCAR files
Support Abinit _ELF* files
Fix bug in POSCAR reading if scale!=1 and Cartesian atomic coords used
Make CASTEP and Siesta band_read obey -b=
Support LABEL= in .cell files

2.41b (27/1/24)
-----

Changes to QE xml reading to support QE 7.x
Fix possible uninitialised variable in abinit_in_read.c

2.41a (28/12/23)
-----

Fix bug reading angdeg in Abinit .abi input
Add support for nm and meV in .abi input
Minor changes to -vv output reading wavefunctions from .check files

2.41 (20/9/23)
----

Add -F for calculating fields
Add --div operator
Add FFT grid and point interpolation
Support vector spins in den_fmt files
Also read FORCE_STRESS file if reading Siesta .XV file
Support vector spins in Siesta .RHO file. Previously rho misread if nspins=4
INCOMPATIBLE CHANGE: weighted/accumulated radial plots include c axis length
Rewrite Abinit DEN reader, and support vector spins therein
Rewrite accumulation/integration to be more accurate
Support vector spins reading QE .in and XML files, writing QE .in files
Add writing of magmon in Vasp INCAR format
Rewrite QE charge-density.dat reader, and support vector spins therein
Add --vec2force
Support vector spins reading and writing cell files
Add --cell_abs_abc as synonym for --cell_abc_abs
Add mod operator
Add --widths, and list bands highest energy first
Fix bug reading Fortran-order npy files introduced at 2.40d
Add grad operator
Improvements to cube reader
Add support for writing multiple components to npy and cube formats
Add reading vector spin density from check file
Add Jmol output for Brillouin zones
inline -> static inline in interpolate.c, to keep compilers happy at -O0
Add first and irreducible Brillouin zone finder, and VMD output for same

2.40e (8/2/23)
-----

Bug fix: identity was being listed twice in --cif output
Suppress some printing of -0.0 (rather than 0.0) in sym ops in cell files
Add bare Coulomb potential with -E=0
Rewrite trilinear interpolation
Add tricubic interpolation
Tidy linespec parser -- more acceptance of 0 for number of points
Add molfile reader and writer

2.40d (23/12/22)
-----

Various fixes after clang static analysis
Change order of flag processing to put cell transforms earlier
Cease using "fortran" as variable name -- C99 says optional reserved word
Accept fractions in -x=  and -P= arguments
Removed some 2GB limits due to fseek(file, int, ...) and similar
Drastically reduce number of fseeks in check_read.c to improve performance
Same for Abinit wavefunction reader
Add weighting and accumulating to radial averages
Add spherical averages to 1D plots (-P=C:R)
Remove underscores from key titles in gnuplot output
Fix rare segfault caused by init_sym
Retain old symops with -a
Remove unused fix parameter from cart2abc()
Again fix ident_sym's treatment of screw axes
Retain old symops with --primitive_nr and --std
Update Makefile.spglib for spglib 2.x
Add sym op count to cell file as comment with -v
Fix bugs in sym op conversion after -x
Correct sym ops after shift with -m
Add --nokinv
Permit tabs in a Shelx SFAC line

2.40c (19/2/22)
-----

Ensure "x,y,z" is first symop in CIF file, and is written precisely thus
Fix missing rotation when writing pdbx file when unit cell needs realigning
Fix bug in processing of vkloff when reading Elk input

2.40b (27/1/22)
-----

Report quadrupole moment with -D=
Support writing VASP spinor wavefunctions to GCOEFF.txt
Report screw axes correctly
Report -2 axes as mirror and glide planes
Transpose symmetry matrices in check_read and cell_read/write
Better parsing of comments in .cell files
Add --sym_list option
Basic parsing of // in Abinit .in files
Fix bugs in reading of symmetry operations in Abinit .in files
Fix bugs in reading of symmetry operations in QE .xml files
Write symmetry operations to Abinit .in files
Add --abinit8 output type
Improve precision when writing fdf files
Improve parsing of include files in fdf files
Read Siesta EIG and KP files
Fix uninitialised data in xyz_read.c

2.40 (26/3/21)
----

Support reading multiple files, and differencing etc.
Improve .dx writer to make more VMD compatible
Add .dx and .npy readers
Accept -i=axbxc as identical to -i=a,b,c
Support BS kpoints in .cell files
Add --frame=X for extracting frames from timeseries
Make -u cause forces in .xsf files to be written in Ha/A, not eV/A
Follow QE 6.6's convention that forces in .xml are in Ha/B
Ignore forces from QE output <6.6
Support output file of - meaning stdout
Add ibrav=-3 and -13 to QE .in input
Document -q[abc] option for post hoc energy corrections for charged slabs
Fix bug with kspace sym op generation triggered if no real space inversion op
Add several missing checks of malloc()'s return value

2.35a (23/12/2020)
-----

Adjust .npy writing to work with numpy on Ubuntu 20.04 as well as 18.04
Fix missing _ in SPECIES_POT in .check to .cell conversion


2.35 (7/12/2020)
----

Support reading Castep .elf electron localisation function
Support reading Castep .elf_fmt
Support two spins in reading den_fmt / pot_fmt / elf_fmt
Fix compiling without spglib
Minor improvements to progress messages when reading bands
Do not scale data when writing den_fmt if -R given
Add "-w=k" option for weighting bands by kpoint weight only
Fix error in -r .cif generation
Fix error when listing sym ops in cell_abc output
Add --snap_tr option
Fix bug in reading of symmetry operations from Abinit input
Add Abinit _EIG reader
Add recognition of Abinit _DDB file
Improve abinit .in reader
Add -m=(x,y,z) for fractional shifts in relative units
Peform -m shifts earlier in processing sequence
Let -O -W scale occupancies by kpoint weight
Add --gap option for printing bandgap
Add --efermi option for calculating Fermi energy
Minor improvements to bxsf_write()
Add numpy writer

2.34d (17/7/20)
-----

Increase periodic table from 103 atoms to 118
Read VASP LOCPOT files
Try to obtain pseudocharges from VASP POTCAR file
Recognise .dat as a Onetep-style .cell file
Arithmetic parser now supports ^ (exponentiation)
Arithmetic parser supports the constants pi, Ha, Ry and B
Make -R= scaling call arithmetic parser, and scale after ES pot calculated

2.34c (18/6/20)
-----

Add basic elk.in reader and writer
Add basic elk 3D.OUT reader
Fix reading of spinor wavefunctions from Castep (broken by Castep 18)
Add support for UPF version 1 to qe_xml_read()
Reduce warnings from static analysis
Recognise .pdbx as a CIF file
Add '-r' to reduce atoms in "cif" output to symmetry-inequivalent ones
Add '-l' to label sites in "cif" output
Misc CIF-related changes
Ensure default cell made when reading a PDB without one is big enough
Add reader for Castep .geom files
Allow .xyz and .xyze to contain multiple frames

2.34b (9/4/20)
-----

Fix bug in reading of Castep .bands file from parallel runs
Recognise .abi as Abinit .in file
Support Abinit binary headers from Abinit 9.0.x
Support include and pp_dirpath in .in files for Abinit 9.0.x
Add array of struct species to contents structure
Thus stop species being renumbered, and upsetting POTCARs and Abinit pseudos
Support pseudos in .in files for for Abinit 9.0.x

2.34a
-----

Add support for reading Siesta .bands file
Add FDF_BP output format
Various speedups to MP generation
Fix some bugs in WAVECAR output from gamma point input
Fix band inversion reporting to start from 1 again (as it did prior to 2.33)
Remove all scanf("%ms") as MacOS X does not support it

2.34 (9/3/20)
----

Add .bxsf output for Fermi surface visualisation etc.
Read Castep .bands file, improve writing of same
Read VASP EIGENVAL file
Add one form of extended xyz output
Add extended xyz reader
Allow writing of XSF files with no atoms (place dummy atom at origin)
Add sorted (by |g|) GCOEFF.txt output
Read Fermi energy from QE xml file
Add WAVECAR output, inc 5.4 to 4.5 conversion

2.33
----

Refactor wavefunction readers (Abinit, Castep, QE and VASP)
Fix bug in psi Fourier interpolation for Abinit
Fix bug in band weighting for VASP input
Fix bug in FFT grid sizing for VASP input
Improve search for PP_HEADER in QE UPF files
Change real2rec() to return +ve volumes always
Add GCOEFF.txt output, spins not supported
Remove ONETEP flag bit in favour of dictionary entry

2.32c (11/2/20)
-----

Read ionic velocities from .cell, .check, .in (QE) and .XV files
Write ionic velocities to .cell, .in (QE) and .XV files if --vel given
Add --calc option for testing arithmetic parser


2.32b
-----

Rewrite fdf_read and cell_read include file handling
Above include files searched for in input file's directory, then current dir
Create dict entry for input filename, and reduce filename passing as argument

2.32a
-----

Slight improvements to warnings when calculating ES pot

2.32 (12/12/19)
----

Add ccp4 writer
Correct several issues in lhs to rhs converter for abc[6] output formats
Attempt to expand nanotube radius to maintain bond lengths
Change Gaussian cube output to make compatible with gabedit
Introduce --mocube output
Minor improvements to QE .in reader
Discard forces from .xsf output with -n
Support reading of Castep pot_fmt, Abinit VCLMB
Rescale Abinit potentials to eV
Add -R= option for rescaling grid data
Add -Z option for XC pot approximation
Change sign of cst_esp scaling, to be consistent with other DFT codes
Read and scale from Ry to V Siesta's .VH and .VT
Add radially-averaged 1D plots for nanotubes (-P=ctr:rx:npts)

2.31
----

Add support for reading and writing Siesta's .XV format (velocities ignored)
Correctly support -15 high precision flag in .xyz output
Rewrite symmetry search through range of tolerances
Add sanity check to warn if two atoms are within 0.2A
Minor improvements to .cif symmetry expansion
Support writing .RHO files with charge and spin (previously charge only)
Support reading .RHO files
Attempt to read .psf files to obtain pseudocharges to support .RHO
Improvements to .fdf reading and writing
Add ability to make nanotubes with -y=i,j[:x]

2.30c (6/11/19)
-----

Add --primitive_nr
Print old cell in terms of new after -P and --primitive_nr
Support _atom_site_charge in CIF reading and writing
Fix uninitialised value in CIF reading of symmetry translations
Support DOS line endings in CIF and Abinit readers
Make default output --cell if called as cellsym

2.30b
-----

Fix regression preventing reading of bands or eigenvals from .orbitals file
Reconstruct unsorted .bands from .orbitals, refactor print_occ()
Modify CIF reader to accept symmetry ops before lattice defined
Improve PDB reader's parsing of atom names
Add initial QE xml to Castep .geom conversion
Fix error in scaling forces from QE xml file

2.30 (16/8/19)
----

Change to selection of new grid size in supercells
Add Abinit wavefunction reader, including spinors
Read spin density from a VASP CHG file successfully
Initial work on VASP WAVECAR reader
Add calculation of int|s| for spin, intended for antiferromagnetic systems
-m does a better job of centering molecules
Add QE wavefunction reader, and refactor Castep's psi reader
Accept nm as length unit in blocks in .cell files
Add -x=ixjxk option for simple tiling
Split formats from --help text, and add --formats option

2.29a
-----

Add -X[abc]= option for vacuum scaling
Preserve kpoint_mp_spacing in .cell files
Some very experimental charged system corrections


2.29 (5/7/19)
----

Retain electrons namelist from QE files, scaling conv_thr
Retain ions namelist from QE files
Retain cell namelist from QE files
Retain more from CONTROL namelist of QE file
Retain occupations and degauss from SYSTEM namelist of QE file
Accept Fortran's use of 'D' for exponent in QE file
Fix bug in supercell generation introduced in 2.27a
Improve treatment of MP grids in super.c
Add -K for symmetrising kpoint list
Update Makefile to suppress gcc unused function result warnings

2.28 (7/6/19)
----

Do not update cell if --point, --schoen or --int given
When describing sym ops, call a -1 axis an inversion point

2.27a
-----

Add -N option to normalise fractional coords to 0<=x<1
Fix bug in --snap when tolerance large
Fix bug in supercell generation when tolerance large

2.27
----

Add tetragonal dipole corrections from JPCM doi: 10.1088/1361-648X/ab20e1

2.26c1
------

Support " as well as ' delimiting strings in qe .in input

2.26b
-----

Fix translation bug in --snap

2.26a (29/3/19)
-----

Fix kpoints after calling spglib
Fix misc off-by-one memory errors
Add a few free()s to stop minor leaks

2.26 (27/3/19)
----

Readers for QE output: xml and non-hdf5 charge-density.dat
Read starting_magnetization from QE .in, write to QE .in
Add --qef output: QE with fractional atomic coords
Read pseudopots from .check file, and add block if writing .cell file
Add dict structure, read prefix and pseudo dir from QE files
Use init_atoms() to initialise atoms in all readers
Add --standardise for SPGlib standardize_cell(no_idealize=1)
Add --snap for SPGlib standardize_cell() followed by expansion to a
  snapped version of original cell
Fix bug in ident_sym which might give error on 2 and -2 axes
Fix bug in ident_sym which prevented identification of screw axes
Change return(0) in main() to exit(0) to keep valgrind happy

2.25 (22/2/19)
----

Refactor dipole code, and remove a global variable
Add -Da= syntax for a=a, b or c
Thus calculate post-hoc slab correction
Introduce -Dm= for cubic boxes only
Update defn of Hartree to CODATA 2014
Limit on number of atoms in PDB file written raised from 9,999 to 99,999
Error given if above limit exceeded
Improvements to cif reader: recognises cartn_x as well as frac_x
Improvements to cif reader: better treatment of DOS line endings

2.20a (11/2/2019)
-----

Correct _atom_site type_label to  _atom_site label in cif reader
If spglib returns a fractional co-ord of 1, reduce to 0
Sort atoms after calling spglib transforms
Fix some comments in basis.c
Fix bug in data grid transformation when transforming cell size/shape
Add units of charge/spin integral to output

2.20
----

Include pseudocharges in .cube files.
-E option for generating electrostatic potentials from charge density.
Scale .cst_esp files from Hartrees to volts.
Ignore ions +/-0.5 from dipole centre when calculating dipole moments.
In a linespec, 0 (zero) a shorthand for (0,0,0).
As a linespec, "a" a shorthand for (0,0,0):(1,0,0):ngx+1, and also "b" and "c"

2.16a
-----

Fix bug with debug output appearing in file, not stderr
Further changes to XSF output to make it more VESTA-friendly

2.16 (18/6/2018)
----

Correct MP grid offsets in QE files, and release 2.16

2.15b (1/6/2018)
-----

Add optional range to -I option
Add -I option to help text and man page

2.15a
-----

-I option for reporting parity of psi on inversion

2.15
----

Quantum Espresso .in reader
-nn introduced for discarding kpoints (and sym ops)

2.14a
-----

Add Quantum Espresso writer
Abinit writer respects -15 for extra precision
.fdf reader ignores .-_ in keywords
Add support for < include files to fdf reader

2.14
----

Initial support for reading .fdf (Siesta) files
Remove restriction on ordering of items in .in files.
Convert between Abinit's and Castep's different Monkorst-Pack conventions.

2.12
----

Initial Abinit support: readers for .in and binary, writer for .in
Support exponential notation (e and d) in .cell files

2.11c
-----

Cube reader and writer support convention of 1x1x1 grid, value 0, for
  no volumetic data
Improvements to Crystal fort.12 and .34 readers

2.11b
-----

Initial attempt at a Crystal fort.12 reader
Fix bug in ident_sym which could lead to unexpected NaNs
Add --version flag as synonym for -V

2.11a
-----

Improve cif reading with low accuracy input
Initial attempt at a (Crystal) fort.34 reader

2.11
----

Add option to scale .cube output from A^-3 to Bohr^-3
Add -U option to scale .cube input from Bohr^-3 to A^-3
Add titles to cube files

2.10 (1/2/2018)
----

Finalise --refs output
Recognise files ending _CUBE as Gaussian cube
Read ionic charges from cube files

2.10p2
------

Change sign definition in FFT to be the same as Castep.
Add dipole calculation.
Read dipole_correction from .check file.

2.10p1
------

Arithmetic expressions accepted in .cell files for:
  unit cell defiition, atom co-ordinates, MP grid offset, kpoint list
kpoints_mp_offset accepted as alias for kpoint_mp_offset in cell file
kpoints_mp_grid accepted as alias for kpoint_mp_grid in cell file
Read in ionic charges from .check file, report with -v
Initial support for subspecies labelling in .cell and .check files

2.05b
-----

Added --refs option.
Added that Castep 18.1 .check files are correctly read.
Source released on www.c2x.org.uk website

2.05a
-----

Improvements to .cell reading: species_gamma block preserved, and
 ":" and "=" accepted in more places
symmetry_tol defaults to angstroms, not incorrectly to Bohr as before

2.05
----

Minor changes to VASP output --chgcar introduced.

2.05p4
------

Atoms with different Onetep labels differ for SPGLIB, supercell and
  primitive-finding operations
Labels which are identical to atomic symbols purged
VASP reading supports VASP names as prefixes as well as suffixes
Treatment of VASP POSCAR scalefactors improved

2.05p3
------

Better Onetep support, including includefile and parsing of species block
Onetep supported as separate output format
Add very basic den_fmt reader

2.05p2
------

Read initial spins from check file
VASP output supports co-linear spins
Add Castep den_fmt writer

2.05p1
-----

Reads structure and charge density from VASP CHGCAR or CHG file
Reads structure from VASP POSCAR or CONTCAR file
VASP output updated to version 5 of VASP

2.0a1
-----

XSF reader accepts DATAGRID_3D as well as BEGIN_DATAGRID_3D

2.0a
----

Add comments to XSF and gnuplot format
Fix ordering of k-points from parallel calculation
Tidy some output and add -O option

2.0
---

Initial GPL3 release of version 2

