This post-release makes some changes to the source-distribution build process: - A bug is fixed in the version-numbering script; this particularly affected Windows - A copies of the unit tests and documentation were mistakenly included
in tarballs, making them excessively large. This is no longer present.
- Bug fixes
- Fixed a bug in the version numbering mechanism affecting builds from sdist on Windows and environments where Git is unavailable
- Reduce size of sdist, removing docs and tests from archive. (Restoring similar size to pre-v1.4.0 releases.)
- Maintenance
- Source builds automatically tested on Windows as part of build/deployment process
This release includes some significant modernisation and maintenance, as well as new features and performance enhancements.
Requirements
- Python 3.8, 3.9 is no longer supported
- Python 3.12 is supported
- importlib_resources backport is no longer required
- toolz is a new requirement
- Some other dependency requirements have been increased in order
to simplify maintenance and testing:
- Minimum version of numpy increased from 1.19.3 to 1.24.0
- Minimum version of matplotlib increased from 3.2 to 3.8
- Minimum version of Pint increased from 0.19 to 0.22
- Minimum version of PyYAML increased from 3.13 to 6.0
- Minimum version of h5py increaased from 2.10 to 3.6
- Minimum version of threadpoolctl increased from 1.0 to 3.0.
Improvements
A "reciprocal_spectroscopy" Pint context is made available in the unit registry for tricky conversions between reciprocal frequency/energy units. It is not active by default but can be enabled with e.g.
(10 * ureg("1 / meV")).to("cm", "reciprocal_spectroscopy")
This can also help to avoid divide-by-zero issues when performing energy <-> wavenumber conversions.
A Spectrum2DCollection class has been added to euphonic.spectra, which shares many features with Spectrum1DCollection
- In particular, the
iter_metadata
method is recommended when one needs to iterate over the collection metadata without copying the spectral data to new objects.
- In particular, the
Both Spectrum1DCollection and Spectrum2DCollection have a
.from_spectra()
constructor with an "unsafe" option which bypasses some consistency checks on the component data. This should only be used when confident that these will be consistent, such as when iterating over an existing collection.Performance optimisations have been made to the "item getter" for Spectrum1DCollection (and Spectrum2DCollection); it should now be significantly faster to access and iterate over the contained spectra.
A
euphonic.writers.phonon_website
module has been added with a function to export QpointPhononModes to appropriate JSON for use with the phonon visualisation website http://henriquemiranda.github.io/phononwebsite/From the command-line, this can be accessed with a
--save-web-json
argument to theeuphonic-dispersion
tool.
Bug fixes
- Metadata strings from Castep-imported PDOS data are now converted from numpy strings to native Python strings.
- Spectra from CASTEP .phonon_dos files are now imported with units of reciprocal energy (e.g. 1/meV)
Maintenance
- Cleared up unit-conversion-related warnings, de-cluttering the expected test suite output.
- The Spectrum1DCollection class was significantly refactored to support addition of Spectrum2DCollection and improve maintainability.
- Entire build system rework, migrating to
pyproject.toml
form withmeson-python
,cibuildwheel
and removingversioneer
to simplify future development and maintenance.
- Requirements
packaging
library added to dependencies.
- Bug fixes
- Fixed an error loading QpointPhononModes from JSON when there is a single q-point in the data
- Improvements
- When loading
.castep_bin
files, explicitly check the CASTEP version number and give a useful error message if this is < 17.1. (These files are missing information about the unit cell origins, and would previously cause an error with an unhelpful message.)
- When loading
- Maintenance
- Compatibility fix for spglib 2.4 update: a new sanity-check in spglib raises TypeError when using empty unit cell and this needs handling when looking for high-symmetry labels
- Compatibility fix for Numpy 2.0 update: avoid some
broadcasting issues with array shape returned by
np.unique
- Update reference to scipy.integrate.simpson (scipy.integrate.simps is deprecated)
- Filter out spglib deprecation warnings caused by SeeK-path.
- Maintenance
- Updated versioneer for compatibility with Python 3.12
- In tests, avoid checking an attribute of 3D plots which is unreliable in recent matplotlib versions
- Update readthedocs configuration to fix documentation builds
- Requirements
- Python 3.7 is no longer supported
- Minimum version of scipy increased from 1.1 to 1.10
- This requires numpy >= 1.19.5
- Minimum version of matplotlib increased from 2.2.2 to 3.2.0
- Minimum version of pint increased from 0.10.1 to 0.19
- Minimum version of h5py increaased form 2.8 to 2.10
- Improvements
- Added variable-width broadening for 1-D and 2-D spectra. An
arbitrary Callable can be provided relating the axis position to
Gaussian or Lorentzian width parameter.
euphonic-dos
andeuphonic-powder-map
CLI tools accept polynomial coefficients as input. The broadening is implemented with the fast approximate interpolation method already available for adaptive broadening of DOS. - Added features to Spectrum classes
- Added
copy()
methods returning an independent duplicate of data - Added
__mul__
and__imul__
methods to Spectrum classes. This allows results to be conveniently scaled with infix notation*
or*=
- Added
- Added --scale parameter to
euphonic-dos
,euphonic-intensity-map
,euphonic-powder-map
to allow arbitrary scaling of results from command-line. (e.g. for comparison with experiment, or changing DOS normalisation from 1 to 3N.)
- Added variable-width broadening for 1-D and 2-D spectra. An
arbitrary Callable can be provided relating the axis position to
Gaussian or Lorentzian width parameter.
- Bug Fixes:
- Changed the masking logic for kinematic constraints: instead of requiring energy bin to _entirely_ fall within accessible range at Q-bin mid-point, unmask bins if _any_ part of energy range is accessible at this Q value. This gives much more intuitive behaviour, especially for narrow angle ranges.
Improvements
Added "prefer_non_loto" option to Castep .phonon file importers. When this is enabled, a block of q-points are encountered with splitting directions, and one q-point does not have a splitting direction, the data at this "exact" q-point is preferred and the other weights in the group are set to zero.
This provides the intended behaviour of the Abins Castep parser and should give a reasonable result for Gamma-point only Castep calculations.
The option is disabled by default, so existing scripts will not be affected.
Bug Fixes:
- Allow
color
to be passed as an extra kwarg toplot_1d
andplot_1d_to_axis
. Previously this caused aTypeError
. - Fix bug where
Py_None
was not incremented before returning fromcalculate_phonons()
in the C-extension causing a deallocation crash - Support phonopy.yaml files from Phonopy versions >= 1.18, which have moved the data relating to dipole-dipole corrections. (i.e. Born effective charges, static dielectric tensor and a related unit conversion factor.)
- Allow
Maintenance:
- A deprecation in Numpy 1.25, which indirectly caused a test failure, has been addressed.
- Improvements:
- Euphonic now tests on Python 3.11
- Euphonic now provides PyPI wheels for Python 3.11
- New features:
- You can now perform linear interpolation of phonon frequencies and
eigenvectors with the Brille
library using the new
euphonic.brille.BrilleInterpolator
object. This should provide performance improvements for large unit cells which require the dipole correction. - There is a new command-line tool
euphonic-brille-convergence
to assist with choosing theBrilleInterpolator.from_force_constants
arguments to achieve the desired accuracy. - Brille interpolation can be accessed from the
euphonic-powder-map
tool using the new--use-brille
,--brille-grid-type
,--brille-npts
and--brille-npts-density
arguments.
- You can now perform linear interpolation of phonon frequencies and
eigenvectors with the Brille
library using the new
- New features:
- There is a new function
ForceConstants.from_total_fc_with_dipole
to allow reading force constants from other programs which contain long-ranged dipole-dipole interactions.
- There is a new function
- Bug fixes:
- Changes:
- Support for Python 3.6 has been dropped. This has also resulted in
changes to the following dependencies:
- numpy requirement increased from
1.12.1
to1.14.5
- scipy requirement increased from
1.0.0
to1.1.0
- pint requirement increased from
0.9
to0.10.1
- matplotlib requirement increased from
2.0.0
to2.2.2
- h5py requirement increased from
2.7.0
to2.8.0
- numpy requirement increased from
- The following deprecated features have been removed:
- The
return_mode_widths
argument inForceConstants.calculate_qpoint_phonon_modes
andForceConstants.calculate_qpoint_frequencies
has been removed - The
eta_scale
argument incalculate_qpoint_phonon_modes/frequencies
has been removed - The alias command-line tool argument
--weights
has been removed - The alias arguments
x_label
,y_label
,y_min
andy_max
toplot_1d/2d
have been removed - The
modes_from_file
andforce_constants_from_file
functions fromeuphonic.cli.utils
have been removed - Calling
broaden
on aSpectrum
with uneven bin widths without specifying themethod='convolve'
argument will now raise aValueError
- The
- DOS and PDOS calculated by the
calculate_dos
andcalculate_dos_map
methods ofQpointPhononModes
andQpointFrequencies
, andQpointPhononModes.calculate_pdos
are now calculated per atom rather than per unit cell (integrated area is3
rather than3*N_atom
). This is to keep consistency with the structure factors calculated byQpointPhononModes.calculate_structure_factor
which are calculated per atom. - The option
average_repeat_points
when importing q-point modes or frequencies from a CASTEP .phonon file withQpointFrequencies/QpointPhononModes.from_castep
is nowTrue
by default. To recover previous behaviour set this toFalse
.
- Support for Python 3.6 has been dropped. This has also resulted in
changes to the following dependencies:
- New Features:
- Kinematic constraints have been implemented for 2-D S(q,w)-like data.
- A function
euphonic.spectra.apply_kinematic_constraints(Spectrum2d, **kwargs) -> Spectrum2D
is implemented which masks out inaccessible data, replacing it with NaN. - Both direct-geometry and indirect-geometry are supported, by using the appropriate argument to set incident or final neutron energy.
- This function is exposed to the
euphonic-powder-map
tool, so these plots can be produced directly from the CLI. - Some parameters from real-world instruments are collected in the documentation for convenience.
- A function
- There is a new function
euphonic.util.convert_fc_phases
, which converts a force constants matrix which uses the atom coordinates in the phase during interpolation (Phonopy-like), to one which uses the cell origin coordinates (Euphonic, CASTEP-like). - When importing q-point modes or frequencies from a CASTEP .phonon
file, a new option (
average_repeat_points=True
) allows repeated entries (with the same q-point index) to be identified and their weights divided down by the number of entries. This option should give better statistics for sampling meshes that include the Gamma-point with LO-TO splitting.
- Kinematic constraints have been implemented for 2-D S(q,w)-like data.
- Improvements:
- Documentation on the shape and format of the force constants, and how to read them from other programs has been improved.
- The
euphonic.util.get_qpoint_labels
function, which is called when importing band-structure data to identify and label significant points, primarily identifies these points by searching for turning-points in the band path. The function will now also pick up any q-point that appears twice in succession. This is a common convention in band-structure calculations and helps with edge-cases such as when the path passes through a high-symmetry point without changing direction. This may pick up some previously-missing points in band-structure plots generated witheuphonic-dispersion
andeuphonic-intensity-map
- Bug fixes:
- Allow read of
phonopy.yaml
quantities in'au'
(bohr) units. Previously this was interpreted as an astronomical unit by Pint.
- Allow read of
- Improvements:
- The
euphonic-dos
,euphonic-dispersion
andeuphonic-intensity-map
command-line tools can now read files that don't contain eigenvectors, if eigenvectors are not required for the chosen options. - A new
--save-json
option is available for command-line tools which produce plots, this will output the produced spectrum to a Euphonic .json file. - There is now the option to use a fast, approximate variable-width broadening method when
adaptively broadening dos:
- Added new
adaptive_method
andadaptive_error
arguments forcalculate_dos
which specify which adaptive broadening method to use (reference
orfast
) and an acceptable error level when using thefast
method. - Fast adaptive broadening can be used in the
euphonic-dos
tool with the--adaptive-method
and--adaptive-error
arguments.
- Added new
- The
- Changes:
euphonic.cli.force_constants_from_file
andmodes_from_file
have been deprecated in favour ofeuphonic.cli.load_data_from_file
.- Using
Spectrum1D/1DCollection/2D.broaden
on an axis with unequal bin widths is now deprecated, as broadening is performed via convolution, which is incorrect in this case. In the future, this will raise aValueError
. To broaden anyway,method='convolve'
can be supplied, which will just emit a warning.
- New Features:
- New
Spectrum1D.to_text_file
andSpectrum1DCollection.to_text_file
methods to write to column text files - An expanded and consistent set of styling options is made available for command-line tools that produce plots.
- Consistent styling and advanced changes can be made using
Matplotlib stylesheet files, either as a CLI argument or
using
matplotlib.style.context()
in a Python script.
- New
- Improvements:
- Internally, plot theming has been adjusted to rely on Matplotlib style contexts. This means user changes and style context are more likely to be respected.
- Additional aliases for plot arguments in the command-line tools have
been added, for example either
--x-label
or--xlabel
can be used.
- Changes:
x_label
,y_label
,y_min
andy_max
ineuphonic.plot
functions have been deprecated in favour ofxlabel
,ylabel
,ymin
andymax
respectively, to match the Matplotlib arguments they refer to, and to match other arguments likevmin
,vmax
.
- Improvements:
- Wheels are now provided with PyPI releases
- Type hinting is now handled more consistently across different Euphonic classes and functions
- Bug Fixes:
- Will no longer raise a KeyError reading from
phonopy.yaml
ifphysical_unit
key is not present, instead will assume default units - Can now read Phonopy BORN files where the (optional) NAC conversion factor is not present
- Will no longer raise a KeyError reading from
- Bug fixes:
- The scaling of S(Q,w) as produced by
StructureFactor.calculate_sqw_map
was incorrect, and did not correctly scale with energy bin size (given its units are nowlength**2/energy
). This has been fixed, and S(Q,w) scale has changed by a factor of (hartee to energy bin unit conversion)/(energy bin width magnitude). e.g. if using an energy bin width of 0.1 meV, the new S(Q,w) will be scaled by 2.72e4/0.1 = 2.72e5. The original structure factors can now be correctly recovered by multiplying S(Q,w) by the energy bin width.
- The scaling of S(Q,w) as produced by
- Euphonic can now calculate neutron-weighted partial density of states, and
has new
Spectra
features to handle PDOS data:- Added
QpointPhononModes.calculate_pdos
method - Added
QpointFrequencies.calculate_dos_map
method - New
Spectrum1D.__add__
method, which adds 2 spectra together - New
Spectrum1DCollection.__add__
method, which concatenates 2 collections - Enabled indexing of
Spectrum1DCollection
by a sequence - Added
Spectrum1DCollection.group_by
method, which allows grouping and summing spectra by metadata keys e.g.group_by('species')
- Added
Spectrum1DCollection.select
method, which allows selection of spectra by metadata keys e.g.select(species='Si')
- Added
Spectrum1DCollection.sum
method, which sums all spectra in a collection - Added
-w={'coherent-dos','incoherent-dos','coherent-plus-incoherent-dos'}
neutron-weighted PDOS options toeuphonic-dos
andeuphonic-powder-map
- Added
--pdos
options for plotting specific species PDOS toeuphonic-dos
andeuphonic-powder-map
- Deprecated
--weights
command-line argument in favour of--weighting
for consistency withcalculate_pdos
- Added
- Improvements:
- LICENSE and CITATION.cff files are now included in Euphonic's installation
- Add ability to interactively change the colormap intensity limits
in
euphonic-powder-map
euphonic-optimise-dipole-parameter
can now read from Phonopy sourceseuphonic-optimise-dipole-parameter
can now also be used for non-polar materials to get general per-qpoint timings- Dimensioned Euphonic properties (e.g.
frequencies
,cell_vectors
) now have setters so can be set, previously this would raise anAttributeError
- Changes:
- The units of density of states as produced by
calculate_dos
have changed from dimensionless to1/energy
- The scaling of density of states has also changed. Previously the
integration would sum to 1 (if the
x_data
were converted to Hartree units), now the integration will sum to 3N in the same units asx_data
StructureFactor.structure_factors
have been changed to be in absolute units per atom (rather than per unit cell) so will have changed by a factor of 1/2*n_atoms, this formulation change has been reflected in thecalculate_structure_factor
docstring- The default unit of
StructureFactor.structure_factors
has been changed fromangstrom**2
tomillibarn
- The unit of S(Q,w) as produced by
StructureFactor.calculate_sqw_map
has changed dimension fromlength**2
tolength**2/energy
. Also, as its unit is derived from the inputStructureFactor
object, its default units are nowmillibarn/meV
- The
eta_scale
argument incalculate_qpoint_phonon_modes
has been deprecated,dipole_parameter
should be used instead. - This means the
euphonic-optimise-eta
script has been renamed toeuphonic-optimise-dipole-parameter
.
- The units of density of states as produced by
- Improvements:
- Added
broaden
method toSpectrum1DCollection
- Added
- Changes:
- The
return_mode_widths
argument incalculate_qpoint_phonon_modes
has been deprecated in favour ofreturn_mode_gradients
. The mode widths can still be obtained from the mode gradients withutil.mode_gradients_to_widths
- The
- Bug fixes:
- Fixed memory leak when using the C extension and making multiple calls to
calculate_qpoint_phonon_modes/frequencies
- Fixed bug which resulted in incorrect energy bins being generated
in
euphonic-powder-map
if units other than meV are used and--e-max
and--e-min
aren't specified - Use correct number of energy bins in
euphonic-intensity-map
,euphonic-powder-map
andeuphonic-dos
. Previously onlyebins - 1
bins were generated
- Fixed memory leak when using the C extension and making multiple calls to
- New Features:
- New
Crystal.get_symmetry_equivalent_atoms
method which uses spglib to get the symmetry operations and equivalent atoms under each operation
- New
- Improvements:
- Added
symmetrise
argument toQpointPhononModes.calculate_debye_waller
which will symmetrise it under the crystal symmetry operations. This means that there will no longer be a discrepancy betweenDebyeWaller
calculated on a symmetry-reduced or full Monkhorst-Pack grid. By default,symmetrise=True
- Added
frequencies_min
argument tocalculate_debye_waller
to exclude very small frequencies. This will also exclude negative frequencies. This improves on the previous behaviour which only excluded gamma-point acoustic modes, so would miss small/negative frequencies elsewhere - Loading the LAPACK libraries for the C extension now uses the interface provided by scipy for cython instead of loading directly from a DLL. The new method means we don't have to guess the DLL filename anymore!
- Added
- Changes:
- New dependency on
spglib>=1.9.4
- Fixed formula in
calculate_debye_waller
docstring to match actual implementation: moved1/2
factor and added explicit q-point weights
- New dependency on
New Features:
- New command-line tool
euphonic-powder-map
allows generation and plotting of powder-averaged S(|q|,w) and DOS maps. - New
QpointFrequencies
object which allows storage of frequencies without eigenvectors, meaning that memory usage can be reduced if eigenvectors are not required. StructureFactor
now has aweights
attribute and can be used to calculate DOS withcalculate_dos
and get dispersion withget_dispersion
Spectrum1D
,Spectrum1DCollection
andSpectrum2D
objects have a newmetadata
attribute, see their docstrings for details- Euphonic can now read DOS/PDOS from CASTEP .phonon_dos files with
Spectrum1D.from_castep_phonon_dos
andSpectrum1DCollection.from_castep_phonon_dos
- Adaptive broadening is now available for DOS, which can obtain a more representative DOS than standard fixed-width broadening. See the docs for details
- Adaptive broadening can be used in the
euphonic-dos
tool with the--adaptive
argument
- New command-line tool
Improvements:
Improved default behaviour for C extension use and number of threads:
- By default the C extension will be used if it is installed
- By default the number of threads will be set by
multiprocessing.cpu_count()
- The environment variable
EUPHONIC_NUM_THREADS
can be used to set a specific number of threads, which takes priority overmultiprocessing.cpu_count()
fall_back_on_python
argument has been removed and superseded by the defaultuse_c=None
behaviourthreadpoolctl.threadpool_limits
is used to limit the number of threads used by numerical libraries in Euphonic C function calls, resulting in better overall performance
Command-line interfaces have been refactored, giving a more uniform set of options and clearer sections of related arguments on the interactive help pages.
- It is now possible where appropriate to specify Monkhorst-Pack
sampling with a single-parameter
--q-spacing
as an alternative to setting Monkhorst-Pack divisions. This approach will account for the size and shape of reciprocal-lattice cells.
- It is now possible where appropriate to specify Monkhorst-Pack
sampling with a single-parameter
Build process tweaks
- On Linux, the build process will now respect a user-defined
C-compiler variable
CC
. - On Mac OSX, the build process will now respect a user-defined
C-compiler variable
CC
. Homebrew library paths will only be set ifCC
is empty and thebrew
command is available.
These tweaks are intended to facilitate Conda packaging.
- On Linux, the build process will now respect a user-defined
C-compiler variable
Breaking changes:
- The
--q-distance
argument toeuphonic-intensity-map
has been renamed to--q-spacing
for consistency with other tools. - Debye-Waller calculation in
euphonic-intensity-map
is now enabled by setting--temperature
, which no longer has a default value. - Default Monkhorst-Pack meshes (i.e. [6, 6, 6] in
euphonic-dos
and [20, 20, 20] insample_sphere_structure_factor()
) have been replaced by default grid-spacing values. - The scaling of density of states has changed, due to a change in implementation
- The
- There have been some major changes and improvements to spectra, plotting
and command line tools, including:
- New command line tool
euphonic-intensity-map
for plotting weighted 2D Spectra e.g. Coherent neutron S(Q,w) - Existing command line tools
euphonic-dispersion
andeuphonic-dos
have been updated to also read force constants and Phonopy files. Arguments are also more consistent across tools so some may have changed, check the command line tool help for details. - New
Spectrum1DCollection
object for containing 1D spectra with a shared x-axis (e.g. phonon dispersion modes) - New
plot_1d_to_axis
andplot_2d_to_axis
functions to allow plotting on specific axes get_bin_centres
andget_bin_edges
utility functions on spectra- The
ratio
argument toplot_2d
has been removed, it should no longer be required due to better management of relative axis sizes. - The
btol
argument toplot_1d
has been removed, it is recommended to useSpectrum1D.split()
orSpectrum1DCollection.split()
instead. - The
plot_dispersion
function has been removed. It is now recommended to plot dispersion usingplot_1d(QpointPhononModes.get_dispersion())
. See docs for details.
- New command line tool
- Other changes:
- Some of Euphonic's dependency version requirements have been changed, but
can now be relied on with more certainty due to better CI testing. This
includes:
- numpy requirement increased from
1.9.1
to1.12.1
- matplotlib requirement increased from
1.4.2
to2.0.0
- pint requirement decreased from
0.10.1
to0.9
- h5py requirement decreased from
2.9.0
to2.7.0
- pyyaml requirement decreased from
5.1.2
to3.13
- numpy requirement increased from
- Some of Euphonic's dependency version requirements have been changed, but
can now be relied on with more certainty due to better CI testing. This
includes:
- Improvements:
yaml.CSafeLoader
is now used instead ofyaml.SafeLoader
by default, so Phonopy.yaml
files should load faster- Metadata
__euphonic_version__
and__euphonic_class__
have been added to .json file output for better provenance
- Bug fixes:
- Fix read of Phonopy 'full' force constants from phonopy.yaml and FORCE_CONSTANTS files
- Fix structure factor calculation at gamma points with splitting, see #107
- Change broadening implementation from
scipy.signal.fftconvolve
to usescipy.ndimage
functions for better handling of bright Bragg peaks, see #108
- New Features:
- Added weights as an argument to ForceConstants.calculate_qpoint_phonon_modes, this will allow easier use of symmetry reduction for calculating density of states, for example.
- Modules have been added to support spherical averaging from 3D
q-points to mod(q)
- euphonic.sampling provides pure functions for the generation of points on (2D) unit square and (3D) unit sphere surfaces.
- A script is provided for visualisation of the different schemes implemented in euphonic.sampling. This is primarily intended for education and debugging.
- euphonic.powder provides functions which, given force constants data, can use these sampling methods to obtain spherically-averaged phonon DOS and coherent structure factor data as 1D spectrum objects. (It is anticipated that this module will grow to include schemes beyond this average over a single sphere.)
- Added
Crystal.to_spglib_cell
convenience function
- Changes:
- The Scripts folder has been removed. Command-line tools are now located in the euphonic.cli module. The entry-points are managed in setup.py, and each tool has the prefix "euphonic-" to avoid namespace clashes with other tools on the user's computer. (e.g. euphonic-dos)
- From an interactive shell with tab-completion, one can find all the euphonic tools by typing "euphonic-<TAB>".
- Changed arguments for
util.get_qpoint_labels(Crystal, qpts)
toutil.get_qpoint_labels(qpts, cell=None)
wherecell = Crystal.to_spglib_cell()
- Bug fixes:
- Correctly convert from Phonopy's q-point weight convention to Euphonic's when reading from mesh.yaml (see 7509043)
- Avoid IndexError in
ForceConstants.calculate_qpoint_phonon_modes
when there is only one q-point (which is gamma) andsplitting=True
- New Features:
- A system has been added for reference data in JSON files. These
are accessed via
euphonic.utils.get_reference_data
and some data has been added for coherent scattering lengths and cross-sections. This system has been made available to thecalculate_structure_factor()
method; it is no longer necessary to craft a data dict every time a program uses this function.
- A system has been added for reference data in JSON files. These
are accessed via
- Changes:
- Fixed structure factor formula in docs (
|F(Q, nu)|
->|F(Q, \\nu)|^2
ande^(Q.r)
->e^(iQ.r)
)
- Fixed structure factor formula in docs (
- Bug fixes:
- Fix
'born':null
inForceConstants
.json files when Born is not present in the calculation (see c20679c) - Fix incorrect calculation of LO-TO splitting when
reduce_qpts=True
, as the 'reduced' q rather than the actual q was used as the q-direction (see 3958072) - Fix interpolation for materials with non-symmetric supcercell matrices, see #81
- Fix interpolation for force constants read from Phonopy for materials that have a primitive matrix and more than 1 species, see #77
- Fix
- Breaking Changes:
- New Features:
- Euphonic can now read Phonopy input! See the docs for details.
- Improvements:
- Added
fall_back_on_python
boolean keyword argument toForceConstants.calculate_qpoint_phonon_modes
to control whether the Python implementation is used as a fallback to the C extension or not, see #35 - Added
--python-only
option tosetup.py
to enable install without the C extension
- Added
- Bug fixes:
- On reading CASTEP phonon file header information, switch from a fixed number of lines skipped to a search for a specific line, fixing issue #23
- Fix NaN frequencies/eigenvectors for consecutive gamma points, see #25
- Fix issue saving plots to file with dispersion.py, see #27
- Fix incorrect frequencies at gamma point when using dipole correction in C, #45
- Bug fixes:
- Add MANIFEST.in for PyPI distribution
- Bug fixes:
- Cannot easily upload C header files to PyPI without an accompanying source file, so refactor C files to avoid this
- There are several breaking changes:
- Changes to the object instantiation API. The former interface
InterpolationData(seedname)
has been changed toInterpolationData.from_castep(seedname)
in anticipation of more codes being added which require more varied arguments. - Changes to the Debye-Waller calculation API when calculating the structure
factor. The previous
dw_arg
kwarg accepted either a seedname or length 3 list describing a grid. The new kwarg is nowdw_data
and accepts aPhononData
orInterpolationData
object with the frequencies calculated on a grid. This is to make it clearer to the user exactly what arguments are being used when calculating phonons on the grid. - Changes to parallel functionality. The previous parallel implementation
based on Python's multiprocessing has been removed and replaced by a
C/OpenMP version. This has both better performance and is more robust. As
a result the
n_procs
kwarg tocalculate_fine_phonons
has been replaced byuse_c
andn_threads
kwargs.
- Changes to the object instantiation API. The former interface
- Improvements:
- The parallel implementation based on Python's multiprocessing has been removed and now uses C/OpenMP which both has better performance and is more robust
- Documentation has been moved to readthedocs and is more detailed
- Clearer interface for calculating the Debye-Waller factor
- Better error handling (e.g. empty
InterpolationData
objects, Matplotlib is not installed...)
- Bug fixes:
- Fix gwidth for DOS not being converted to correct units
- Fix qwidth for S(Q,w) broadening being incorrectly calculated