Source code for dpgen.auto_test.refine

import glob
import os
import re
import dpgen.auto_test.lib.abacus as abacus

[docs]def make_refine(init_from_suffix, output_suffix, path_to_work): cwd = os.getcwd() init_from = re.sub(output_suffix[::-1], init_from_suffix[::-1], path_to_work[::-1], count=1)[::-1] if not os.path.exists(init_from): raise FileNotFoundError("the initial directory does not exist for refine") output = path_to_work init_from_task_tot = glob.glob(os.path.join(init_from, 'task.[0-9]*[0-9]')) task_num = len(init_from_task_tot) task_list = [] for ii in range(task_num): output_task = os.path.join(output, 'task.%06d' % ii) os.makedirs(output_task, exist_ok=True) os.chdir(output_task) for jj in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps','STRU']: if os.path.exists(jj): os.remove(jj) task_list.append(output_task) init_from_task = os.path.join(init_from, 'task.%06d' % ii) if not os.path.exists(init_from_task): raise FileNotFoundError("the initial task directory does not exist for refine") if os.path.isfile(os.path.join(init_from_task, 'INPUT')) and os.path.isfile(os.path.join(init_from_task, 'STRU')): #if there has INPUT and STRU files in this path, we believe this is a ABACUS job CONTCAR = abacus.final_stru(init_from_task) POSCAR = 'STRU' else: CONTCAR = 'CONTCAR' POSCAR = 'POSCAR' contcar = os.path.join(init_from_task, CONTCAR) init_poscar = os.path.join(init_from_task, POSCAR) if os.path.exists(contcar): os.symlink(os.path.relpath(contcar), POSCAR) elif os.path.exists(init_poscar): os.symlink(os.path.relpath(init_poscar), POSCAR) else: raise FileNotFoundError("no %s or %s in the init_from directory" % (CONTCAR,POSCAR)) os.chdir(cwd) return task_list