73 lines
1.7 KiB
Rust
73 lines
1.7 KiB
Rust
//! 辅助函数。
|
|
//!
|
|
//! 重构自 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);
|
|
}
|
|
}
|