Source code for schrodinger.application.matsci.qexsd.qespresso.utils.xml2qeinput
#!/usr/bin/env python3
#
# Copyright (c), 2015-2016, Quantum Espresso Foundation and SISSA (Scuola
# Internazionale Superiore di Studi Avanzati). All rights reserved.
# This file is distributed under the terms of the MIT License. See the
# file 'LICENSE' in the root directory of the present distribution, or
# http://opensource.org/licenses/MIT.
# Authors: Davide Brunato, Giovanni Borghi
#
"""
Convert from XML input to Fortran input
"""
import sys
[docs]def parse_args():
"""Command arguments parsing"""
import argparse
parser = argparse.ArgumentParser(
description="This program converts an XML input to the an equivalent "
"input file written in a format that is natively readable "
"by Fortran's codes of Quantum Espresso")
parser.add_argument("-v",
"--verbosity",
action="count",
default=1,
help="Increase output verbosity.")
parser.add_argument('-in', required=True, help="XML input filename.")
return parser.parse_args()
if __name__ == '__main__':
# Python 2.7+ is required. For old versions 'argparse' is availablealas_recover.xml
# only with extra package: https://pypi.python.org/pypi/argparse.
if sys.version_info < (2, 7, 0):
sys.stderr.write("You need python 2.7 or later to run this program\n")
sys.exit(1)
args = parse_args()
print(args)
if __package__ is None:
from os import path
sys.path.append(
path.dirname(path.dirname(path.dirname(path.abspath(__file__)))))
import os
import xml.etree.ElementTree as Etree
import qespresso
qespresso.set_logger(args.verbosity)
input_fn = getattr(args, 'in')
tree = Etree.parse(input_fn)
root = tree.getroot()
elementName = root.tag.split('}')[-1]
if elementName == 'espresso':
xml_conf = qespresso.PwDocument()
elif elementName == 'nebRun':
xml_conf = qespresso.NebDocument()
elif elementName == 'espressoph':
xml_conf = qespresso.PhononDocument()
elif elementName == 'tddfpt':
xml_conf = qespresso.TdDocument()
elif elementName == 'spectrumIn':
xml_conf = qespresso.SpectrumDocument()
else:
sys.stderr.write("Could not find correct XML in %s, exiting...\n" %
input_fn)
sys.exit(1)
root = None
tree = None
xml_conf.read(input_fn)
qe_in = xml_conf.get_qe_input()
input_fn_name, input_fn_ext = os.path.splitext(input_fn)
outfile = input_fn_name + '.in'
with open(outfile, mode='w') as f:
f.write(qe_in)
# Add a new line to the .in file so that READ namelist works for
# all fortran compilers
f.write('\n')
print("Input configuration written to file '%s' ..." % outfile)