1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
mod calculation_step; pub mod helper_equation_traits; mod integrators; pub mod quadrature; pub mod range_generator; pub use calculation_step::CalculationStep; mod calculation_result; pub use calculation_result::CalculationResult; mod utils; use fehler::throws; use crate::errors::Error; #[throws] pub fn calculate_single_integral<Q: quadrature::QuadratureSingleIntegral>( quadrature: Q, first_integral_begin: f64, first_integral_end: f64, ) -> f64 { let result = integrators::Integrator::integrate::<Q, Q>( first_integral_begin, first_integral_end, quadrature.get_step_size(), quadrature.clone(), quadrature, )?; result } #[throws] pub fn calculate_double_integral<Q: quadrature::QuadratureDoubleIntegral>( quadrature: Q, first_integral_begin: f64, first_integral_end: f64, second_integral_begin: &str, second_integral_end: &str, ) -> f64 { let second_integrator = integrators::SecondIntegrator::<Q, Q>::new( second_integral_begin, second_integral_end, quadrature.get_step_size().1, quadrature.clone(), )?; let result = integrators::Integrator::integrate::<integrators::SecondIntegrator<Q, Q>, Q>( first_integral_begin, first_integral_end, quadrature.get_step_size().0, second_integrator, quadrature, )?; result } #[throws] pub fn calculate_triple_integral<Q: quadrature::QuadratureTripleIntegral>( quadrature: Q, first_integral_begin: f64, first_integral_end: f64, second_integral_begin: &str, second_integral_end: &str, third_integral_begin: &str, third_integral_end: &str, ) -> f64 { let third_integrator = integrators::ThirdIntegrator::<Q, Q>::new( third_integral_begin, third_integral_end, quadrature.get_step_size().2, quadrature.clone(), )?; let second_integrator = integrators::SecondIntegrator::<Q, integrators::ThirdIntegrator<Q, Q>>::new( second_integral_begin, second_integral_end, quadrature.get_step_size().1, third_integrator, )?; let result = integrators::Integrator::integrate::< integrators::SecondIntegrator<Q, integrators::ThirdIntegrator<Q, Q>>, Q, >( first_integral_begin, first_integral_end, quadrature.get_step_size().0, second_integrator, quadrature, )?; result }