예제 #1
0
def remove_noncoord_oxygens(
    atoms=None,
    ):
    """
    """
    #| - remove_noncoord_oxygens
    df_coord_slab_i = get_structure_coord_df(atoms)

    # #########################################################
    df_i = df_coord_slab_i[df_coord_slab_i.element == "O"]
    df_i = df_i[df_i.num_neighbors == 0]

    o_atoms_to_remove = df_i.structure_index.tolist()

    # #########################################################
    o_atoms_to_remove_1 = []
    df_j = df_coord_slab_i[df_coord_slab_i.element == "O"]
    for j_cnt, row_j in  df_j.iterrows():
        neighbor_count = row_j.neighbor_count

        if neighbor_count.get("Ir", 0) == 0:
            if neighbor_count.get("O", 0) == 1:
                o_atoms_to_remove_1.append(row_j.structure_index)


    o_atoms_to_remove = list(set(o_atoms_to_remove + o_atoms_to_remove_1))

    slab_new = remove_atoms(atoms, atoms_to_remove=o_atoms_to_remove)

    return(slab_new)
예제 #2
0
def remove_highest_metal_atoms(
    atoms=None,
    num_atoms_to_remove=None,
    metal_atomic_number=77,
    ):
    """
    """
    #| - remove_highest_metal_atom
    slab_m = atoms[atoms.numbers == metal_atomic_number]

    positions_cpy = copy.deepcopy(slab_m.positions)
    positions_cpy_sorted = positions_cpy[positions_cpy[:,2].argsort()]

    indices_to_remove = []
    for coord_i in positions_cpy_sorted[-2:]:
        for i_cnt, atom in enumerate(atoms):
            if all(atom.position == coord_i):
                indices_to_remove.append(i_cnt)

    slab_new = remove_atoms(
        atoms=atoms,
        atoms_to_remove=indices_to_remove,
        )

    return(slab_new)
예제 #3
0
def remove_nonsaturated_surface_metal_atoms(
    atoms=None,
    dz=None,
    ):
    """
    """
    #| - remove_nonsaturated_surface_metal_atoms

    # #################################################
    # #################################################
    z_positions = atoms.positions[:,2]

    z_max = np.max(z_positions)
    z_min = np.min(z_positions)

    # #################################################
    # #################################################
    df_coord_slab_i = get_structure_coord_df(atoms)

    # #################################################
    metal_atoms_to_remove = []
    for atom in atoms:
        if atom.symbol == metal_atom_symbol:
            z_pos_i = atom.position[2]
            if z_pos_i >= z_max - dz or z_pos_i <= z_min + dz:
                row_coord = df_coord_slab_i[
                    df_coord_slab_i.structure_index == atom.index].iloc[0]
                num_o_neighbors = row_coord.neighbor_count.get("O", 0)

                if num_o_neighbors < 6:
                    metal_atoms_to_remove.append(atom.index)

    slab_new = remove_atoms(atoms=atoms, atoms_to_remove=metal_atoms_to_remove)

    return(slab_new)
예제 #4
0
o_atoms_to_remove = df_i.structure_index.tolist()

# #########################################################
o_atoms_to_remove_1 = []
df_j = df_coord_slab_i[df_coord_slab_i.element == "O"]
for j_cnt, row_j in  df_j.iterrows():
    neighbor_count = row_j.neighbor_count

    if neighbor_count.get("Ir", 0) == 0:
        if neighbor_count.get("O", 0) == 1:
            o_atoms_to_remove_1.append(row_j.structure_index)


o_atoms_to_remove = list(set(o_atoms_to_remove + o_atoms_to_remove_1))

slab_new = remove_atoms(atoms, atoms_to_remove=o_atoms_to_remove)

# +
# slab_new.write()

slab_new.write("out_data/temp_out/slab_1.cif")

# + active=""
#
#
#
#
#
#
#
#