//! 辅助函数。 //! //! 重构自 TLUSTY `raph.f` /// hedif 子程序的辅助函数。 /// /// 计算用于氢氦扩散的辅助量。 /// /// # 参数 /// /// * `gam` - gamma 参数 /// * `z1` - z1 参数 /// * `z2` - z2 参数 /// * `a1` - a1 参数 /// * `a2` - a2 参数 /// /// # 返回值 /// /// dgam 值。 pub fn raph(gam: f64, z1: f64, z2: f64, a1: f64, a2: f64) -> f64 { let b = 1.0 + gam; let c = z1 + z2 * gam; let d = a1 + a2 * gam; let e = (1.0 + z1) + gam * (1.0 + z2); let den = (c * d / (gam * b)) + (d * (z1 - z2) * (z1 - z2) / (b * e)); let dnum = e * (a2 * z1 - a1 * z2) + d * (z2 - z1); dnum / den } #[cfg(test)] mod tests { use super::*; #[test] fn test_raph_basic() { // 基本测试 let result = raph(1.0, 0.5, 0.3, 1.0, 2.0); assert!(result.is_finite()); } #[test] fn test_raph_symmetry() { // 测试一些边界情况 let result1 = raph(0.5, 1.0, 1.0, 1.0, 1.0); // 当 z1 = z2 且 a1 = a2 时 let result2 = raph(0.5, 1.0, 1.0, 1.0, 1.0); assert!((result1 - result2).abs() < 1e-15); } #[test] fn test_raph_values() { // 验证计算 let gam = 2.0; let z1 = 1.0; let z2 = 2.0; let a1 = 0.5; let a2 = 1.5; let b = 1.0 + gam; let c = z1 + z2 * gam; let d = a1 + a2 * gam; let e = (1.0 + z1) + gam * (1.0 + z2); let den = (c * d / (gam * b)) + (d * (z1 - z2) * (z1 - z2) / (b * e)); let dnum = e * (a2 * z1 - a1 * z2) + d * (z2 - z1); let expected = dnum / den; let result = raph(gam, z1, z2, a1, a2); assert!((result - expected).abs() < 1e-15); } }