[docs]
class parameters:
"""
Parameters Class for Metal and Graphene Structures.
This class provides essential lattice parameters, minimum interatomic distances,
and atomic arrangements for various elements, including FCC, BCC, HCP metals,
and graphene.
Attributes:
convergence (float): Convergence threshold for numerical operations.
convergence_step (float): Step size for convergence calculations.
min_dist_translate (float): Minimum allowable distance for translation operations.
lattice_constant (dict): Lattice constants (in Ångströms) for various elements.
- Keys: Atomic symbols (e.g., "Ag", "Au", "C").
- Values: Single float (for cubic structures) or tuple (for HCP structures).
min_dist (dict): Minimum interatomic distances (in Ångströms).
- Keys: Atomic symbols.
- Values: Distance thresholds based on lattice parameters.
atomic_arrangement (dict): Crystallographic structure of elements.
- Keys: Atomic symbols.
- Values: String representation of atomic packing ("FCC", "BCC", "HCP").
metal_atomtypes (list): List of valid atomic types for metal nanoparticles.
Sources:
- Chemistry LibreTexts - Crystal Structures of Metals
https://chem.libretexts.org/Bookshelves/Inorganic_Chemistry/Introduction_to_Inorganic_Chemistry_(Wikibook)/06%3A_Metals_and_Alloys-_Structure_Bonding_Electronic_and_Magnetic_Properties/6.04%3A_Crystal_Structures_of_Metals
- Wikipedia - Graphene
https://en.wikipedia.org/wiki/Graphene
(Both accessed on 21st February 2025.)
Notes:
- All values are in Ångströms.
- The `lattice_constant` dictionary includes FCC, BCC, HCP metals and graphene.
- The `min_dist` dictionary ensures reasonable atomic separations for simulations.
- The class is mainly used for molecular structure generation and validation.
"""
def __init__(self):
"""
Initializes default parameters for molecular structures.
Attributes Initialized:
- `convergence` and `convergence_step`: Thresholds for numerical calculations.
- `lattice_constant`: Dictionary of atomic lattice parameters (FCC, BCC, HCP, Graphene).
- `min_dist`: Minimum interatomic distances to avoid structural inconsistencies.
- `atomic_arrangement`: Defines the atomic packing type for different elements.
- `metal_atomtypes`: List of metal elements supported in the simulations.
"""
# Convergence options
[docs]
self.convergence = 0.010
[docs]
self.convergence_step = 0.001
# General parameters (units = Angstroms)
[docs]
self.min_dist_translate = 1.0
# Lattice parameters of metals / graphene (units = Angstroms)
[docs]
self.lattice_constant = {
"ag": 4.08000, "au": 4.08000, "al": 4.05000, "ni": 3.52000, "cu": 3.61000,
"pd": 3.89000, "pt": 3.92000, "pb": 4.95000, "th": 5.08000, "ce": 3.68000, "yb": 5.49000,
"na": 4.22500, "fe": 2.87000, "mo": 3.15000, "w": 3.16000, "v": 3.02000,
"nb": 3.30000, "ta": 3.31000, "eu": 4.61000, "ba": 5.02000, "ra": 5.15000,
"cr": 2.88000, "li": 3.49000, "k": 5.23000, "rb": 5.59000, "cs": 6.05000, "fr": 5.70000,
"mg": (3.21000, 5.21000), "ti": (2.95000, 4.68000), "zn": (2.66000, 4.95000),
"os": (2.73000, 4.32000), "sc": (3.31000, 5.27000), "zr": (3.23000, 5.15000),
"hf": (3.20000, 5.08000), "gd": (3.63000, 5.78000), "tb": (3.62000, 5.69000),
"dy": (3.61000, 5.65000), "ho": (3.60000, 5.61000), "er": (3.59000, 5.60000),
"tm": (3.58000, 5.57000), "lu": 3.51000, "be": (2.29000, 3.58000),
"re": (2.76000, 4.46000), "co": (3.54000, 4.52000), "ru": (2.71000, 4.28000),
"c": 2.46 # Graphene
}
# Merge cutoff as minimum interatomic distance given the lattice constants above (units = Angstroms)
[docs]
self.min_dist = {
"ag": 2.88, "au": 2.88, "al": 2.86378, "ni": 2.48902, "cu": 2.55266,
"pd": 2.75065, "pt": 2.77186, "pb": 3.50018, "th": 3.59210, "ce": 2.60215, "yb": 3.88202,
"na": 3.65, "fe": 2.48549, "mo": 2.72798, "w": 2.73664, "v": 2.61540,
"nb": 2.85788, "ta": 2.86654, "eu": 3.99238, "ba": 4.34745, "ra": 4.46003,
"cr": 2.49415, "li": 3.02243, "k": 4.52931, "rb": 4.84108, "cs": 5.23945, "fr": 4.93634,
"mg": 3.21, "ti": 2.95, "zn": 2.66, "os": 2.73, "sc": 3.31, "zr": 3.23,
"hf": 3.2, "gd": 3.63, "tb": 3.62, "dy": 3.61, "ho": 3.6, "er": 3.59,
"tm": 3.58, "lu": 3.51, "be": 2.29, "re": 2.76, "co": 3.54, "ru": 2.71,
"c": 1.42
}
# Atomic packing of metals
[docs]
self.atomic_arrangement = {
"ag": "FCC", "au": "FCC", "al": "FCC", "ni": "FCC", "cu": "FCC",
"pd": "FCC", "pt": "FCC", "pb": "FCC", "th": "FCC", "ce": "FCC", "yb": "FCC",
"na": "BCC", "fe": "BCC", "mo": "BCC", "w": "BCC", "v": "BCC",
"nb": "BCC", "ta": "BCC", "eu": "BCC", "ba": "BCC", "ra": "BCC",
"cr": "BCC", "li": "BCC", "k": "BCC", "rb": "BCC", "cs": "BCC", "fr": "BCC",
"mg": "HCP", "ti": "HCP", "zn": "HCP", "os": "HCP", "sc": "HCP", "zr": "HCP",
"hf": "HCP", "gd": "HCP", "tb": "HCP", "dy": "HCP", "ho": "HCP", "er": "HCP",
"tm": "HCP", "lu": "HCP", "be": "HCP", "re": "HCP", "co": "HCP", "ru": "HCP"
}
# List of accepted atom types
# RDKit accepted file extensions for load/conversion and optimization
[docs]
self.rdkit_file_extensions = [".smi",".sdf", ".mol", ".pdb", ".xyz"]
[docs]
self.rdkit_file_extensions_opt = [".pdb", ".xyz", ".sdf"]
[docs]
self.rdkit_file_extensions_confs = [".pdb", ".xyz", ".sdf"]
# RDKit accepted force fields
[docs]
self.rdkit_force_fields = ['mmff94','mmff94s','uff']