Skip to main content
← OpenMECP Documentation

Geometry

Struct Geometry 

Source
pub struct Geometry {
    pub elements: Vec<String>,
    pub coords: DVector<f64>,
    pub num_atoms: usize,
}
Expand description

Represents a molecular geometry with atomic elements and Cartesian coordinates.

The Geometry struct stores the fundamental information about a molecular structure: the chemical elements of each atom and their 3D positions in Cartesian coordinates. It uses a flat representation where coordinates are stored as a single-dimensional vector in the order [x1, y1, z1, x2, y2, z2, …].

§Coordinate System

  • Units: Angstrom (Å) - standard molecular geometry unit
  • Coordinate frame: Cartesian (x, y, z)
  • Origin: Arbitrary (typically centered for convenience)

§Storage Format

Coordinates are stored in a DVector<f64> for efficient linear algebra operations. The flat representation enables direct use with nalgebra for matrix operations commonly required in geometry optimization.

§Examples

use omecp::geometry::Geometry;

// Create a water molecule geometry (coordinates in Angstrom)
let elements = vec![
    "O".to_string(),
    "H".to_string(),
    "H".to_string(),
];
let coords = vec![
    0.0, 0.0, 0.0,        // O at origin
    0.757, 0.586, 0.0,    // H1 (Angstrom)
    -0.757, 0.586, 0.0,   // H2 (Angstrom)
];

let geometry = Geometry::new(elements, coords);
assert_eq!(geometry.num_atoms, 3);

// Get coordinates of atom 0 (oxygen)
let oxygen_coords = geometry.get_atom_coords(0);
println!("Oxygen position: ({:.3}, {:.3}, {:.3}) Angstrom",
         oxygen_coords[0], oxygen_coords[1], oxygen_coords[2]);

Fields§

§elements: Vec<String>

Chemical element symbols for each atom in order

§coords: DVector<f64>

Flattened Cartesian coordinates [x1, y1, z1, x2, y2, z2, …] in Angstrom (Å)

§num_atoms: usize

Number of atoms in the molecule

Implementations§

Source§

impl Geometry

Source

pub fn new(elements: Vec<String>, coords: Vec<f64>) -> Self

Create a new Geometry from element list and coordinate vector.

§Arguments
  • elements - Vector of element symbols (e.g., “C”, “H”, “O”)
  • coords - Flattened coordinate vector of length 3 × num_atoms
§Panics

Panics if coords.len() != elements.len() * 3, ensuring data consistency.

§Examples
use omecp::geometry::Geometry;

let elements = vec!["C".to_string(), "H".to_string()];
let coords = vec![0.0, 0.0, 0.0, 1.0, 0.0, 0.0];
let geometry = Geometry::new(elements, coords);
Source

pub fn get_atom_coords(&self, atom_idx: usize) -> [f64; 3]

Get the Cartesian coordinates of a specific atom.

§Arguments
  • atom_idx - Zero-based index of the atom (0 = first atom)
§Returns

Array of three coordinates [x, y, z] in Angstroms.

§Examples
use omecp::geometry::Geometry;

let elements = vec!["O".to_string(), "H".to_string(), "H".to_string()];
let coords = vec![0.0, 0.0, 0.0, 0.757, 0.586, 0.0, -0.757, 0.586, 0.0];
let geometry = Geometry::new(elements, coords);

// Get oxygen coordinates
let o_coords = geometry.get_atom_coords(0);
assert_eq!(o_coords, [0.0, 0.0, 0.0]);

// Get first hydrogen coordinates
let h1_coords = geometry.get_atom_coords(1);
assert_eq!(h1_coords, [0.757, 0.586, 0.0]);

Trait Implementations§

Source§

impl Clone for Geometry

Source§

fn clone(&self) -> Geometry

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Geometry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<&Geometry> for SerializableGeometry

Source§

fn from(geom: &Geometry) -> Self

Converts to this type from the input type.
Source§

impl From<SerializableGeometry> for Geometry

Source§

fn from(ser_geom: SerializableGeometry) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.