mirror of https://github.com/phonopy/phonopy.git
Merge branch 'master' of https://github.com/zerothi/phonopy into zerothi-siesta
This commit is contained in:
commit
72df11ba54
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue