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
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)
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)
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
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)
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)
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)
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)