The NumericalPropagationConfig controls the numerical integration method, step sizes, and error tolerances. Brahe provides preset configurations for common scenarios and allows custom configurations for specific requirements.
usebraheasbh;fnmain(){// Create a fully-configured integrator configurationletconfig=bh::NumericalPropagationConfig{// Integration method: Dormand-Prince 5(4)method:bh::IntegratorMethod::DP54,// Integrator settings: tolerances and step controlintegrator:bh::IntegratorConfig{abs_tol:1e-9,rel_tol:1e-6,initial_step:Some(60.0),// 60 second initial stepmin_step:Some(1e-6),// Minimum step sizemax_step:Some(300.0),// Maximum step size (5 minutes)step_safety_factor:Some(0.9),// Safety marginmin_step_scale_factor:Some(0.2),// Minimum step reductionmax_step_scale_factor:Some(10.0),// Maximum step growthmax_step_attempts:10,// Max attempts per stepfixed_step_size:None,// Not using fixed step},// Variational configuration: STM and sensitivity settingsvariational:bh::VariationalConfig{enable_stm:true,enable_sensitivity:false,store_stm_history:true,store_sensitivity_history:false,jacobian_method:bh::DifferenceMethod::Central,sensitivity_method:bh::DifferenceMethod::Central,},// Acceleration storage for higher-order interpolationstore_accelerations:true,// Interpolation method: Linear is safe for any state dimension// Use HermiteCubic or HermiteQuintic for 6D orbital statesinterpolation_method:bh::InterpolationMethod::Linear,};println!("Method: {:?}",config.method);println!("Integrator: {:?}",config.integrator);println!("Variational: {:?}",config.variational);}
importbraheasbh# RKN1210: High-order adaptive integrator for maximum precisionconfig=bh.NumericalPropagationConfig.high_precision()# Or manually configure with custom tolerancesconfig_custom=(bh.NumericalPropagationConfig.with_method(bh.IntegrationMethod.RKN1210).with_abs_tol(1e-12).with_rel_tol(1e-10))print(f"Method: {config.method}")print(f"abs_tol: {config.abs_tol}")print(f"rel_tol: {config.rel_tol}")
fnmain(){// RKN1210: High-order adaptive integrator for maximum precisionletconfig=bh::NumericalPropagationConfig::high_precision();// Or manually configure with custom tolerancesletconfig_custom=bh::NumericalPropagationConfig{method:bh::IntegratorMethod::RKN1210,integrator:bh::IntegratorConfig::adaptive(1e-12,1e-10),variational:bh::VariationalConfig::default(),store_accelerations:true,interpolation_method:bh::InterpolationMethod::Linear,};println!("Method: {:?}",config.method);println!("abs_tol: {:e}",config.integrator.abs_tol);println!("rel_tol: {:e}",config.integrator.rel_tol);// Silence unused warninglet_=config_custom;}
importbraheasbh# Different tolerance levels for various use casesconfig_quick=(bh.NumericalPropagationConfig.default().with_abs_tol(1e-3).with_rel_tol(1e-1))config_standard=bh.NumericalPropagationConfig.default()# abs=1e-6, rel=1e-3config_precision=(bh.NumericalPropagationConfig.default().with_abs_tol(1e-9).with_rel_tol(1e-6))config_maximum=bh.NumericalPropagationConfig.high_precision()# abs=1e-10, rel=1e-8print(f"Quick: abs={config_quick.abs_tol}, rel={config_quick.rel_tol}")print(f"Standard: abs={config_standard.abs_tol}, rel={config_standard.rel_tol}")print(f"Precision: abs={config_precision.abs_tol}, rel={config_precision.rel_tol}")print(f"Maximum: abs={config_maximum.abs_tol}, rel={config_maximum.rel_tol}")
fnmain(){// Different tolerance levels for various use casesletconfig_quick=bh::NumericalPropagationConfig{integrator:bh::IntegratorConfig::adaptive(1e-3,1e-1),..bh::NumericalPropagationConfig::default()};letconfig_standard=bh::NumericalPropagationConfig::default();// abs=1e-6, rel=1e-3letconfig_precision=bh::NumericalPropagationConfig{integrator:bh::IntegratorConfig::adaptive(1e-9,1e-6),..bh::NumericalPropagationConfig::default()};letconfig_maximum=bh::NumericalPropagationConfig::high_precision();// abs=1e-10, rel=1e-8println!("Quick: abs={:e}, rel={:e}",config_quick.integrator.abs_tol,config_quick.integrator.rel_tol);println!("Standard: abs={:e}, rel={:e}",config_standard.integrator.abs_tol,config_standard.integrator.rel_tol);println!("Precision: abs={:e}, rel={:e}",config_precision.integrator.abs_tol,config_precision.integrator.rel_tol);println!("Maximum: abs={:e}, rel={:e}",config_maximum.integrator.abs_tol,config_maximum.integrator.rel_tol);}
importbraheasbh# Chain with_* methods to customize from a presetconfig=(bh.NumericalPropagationConfig.default().with_abs_tol(1e-9).with_rel_tol(1e-6).with_max_step(300.0).with_initial_step(60.0))print(f"Method: {config.method}")print(f"abs_tol: {config.abs_tol}")print(f"rel_tol: {config.rel_tol}")
fnmain(){// Use struct update syntax (..) to customize from a presetletconfig=bh::NumericalPropagationConfig{integrator:bh::IntegratorConfig{abs_tol:1e-9,rel_tol:1e-6,initial_step:Some(60.0),max_step:Some(300.0),..bh::IntegratorConfig::default()},..bh::NumericalPropagationConfig::default()};println!("Method: {:?}",config.method);println!("abs_tol: {:e}",config.integrator.abs_tol);println!("rel_tol: {:e}",config.integrator.rel_tol);println!("max_step: {:?}",config.integrator.max_step);}
importbraheasbh# Preset configurations for common use casesdefault=bh.NumericalPropagationConfig.default()high_precision=bh.NumericalPropagationConfig.high_precision()rkf45=bh.NumericalPropagationConfig.with_method(bh.IntegrationMethod.RKF45)rk4=bh.NumericalPropagationConfig.with_method(bh.IntegrationMethod.RK4)print(f"default(): {default.method}")print(f"high_precision(): {high_precision.method}")print(f"with_method(RKF45): {rkf45.method}")print(f"with_method(RK4): {rk4.method}")
fnmain(){// Preset configurations for common use casesletdefault=bh::NumericalPropagationConfig::default();lethigh_precision=bh::NumericalPropagationConfig::high_precision();letrkf45=bh::NumericalPropagationConfig::with_method(bh::IntegratorMethod::RKF45);letrk4=bh::NumericalPropagationConfig::with_method(bh::IntegratorMethod::RK4);println!("default(): {:?}",default.method);println!("high_precision(): {:?}",high_precision.method);println!("with_method(RKF45): {:?}",rkf45.method);println!("with_method(RK4): {:?}",rk4.method);}
The propagator can optionally integrate variational equations to compute the State Transition Matrix (STM) and sensitivity matrices. This is enabled via VariationalConfig: