Skip to content

Commit

Permalink
Explicitly check CASTEP version and error out if too low
Browse files Browse the repository at this point in the history
  • Loading branch information
ajjackson committed Apr 18, 2024
1 parent 2bd1cbf commit bc54df3
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
25 changes: 14 additions & 11 deletions euphonic/readers/castep.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from collections import defaultdict
from packaging.version import Version
import re
import struct
from typing import (Any, BinaryIO, Dict, Iterator, List, NamedTuple,
Expand Down Expand Up @@ -451,6 +452,17 @@ def read_interpolation_data(
float_type = '>f8'
first_cell_read = True
while (header := _read_entry(f).strip()) != b'END':
if header == b'BEGIN_PARAMETERS_DUMP':
castep_version: Version = Version(_read_entry(f).decode().strip())
if castep_version < Version("17.1"):
raise ValueError('Old castep file detected: '
'Euphonic only supports post-Castep 17.1 files. '
'Please rerun the calculation with a newer version '
'of Castep with the original .cell file and a '
'.castep file with a single line with the '
'"continuation: <old.castep_bin>" keyword and '
'use the new output .castep_bin file in Euphonic.')

if header == b'BEGIN_UNIT_CELL':
# CASTEP writes the cell twice: the first is the
# geometry optimised cell, the second is the original
Expand All @@ -470,17 +482,8 @@ def read_interpolation_data(
(n_cells_in_sc, 3*n_atoms, 3*n_atoms)),
axes=[0, 2, 1]))

cell_origins = _read_entry(f, int_type)
if isinstance(cell_origins, int):
raise ValueError('Old castep file detected: '
'Euphonic only supports post-Castep 17.1 files. '
'Please rerun the calculation with a newer version '
'of Castep with the original .cell file and a '
'.castep file with a single line with the '
'"continuation: <old.castep_bin>" keyword and '
'use the new output .castep_bin file in Euphonic.')

cell_origins = np.reshape(cell_origins, (n_cells_in_sc, 3))
cell_origins = np.reshape(_read_entry(f, int_type),
(n_cells_in_sc, 3))

_ = _read_entry(f, int_type) # FC row not used
elif header == b'BORN_CHGS':
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ def run_setup():
packages=packages,
include_package_data=True,
install_requires=[
'packaging',
'scipy>=1.10', # requires numpy >= 1.19.5
'seekpath>=1.1.0',
'spglib>=1.9.4',
Expand Down

0 comments on commit bc54df3

Please sign in to comment.