pub struct Element {
pub atomic_num: u8,
pub symbol: &'static str,
pub period: u8,
pub rcov: f32,
pub rvdw: f32,
pub mass: f64,
pub outer_electrons: u8,
pub common_isotope: u16,
pub common_isotope_mass: f64,
pub electronegativity: Option<f64>,
pub valences: &'static [i8],
}Expand description
单个元素的静态数据。
Fields§
§atomic_num: u8原子序数。0 为 SMILES 通配原子 *。
symbol: &'static str元素符号(首字母大写形式)
period: u8周期
rcov: f32共价半径 (Å)。
1.9 是上游的“未知“哨兵,不是一个测量值 —— atomic_data.cpp:34
原话是 rCov (…). 1.9 if unknown.。转录时那句声明丢了,于是表里 19 处
1.9 里,Z=97..112 那连续 16 个是“没有数据“,而 Y / Tm / Np 恰好真的
就是 1.90 —— 下游分不出这两件事。
同一个 struct 里 electronegativity 花五行
文档反对的正是这种做法(用一个魔数当“不知道“)。这里没有改成 Option,
是因为下游(omgkit-conf 的界矩阵)拿它当兜底模型用,给 None 就得
在那里再编一个数 —— 换汤不换药。要改就得连同“没有共价半径的元素
该怎么建界“一起改,那是另一件事。
rvdw: f32范德华半径 (Å)
mass: f64标准原子量。
f64 而不是 f32:上游表里写的是 12.011,存成 f32 再读回来是
12.0109996…,差 3e-7。这点差在化学上无关紧要,可它让“与参照逐位相同“
变成“与参照差在末几位“,判据只好配一个容差 —— 容差一旦有了,就再也
分不出“存储精度“和“抄错了一位“。电负性同理。
outer_electrons: u8外层电子数
common_isotope: u16最常见同位素的质量数
common_isotope_mass: f64最常见同位素的精确质量
electronegativity: Option<f64>Pauling 电负性。
None 表示该元素没有公认的 Pauling 值(稀有气体 He/Ne/Ar/Rn、
Pm、Eu、Tb、Yb、Fr 等),不是“还没填“。两者必须能被下游分开:
拿一个默认数顶上去,调用方就再也看不出这一格是量出来的还是补的。
valences: &'static [i8]默认价列表。-1 表示无价约束(该元素不参与隐式氢推断)。
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Element
impl RefUnwindSafe for Element
impl Send for Element
impl Sync for Element
impl Unpin for Element
impl UnsafeUnpin for Element
impl UnwindSafe for Element
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