Skip to main content

Crate vsepr_rs

Crate vsepr_rs 

Source
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;

Modules§

forcefield
math
optimizer
traits
vsepr