use crate::multi::generator::Generator;
use crate::multi::rule::{
scales_norms, BasicErrorCoeff, Data, Rule, ScalesNorms, ADAPTIVE_ERROR_COEFF,
};
const N: usize = 3;
const TOTAL: usize = 13;
const FINAL: usize = TOTAL - 3;
pub(crate) const fn generate_rule() -> Rule<N, FINAL, TOTAL> {
let evaluations = EVALUATIONS;
let basic_error_coeff = BASIC_ERROR_COEFF;
let adaptive_error_coeff = ADAPTIVE_ERROR_COEFF;
let ratio = RATIO;
let scales_norms = SCALES_NORMS;
let initial_data = INITIAL_DATA;
let final_data = FINAL_DATA;
Rule {
initial_data,
final_data,
scales_norms,
basic_error_coeff,
adaptive_error_coeff,
evaluations,
ratio,
}
}
const EVALUATIONS: usize = 127;
const WEIGHTS: [[f64; 5]; TOTAL] = [
[
0.792_307_815_110_573_4e-2,
0.171_500_624_822_468_4e+1,
0.193_601_497_894_952_6e+1,
0.517_082_819_560_576_0e+0,
0.205_440_450_381_852_0e+1,
],
[
0.679_717_739_278_808_0e-1,
-0.375_589_381_588_920_9e+0,
-0.367_344_940_375_426_8e+0,
0.144_526_914_491_404_4e-1,
0.137_775_998_849_012_0e-1,
],
[
0.108_698_653_880_582_5e-2,
0.148_863_214_514_054_9e+0,
0.292_977_865_789_817_6e-1,
-0.360_148_966_399_593_2e+0,
-0.576_806_291_790_441_0e+0,
],
[
0.183_863_366_221_282_9e+0,
-0.249_704_664_062_082_3e+0,
-0.115_188_352_026_031_5e+0,
0.362_830_700_341_848_5e+0,
0.372_683_504_770_032_8e-1,
],
[
0.336_211_977_782_903_1e-1,
0.179_250_141_913_520_4e+0,
0.508_665_822_087_221_8e-1,
0.714_880_265_087_272_9e-2,
0.681_487_893_977_721_9e-2,
],
[
0.101_375_112_333_406_2e-1,
0.344_612_675_897_389_0e-2,
0.445_391_108_778_646_9e-1,
-0.922_285_289_602_296_6e-1,
0.572_316_973_385_184_9e-1,
],
[
0.168_764_868_398_523_5e-2,
-0.514_048_318_555_582_5e-2,
-0.228_782_825_712_590_0e-1,
0.171_933_973_247_172_5e-1,
-0.449_301_874_381_128_5e-1,
],
[
0.134_646_856_451_280_7e+0,
0.653_601_783_987_642_5e-2,
0.290_892_621_634_583_3e-1,
-0.102_141_653_746_035_0e+0,
0.272_923_657_386_634_8e-1,
],
[
0.175_014_588_460_038_6e-2,
-0.651_345_493_922_970_0e-3,
-0.289_888_435_066_920_7e-2,
-0.750_439_786_108_049_3e-2,
0.354_747_395_055_699_0e-3,
],
[
0.775_233_638_383_745_4e-1,
-0.630_467_243_354_720_4e-2,
-0.280_596_341_330_749_5e-1,
0.164_836_253_772_671_1e-1,
0.157_136_679_973_955_1e-1,
],
[
0.246_186_490_277_025_1e+0,
0.126_695_939_978_826_3e-1,
0.563_874_136_114_588_4e-1,
0.523_461_015_846_933_4e-1,
0.499_009_921_927_856_7e-1,
],
[
0.679_794_486_848_303_9e-1,
-0.545_424_101_864_793_1e-2,
-0.242_746_961_194_245_1e-1,
0.144_543_233_161_306_6e-1,
0.137_791_555_266_677_0e-1,
],
[
0.141_996_282_330_071_3e-1,
0.482_699_527_476_842_7e-2,
0.214_830_703_418_288_2e-1,
0.301_923_627_536_777_7e-2,
0.287_820_642_309_987_2e-2,
],
];
const RATIO: f64 = (0.500_000_000_000_000e+0 / 0.190_000_000_000_000e+0)
* (0.500_000_000_000_000e+0 / 0.190_000_000_000_000e+0);
const SCALES_NORMS: [ScalesNorms<TOTAL>; 3] = scales_norms::<N, TOTAL>(&WEIGHTS, RULE_POINTS);
const INITIAL_DATA: [Data<N>; 3] = [
Data::new(
Generator::new([
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
]),
[
0.792_307_815_110_573_4e-2,
0.171_500_624_822_468_4e+1,
0.193_601_497_894_952_6e+1,
0.517_082_819_560_576_0e+0,
0.205_440_450_381_852_0e+1,
],
),
Data::new(
Generator::new([
0.190_000_000_000_000e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
]),
[
0.679_717_739_278_808_0e-1,
-0.375_589_381_588_920_9e+0,
-0.367_344_940_375_426_8e+0,
0.144_526_914_491_404_4e-1,
0.137_775_998_849_012_0e-1,
],
),
Data::new(
Generator::new([
0.500_000_000_000_000e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
]),
[
0.108_698_653_880_582_5e-2,
0.148_863_214_514_054_9e+0,
0.292_977_865_789_817_6e-1,
-0.360_148_966_399_593_2e+0,
-0.576_806_291_790_441_0e+0,
],
),
];
const FINAL_DATA: [Data<N>; FINAL] = [
Data::new(
Generator::new([
0.750_000_000_000_000e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
]),
[
0.183_863_366_221_282_9e+0,
-0.249_704_664_062_082_3e+0,
-0.115_188_352_026_031_5e+0,
0.362_830_700_341_848_5e+0,
0.372_683_504_770_032_8e-1,
],
),
Data::new(
Generator::new([
0.800_000_000_000_000e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
]),
[
0.336_211_977_782_903_1e-1,
0.179_250_141_913_520_4e+0,
0.508_665_822_087_221_8e-1,
0.714_880_265_087_272_9e-2,
0.681_487_893_977_721_9e-2,
],
),
Data::new(
Generator::new([
0.994_999_999_999_999_9e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
]),
[
0.101_375_112_333_406_2e-1,
0.344_612_675_897_389_0e-2,
0.445_391_108_778_646_9e-1,
-0.922_285_289_602_296_6e-1,
0.572_316_973_385_184_9e-1,
],
),
Data::new(
Generator::new([
0.998_734_499_835_140e+0,
0.998_734_499_835_140e+0,
0.000_000_000_000_000e+0,
]),
[
0.168_764_868_398_523_5e-2,
-0.514_048_318_555_582_5e-2,
-0.228_782_825_712_590_0e-1,
0.171_933_973_247_172_5e-1,
-0.449_301_874_381_128_5e-1,
],
),
Data::new(
Generator::new([
0.779_370_368_567_242_3e+0,
0.779_370_368_567_242_3e+0,
0.000_000_000_000_000e+0,
]),
[
0.134_646_856_451_280_7e+0,
0.653_601_783_987_642_5e-2,
0.290_892_621_634_583_3e-1,
-0.102_141_653_746_035_0e+0,
0.272_923_657_386_634_8e-1,
],
),
Data::new(
Generator::new([
0.999_969_899_308_876_7e+0,
0.999_969_899_308_876_7e+0,
0.999_969_899_308_876_7e+0,
]),
[
0.175_014_588_460_038_6e-2,
-0.651_345_493_922_970_0e-3,
-0.289_888_435_066_920_7e-2,
-0.750_439_786_108_049_3e-2,
0.354_747_395_055_699_0e-3,
],
),
Data::new(
Generator::new([
0.790_263_722_477_178_8e+0,
0.790_263_722_477_178_8e+0,
0.790_263_722_477_178_8e+0,
]),
[
0.775_233_638_383_745_4e-1,
-0.630_467_243_354_720_4e-2,
-0.280_596_341_330_749_5e-1,
0.164_836_253_772_671_1e-1,
0.157_136_679_973_955_1e-1,
],
),
Data::new(
Generator::new([
0.440_339_668_765_073_7e+0,
0.440_339_668_765_073_7e+0,
0.440_339_668_765_073_7e+0,
]),
[
0.246_186_490_277_025_1e+0,
0.126_695_939_978_826_3e-1,
0.563_874_136_114_588_4e-1,
0.523_461_015_846_933_4e-1,
0.499_009_921_927_856_7e-1,
],
),
Data::new(
Generator::new([
0.954_937_382_279_459_3e+0,
0.437_847_845_900_686_2e+0,
0.437_847_845_900_686_2e+0,
]),
[
0.679_794_486_848_303_9e-1,
-0.545_424_101_864_793_1e-2,
-0.242_746_961_194_245_1e-1,
0.144_543_233_161_306_6e-1,
0.137_791_555_266_677_0e-1,
],
),
Data::new(
Generator::new([
0.966_109_313_363_074_8e+0,
0.966_109_313_363_074_8e+0,
0.457_710_587_776_313_4e+0,
]),
[
0.141_996_282_330_071_3e-1,
0.482_699_527_476_842_7e-2,
0.214_830_703_418_288_2e-1,
0.301_923_627_536_777_7e-2,
0.287_820_642_309_987_2e-2,
],
),
];
const RULE_POINTS: [f64; TOTAL] = [
1.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 8.0, 8.0, 8.0, 24.0, 24.0,
];
const BASIC_ERROR_COEFF: BasicErrorCoeff = BasicErrorCoeff::new(4.0, 4.0, 0.5, 3.0);