Expand description
vsepr-rs: A lightweight, high-performance molecular geometry optimizer.
This crate provides a generic engine to refine 3D molecular coordinates based on VSEPR (Valence Shell Electron Pair Repulsion) theory.
It is designed as a scaffolder or pre-optimizer: it quickly transforms raw or overlapping coordinates into a chemically sensible 3D structure that can then be passed to more rigorous force fields like UFF (Universal Force Field).
§Example
use vsepr_rs::{VseprOptimizer, AtomTrait, BondTrait};
struct MyAtom { pos: [f64; 3], element: usize }
impl AtomTrait for MyAtom {
fn get_position(&self) -> [f64; 3] { self.pos }
fn set_position(&mut self, pos: [f64; 3]) { self.pos = pos; }
fn atomic_number(&self) -> usize { self.element }
}
struct MyBond { pair: (usize, usize) }
impl BondTrait for MyBond {
fn get_atom_indices(&self) -> (usize, usize) { self.pair }
fn get_bond_order(&self) -> f32 { 1.0 }
}
let mut atoms = vec![
MyAtom { pos: [0.0, 0.0, 0.0], element: 6 }, // C
MyAtom { pos: [0.1, 0.0, 0.0], element: 1 }, // H
MyAtom { pos: [0.0, 0.1, 0.0], element: 1 }, // H
MyAtom { pos: [0.0, 0.0, 0.1], element: 1 }, // H
MyAtom { pos: [-0.1, 0.0, 0.0], element: 1 }, // H
];
let bonds = vec![
MyBond { pair: (0, 1) }, MyBond { pair: (0, 2) },
MyBond { pair: (0, 3) }, MyBond { pair: (0, 4) },
];
let optimizer = VseprOptimizer::default();
optimizer.optimize(&mut atoms, &bonds);Re-exports§
pub use math::Vec3;pub use optimizer::VseprOptimizer;pub use traits::get_covalent_radius;pub use traits::AtomTrait;pub use traits::BondTrait;pub use vsepr::calculate_steric_number;pub use vsepr::Geometry;