use spintronics::orbitronics::orbital_hall::{
cr_pt_system, material_ohe_ranking, sigma_oh_to_si, ti_pt_system,
};
use spintronics::prelude::*;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("=== Orbital Hall Effect: Light Metals vs Heavy Metals ===\n");
println!("=== Orbital Hall Conductivity Ranking ===");
let ranking = material_ohe_ranking();
println!(
"{:<6} {:>15} {:>10} {:>12}",
"Metal", "sigma_OH", "SOC", "OHE/Pt-SHE"
);
println!(
"{:<6} {:>15} {:>10} {:>12}",
"", "(hbar/e)(Ohm*cm)^-1", "(rel.)", "ratio"
);
println!("{}", "-".repeat(50));
for (name, sigma_oh) in &ranking {
let ratio = sigma_oh / 2000.0; let soc = match *name {
"Cr" => 0.04,
"Ti" => 0.02,
"V" => 0.03,
"Cu" => 0.01,
"Al" => 0.005,
"Pt" => 1.0,
"W" => 0.8,
"Mn" => 0.05,
_ => 0.0,
};
println!(
"{:<6} {:>15.0} {:>10.3} {:>12.2}",
name, sigma_oh, soc, ratio
);
}
println!("\n Key: Cr OHE = 5000 >> Pt SHE = 2000, yet Cr SOC << Pt SOC");
println!(" This proves OHE does not require strong spin-orbit coupling!\n");
println!("=== OHE Systems: Cr/Pt vs Ti/Pt ===");
let cr_system = cr_pt_system();
let ti_system = ti_pt_system();
let e_field = Vector3::new(1.0e5, 0.0, 0.0);
let j_orbital_cr = cr_system.orbital_current_density(e_field);
let j_orbital_ti = ti_system.orbital_current_density(e_field);
let j_spin_cr = cr_system.effective_spin_current(e_field);
let j_spin_ti = ti_system.effective_spin_current(e_field);
println!(" Electric field: E = {:.0e} V/m along x\n", e_field.x);
println!(
" {:<12} {:>18} {:>18} {:>12}",
"System", "|J_orbital|", "|J_spin_eff|", "Enhancement"
);
println!(" {}", "-".repeat(65));
println!(
" {:<12} {:>18.4e} {:>18.4e} {:>12.2}x",
"Cr/Pt",
j_orbital_cr.magnitude(),
j_spin_cr.magnitude(),
cr_system.enhancement_over_pt_she()
);
println!(
" {:<12} {:>18.4e} {:>18.4e} {:>12.2}x",
"Ti/Pt",
j_orbital_ti.magnitude(),
j_spin_ti.magnitude(),
ti_system.enhancement_over_pt_she()
);
println!("\n=== Giant OHE in Light Metals ===");
let cr = OrbitalHallMaterial::chromium();
let ti = OrbitalHallMaterial::titanium();
let pt = OrbitalHallMaterial::platinum();
println!(
" Cr: sigma_OH = {:.0}, SOC = {:.3} (light metal: {})",
cr.sigma_oh,
cr.soc_strength,
cr.is_light_metal()
);
println!(
" Ti: sigma_OH = {:.0}, SOC = {:.3} (light metal: {})",
ti.sigma_oh,
ti.soc_strength,
ti.is_light_metal()
);
println!(
" Pt: sigma_OH = {:.0}, SOC = {:.3} (light metal: {})",
pt.sigma_oh,
pt.soc_strength,
pt.is_light_metal()
);
println!(
"\n Cr OHE / Pt SHE ratio = {:.2}",
cr.ohe_to_pt_she_ratio()
);
println!(" Ti OHE / Pt SHE ratio = {:.2}", ti.ohe_to_pt_she_ratio());
println!("\n=== Orbital Torques: Cr/Pt/CoFeB ===");
let ot_cr = OrbitalTorque::cr_pt_cofeb();
let ot_ti = OrbitalTorque::ti_pt_cofeb();
let m_perp = Vector3::new(0.0, 0.0, 1.0); let j_charge = 1.0e11; let current_dir = Vector3::new(1.0, 0.0, 0.0);
let (tau_dl_cr, tau_fl_cr) = ot_cr.compute_torques(m_perp, j_charge, current_dir);
let (tau_dl_ti, tau_fl_ti) = ot_ti.compute_torques(m_perp, j_charge, current_dir);
println!(" J_c = {:.0e} A/m^2, m = z (perpendicular)\n", j_charge);
println!(
" {:<12} {:>15} {:>15} {:>10}",
"System", "|tau_DL|", "|tau_FL|", "OT/SOT"
);
println!(" {}", "-".repeat(57));
let ratio_cr = ot_cr.ot_to_sot_ratio(j_charge, m_perp, current_dir);
let ratio_ti = ot_ti.ot_to_sot_ratio(j_charge, m_perp, current_dir);
println!(
" {:<12} {:>15.4e} {:>15.4e} {:>10.3}",
"Cr/Pt/CoFeB",
tau_dl_cr.magnitude(),
tau_fl_cr.magnitude(),
ratio_cr
);
println!(
" {:<12} {:>15.4e} {:>15.4e} {:>10.3}",
"Ti/Pt/CoFeB",
tau_dl_ti.magnitude(),
tau_fl_ti.magnitude(),
ratio_ti
);
println!("\n=== Orbital Accumulation at Interfaces ===");
let e_mag = 1.0e5; let lambda_l = 10.0e-9;
let acc_cr = cr_system.orbital_accumulation(e_mag, lambda_l);
let acc_ti = ti_system.orbital_accumulation(e_mag, lambda_l);
println!(
" E = {:.0e} V/m, lambda_L = {:.0} nm",
e_mag,
lambda_l * 1e9
);
println!(" Cr/Pt accumulation: {:.4e} hbar", acc_cr);
println!(" Ti/Pt accumulation: {:.4e} hbar", acc_ti);
println!("\n=== SI Unit Conversion ===");
let sigma_si = sigma_oh_to_si(5000.0);
println!(
" Cr: sigma_OH = 5000 (hbar/e)(Ohm*cm)^-1 = {:.4e} (hbar/(2e))*S/m",
sigma_si
);
println!("\n=== Summary ===");
println!("Orbitronics key findings:");
println!(" - Light metals (Cr, Ti) have giant OHE despite weak SOC");
println!(
" - Cr OHE ({:.0}) exceeds Pt SHE (2000) by {:.1}x",
cr.sigma_oh,
cr.ohe_to_pt_she_ratio()
);
println!(
" - Orbital-to-spin conversion at Cr/Pt interface: eta = {:.2}",
cr_system.converter.conversion_efficiency
);
println!(" - Orbital torques can exceed conventional SOT for optimized stacks");
Ok(())
}