def _make_meam_lammps(jdata, conf_dir, supercell, insert_ele, task_name): meam_potfile_dir = jdata['meam_potfile_dir'] meam_potfile_dir = os.path.abspath(meam_potfile_dir) meam_potfile = jdata['meam_potfile'] meam_potfile = [os.path.join(meam_potfile_dir, ii) for ii in meam_potfile] meam_potfile_name = jdata['meam_potfile'] type_map = jdata['meam_type_map'] ntypes = len(type_map) meam_param = { 'meam_potfile': jdata['meam_potfile'], 'meam_type': jdata['meam_param_type'] } conf_path = os.path.abspath(conf_dir) conf_poscar = os.path.join(conf_path, 'POSCAR') # get equi poscar equi_path = re.sub('confs', global_equi_name, conf_path) equi_path = os.path.join(equi_path, task_name) equi_dump = os.path.join(equi_path, 'dump.relax') task_path = re.sub('confs', global_task_name, conf_path) task_path = os.path.join(task_path, task_name) os.makedirs(task_path, exist_ok=True) task_poscar = os.path.join(task_path, 'POSCAR') cwd = os.getcwd() os.chdir(task_path) lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) os.chdir(cwd) # gen structure from equi poscar ss = Structure.from_file(task_poscar) # gen defects vds = InterstitialGenerator(ss, insert_ele) dss = [] for jj in vds: dss.append(jj.generate_defect_structure(supercell)) # gen tasks cwd = os.getcwd() # make lammps.in, relax at 0 bar (scale = 1) fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, 1, lammps.inter_meam, meam_param) f_lammps_in = os.path.join(task_path, 'lammps.in') with open(f_lammps_in, 'w') as fp: fp.write(fc) # gen tasks copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) cwd = os.getcwd() for ii in range(len(dss)): struct_path = os.path.join( task_path, 'struct-%s-%s-%03d' % (insert_ele, copy_str, ii)) print('# generate %s' % (struct_path)) os.makedirs(struct_path, exist_ok=True) os.chdir(struct_path) for jj in ['conf.lmp', 'lammps.in'] + meam_potfile_name: if os.path.isfile(jj): os.remove(jj) # make conf dss[ii].to('POSCAR', 'POSCAR') lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') ptypes = vasp.get_poscar_types('POSCAR') lammps.apply_type_map('conf.lmp', type_map, ptypes) # link lammps.in os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') # link models for (ii, jj) in zip(meam_potfile, meam_potfile_name): os.symlink(os.path.relpath(ii), jj) # save supercell np.savetxt('supercell.out', supercell, fmt='%d') os.chdir(cwd)
def make_deepmd_lammps(jdata, conf_dir) : deepmd_model_dir = jdata['deepmd_model_dir'] deepmd_type_map = jdata['deepmd_type_map'] ntypes = len(deepmd_type_map) deepmd_model_dir = os.path.abspath(deepmd_model_dir) deepmd_models = glob.glob(os.path.join(deepmd_model_dir, '*pb')) deepmd_models_name = [os.path.basename(ii) for ii in deepmd_models] norm_def = jdata['norm_deform'] shear_def = jdata['shear_deform'] conf_path = os.path.abspath(conf_dir) conf_poscar = os.path.join(conf_path, 'POSCAR') # get equi poscar equi_path = re.sub('confs', global_equi_name, conf_path) equi_path = os.path.join(equi_path, 'deepmd') equi_dump = os.path.join(equi_path, 'dump.relax') task_path = re.sub('confs', global_task_name, conf_path) task_path = os.path.join(task_path, 'deepmd') os.makedirs(task_path, exist_ok=True) task_poscar = os.path.join(task_path, 'POSCAR') lammps.poscar_from_last_dump(equi_dump, task_poscar, deepmd_type_map) # get equi stress equi_log = os.path.join(equi_path, 'log.lammps') stress = lammps.get_stress(equi_log) np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) # gen strcture # ss = Structure.from_file(conf_poscar) # print(ss) # ss = ss.from_file(task_poscar) # print(ss) ss = Structure.from_file(task_poscar) # gen defomations norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] print('gen with norm '+str(norm_strains)) print('gen with shear '+str(shear_strains)) dfm_ss = DeformedStructureSet(ss, symmetry = False, norm_strains = norm_strains, shear_strains = shear_strains) n_dfm = len(dfm_ss) # gen tasks cwd = os.getcwd() # make lammps.in fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_deepmd, deepmd_models_name) f_lammps_in = os.path.join(task_path, 'lammps.in') with open(f_lammps_in, 'w') as fp : fp.write(fc) cwd = os.getcwd() for ii in range(n_dfm) : # make dir dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) os.makedirs(dfm_path, exist_ok=True) os.chdir(dfm_path) for jj in ['conf.lmp', 'lammps.in'] + deepmd_models_name : if os.path.isfile(jj): os.remove(jj) # make conf dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') ptypes = vasp.get_poscar_types('POSCAR') lammps.apply_type_map('conf.lmp', deepmd_type_map, ptypes) # record strain strain = Strain.from_deformation(dfm_ss.deformations[ii]) np.savetxt('strain.out', strain) # link lammps.in os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') # link models for (ii,jj) in zip(deepmd_models, deepmd_models_name) : os.symlink(os.path.relpath(ii), jj) cwd = os.getcwd()
def make_meam_lammps_fixv (jdata, conf_dir) : meam_potfile_dir = jdata['meam_potfile_dir'] meam_potfile_dir = os.path.abspath(meam_potfile_dir) meam_potfile = jdata['meam_potfile'] meam_potfile = [os.path.join(meam_potfile_dir,ii) for ii in meam_potfile] meam_potfile_name = jdata['meam_potfile'] type_map = jdata['meam_type_map'] ntypes = len(type_map) meam_param = {'meam_potfile' : jdata['meam_potfile'], 'meam_type': jdata['meam_param_type']} vol_start = jdata['vol_start'] vol_end = jdata['vol_end'] vol_step = jdata['vol_step'] # get equi props equi_path = re.sub('confs', global_equi_name, conf_dir) task_path = re.sub('confs', global_task_name, conf_dir) equi_path = os.path.join(equi_path, 'meam') task_path = os.path.join(task_path, 'meam') equi_path = os.path.abspath(equi_path) task_path = os.path.abspath(task_path) equi_log = os.path.join(equi_path, 'log.lammps') equi_dump = os.path.join(equi_path, 'dump.relax') os.makedirs(task_path, exist_ok = True) task_poscar = os.path.join(task_path, 'POSCAR') lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) cwd = os.getcwd() volume = vasp.poscar_vol(task_poscar) natoms = vasp.poscar_natoms(task_poscar) vpa = volume / natoms # structrure ss = Structure.from_file(task_poscar) # make lammps.in fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_meam, meam_param, change_box = False) f_lammps_in = os.path.join(task_path, 'lammps.in') with open(f_lammps_in, 'w') as fp : fp.write(fc) # make vols for vol in np.arange(vol_start, vol_end, vol_step) : vol_path = os.path.join(task_path, 'vol-%.2f' % vol) print('# generate %s' % (vol_path)) os.makedirs(vol_path, exist_ok = True) os.chdir(vol_path) for ii in ['conf.lmp', 'conf.lmp', 'lammps.in'] + meam_potfile_name : if os.path.exists(ii) : os.remove(ii) # make conf scale_ss = ss.copy() scale_ss.scale_lattice(vol * natoms) scale_ss.to('POSCAR', 'POSCAR') lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') ptypes = vasp.get_poscar_types('POSCAR') lammps.apply_type_map('conf.lmp', type_map, ptypes) # link lammps.in os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') # link models for (ii,jj) in zip(meam_potfile, meam_potfile_name) : os.symlink(os.path.relpath(ii), jj) # make lammps input os.chdir(cwd)