1个稳定版本
1.0.0 | 2024年6月23日 |
---|
#3 在 #mass
140KB
2.5K SLoC
ParsecAccess
一个Rust包,用于访问恒星演化轨迹的PARSEC数据库。
使用方法
在您的 Cargo.toml
中包含 parsec_access
包,对于几乎所有用例,还需要包含 simple-si-units
包
[dependencies]
parsec_access = "1.0"
simple-si-units = "1.1"
首次使用时,PARSEC数据将下载并存储在您的计算机上。控制台输出将告诉您位置,但您无需担心。
然后进行懒加载初始化,这意味着第一次尝试访问它时才会将其加载到内存中。出于性能考虑,访问函数不验证数据。函数 is_data_ready()
填补了这个空白。在访问数据的代码部分开始时调用它一次是良好的实践。
示例
use parsec_access::getters::*;
// The input for initial mass and age is typed using the simple-si-units crate.
use simple_si_units::base::Mass;
use simple_si_units::base::Time;
if !is_data_ready() {
// In your productive code, do some graceful error handling instead.
panic!("Loading the PARSEC data failed.");
}
// The main use-case is mapping a metallicity, initial mass and age to other physical parameters.
let metallicity_mass_fraction = 0.004;
let initial_mass = Mass::from_solar_mass(1.8);
let current_age = Time::from_Gyr(0.6);
let parameters = get_closest_parameters(metallicity_mass_fraction, initial_mass, current_age);
println!("The star has a current mass of {} solar masses.", parameters.mass.to_solar_mass());
println!("The star has a current temperature of {}.", parameters.temperature);
println!("The star has a current radius of {} km.", parameters.radius.to_km());
println!("The star has a current luminosity of {} sol.", parameters.luminosity_in_solar);
// If performance is an issue and for example your metallicity and initial mass is fixed, you can ask for the index which corresponds to your parameters and pass that on to subsequent calls.
let metallicity_index = get_closest_metallicity_index_from_mass_fraction(metallicity_mass_fraction);
let mass_index = get_closest_mass_index(metallicity_index, initial_mass);
// You can also get data structures higher up the hierarchy (by index or value).
let trajectory = get_trajectory(metallicity_index, mass_index);
println!("The star is expected to reach the proud age of {} Gyr.", trajectory.lifetime.to_Gyr());
贡献
欢迎贡献,尽管我感觉这个包已经功能完善。如果您的看法不同,请告诉我。
有一个计划的GitHub工作流程会定期检查 PARSEC数据库 的任何更新,所以任何变化都会及时被纳入。
开发
如果您缺少一个功能并希望做出贡献,请知道 access
模块中的代码是由 scripts/generate_code.py
脚本自动生成的。
许可证
本软件根据 MIT 许可证分发。简而言之,这意味着所有代码都是公开的,您可以使用它而无需支付任何费用。
依赖关系
~9–24MB
~322K SLoC