pub struct UnitCell {
pub cell_type: CellType,
/* private fields */
}Fields§
§cell_type: CellTypeImplementations§
Source§impl UnitCell
impl UnitCell
Sourcepub fn new_none() -> Self
pub fn new_none() -> Self
Examples found in repository?
examples/benzene.rs (line 32)
4fn main() {
5 // 1. Create atoms for Benzene (6 Carbons, 6 Hydrogens)
6 let mut atoms = Vec::new();
7
8 // Carbon ring (approximate positions)
9 for i in 0..6 {
10 let angle = (i as f64) * 60.0f64.to_radians();
11 let pos = DVec3::new(angle.cos() * 1.4, angle.sin() * 1.4, 0.0);
12 atoms.push(Atom::new(6, pos)); // 6 is Atomic Number for Carbon
13 }
14
15 // Hydrogen atoms (approximate positions)
16 for i in 0..6 {
17 let angle = (i as f64) * 60.0f64.to_radians();
18 let pos = DVec3::new(angle.cos() * 2.4, angle.sin() * 2.4, 0.0);
19 atoms.push(Atom::new(1, pos)); // 1 is Atomic Number for Hydrogen
20 }
21
22 // 2. Define bonds
23 let mut bonds = Vec::new();
24 for i in 0..6 {
25 // C-C aromatic bonds (order 1.5)
26 bonds.push(Bond { atom_indices: (i, (i + 1) % 6), order: 1.5 });
27 // C-H single bonds (order 1.0)
28 bonds.push(Bond { atom_indices: (i, i + 6), order: 1.0 });
29 }
30
31 // 3. Setup the system (No periodic boundary conditions)
32 let cell = UnitCell::new_none();
33 let mut system = System::new(atoms, bonds, cell);
34
35 // 4. Configure the optimizer
36 // Max 1000 iterations, force threshold 1e-3 kcal/mol/A
37 let optimizer = UffOptimizer::new(1000, 1e-3)
38 .with_verbose(true); // Print progress to console
39
40 println!("Starting optimization of Benzene...");
41
42 // 5. Run the optimization
43 optimizer.optimize(&mut system);
44
45 println!("Optimization complete!");
46
47 // Check final C-C bond length
48 let d01 = (system.atoms[0].position - system.atoms[1].position).length();
49 println!("Final C-C bond length: {:.4} Å", d01);
50}pub fn new_orthorhombic(size: DVec3) -> Self
pub fn new_triclinic(matrix: DMat3) -> Self
Sourcepub fn distance_vector(&self, p1: DVec3, p2: DVec3) -> DVec3
pub fn distance_vector(&self, p1: DVec3, p2: DVec3) -> DVec3
Returns the shortest displacement vector from p2 to p1 considering PBC.
pub fn matrix(&self) -> DMat3
Trait Implementations§
Auto Trait Implementations§
impl Freeze for UnitCell
impl RefUnwindSafe for UnitCell
impl Send for UnitCell
impl Sync for UnitCell
impl Unpin for UnitCell
impl UnwindSafe for UnitCell
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more