use crate::{rfam::*, utils::*};
use crate::fundamental_args::{fal03::*, faf03::*, falp03::*, fave03::*, fapa03::*, fad03::*, faom03::*, fae03::*, };
pub fn s06(date1: f64, date2: f64, x: f64, y: f64)->f64
{
let mut fa = [0.0; 8];
struct TERM {
nfa: [i32; 8],
s: f64, c: f64,
}
impl TERM {
pub const fn new (nfa: [i32; 8], s: f64, c: f64,) ->Self{
TERM { nfa: nfa, s: s, c: c }
}
}
const SP: [f64; 6] = [
94.00e-6,
3808.65e-6,
-122.68e-6,
-72574.11e-6,
27.98e-6,
15.62e-6
];
const S0: [TERM;33] = [
TERM::new([0, 0, 0, 0, 1, 0, 0, 0], -2640.73e-6, 0.39e-6 ),
TERM::new([0, 0, 0, 0, 2, 0, 0, 0], -63.53e-6, 0.02e-6 ),
TERM::new([0, 0, 2, -2, 3, 0, 0, 0], -11.75e-6, -0.01e-6 ),
TERM::new([0, 0, 2, -2, 1, 0, 0, 0], -11.21e-6, -0.01e-6 ),
TERM::new([0, 0, 2, -2, 2, 0, 0, 0], 4.57e-6, 0.00e-6 ),
TERM::new([0, 0, 2, 0, 3, 0, 0, 0], -2.02e-6, 0.00e-6 ),
TERM::new([0, 0, 2, 0, 1, 0, 0, 0], -1.98e-6, 0.00e-6 ),
TERM::new([0, 0, 0, 0, 3, 0, 0, 0], 1.72e-6, 0.00e-6 ),
TERM::new([0, 1, 0, 0, 1, 0, 0, 0], 1.41e-6, 0.01e-6 ),
TERM::new([0, 1, 0, 0, -1, 0, 0, 0], 1.26e-6, 0.01e-6 ),
TERM::new([1, 0, 0, 0, -1, 0, 0, 0], 0.63e-6, 0.00e-6 ),
TERM::new([1, 0, 0, 0, 1, 0, 0, 0], 0.63e-6, 0.00e-6 ),
TERM::new([0, 1, 2, -2, 3, 0, 0, 0], -0.46e-6, 0.00e-6 ),
TERM::new([0, 1, 2, -2, 1, 0, 0, 0], -0.45e-6, 0.00e-6 ),
TERM::new([0, 0, 4, -4, 4, 0, 0, 0], -0.36e-6, 0.00e-6 ),
TERM::new([0, 0, 1, -1, 1, -8, 12, 0], 0.24e-6, 0.12e-6 ),
TERM::new([0, 0, 2, 0, 0, 0, 0, 0], -0.32e-6, 0.00e-6 ),
TERM::new([0, 0, 2, 0, 2, 0, 0, 0], -0.28e-6, 0.00e-6 ),
TERM::new([1, 0, 2, 0, 3, 0, 0, 0], -0.27e-6, 0.00e-6 ),
TERM::new([1, 0, 2, 0, 1, 0, 0, 0], -0.26e-6, 0.00e-6 ),
TERM::new([0, 0, 2, -2, 0, 0, 0, 0], 0.21e-6, 0.00e-6 ),
TERM::new([0, 1, -2, 2, -3, 0, 0, 0], -0.19e-6, 0.00e-6 ),
TERM::new([0, 1, -2, 2, -1, 0, 0, 0], -0.18e-6, 0.00e-6 ),
TERM::new([0, 0, 0, 0, 0, 8,-13, -1], 0.10e-6, -0.05e-6 ),
TERM::new([0, 0, 0, 2, 0, 0, 0, 0], -0.15e-6, 0.00e-6 ),
TERM::new([2, 0, -2, 0, -1, 0, 0, 0], 0.14e-6, 0.00e-6 ),
TERM::new([0, 1, 2, -2, 2, 0, 0, 0], 0.14e-6, 0.00e-6 ),
TERM::new([1, 0, 0, -2, 1, 0, 0, 0], -0.14e-6, 0.00e-6 ),
TERM::new([1, 0, 0, -2, -1, 0, 0, 0], -0.14e-6, 0.00e-6 ),
TERM::new([0, 0, 4, -2, 4, 0, 0, 0], -0.13e-6, 0.00e-6 ),
TERM::new([0, 0, 2, -2, 4, 0, 0, 0], 0.11e-6, 0.00e-6 ),
TERM::new([1, 0, -2, 0, -3, 0, 0, 0], -0.11e-6, 0.00e-6 ),
TERM::new([1, 0, -2, 0, -1, 0, 0, 0], -0.11e-6, 0.00e-6 )
];
const S1: [TERM; 3] = [
TERM::new([0, 0, 0, 0, 2, 0, 0, 0], -0.07e-6, 3.57e-6 ),
TERM::new([0, 0, 0, 0, 1, 0, 0, 0], 1.73e-6, -0.03e-6 ),
TERM::new([0, 0, 2, -2, 3, 0, 0, 0], 0.00e-6, 0.48e-6 )
];
const S2: [TERM; 25] = [
TERM::new([0, 0, 0, 0, 1, 0, 0, 0], 743.52e-6, -0.17e-6 ),
TERM::new([0, 0, 2, -2, 2, 0, 0, 0], 56.91e-6, 0.06e-6 ),
TERM::new([0, 0, 2, 0, 2, 0, 0, 0], 9.84e-6, -0.01e-6 ),
TERM::new([0, 0, 0, 0, 2, 0, 0, 0], -8.85e-6, 0.01e-6 ),
TERM::new([0, 1, 0, 0, 0, 0, 0, 0], -6.38e-6, -0.05e-6 ),
TERM::new([1, 0, 0, 0, 0, 0, 0, 0], -3.07e-6, 0.00e-6 ),
TERM::new([0, 1, 2, -2, 2, 0, 0, 0], 2.23e-6, 0.00e-6 ),
TERM::new([0, 0, 2, 0, 1, 0, 0, 0], 1.67e-6, 0.00e-6 ),
TERM::new([1, 0, 2, 0, 2, 0, 0, 0], 1.30e-6, 0.00e-6 ),
TERM::new([0, 1, -2, 2, -2, 0, 0, 0], 0.93e-6, 0.00e-6 ),
TERM::new([1, 0, 0, -2, 0, 0, 0, 0], 0.68e-6, 0.00e-6 ),
TERM::new([0, 0, 2, -2, 1, 0, 0, 0], -0.55e-6, 0.00e-6 ),
TERM::new([1, 0, -2, 0, -2, 0, 0, 0], 0.53e-6, 0.00e-6 ),
TERM::new([0, 0, 0, 2, 0, 0, 0, 0], -0.27e-6, 0.00e-6 ),
TERM::new([1, 0, 0, 0, 1, 0, 0, 0], -0.27e-6, 0.00e-6 ),
TERM::new([1, 0, -2, -2, -2, 0, 0, 0], -0.26e-6, 0.00e-6 ),
TERM::new([1, 0, 0, 0, -1, 0, 0, 0], -0.25e-6, 0.00e-6 ),
TERM::new([1, 0, 2, 0, 1, 0, 0, 0], 0.22e-6, 0.00e-6 ),
TERM::new([2, 0, 0, -2, 0, 0, 0, 0], -0.21e-6, 0.00e-6 ),
TERM::new([2, 0, -2, 0, -1, 0, 0, 0], 0.20e-6, 0.00e-6 ),
TERM::new([0, 0, 2, 2, 2, 0, 0, 0], 0.17e-6, 0.00e-6 ),
TERM::new([2, 0, 2, 0, 2, 0, 0, 0], 0.13e-6, 0.00e-6 ),
TERM::new([2, 0, 0, 0, 0, 0, 0, 0], -0.13e-6, 0.00e-6 ),
TERM::new([1, 0, 2, -2, 2, 0, 0, 0], -0.12e-6, 0.00e-6 ),
TERM::new([0, 0, 2, 0, 0, 0, 0, 0], -0.11e-6, 0.00e-6 )
];
const S3: [TERM; 4] = [
TERM::new([0, 0, 0, 0, 1, 0, 0, 0], 0.30e-6, -23.42e-6 ),
TERM::new([0, 0, 2, -2, 2, 0, 0, 0], -0.03e-6, -1.46e-6 ),
TERM::new([0, 0, 2, 0, 2, 0, 0, 0], -0.01e-6, -0.25e-6 ),
TERM::new([0, 0, 0, 0, 2, 0, 0, 0], 0.00e-6, 0.23e-6 )
];
const S4: [TERM; 1] = [
TERM::new([0, 0, 0, 0, 1, 0, 0, 0], -0.26e-6, -0.01e-6 )
];
let t = ((date1 - URSA_DJ00) + date2) / URSA_DJC;
fa[0] = fal03(t);
fa[1] = falp03(t);
fa[2] = faf03(t);
fa[3] = fad03(t);
fa[4] = faom03(t);
fa[5] = fave03(t);
fa[6] = fae03(t);
fa[7] = fapa03(t);
let mut w0 = SP[0];
let mut w1 = SP[1];
let mut w2 = SP[2];
let mut w3 = SP[3];
let mut w4 = SP[4];
let w5 = SP[5];
for s0_i in S0.iter() {
let mut a = 0.0;
for j in 0..8 {
a += s0_i.nfa[j] as f64 * fa[j];
}
w0 += s0_i.s * sin(a) + s0_i.c * cos(a);
}
for s1_i in S1.iter() {
let mut a = 0.0;
for j in 0..8 {
a += s1_i.nfa[j] as f64 * fa[j];
}
w1 += s1_i.s * sin(a) + s1_i.c * cos(a);
}
for s2_i in S2.iter() {
let mut a = 0.0;
for j in 0..8 {
a += s2_i.nfa[j] as f64 * fa[j];
}
w2 += s2_i.s * sin(a) + s2_i.c * cos(a);
}
for s3_i in S3.iter() {
let mut a = 0.0;
for j in 0..8 {
a += s3_i.nfa[j] as f64 * fa[j];
}
w3 += s3_i.s * sin(a) + s3_i.c * cos(a);
}
for s4_i in S4.iter() {
let mut a = 0.0;
for j in 0..8 {
a += s4_i.nfa[j] as f64 * fa[j];
}
w4 += s4_i.s * sin(a) + s4_i.c * cos(a);
}
(w0 +
(w1 +
(w2 +
(w3 +
(w4 +
w5 * t) * t) * t) * t) * t) * URSA_DAS2R - x*y/2.0
}