Esempio n. 1
0
def comput_vasp_nev(jdata, conf_dir, write_stable=False):
    kspacing = jdata['vasp_params']['kspacing']
    conf_path = re.sub('confs', global_equi_name, conf_dir)
    conf_path = os.path.abspath(conf_path)
    poscar = os.path.join(conf_path, 'POSCAR')
    if write_stable:
        ele_types = vasp.get_poscar_types(poscar)
        if len(ele_types) > 1:
            raise RuntimeError(
                'stable energy and volume only for one element, current you have %s from POSCAR'
                % str(ele_types))
    ener_shift = comput_e_shift(poscar, 'vasp-k%.2f' % kspacing)

    vasp_path = os.path.join(conf_path, 'vasp-k%.2f' % kspacing)
    outcar = os.path.join(vasp_path, 'OUTCAR')
    # tag_fin = os.path.join(vasp_path, 'tag_finished')
    if not os.path.isfile(outcar):
        warnings.warn("cannot find OUTCAR in " + vasp_path + " skip")
    elif not vasp.check_finished(outcar):
        warnings.warn("incomplete job " + vasp_path + " use the last frame")
    if os.path.isfile(outcar):
        natoms, epa, vpa = vasp.get_nev(outcar)
        epa = (epa * natoms - ener_shift) / natoms
        if write_stable:
            stable_dir = 'stables'
            os.makedirs(stable_dir, exist_ok=True)
            name_prefix = os.path.join(
                stable_dir, '%s.vasp-k%.2f' % (ele_types[0], kspacing))
            open(name_prefix + '.e', 'w').write('%.16f\n' % (epa))
            open(name_prefix + '.v', 'w').write('%.16f\n' % (vpa))
        return natoms, epa, vpa
    else:
        return None, None, None
Esempio n. 2
0
def run_phonon(task_type, jdata, mdata, ssh_sess):
    conf_dir = jdata['conf_dir']
    fp_params = jdata['vasp_params']
    kspacing = fp_params['kspacing']

    conf_path = os.path.abspath(conf_dir)
    task_path = re.sub('confs', '06.phonon', conf_path)
    if task_type == "vasp":
        work_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing)
    elif task_type in lammps_task_type:
        work_path = os.path.join(task_path, task_type)
    assert (os.path.isdir(work_path))

    all_task = glob.glob(os.path.join(work_path, '.'))

    #vasp
    if task_type == "vasp":
        mdata = decide_fp_machine(mdata)
        vasp_exec = mdata['fp_command']
        group_size = mdata['fp_group_size']
        resources = mdata['fp_resources']
        machine = mdata['fp_machine']
        machine_type = mdata['fp_machine']['machine_type']
        command = vasp_exec
        command = cmd_append_log(command, "log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'OUTCAR')
            if os.path.isfile(fres):
                if not vasp.check_finished(fres):
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        run_tasks = [os.path.basename(ii) for ii in run_tasks_]
        forward_files = ['INCAR', 'POTCAR', 'KPOINTS']
        backward_files = ['OUTCAR', 'OSZICAR', 'vasprun.xml']
        common_files = ['POSCAR']

        _run(machine, machine_type, ssh_sess, resources, command, work_path,
             run_tasks, group_size, common_files, forward_files,
             backward_files)
    #lammps
    elif task_type in lammps_task_type:
        None
    else:
        raise RuntimeError("unknow task %s, something wrong" % task_type)
Esempio n. 3
0
File: run.py Progetto: obaica/dpgen
def run_phonon(task_type, jdata, mdata, ssh_sess):
    user = ('user_incar' in jdata.keys())
    work_path = make_work_path(jdata, '06.phonon', False, False, user)

    all_task = glob.glob(os.path.join(work_path, '.'))

    #vasp
    if task_type == "vasp":
        mdata = decide_fp_machine(mdata)
        vasp_exec = mdata['fp_command']
        group_size = mdata['fp_group_size']
        resources = mdata['fp_resources']
        machine = mdata['fp_machine']
        machine_type = mdata['fp_machine']['machine_type']
        command = vasp_exec
        command = cmd_append_log(command, "log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'OUTCAR')
            if os.path.isfile(fres):
                if not vasp.check_finished(fres):
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        run_tasks = [os.path.basename(ii) for ii in run_tasks_]
        forward_files = ['INCAR', 'POTCAR', 'KPOINTS']
        backward_files = ['OUTCAR', 'OSZICAR', 'vasprun.xml']
        common_files = ['POSCAR']

        _run(machine, machine_type, ssh_sess, resources, command, work_path,
             run_tasks, group_size, common_files, forward_files,
             backward_files)
    #lammps
    elif task_type in lammps_task_type:
        None
    else:
        raise RuntimeError("unknow task %s, something wrong" % task_type)
Esempio n. 4
0
def comput_vasp_nev(jdata, conf_dir, write_shift=False):

    conf_path = re.sub('confs', global_equi_name, conf_dir)
    conf_path = os.path.abspath(conf_path)
    poscar = os.path.join(conf_path, 'POSCAR')
    ele_types = vasp.get_poscar_types(poscar)

    if 'relax_incar' in jdata.keys():
        vasp_str = 'vasp-relax_incar'
    else:
        kspacing = jdata['vasp_params']['kspacing']
        vasp_str = 'vasp-k%.2f' % kspacing

    vasp_path = os.path.join(conf_path, vasp_str)
    outcar = os.path.join(vasp_path, 'OUTCAR')
    # tag_fin = os.path.join(vasp_path, 'tag_finished')
    if not os.path.isfile(outcar):
        warnings.warn("cannot find OUTCAR in " + vasp_path + " skip")
    elif not vasp.check_finished(outcar):
        warnings.warn("incomplete job " + vasp_path + " use the last frame")
    if os.path.isfile(outcar):
        natoms, epa, vpa = vasp.get_nev(outcar)
        if write_shift and len(ele_types) > 1:
            ener_shift = comput_e_shift(poscar, vasp_str)
            shift = (epa * natoms - ener_shift) / natoms
            return natoms, epa, vpa, shift
        if len(ele_types) == 1:
            stable_dir = 'stables'
            os.makedirs(stable_dir, exist_ok=True)
            name_prefix = os.path.join(stable_dir,
                                       '%s.' % (ele_types[0]) + vasp_str)
            open(name_prefix + '.e', 'w').write('%.16f\n' % (epa))
            open(name_prefix + '.v', 'w').write('%.16f\n' % (vpa))
        return natoms, epa, vpa, None
    else:
        return None, None, None, None
Esempio n. 5
0
File: run.py Progetto: obaica/dpgen
def run_surf(task_type, jdata, mdata, ssh_sess):
    static = jdata['static-opt']
    work_path = make_work_path(jdata, '05.surf', False, static, False)

    all_task = glob.glob(os.path.join(work_path, 'struct-*'))

    #vasp
    if task_type == "vasp":
        mdata = decide_fp_machine(mdata)
        vasp_exec = mdata['fp_command']
        group_size = mdata['fp_group_size']
        resources = mdata['fp_resources']
        machine = mdata['fp_machine']
        machine_type = mdata['fp_machine']['machine_type']
        command = vasp_exec
        command = cmd_append_log(command, "log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'OUTCAR')
            if os.path.isfile(fres):
                if not vasp.check_finished(fres):
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        forward_files = ['INCAR', 'POSCAR', 'POTCAR']
        backward_files = ['OUTCAR', 'OSZICAR']
        common_files = ['INCAR', 'POTCAR']

    #lammps
    elif task_type in lammps_task_type:
        mdata = decide_model_devi_machine(mdata)
        lmp_exec = mdata['lmp_command']
        group_size = mdata['model_devi_group_size']
        resources = mdata['model_devi_resources']
        machine = mdata['model_devi_machine']
        machine_type = mdata['model_devi_machine']['machine_type']
        command = lmp_exec + " -i lammps.in"
        command = cmd_append_log(command, "model_devi.log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'log.lammps')
            if os.path.isfile(fres):
                with open(fres, 'r') as fp:
                    lines = fp.read().split('\n')
                flag = False
                for jj in lines:
                    if ("Final energy per atoms"
                            in jj) and (not 'print' in jj):
                        flag = True
                if not flag:
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        fp_params = jdata['lammps_params']
        model_dir = fp_params['model_dir']
        model_dir = os.path.abspath(model_dir)
        model_name = fp_params['model_name']
        if not model_name:
            models = glob.glob(os.path.join(model_dir, '*pb'))
            model_name = [os.path.basename(ii) for ii in models]
        else:
            models = [os.path.join(model_dir, ii) for ii in model_name]
        forward_files = ['conf.lmp', 'lammps.in'] + model_name
        backward_files = ['log.lammps', 'model_devi.log']
        common_files = ['lammps.in'] + model_name

        if len(model_name) > 1 and task_type == 'deepmd':
            backward_files = backward_files + ['model_devi.out']

    else:
        raise RuntimeError("unknow task %s, something wrong" % task_type)

    run_tasks = [os.path.basename(ii) for ii in run_tasks_]
    _run(machine, machine_type, ssh_sess, resources, command, work_path,
         run_tasks, group_size, common_files, forward_files, backward_files)
Esempio n. 6
0
def run_interstitial(task_type, jdata, mdata, ssh_sess):
    conf_dir = jdata['conf_dir']
    fp_params = jdata['vasp_params']
    kspacing = fp_params['kspacing']
    reprod_opt = jdata['reprod-opt']

    conf_path = os.path.abspath(conf_dir)
    task_path = re.sub('confs', '04.interstitial', conf_path)
    if task_type == "vasp":
        work_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing)
    elif task_type in lammps_task_type:
        work_path = os.path.join(task_path, task_type)
        if reprod_opt:
            work_path = os.path.join(task_path,
                                     '%s-reprod-k%.2f' % (task_type, kspacing))
    assert (os.path.isdir(work_path))

    all_task = glob.glob(os.path.join(work_path, 'struct-*'))

    #vasp
    if task_type == "vasp":
        mdata = decide_fp_machine(mdata)
        vasp_exec = mdata['fp_command']
        group_size = mdata['fp_group_size']
        resources = mdata['fp_resources']
        machine = mdata['fp_machine']
        machine_type = mdata['fp_machine']['machine_type']
        command = vasp_exec
        command = cmd_append_log(command, "log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'OUTCAR')
            if os.path.isfile(fres):
                if not vasp.check_finished(fres):
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        forward_files = ['INCAR', 'POSCAR', 'POTCAR']
        backward_files = ['OUTCAR', 'XDATCAR', 'OSZICAR']
        common_files = ['INCAR']

    #lammps
    elif task_type in lammps_task_type:
        mdata = decide_model_devi_machine(mdata)
        lmp_exec = mdata['lmp_command']
        group_size = mdata['model_devi_group_size']
        resources = mdata['model_devi_resources']
        machine = mdata['model_devi_machine']
        machine_type = mdata['model_devi_machine']['machine_type']
        command = lmp_exec + " -i lammps.in"
        command = cmd_append_log(command, "model_devi.log")

        if reprod_opt:
            all_frame = []
            for ii in all_task:
                all_frame += (glob.glob(os.path.join(ii, 'frame.*')))
            work_path = all_task
            all_task = all_frame

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'log.lammps')
            if os.path.isfile(fres):
                with open(fres, 'r') as fp:
                    lines = fp.read().split('\n')
                flag = False
                for jj in lines:
                    if ("Final energy per atoms"
                            in jj) and (not 'print' in jj):
                        flag = True
                if not flag:
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        fp_params = jdata['lammps_params']
        model_dir = fp_params['model_dir']
        model_dir = os.path.abspath(model_dir)
        model_name = fp_params['model_name']
        if not model_name:
            models = glob.glob(os.path.join(model_dir, '*pb'))
            model_name = [os.path.basename(ii) for ii in models]
        else:
            models = [os.path.join(model_dir, ii) for ii in model_name]
        forward_files = ['conf.lmp', 'lammps.in'] + model_name
        backward_files = ['log.lammps', 'model_devi.log']
        common_files = ['lammps.in'] + model_name

        if len(model_name) > 1:
            backward_files = backward_files + ['model_devi.out']

    else:
        raise RuntimeError("unknow task %s, something wrong" % task_type)

    if reprod_opt:
        for ii in work_path:
            run_tasks = []
            for jj in run_tasks_:
                if ii in jj:
                    run_tasks.append(os.path.basename(jj))
            _run(machine, machine_type, ssh_sess, resources, command, ii,
                 run_tasks, group_size, common_files, forward_files,
                 backward_files)
    else:
        run_tasks = [os.path.basename(ii) for ii in run_tasks_]
        _run(machine, machine_type, ssh_sess, resources, command, work_path,
             run_tasks, group_size, common_files, forward_files,
             backward_files)
Esempio n. 7
0
def run_elastic(task_type, jdata, mdata, ssh_sess):
    conf_dir = jdata['conf_dir']
    fp_params = jdata['vasp_params']
    kspacing = fp_params['kspacing']

    conf_path = os.path.abspath(conf_dir)
    task_path = re.sub('confs', '02.elastic', conf_path)
    if task_type == "vasp":
        work_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing)
    elif task_type in lammps_task_type:
        work_path = os.path.join(task_path, task_type)
    assert (os.path.isdir(work_path))
    print(work_path)

    all_task = glob.glob(os.path.join(work_path, "dfm-*"))
    all_task.sort()

    #vasp
    if task_type == "vasp":
        mdata = decide_fp_machine(mdata)
        vasp_exec = mdata['fp_command']
        group_size = mdata['fp_group_size']
        resources = mdata['fp_resources']
        machine = mdata['fp_machine']
        machine_type = mdata['fp_machine']['machine_type']
        command = vasp_exec
        command = cmd_append_log(command, "log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'OUTCAR')
            if os.path.isfile(fres):
                if not vasp.check_finished(fres):
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        forward_files = ['INCAR', 'POSCAR', 'POTCAR', 'KPOINTS']
        backward_files = ['OUTCAR', 'CONTCAR', 'OSZICAR']
        common_files = ['INCAR', 'POTCAR', 'KPOINTS']

    #lammps
    elif task_type in lammps_task_type:
        mdata = decide_model_devi_machine(mdata)
        lmp_exec = mdata['lmp_command']
        group_size = mdata['model_devi_group_size']
        resources = mdata['model_devi_resources']
        machine = mdata['model_devi_machine']
        machine_type = mdata['model_devi_machine']['machine_type']
        command = lmp_exec + " -i lammps.in"
        command = cmd_append_log(command, "model_devi.log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'log.lammps')
            if os.path.isfile(fres):
                with open(fres, 'r') as fp:
                    lines = fp.read().split('\n')
                flag = False
                for jj in lines:
                    if ('Final Stress' in jj) and (not 'print' in jj):
                        flag = True
                if not flag:
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        fp_params = jdata['lammps_params']
        model_dir = fp_params['model_dir']
        model_dir = os.path.abspath(model_dir)
        model_name = fp_params['model_name']
        if not model_name:
            models = glob.glob(os.path.join(model_dir, '*pb'))
            model_name = [os.path.basename(ii) for ii in models]
        else:
            models = [os.path.join(model_dir, ii) for ii in model_name]
        forward_files = ['conf.lmp', 'lammps.in', 'strain.out'] + model_name
        backward_files = ['log.lammps', 'model_devi.log']
        common_files = ['lammps.in'] + model_name

        if len(model_name) > 1:
            backward_files = backward_files + ['model_devi.out']

    else:
        raise RuntimeError("unknow task %s, something wrong" % task_type)

    run_tasks = [os.path.basename(ii) for ii in run_tasks_]
    _run(machine, machine_type, ssh_sess, resources, command, work_path,
         run_tasks, group_size, common_files, forward_files, backward_files)
Esempio n. 8
0
def run_surf(task_type, jdata, mdata, ssh_sess):
    conf_dir = jdata['conf_dir']
    fp_params = jdata['vasp_params']
    kspacing = fp_params['kspacing']
    deepmd_model_dir = jdata['deepmd_model_dir']
    deepmd_model_dir = os.path.abspath(deepmd_model_dir)

    conf_path = os.path.abspath(conf_dir)
    task_path = re.sub('confs', '05.surf', conf_path)
    if task_type == "vasp":
        work_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing)
    elif task_type == "deepmd":
        work_path = os.path.join(task_path, 'deepmd')
    elif task_type == "meam":
        work_path = os.path.join(task_path, 'meam')
    assert (os.path.isdir(work_path))

    all_task = glob.glob(os.path.join(work_path, 'struct-*'))

    #vasp
    if task_type == "vasp":
        vasp_exec = mdata['fp_command']
        group_size = mdata['fp_group_size']
        resources = mdata['fp_resources']
        machine = mdata['fp_machine']
        machine_type = mdata['fp_machine']['machine_type']
        command = vasp_exec
        command = cmd_append_log(command, "log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'OUTCAR')
            if os.path.isfile(fres):
                if not vasp.check_finished(fres):
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        run_tasks = [os.path.basename(ii) for ii in run_tasks_]
        forward_files = ['INCAR', 'POSCAR', 'POTCAR']
        backward_files = ['OUTCAR']
        common_files = ['INCAR', 'POTCAR']

    #lammps
    elif task_type == "deepmd" or task_type == "meam":
        lmp_exec = mdata['lmp_command']
        group_size = mdata['model_devi_group_size']
        resources = mdata['model_devi_resources']
        machine = mdata['model_devi_machine']
        machine_type = mdata['model_devi_machine']['machine_type']
        command = lmp_exec + " -i lammps.in"
        command = cmd_append_log(command, "model_devi.log")

        run_tasks_ = []
        for ii in all_task:
            fres = os.path.join(ii, 'log.lammps')
            if os.path.isfile(fres):
                with open(fres, 'r') as fp:
                    lines = fp.read().split('\n')
                flag = False
                for jj in lines:
                    if ("Final energy per atoms"
                            in jj) and (not 'print' in jj):
                        flag = True
                if not flag:
                    run_tasks_.append(ii)
            else:
                run_tasks_.append(ii)

        run_tasks = [os.path.basename(ii) for ii in run_tasks_]
        all_models = glob.glob(os.path.join(deepmd_model_dir, '*.pb'))
        model_names = [os.path.basename(ii) for ii in all_models]
        forward_files = ['conf.lmp', 'lammps.in'] + model_names
        backward_files = ['log.lammps', 'model_devi.out', 'model_devi.log']
        common_files = ['lammps.in'] + model_names
    else:
        raise RuntimeError("unknow task %s, something wrong" % task_type)

    _run(machine, machine_type, ssh_sess, resources, command, work_path,
         run_tasks, group_size, common_files, forward_files, backward_files)