use std::f64::consts::PI;
#[allow(clippy::too_many_arguments)]
pub fn dspace(
irez: i32,
d2201: f64,
d2211: f64,
d3210: f64,
d3222: f64,
d4410: f64,
d4422: f64,
d5220: f64,
d5232: f64,
d5421: f64,
d5433: f64,
dedt: f64,
del1: f64,
del2: f64,
del3: f64,
didt: f64,
dmdt: f64,
dnodt: f64,
domdt: f64,
argpo: f64,
argpdot: f64,
t: f64,
tc: f64,
gsto: f64,
xfact: f64,
xlamo: f64,
no: f64,
atime: &mut f64,
em: &mut f64,
argpm: &mut f64,
inclm: &mut f64,
xli: &mut f64,
mm: &mut f64,
xni: &mut f64,
nodem: &mut f64,
dndt: &mut f64,
nm: &mut f64,
) {
const TWOPI: f64 = 2.0 * PI;
let mut iretn: i32;
let delt: f64;
let mut ft: f64;
let mut x2li: f64;
let mut x2omi: f64;
let xl: f64;
let mut xldot: f64 = 0.0;
let mut xnddt: f64 = 0.0;
let mut xndt: f64 = 0.0;
let mut xomi: f64;
const FASX2: f64 = 0.13130908;
const FASX4: f64 = 2.8843198;
const FASX6: f64 = 0.37448087;
const G22: f64 = 5.7686396;
const G32: f64 = 0.95240898;
const G44: f64 = 1.8014998;
const G52: f64 = 1.0508330;
const G54: f64 = 4.4108898;
const RPTIM: f64 = 4.375_269_088_011_3e-3; const STEPP: f64 = 720.0;
const STEPN: f64 = -720.0;
const STEP2: f64 = 259200.0;
*dndt = 0.0;
let theta: f64 = tc.mul_add(RPTIM, gsto) % TWOPI;
*em += dedt * t;
*inclm += didt * t;
*argpm += domdt * t;
*nodem += dnodt * t;
*mm += dmdt * t;
ft = 0.0;
if irez != 0 {
if (*atime == 0.0) || (t * *atime <= 0.0) || (f64::abs(t) < f64::abs(*atime)) {
*atime = 0.0;
*xni = no;
*xli = xlamo;
}
if t > 0.0 {
delt = STEPP;
} else {
delt = STEPN;
}
iretn = 381; while iretn == 381 {
if irez != 2 {
xndt = del3.mul_add(f64::sin(3.0 * (*xli - FASX6)), del1.mul_add(f64::sin(*xli - FASX2), del2 * f64::sin(2.0 * (*xli - FASX4))));
xldot = *xni + xfact;
xnddt = (3.0 * del3).mul_add(f64::cos(3.0 * (*xli - FASX6)), del1.mul_add(f64::cos(*xli - FASX2), 2.0 * del2 * f64::cos(2.0 * (*xli - FASX4))));
xnddt *= xldot;
} else {
xomi = argpdot.mul_add(*atime, argpo);
x2omi = xomi + xomi;
x2li = *xli + *xli;
xndt = d5433.mul_add(f64::sin(-xomi + x2li - G54), d5421.mul_add(f64::sin(xomi + x2li - G54), d5232.mul_add(f64::sin(-xomi + *xli - G52), d5220.mul_add(f64::sin(xomi + *xli - G52), d4422.mul_add(f64::sin(x2li - G44), d4410.mul_add(f64::sin(x2omi + x2li - G44), d3222.mul_add(f64::sin(-xomi + *xli - G32), d3210.mul_add(f64::sin(xomi + *xli - G32), d2201.mul_add(f64::sin(x2omi + *xli - G22), d2211 * f64::sin(*xli - G22))))))))));
xldot = *xni + xfact;
xnddt = 2.0f64.mul_add(d5433.mul_add(f64::cos(-xomi + x2li - G54), d5421.mul_add(f64::cos(xomi + x2li - G54), d4410.mul_add(f64::cos(x2omi + x2li - G44), d4422 * f64::cos(x2li - G44)))), d5232.mul_add(f64::cos(-xomi + *xli - G52), d5220.mul_add(f64::cos(xomi + *xli - G52), d3222.mul_add(f64::cos(-xomi + *xli - G32), d3210.mul_add(f64::cos(xomi + *xli - G32), d2201.mul_add(f64::cos(x2omi + *xli - G22), d2211 * f64::cos(*xli - G22)))))));
xnddt *= xldot;
}
if f64::abs(t - *atime) >= STEPP {
iretn = 381;
} else
{
ft = t - *atime;
iretn = 0;
}
if iretn == 381 {
*xli = xndt.mul_add(STEP2, xldot.mul_add(delt, *xli));
*xni = xnddt.mul_add(STEP2, xndt.mul_add(delt, *xni));
*atime += delt;
}
}
*nm = (xnddt * ft * ft).mul_add(0.5, xndt.mul_add(ft, *xni));
xl = (xndt * ft * ft).mul_add(0.5, xldot.mul_add(ft, *xli));
if irez != 1 {
*mm = 2.0f64.mul_add(theta, 2.0f64.mul_add(-(*nodem), xl));
*dndt = *nm - no;
} else {
*mm = xl - *nodem - *argpm + theta;
*dndt = *nm - no;
}
*nm = no + *dndt;
}
}