Merge branch 'master' of https://github.com/zerothi/phonopy into zerothi-siesta

This commit is contained in:
Atsushi Togo 2018-06-15 09:07:07 +02:00
commit 72df11ba54
1 changed files with 10 additions and 9 deletions

View File

@ -73,6 +73,7 @@ def parse_set_of_forces(num_atoms, forces_filenames, verbose=True):
def read_siesta(filename): def read_siesta(filename):
siesta_in = SiestaIn(open(filename).read()) siesta_in = SiestaIn(open(filename).read())
numbers = siesta_in._tags["atomicnumbers"] numbers = siesta_in._tags["atomicnumbers"]
alat = siesta_in._tags["latticeconstant"]
lattice = siesta_in._tags["latticevectors"] lattice = siesta_in._tags["latticevectors"]
positions = siesta_in._tags["atomiccoordinates"] positions = siesta_in._tags["atomiccoordinates"]
atypes = siesta_in._tags["chemicalspecieslabel"] atypes = siesta_in._tags["chemicalspecieslabel"]
@ -82,10 +83,7 @@ def read_siesta(filename):
if coordformat == "fractional" or coordformat == "scaledbylatticevectors": if coordformat == "fractional" or coordformat == "scaledbylatticevectors":
cell.set_scaled_positions(positions) cell.set_scaled_positions(positions)
elif coordformat == "scaledcartesian": elif coordformat == "scaledcartesian":
if siesta_in._tags['latticeconstant'] == 'ang': cell.set_positions(np.array(positions) * alat)
cell.set_positions(np.array(positions) / Bohr)
else:
cell.set_positions(np.array(positions))
elif coordformat == "notscaledcartesianang" or coordformat == "ang": elif coordformat == "notscaledcartesianang" or coordformat == "ang":
cell.set_positions(np.array(positions) / Bohr) cell.set_positions(np.array(positions) / Bohr)
elif coordformat == "notscaledcartesianbohr" or coordformat == "bohr": elif coordformat == "notscaledcartesianbohr" or coordformat == "bohr":
@ -134,7 +132,7 @@ def get_siesta_structure(cell,atypes):
return lines return lines
class SiestaIn(object): class SiestaIn(object):
_num_regex = '([+-]?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?)' _num_regex = '([+-]?\d+(?:\.\d*)?(?:[eE][-+]?\d+)?)'
_tags = { "latticeconstant": 1.0, _tags = { "latticeconstant": 1.0,
"latticeconstantunit": None, "latticeconstantunit": None,
"chemicalspecieslabel": None, "chemicalspecieslabel": None,
@ -153,15 +151,18 @@ class SiestaIn(object):
- atomic_species - atomic_species
""" """
for tag,value,unit in re.findall( for tag,value,unit in re.findall(
'([\.A-Za-z]+)\s+?%s(?:[ ]+)?([A-Za-z]+)?' % '([\.A-Za-z]+)\s+%s\s+([A-Za-z]+)?' %
self._num_regex,lines): self._num_regex,lines):
tag = tag.lower() tag = tag.lower()
unit = unit.lower()
if tag == "latticeconstant": if tag == "latticeconstant":
self._tags['latticeconstantunit'] = unit.lower() self._tags['latticeconstantunit'] = unit.capitalize()
if unit == 'Ang': if unit == 'ang':
self._tags[tag] = float(value) / Bohr self._tags[tag] = float(value) / Bohr
else: elif unit == 'bohr':
self._tags[tag] = float(value) self._tags[tag] = float(value)
else:
raise ValueError('Unknown LatticeConstant unit: {}'.format(unit))
for tag,value in re.findall('([\.A-Za-z]+)[ \t]+([a-zA-Z]+)',lines): for tag,value in re.findall('([\.A-Za-z]+)[ \t]+([a-zA-Z]+)',lines):
tag = tag.replace('_','').lower() tag = tag.replace('_','').lower()