def generate_muairss_collection(struct, params): if params["mu_symbol"] in struct.get_chemical_symbols(): print( "WARNING: chosen muon symbol conflicts with existing elements in" " the starting unit cell. This could cause mistakes" ) # Make a supercell sm = make_3x3(params["supercell"]) # ASE's make_supercell is weird, avoid if not necessary... smdiag = np.diag(sm).astype(int) if np.all(np.diag(smdiag) == sm): scell0 = struct.repeat(smdiag) else: scell0 = make_supercell(struct, sm) reduced_struct = find_primitive_structure(struct) print("Generating defect configurations...") # Seed the random generator Random.reseed(params["random_seed"]) # Now generate the defect configurations defect_gen = defectGen( reduced_struct, "H", poisson_r=params["poisson_r"], vdw_scale=params["vdw_scale"], ) defect_collection = AtomsCollection(defect_gen) print("{0} configurations generated".format(len(defect_collection))) collection = [] for atoms in defect_collection: # Where's the muon? # We rely on the fact that it's always put at the first place mupos = atoms.get_positions()[0] scell = scell0.copy() + Atoms( "H", positions=[mupos], masses=[constants.m_mu_amu] ) # Add castep custom species csp = scell0.get_chemical_symbols() + [params["mu_symbol"]] scell.set_array("castep_custom_species", np.array(csp)) scell.set_pbc(params["dftb_pbc"]) collection.append(scell) return AtomsCollection(collection)
def generate_muairss_collection(struct, params): if params['mu_symbol'] in struct.get_chemical_symbols(): print('WARNING: chosen muon symbol conflicts with existing elements in' ' the starting unit cell. This could cause mistakes') # Make a supercell sm = make_3x3(params['supercell']) # ASE's make_supercell is weird, avoid if not necessary... smdiag = np.diag(sm).astype(int) if np.all(np.diag(smdiag) == sm): scell0 = struct.repeat(smdiag) else: scell0 = make_supercell(struct, sm) reduced_struct = find_primitive_structure(struct) print('Generating defect configurations...') # Now generate the defect configurations defect_gen = defectGen(reduced_struct, 'H', poisson_r=params['poisson_r'], vdw_scale=params['vdw_scale']) defect_collection = AtomsCollection(defect_gen) print('{0} configurations generated'.format(len(defect_collection))) collection = [] for atoms in defect_collection: # Where's the muon? # We rely on the fact that it's always put at the first place mupos = atoms.get_positions()[0] scell = scell0.copy() + Atoms('H', positions=[mupos]) # Add castep custom species csp = scell0.get_chemical_symbols() + [params['mu_symbol']] scell.set_array('castep_custom_species', np.array(csp)) scell.set_pbc(params['dftb_pbc']) collection.append(scell) return AtomsCollection(collection)
import sys import glob from ase import io, Atoms from ase.build import make_supercell from pymuonsuite.utils import make_3x3 from pymuonsuite.schemas import load_input_file, MuAirssSchema atoms = io.read(sys.argv[1]) if len(sys.argv) > 2: params = load_input_file(sys.argv[2], MuAirssSchema) scell = make_3x3(params["supercell"]) atoms = make_supercell(atoms, scell) for f in glob.glob("muon-airss-out/dftb+/*/geo_end.xyz"): a = io.read(f) atoms += Atoms("H", positions=a.get_positions()[-1, None, :]) io.write("merged.cif", atoms)
import sys import glob import numpy as np from ase import io, Atoms from ase.build import make_supercell from pymuonsuite.utils import make_3x3 from pymuonsuite.schemas import load_input_file, MuAirssSchema atoms = io.read(sys.argv[1]) if len(sys.argv) > 2: params = load_input_file(sys.argv[2], MuAirssSchema) scell = make_3x3(params['supercell']) atoms = make_supercell(atoms, scell) for f in glob.glob('muon-airss-out/dftb+/*/geo_end.xyz'): a = io.read(f) atoms += Atoms('H', positions=a.get_positions()[-1, None, :]) io.write('merged.cif', atoms)