use crate::multi::generator::Generator;
use crate::multi::rule::{
scales_norms, BasicErrorCoeff, Data, Rule, ScalesNorms, ADAPTIVE_ERROR_COEFF,
};
const N: usize = 2;
const TOTAL: usize = 14;
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 = 65;
const WEIGHTS: [[f64; 5]; TOTAL] = [
[
0.337_969_236_013_446_0e-1,
0.321_377_548_905_076_3e+0,
0.337_290_088_328_898_7e+0,
-0.826_412_382_252_567_7e+0,
0.653_909_433_957_523_2e+0,
],
[
0.950_858_960_759_776_1e-1,
-0.176_734_163_674_384_4e+0,
-0.164_490_306_034_449_1e+0,
0.306_583_861_409_436_0e+0,
-0.204_161_415_442_463_2e+0,
],
[
0.117_600_646_805_696_2e+0,
0.734_760_053_746_607_2e-1,
0.770_784_991_163_462_2e-1,
0.238_929_253_832_943_5e-2,
-0.174_698_151_579_499_0e+0,
],
[
0.265_777_458_632_695_0e-1,
-0.363_802_200_436_475_4e-1,
-0.380_447_835_850_631_0e-1,
-0.134_302_415_799_722_2e+0,
0.393_793_967_141_780_3e-1,
],
[
0.170_144_177_020_064_0e-1,
0.212_529_792_209_871_2e-1,
0.222_355_994_038_080_6e-1,
0.883_336_684_053_390_0e-1,
0.697_452_054_593_399_2e-2,
],
[
0.000_000_000_000_000e+0,
0.146_098_420_402_691_3e+0,
0.148_069_387_976_593_1e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
],
[
0.162_659_309_863_741_0e-1,
0.174_761_328_615_209_9e-1,
0.446_714_370_218_581_4e-5,
0.978_628_307_416_829_2e-3,
0.666_770_217_177_825_8e-2,
],
[
0.134_489_265_852_619_9e+0,
0.144_495_404_564_158_2e+0,
0.150_894_476_707_413_0e+0,
-0.131_922_788_914_751_9e+0,
0.551_296_062_154_430_4e-1,
],
[
0.132_803_216_546_014_9e+0,
0.130_768_797_600_132_5e-3,
0.364_720_010_751_621_5e-4,
0.799_001_220_015_063_0e-2,
0.544_384_638_127_860_7e-1,
],
[
0.563_747_476_999_187_0e-1,
0.538_099_231_394_116_1e-3,
0.577_719_899_901_388_0e-3,
0.339_174_707_976_062_6e-2,
0.231_090_386_395_393_4e-1,
],
[
0.390_827_908_131_050_0e-2,
0.104_225_957_688_981_4e-3,
0.104_175_731_368_817_7e-3,
0.229_491_571_828_326_4e-2,
0.150_693_774_747_718_9e-1,
],
[
0.301_279_877_743_215_0e-1,
-0.140_115_286_504_573_3e-2,
-0.145_282_226_704_781_9e-2,
-0.135_858_498_611_919_7e-1,
-0.605_702_164_890_189_0e-1,
],
[
0.103_087_323_468_916_6e+0,
0.804_178_818_151_476_3e-2,
0.833_833_996_878_370_5e-2,
0.402_586_685_905_780_9e-1,
0.422_573_765_468_633_7e-1,
],
[
0.625_000_000_000_000e-1,
-0.142_041_655_275_938_3e+0,
-0.147_279_632_923_196_0e+0,
0.376_026_858_006_399_2e-2,
0.256_198_914_212_309_9e-1,
],
];
const RATIO: f64 = (0.701_393_364_453_426_6e+0 / 0.251_712_934_345_310_9e+0)
* (0.701_393_364_453_426_6e+0 / 0.251_712_934_345_310_9e+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.337_969_236_013_446_0e-1,
0.321_377_548_905_076_3e+0,
0.337_290_088_328_898_7e+0,
-0.826_412_382_252_567_7e+0,
0.653_909_433_957_523_2e+0,
],
),
Data::new(
Generator::new([0.251_712_934_345_310_9e+0, 0.000_000_000_000_000e+0]),
[
0.950_858_960_759_776_1e-1,
-0.176_734_163_674_384_4e+0,
-0.164_490_306_034_449_1e+0,
0.306_583_861_409_436_0e+0,
-0.204_161_415_442_463_2e+0,
],
),
Data::new(
Generator::new([0.701_393_364_453_426_6e+0, 0.000_000_000_000_000e+0]),
[
0.117_600_646_805_696_2e+0,
0.734_760_053_746_607_2e-1,
0.770_784_991_163_462_2e-1,
0.238_929_253_832_943_5e-2,
-0.174_698_151_579_499_0e+0,
],
),
];
const FINAL_DATA: [Data<N>; FINAL] = [
Data::new(
Generator::new([0.959_096_063_161_996_2e+0, 0.000_000_000_000_000e+0]),
[
0.265_777_458_632_695_0e-1,
-0.363_802_200_436_475_4e-1,
-0.380_447_835_850_631_0e-1,
-0.134_302_415_799_722_2e+0,
0.393_793_967_141_780_3e-1,
],
),
Data::new(
Generator::new([0.995_601_047_855_212_7e+0, 0.000_000_000_000_000e+0]),
[
0.170_144_177_020_064_0e-1,
0.212_529_792_209_871_2e-1,
0.222_355_994_038_080_6e-1,
0.883_336_684_053_390_0e-1,
0.697_452_054_593_399_2e-2,
],
),
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.146_098_420_402_691_3e+0,
0.148_069_387_976_593_1e+0,
0.000_000_000_000_000e+0,
0.000_000_000_000_000e+0,
],
),
Data::new(
Generator::new([0.159_454_465_829_755_9e+0, 0.159_454_465_829_755_9e+0]),
[
0.162_659_309_863_741_0e-1,
0.174_761_328_615_209_9e-1,
0.446_714_370_218_581_4e-5,
0.978_628_307_416_829_2e-3,
0.666_770_217_177_825_8e-2,
],
),
Data::new(
Generator::new([0.380_899_113_594_018_8e+0, 0.380_899_113_594_018_8e+0]),
[
0.134_489_265_852_619_9e+0,
0.144_495_404_564_158_2e+0,
0.150_894_476_707_413_0e+0,
-0.131_922_788_914_751_9e+0,
0.551_296_062_154_430_4e-1,
],
),
Data::new(
Generator::new([0.658_276_925_526_719_2e+0, 0.658_276_925_526_719_2e+0]),
[
0.132_803_216_546_014_9e+0,
0.130_768_797_600_132_5e-3,
0.364_720_010_751_621_5e-4,
0.799_001_220_015_063_0e-2,
0.544_384_638_127_860_7e-1,
],
),
Data::new(
Generator::new([0.876_147_316_502_931_5e+0, 0.876_147_316_502_931_5e+0]),
[
0.563_747_476_999_187_0e-1,
0.538_099_231_394_116_1e-3,
0.577_719_899_901_388_0e-3,
0.339_174_707_976_062_6e-2,
0.231_090_386_395_393_4e-1,
],
),
Data::new(
Generator::new([0.998_243_184_053_198_0e+0, 0.998_243_184_053_198_0e+0]),
[
0.390_827_908_131_050_0e-2,
0.104_225_957_688_981_4e-3,
0.104_175_731_368_817_7e-3,
0.229_491_571_828_326_4e-2,
0.150_693_774_747_718_9e-1,
],
),
Data::new(
Generator::new([0.979_022_265_816_846_2e+0, 0.649_228_432_564_538_9e+0]),
[
0.301_279_877_743_215_0e-1,
-0.140_115_286_504_573_3e-2,
-0.145_282_226_704_781_9e-2,
-0.135_858_498_611_919_7e-1,
-0.605_702_164_890_189_0e-1,
],
),
Data::new(
Generator::new([0.872_742_120_113_123_9e+0, 0.358_261_464_588_122_8e+0]),
[
0.103_087_323_468_916_6e+0,
0.804_178_818_151_476_3e-2,
0.833_833_996_878_370_5e-2,
0.402_586_685_905_780_9e-1,
0.422_573_765_468_633_7e-1,
],
),
Data::new(
Generator::new([0.566_666_666_666_666_6e+0, 0.207_777_777_777_777_8e+0]),
[
0.625_000_000_000_000e-1,
-0.142_041_655_275_938_3e+0,
-0.147_279_632_923_196_0e+0,
0.376_026_858_006_399_2e-2,
0.256_198_914_212_309_9e-1,
],
),
];
const RULE_POINTS: [f64; TOTAL] = [
1.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 8.0, 8.0, 8.0,
];
const BASIC_ERROR_COEFF: BasicErrorCoeff = BasicErrorCoeff::new(10.0, 10.0, 1.0, 5.0);