use std::f64::consts::PI;
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 theta: 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.37526908801129966e-3; const STEPP: f64 = 720.0;
const STEPN: f64 = -720.0;
const STEP2: f64 = 259200.0;
*dndt = 0.0;
theta = (gsto + tc * RPTIM) % TWOPI;
*em = *em + dedt * t;
*inclm = *inclm + didt * t;
*argpm = *argpm + domdt * t;
*nodem = *nodem + dnodt * t;
*mm = *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 = del1 * f64::sin(*xli - FASX2)
+ del2 * f64::sin(2.0 * (*xli - FASX4))
+ del3 * f64::sin(3.0 * (*xli - FASX6));
xldot = *xni + xfact;
xnddt = del1 * f64::cos(*xli - FASX2)
+ 2.0 * del2 * f64::cos(2.0 * (*xli - FASX4))
+ 3.0 * del3 * f64::cos(3.0 * (*xli - FASX6));
xnddt = xnddt * xldot;
} else {
xomi = argpo + argpdot * *atime;
x2omi = xomi + xomi;
x2li = *xli + *xli;
xndt = d2201 * f64::sin(x2omi + *xli - G22)
+ d2211 * f64::sin(*xli - G22)
+ d3210 * f64::sin(xomi + *xli - G32)
+ d3222 * f64::sin(-xomi + *xli - G32)
+ d4410 * f64::sin(x2omi + x2li - G44)
+ d4422 * f64::sin(x2li - G44)
+ d5220 * f64::sin(xomi + *xli - G52)
+ d5232 * f64::sin(-xomi + *xli - G52)
+ d5421 * f64::sin(xomi + x2li - G54)
+ d5433 * f64::sin(-xomi + x2li - G54);
xldot = *xni + xfact;
xnddt = d2201 * f64::cos(x2omi + *xli - G22)
+ d2211 * f64::cos(*xli - G22)
+ d3210 * f64::cos(xomi + *xli - G32)
+ d3222 * f64::cos(-xomi + *xli - G32)
+ d5220 * f64::cos(xomi + *xli - G52)
+ d5232 * f64::cos(-xomi + *xli - G52)
+ 2.0
* (d4410 * f64::cos(x2omi + x2li - G44)
+ d4422 * f64::cos(x2li - G44)
+ d5421 * f64::cos(xomi + x2li - G54)
+ d5433 * f64::cos(-xomi + x2li - G54));
xnddt = xnddt * xldot;
}
if f64::abs(t - *atime) >= STEPP {
iretn = 381;
} else
{
ft = t - *atime;
iretn = 0;
}
if iretn == 381 {
*xli = *xli + xldot * delt + xndt * STEP2;
*xni = *xni + xndt * delt + xnddt * STEP2;
*atime = *atime + delt;
}
}
*nm = *xni + xndt * ft + xnddt * ft * ft * 0.5;
xl = *xli + xldot * ft + xndt * ft * ft * 0.5;
if irez != 1 {
*mm = xl - 2.0 * *nodem + 2.0 * theta;
*dndt = *nm - no;
} else {
*mm = xl - *nodem - *argpm + theta;
*dndt = *nm - no;
}
*nm = no + *dndt;
}
}