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( f"no {CONTCAR} or {POSCAR} in the init_from directory" ) os.chdir(cwd) return task_list