# Carbon This example models carbon along the **sp² ↔ sp³ coordination axis**. Graphite stacks planar 3-coordinated (sp²) sheets; diamond is the 4-coordinated (sp³) tetrahedral network; ta-C (tetrahedral amorphous carbon), DLC coatings, glassy carbon, and nanocrystalline diamond all sit at controlled points along that axis. The crystalline ↔ amorphous disorder axis (the one the Si / Cu / SiO₂ / SrTiO₃ examples walk) is another sensible way to explore carbon; we hold it roughly fixed here (every regime is nanocrystalline) so the sp²/sp³ mix is the only variable. The pipeline builds six regimes by mixing **Voronoi grains**: each grain is either a rotated graphite tile (sp², 3 neighbours, 120°) or a rotated diamond tile (sp³, 4 neighbours, 109.5°), and the mix fraction controls where on the sp²/sp³ axis the cell sits. ## Overview All six regimes at 40 × 40 × 40 Å, rotating in sync. Green triangles decorate every sp² atom whose three neighbours form a 120° trigonal planar motif; navy tetrahedra decorate every sp³ atom whose four neighbours form a 109.5° tetrahedron. Drag any panel to orbit manually. Stacked g(r) per regime, most sp²-dominant curve at the bottom, most sp³-dominant at the top. Only one pair appears in the dropdown (`C-C`) because the g(r) measurement uses atomic numbers and both virtual species (`sp2_C`, `sp3_C`) share atomic number 6. The two characteristic bond lengths still split the first peak: a sharp contribution at 1.42 Å (sp² in-plane) and a sharper one at 1.54 Å (sp³ tetrahedral), with the relative peak heights tracking the ``(w_graphite, w_diamond)`` regime weights. ## Reference crystals ```python from ase.io import read atoms_graphite = read("docs/structures/C_graphite.cif") # P6₃/mmc, a=2.467 Å, c=6.708 Å atoms_diamond = read("docs/structures/C_diamond.cif") # Fd-3m, a=3.561 Å ``` ## Composite shell target Carbon uses a **composite shell target**: one `CoordinationShellTarget` per chemistry, stacked into a single object with two virtual species (``sp2_C`` and ``sp3_C``) that share atomic number 6 but carry distinct coordination + bond-angle targets: ```python import tricor as tc shell_sp2 = tc.CoordinationShellTarget.from_atoms(atoms_graphite, phi_num_bins=90) shell_sp3 = tc.CoordinationShellTarget.from_atoms(atoms_diamond, phi_num_bins=90) shell_target = tc.CoordinationShellTarget.from_targets( {"sp2": shell_sp2, "sp3": shell_sp3} ) ``` The relaxer consults each atom's **virtual species index** (assigned per grain during construction) so sp² atoms develop 3 bonds at 120° and sp³ atoms develop 4 bonds at 109.5°, inside the same cell. ## Grain-level sp²/sp³ mixing Every regime is nanocrystalline (multi-grain Voronoi). Each grain is sampled from graphite or diamond by the regime's ``(w_graphite, w_diamond)`` weights: ```python cell.generate( shell_target, grain_size=10.0, grain_sources=[ {"atoms": atoms_graphite, "species_offset": 0, "weight": 0.4}, {"atoms": atoms_diamond, "species_offset": 1, "weight": 0.6}, ], num_steps=120, bond_weight=2.0, angle_weight=1.0, repulsion_weight=2.0, hard_core_scale=0.9, nonbond_push_scale=0.8, displacement_sigma=0.03, ) ``` Atom count scales naturally with the regime's phase mix; diamond is denser than graphite (0.177 vs 0.098 atoms/ų), so diamond-dominant regimes carry more atoms at the same box size. ## Disorder regimes Click any regime for the full interactive trajectory viewer and g3 distribution. ```{toctree} :maxdepth: 1 graphite sp2_rich sp2_leaning sp3_leaning sp3_rich diamond ``` ## Preset summary | Regime | w_graphite | w_diamond | grain_size (Å) | num_steps | |---|---|---|---|---| | `graphite_nc` | 1.00 | 0.00 | 18.0 | 250 | | `sp2_rich` | 0.80 | 0.20 | 18.0 | 250 | | `sp2_leaning` | 0.60 | 0.40 | 18.0 | 250 | | `sp3_leaning` | 0.40 | 0.60 | 18.0 | 250 | | `sp3_rich` | 0.20 | 0.80 | 18.0 | 250 | | `diamond_nc` | 0.00 | 1.00 | 18.0 | 250 | Shell-relax weights are identical across regimes: ``bond_weight=2.5, angle_weight=1.2, repulsion_weight=2.0, hard_core_scale=0.92, nonbond_push_scale=0.85, displacement_sigma=0.02``. All regimes use 18 Å grains with `num_steps = 250` to limit the fraction of atoms at sp²/sp³ grain boundaries — those boundary atoms cannot pass either the triangle (3-coord, 120°) or the tetrahedron (4-coord, 109.5°) detector regardless of relaxation, so a large crystalline interior is the only lever for visible ordering in the mixed regimes.