Beispiel #1
0
def create_incar(xsdname, args):
    """"""
    if os.path.exists('INCAR'):
        return 'INCAR already exists, not changed.\n'

    incar = InCar()
    if args.task:
        task = args.task
        incar.quickgen(args.task)
    else:
        task = 'SC'
    content = 'INCAR -->\n'
    content += '     Task is %s\n' %task

    if PY2:
        pname_value_pairs = args.__dict__.iteritems()
    else:
        pname_value_pairs = args.__dict__.items()

    for pname, value in pname_value_pairs :
        if (value is not None):
            if pname in incar.pnames:
                incar.set(pname, value)
            else:
                if (pname in INCAR_PARAMETERS.keys()):
                    incar.add(pname, value)
            content += "     {} -> {}\n".format(pname, value)
    #incar.set('SYSTEM', xsdname)

    incar.tofile(verbos=False)

    content += '\n'

    return content
Beispiel #2
0
    def test_parameter_set(self):
        " Test existed parameter can be set correctly. "
        filename = path + "/INCAR"
        incar = InCar(filename)

        self.assertTrue(incar.ISIF, "2")
        incar.set("ISIF", 3)
        self.assertTrue(incar.ISIF, "3")
Beispiel #3
0
    def test_parameter_set(self):
        " Test existed parameter can be set correctly. "
        filename = path + "/INCAR"
        incar = InCar(filename)

        self.assertTrue(incar.ISIF, "2")
        incar.set("ISIF", 3)
        self.assertTrue(incar.ISIF, "3")
Beispiel #4
0
        distance = np.linalg.norm(b)
        # Create fort.188
        content = '1\n3\n6\n4\n0.04\n%-5d%-5d%f\n0\n' % \
            (atom_idxs[0]+1, atom_idxs[1]+1, distance)
        with open('fort.188', 'w') as f:
            f.write(content)
        _logger.info("fort.188 has been created.")
        _logger.info('-' * 20)
        _logger.info("atom number: {:<5d}{:<5d}".format(
            atom_idxs[0] + 1, atom_idxs[1] + 1))
        _logger.info("atom name: {} {}".format(*atom_names))
        _logger.info("distance: {:f}".format(distance))
        _logger.info('-' * 20)

        # Set IBRION = 1
        incar.set('IBRION', 1)
        _logger.info("{} -> {}".format("IBRION", "1"))

    if PY2:
        pname_value_pairs = args.__dict__.iteritems()
    else:
        pname_value_pairs = args.__dict__.items()

    for pname, value in pname_value_pairs:
        if (value is not None) and (pname in incar.pnames):
            incar.set(pname, value)
            _logger.info("{} -> {}".format(pname, value))

    # Generate new INCAR file.
    incar.tofile()
Beispiel #5
0
class InCarTest(unittest.TestCase):

    def setUp(self):
        # Create an InCar object.
        self.incar = InCar("./testdata/INCAR")

    def test_rdata(self):
        " Test data line in INCAR can be read correctly. "

        # Test integer parameter.
        ref_line = "ISTART = 0        # 0 = new job, 1 = restart"
        pnames, datas = self.incar.rdata(ref_line)
        self.assertListEqual(pnames, ["ISTART"])
        self.assertListEqual(datas, ["0"])

        # Test string parameter.
        ref_line = "PREC   = Normal  # [Low/Medium/High/Accurate/Normal]"
        pnames, datas = self.incar.rdata(ref_line)
        self.assertListEqual(pnames, ["PREC"])
        self.assertListEqual(datas, ["Normal"])
        
        # Test comment line.
        ref_line = "! Electronic Structure"
        result = self.incar.rdata(ref_line)
        self.assertIsNone(result)

        # Test multi-parameter line.
        ref_line = "LHFCALC = .TRUE. ; HFSCREEN = 0.2  # HSE"
        pnames, datas = self.incar.rdata(ref_line)
        self.assertListEqual(pnames, ["LHFCALC", "HFSCREEN"])
        self.assertListEqual(datas, [".TRUE.", "0.2"])

    def test_load(self):
        " Test all data in INCAR can be loaded. "
        ref_pnames = ['SYSTEM', 'ISTART', 'ISPIN', 'PREC', 'ENCUT',
                      'NELM', 'NELMIN', 'ISMEAR', 'SIGMA', 'LREAL',
                      'EDIFFG', 'ALGO', 'ISIF', 'NSW', 'IBRION', 'POTIM',
                      'ISYM', 'NWRITE', 'LCHARG', 'LWAVE', 'NCORE']

        ref_datas = ['per', '0', '2', 'Normal', '450', '400', '3',
                     '1', '0.1', 'A', '-0.05', 'Fast', '2', '900',
                     '1', '0.2', '0', '1', '.False.', '.False.', '4']

        for pname, data in zip(ref_pnames, ref_datas):
            self.assertEqual(getattr(self.incar, pname), data)

    def test_parameter_set(self):
        " Test existed parameter can be set correctly. "
        self.assertTrue(self.incar.ISIF, "2")
        self.incar.set("ISIF", 3)
        self.assertTrue(self.incar.ISIF, "3")

    def test_parameter_add(self):
        " Test new parameter can be added correctly. "
        self.assertFalse(hasattr(self.incar, "TEST_zjshao"))
        self.incar.add("TEST_zjshao", "True")
        self.assertTrue(self.incar.TEST_zjshao, "True")

    def test_tofile(self):
        " Test INCAR content can be write to file. "
        # NEED IMPLEMENTATIN
        pass
Beispiel #6
0
        b = A*x
        distance = np.linalg.norm(b)
        # Create fort.188
        content = '1\n3\n6\n4\n0.04\n%-5d%-5d%f\n0\n' % \
            (atom_idxs[0]+1, atom_idxs[1]+1, distance)
        with open('fort.188', 'w') as f:
            f.write(content)
        _logger.info("fort.188 has been created.")
        _logger.info('-'*20)
        _logger.info("atom number: {:<5d}{:<5d}".format(atom_idxs[0]+1, atom_idxs[1]+1))
        _logger.info("atom name: {} {}".format(*atom_names))
        _logger.info("distance: {:f}".format(distance))
        _logger.info('-'*20)

        # Set IBRION = 1
        incar.set('IBRION', 1)
        _logger.info("{} -> {}".format("IBRION", "1"))

    if PY2:
        pname_value_pairs = args.__dict__.iteritems()
    else:
        pname_value_pairs = args.__dict__.items()

    for pname, value in pname_value_pairs :
        if (value is not None) and (pname in incar.pnames):
            incar.set(pname, value)
            _logger.info("{} -> {}".format(pname, value))

    # Generate new INCAR file.
    incar.tofile()
Beispiel #7
0
        atom_idxs.append(idx)
        atom_names.append(atom_name)
# if constrained get distance and create fort.188
if atom_idxs:
    if len(atom_idxs) > 2:
        raise ValueError("More than two atoms end with '_c'")
    pt1, pt2 = [xsd.data[idx, :] for idx in atom_idxs]
    # use Ax=b convert to cartisan coordinate
    diff = pt1 - pt2
    A = np.matrix(xsd.bases.T)
    x = np.matrix(diff).T
    b = A*x
    distance = np.linalg.norm(b)
    # create fort.188
    content = '1\n3\n6\n4\n0.04\n%-5d%-5d%f\n0\n' % \
        (atom_idxs[0]+1, atom_idxs[1]+1, distance)
    with open('fort.188', 'w') as f:
        f.write(content)
    print "fort.188 has been created."
    print '-'*20
    print "atom number: %-5d%-5d" % (atom_idxs[0]+1, atom_idxs[1]+1)
    print "atom name: %s %s" % tuple(atom_names)
    print "distance: %f" % distance
    print '-'*20

    # set IBRION = 1
    incar = InCar()
    incar.set('IBRION', 1)
    incar.tofile()
    print "IBRION is set to 1."
Beispiel #8
0
        kpoints = []
        for base in xtd.bases:
            l = np.dot(base, base)**0.5
            kpt = int(20/l) + 1
            kpoints.append(str(kpt))
    else:
        kpoints = [i.strip() for i in args.kpoints.split(",")]
        _logger.info("Set k-point -> {} {} {}".format(*kpoints))
    kpt_str = " ".join(kpoints)
    kpt_content = "mesh auto\n0\nG\n" + kpt_str + "\n0 0 0\n"
    with open("KPOINTS", "w") as f:
        f.write(kpt_content)

    # Modify INCAR parameters.
    incar = InCar()
    incar.set("IBRION", 3)
    incar.set("POTIM", 0)
    neb_parameters = [("IOPT", 1),
                      ("ICHAIN", 0),
                      ("LCLIMB", ".TRUE."),
                      ("SPRING", -5),
                      ("IMAGES", n_images)]
    for pname, value in neb_parameters:
        incar.add(pname, value)
        _logger.info("{} -> {}".format(pname, value))
    incar.tofile()

    # Modify qsub script.
    jobname = xtdname.split('.')[0]
    with open('vasp.script', 'r') as f:
        content_list = f.readlines()
        kpoints = []
        for base in xtd.bases:
            l = np.dot(base, base)**0.5
            kpt = int(20 / l) + 1
            kpoints.append(str(kpt))
    else:
        kpoints = [i.strip() for i in args.kpoints.split(",")]
        _logger.info("Set k-point -> {} {} {}".format(*kpoints))
    kpt_str = " ".join(kpoints)
    kpt_content = "mesh auto\n0\nG\n" + kpt_str + "\n0 0 0\n"
    with open("KPOINTS", "w") as f:
        f.write(kpt_content)

    # Modify INCAR parameters.
    incar = InCar()
    incar.set("IBRION", 3)
    incar.set("POTIM", 0)
    neb_parameters = [("IOPT", 1), ("ICHAIN", 0), ("LCLIMB", ".TRUE."),
                      ("SPRING", -5), ("IMAGES", n_images)]
    for pname, value in neb_parameters:
        incar.add(pname, value)
        _logger.info("{} -> {}".format(pname, value))
    incar.tofile()

    # Modify qsub script.
    jobname = xtdname.split('.')[0]
    with open('vasp.script', 'r') as f:
        content_list = f.readlines()

    # Change job name.
    content_list[1] = '#PBS -N ' + jobname + '\n'
Beispiel #10
0
            atom_names.append(atom_name)
    # If constrained get distance and create fort.188
    if atom_idxs:
        if len(atom_idxs) > 2:
            raise ValueError("More than two atoms end with '_c'")
        pt1, pt2 = [xsd.data[idx, :] for idx in atom_idxs]
        # Use Ax=b convert to cartisan coordinate
        diff = pt1 - pt2
        A = np.matrix(xsd.bases.T)
        x = np.matrix(diff).T
        b = A * x
        distance = np.linalg.norm(b)
        # Create fort.188
        content = '1\n3\n6\n4\n0.04\n%-5d%-5d%f\n0\n' % \
            (atom_idxs[0]+1, atom_idxs[1]+1, distance)
        with open('fort.188', 'w') as f:
            f.write(content)
        logging.info("fort.188 has been created.")
        logging.info('-' * 20)
        logging.info("atom number: {:<5d}{:<5d}".format(
            atom_idxs[0] + 1, atom_idxs[1] + 1))
        logging.info("atom name: {} {}".format(*atom_names))
        logging.info("distance: {:f}".format(distance))
        logging.info('-' * 20)

        # Set IBRION = 1
        incar = InCar()
        incar.set('IBRION', 1)
        incar.tofile()
        logging.info("IBRION is set to 1.")
Beispiel #11
0
class InCarTest(unittest.TestCase):
    def setUp(self):
        # Create an InCar object.
        self.incar = InCar("./testdata/INCAR")

    def test_rdata(self):
        " Test data line in INCAR can be read correctly. "

        # Test integer parameter.
        ref_line = "ISTART = 0        # 0 = new job, 1 = restart"
        pnames, datas = self.incar.rdata(ref_line)
        self.assertListEqual(pnames, ["ISTART"])
        self.assertListEqual(datas, ["0"])

        # Test string parameter.
        ref_line = "PREC   = Normal  # [Low/Medium/High/Accurate/Normal]"
        pnames, datas = self.incar.rdata(ref_line)
        self.assertListEqual(pnames, ["PREC"])
        self.assertListEqual(datas, ["Normal"])

        # Test comment line.
        ref_line = "! Electronic Structure"
        result = self.incar.rdata(ref_line)
        self.assertIsNone(result)

        # Test multi-parameter line.
        ref_line = "LHFCALC = .TRUE. ; HFSCREEN = 0.2  # HSE"
        pnames, datas = self.incar.rdata(ref_line)
        self.assertListEqual(pnames, ["LHFCALC", "HFSCREEN"])
        self.assertListEqual(datas, [".TRUE.", "0.2"])

    def test_load(self):
        " Test all data in INCAR can be loaded. "
        ref_pnames = [
            'SYSTEM', 'ISTART', 'ISPIN', 'PREC', 'ENCUT', 'NELM', 'NELMIN',
            'ISMEAR', 'SIGMA', 'LREAL', 'EDIFFG', 'ALGO', 'ISIF', 'NSW',
            'IBRION', 'POTIM', 'ISYM', 'NWRITE', 'LCHARG', 'LWAVE', 'NCORE'
        ]

        ref_datas = [
            'per', '0', '2', 'Normal', '450', '400', '3', '1', '0.1', 'A',
            '-0.05', 'Fast', '2', '900', '1', '0.2', '0', '1', '.False.',
            '.False.', '4'
        ]

        for pname, data in zip(ref_pnames, ref_datas):
            self.assertEqual(getattr(self.incar, pname), data)

    def test_parameter_set(self):
        " Test existed parameter can be set correctly. "
        self.assertTrue(self.incar.ISIF, "2")
        self.incar.set("ISIF", 3)
        self.assertTrue(self.incar.ISIF, "3")

    def test_parameter_add(self):
        " Test new parameter can be added correctly. "
        self.assertFalse(hasattr(self.incar, "TEST_zjshao"))
        self.incar.add("TEST_zjshao", "True")
        self.assertTrue(self.incar.TEST_zjshao, "True")

    def test_tofile(self):
        " Test INCAR content can be write to file. "
        # NEED IMPLEMENTATIN
        pass
Beispiel #12
0
else:
    import subprocess

_logger = logging.getLogger("vaspy.script")

if "__main__" == __name__:
    incar = InCar()

    # Move files.
    cmd = "cp ../KPOINTS ./"
    status, output = subprocess.getstatusoutput(cmd)
    if status:
        raise ValueError(output)
    _logger.info(cmd)

    # Change INCAR parameters.
    parameters = [("IBRION", 5), ("POTIM", 0.05), ("ISIF", 0), ("NFREE", 2)]

    for pname, value in parameters:
        if hasattr(incar, pname):
            incar.set(pname, value)
        else:
            incar.add(pname, value)
        _logger.info("{} --> {}".format(pname, value))

    incar.pop("NCORE")
    _logger.info("Remove Paramter NCORE")

    incar.tofile()