Source code for HTMACat.post.Extract_cal_fre

from ase import io
from ase.constraints import FixAtoms
import os
from ase.io.vasp import write_vasp, read_vasp


[docs]def get_file_name(reaction): specie_f = reaction.split("=")[0].strip() specie_b = reaction.split("=")[1].strip() ### Construct the reaction name ##1.Extract the reactant molecule and type (a g s) specie_f_list = [] for i in range(len(specie_f.split("+"))): specie_f_list += [specie_f.split("+")[i].strip()] specie_f_mol = [] specie_f_typ = [] for j, specie in enumerate(specie_f_list): specie_f_mol += [specie.split("(", 1)[0].strip()] specie_f_typ += [specie.split("(", 1)[1].split(")")[0].strip()] ##2.Extract the product molecule and type (a g s) specie_b_list = [] for i in range(len(specie_b.split("+"))): specie_b_list += [specie_b.split("+")[i].strip()] specie_b_mol = [] specie_b_typ = [] for j, specie in enumerate(specie_b_list): specie_b_mol += [specie.split("(", 1)[0].strip()] specie_b_typ += specie.split("(", 1)[1].split(")")[0].strip() ##3.construct the file name for every reaction File = "+".join(specie_f_mol) + "=" + "+".join(specie_b_mol) return File
[docs]def get_adspecie_dir(react="react.log"): ### Extract reaction info ##1.Extract reaction type,reactant info,product info,barrier & enthalpy react_info = open(react, "r+") reaction_info = react_info.readlines() if len(reaction_info) > 2: reaction_type = reaction_info[0] reactant_info = reaction_info[1].split(",")[0].split("=")[0] product_info = reaction_info[1].split(",")[1].split("=")[0] # print(reactant_info,product_info) return reactant_info, product_info react_info.close()
if __name__ == "__main__": ### Extract the dir ReaInfo = open("reaction-bk", "r+") dir_list = [] for index, line in enumerate(ReaInfo): File = get_file_name(line) Dir = os.getcwd() os.chdir(File) reactant_info, product_info = get_adspecie_dir(react="react.log") dir_list += [reactant_info, product_info] os.chdir(Dir) ReaInfo.close() # print(len(dir_list)) # print(len(list(set(dir_list)))) dir_list = list(set(dir_list)) ### output ### Flist = open("file_list", "w+") for i in dir_list: Flist.write(f"{i}\n") Flist.close() ### construct cal dir dcut = 0.68 Dir_temp = os.getcwd() for j in dir_list: print(j) os.chdir(f"../test/{j}") os.system("rm -rf fre-cal") # os.chdir(f'../surface-adsorption/{Dir}') os.system("cp -r optmk fre-cal") os.chdir("fre-cal") print(os.getcwd()) os.system("mv CONTCAR POSCAR") pos = io.read("POSCAR", format="vasp") Mask = [] for j in pos.get_scaled_positions(): z = j[2] if float(z) > float(dcut): Mask += [False] else: Mask += [True] constraint = FixAtoms(mask=Mask) pos.set_constraint(constraint) write_vasp("POSCAR", pos, direct=True, sort=[""], vasp5=True) os.chdir(Dir_temp)