dscom function

Map<String, dynamic> dscom(
  1. Map<String, dynamic> options
)

Implementation

Map<String, dynamic> dscom(Map<String, dynamic> options) {
  final epoch = options['epoch'];
  final ep = options['ep'];
  final argpp = options['argpp'];
  final tc = options['tc'];
  final inclp = options['inclp'];
  final nodep = options['nodep'];
  final np = options['np'];

  var a1;
  var a2;
  var a3;
  var a4;
  var a5;
  var a6;
  var a7;
  var a8;
  var a9;
  var a10;
  var cc;
  var x1;
  var x2;
  var x3;
  var x4;
  var x5;
  var x6;
  var x7;
  var x8;
  var zcosg;
  var zsing;
  var zcosh;
  var zsinh;
  var zcosi;
  var zsini;

  var ss1;
  var ss2;
  var ss3;
  var ss4;
  var ss5;
  var ss6;
  var ss7;
  var sz1;
  var sz2;
  var sz3;
  var sz11;
  var sz12;
  var sz13;
  var sz21;
  var sz22;
  var sz23;
  var sz31;
  var sz32;
  var sz33;
  var s1;
  var s2;
  var s3;
  var s4;
  var s5;
  var s6;
  var s7;
  var z1;
  var z2;
  var z3;
  var z11;
  var z12;
  var z13;
  var z21;
  var z22;
  var z23;
  var z31;
  var z32;
  var z33;

  // -------------------------- finalants -------------------------
  final zes = 0.01675;
  final zel = 0.05490;
  final c1ss = 2.9864797e-6;
  final c1l = 4.7968065e-7;
  final zsinis = 0.39785416;
  final zcosis = 0.91744867;
  final zcosgs = 0.1945905;
  final zsings = -0.98088458;

  //  --------------------- local variables ------------------------
  final nm = np;
  final em = ep;
  final snodm = Math.sin(nodep);
  final cnodm = Math.cos(nodep);
  final sinomm = Math.sin(argpp);
  final cosomm = Math.cos(argpp);
  final sinim = Math.sin(inclp);
  final cosim = Math.cos(inclp);
  final emsq = em * em;
  final betasq = 1.0 - emsq;
  final rtemsq = Math.sqrt(betasq);

  //  ----------------- initialize lunar solar terms ---------------
  final peo = 0.0;
  final pinco = 0.0;
  final plo = 0.0;
  final pgho = 0.0;
  final pho = 0.0;
  final day = epoch + 18261.5 + (tc / 1440.0);
  final xnodce = (4.5236020 - (9.2422029e-4 * day)) % twoPi;
  final stem = Math.sin(xnodce);
  final ctem = Math.cos(xnodce);
  final zcosil = 0.91375164 - (0.03568096 * ctem);
  final zsinil = Math.sqrt(1.0 - (zcosil * zcosil));
  final zsinhl = (0.089683511 * stem) / zsinil;
  final zcoshl = Math.sqrt(1.0 - (zsinhl * zsinhl));
  final gam = 5.8351514 + (0.0019443680 * day);
  var zx = (0.39785416 * stem) / zsinil;
  final zy = (zcoshl * ctem) + (0.91744867 * zsinhl * stem);
  zx = Math.atan2(zx, zy);
  zx += gam - xnodce;
  final zcosgl = Math.cos(zx);
  final zsingl = Math.sin(zx);

  //  ------------------------- do solar terms ---------------------
  zcosg = zcosgs;
  zsing = zsings;
  zcosi = zcosis;
  zsini = zsinis;
  zcosh = cnodm;
  zsinh = snodm;
  cc = c1ss;
  final xnoi = 1.0 / nm;

  var lsflg = 0;
  while (lsflg < 2) {
    lsflg += 1;
    a1 = (zcosg * zcosh) + (zsing * zcosi * zsinh);
    a3 = (-zsing * zcosh) + (zcosg * zcosi * zsinh);
    a7 = (-zcosg * zsinh) + (zsing * zcosi * zcosh);
    a8 = zsing * zsini;
    a9 = (zsing * zsinh) + (zcosg * zcosi * zcosh);
    a10 = zcosg * zsini;
    a2 = (cosim * a7) + (sinim * a8);
    a4 = (cosim * a9) + (sinim * a10);
    a5 = (-sinim * a7) + (cosim * a8);
    a6 = (-sinim * a9) + (cosim * a10);

    x1 = (a1 * cosomm) + (a2 * sinomm);
    x2 = (a3 * cosomm) + (a4 * sinomm);
    x3 = (-a1 * sinomm) + (a2 * cosomm);
    x4 = (-a3 * sinomm) + (a4 * cosomm);
    x5 = a5 * sinomm;
    x6 = a6 * sinomm;
    x7 = a5 * cosomm;
    x8 = a6 * cosomm;

    z31 = (12.0 * x1 * x1) - (3.0 * x3 * x3);
    z32 = (24.0 * x1 * x2) - (6.0 * x3 * x4);
    z33 = (12.0 * x2 * x2) - (3.0 * x4 * x4);

    z1 = (3.0 * ((a1 * a1) + (a2 * a2))) + (z31 * emsq);
    z2 = (6.0 * ((a1 * a3) + (a2 * a4))) + (z32 * emsq);
    z3 = (3.0 * ((a3 * a3) + (a4 * a4))) + (z33 * emsq);

    z11 = (-6.0 * a1 * a5) + (emsq * ((-24.0 * x1 * x7) - (6.0 * x3 * x5)));
    z12 = (-6.0 * ((a1 * a6) + (a3 * a5))) +
        (emsq *
            ((-24.0 * ((x2 * x7) + (x1 * x8))) +
                (-6.0 * ((x3 * x6) + (x4 * x5)))));

    z13 = (-6.0 * a3 * a6) + (emsq * ((-24.0 * x2 * x8) - (6.0 * x4 * x6)));

    z21 = (6.0 * a2 * a5) + (emsq * ((24.0 * x1 * x5) - (6.0 * x3 * x7)));
    z22 = (6.0 * ((a4 * a5) + (a2 * a6))) +
        (emsq *
            ((24.0 * ((x2 * x5) + (x1 * x6))) -
                (6.0 * ((x4 * x7) + (x3 * x8)))));
    z23 = (6.0 * a4 * a6) + (emsq * ((24.0 * x2 * x6) - (6.0 * x4 * x8)));

    z1 = z1 + z1 + (betasq * z31);
    z2 = z2 + z2 + (betasq * z32);
    z3 = z3 + z3 + (betasq * z33);
    s3 = cc * xnoi;
    s2 = (-0.5 * s3) / rtemsq;
    s4 = s3 * rtemsq;
    s1 = -15.0 * em * s4;
    s5 = (x1 * x3) + (x2 * x4);
    s6 = (x2 * x3) + (x1 * x4);
    s7 = (x2 * x4) - (x1 * x3);

    //  ----------------------- do lunar terms -------------------
    if (lsflg == 1) {
      ss1 = s1;
      ss2 = s2;
      ss3 = s3;
      ss4 = s4;
      ss5 = s5;
      ss6 = s6;
      ss7 = s7;
      sz1 = z1;
      sz2 = z2;
      sz3 = z3;
      sz11 = z11;
      sz12 = z12;
      sz13 = z13;
      sz21 = z21;
      sz22 = z22;
      sz23 = z23;
      sz31 = z31;
      sz32 = z32;
      sz33 = z33;
      zcosg = zcosgl;
      zsing = zsingl;
      zcosi = zcosil;
      zsini = zsinil;
      zcosh = (zcoshl * cnodm) + (zsinhl * snodm);
      zsinh = (snodm * zcoshl) - (cnodm * zsinhl);
      cc = c1l;
    }
  }

  final zmol = (4.7199672 + ((0.22997150 * day) - gam)) % twoPi;
  final zmos = (6.2565837 + (0.017201977 * day)) % twoPi;

  //  ------------------------ do solar terms ----------------------
  final se2 = 2.0 * ss1 * ss6;
  final se3 = 2.0 * ss1 * ss7;
  final si2 = 2.0 * ss2 * sz12;
  final si3 = 2.0 * ss2 * (sz13 - sz11);
  final sl2 = -2.0 * ss3 * sz2;
  final sl3 = -2.0 * ss3 * (sz3 - sz1);
  final sl4 = -2.0 * ss3 * (-21.0 - (9.0 * emsq)) * zes;
  final sgh2 = 2.0 * ss4 * sz32;
  final sgh3 = 2.0 * ss4 * (sz33 - sz31);
  final sgh4 = -18.0 * ss4 * zes;
  final sh2 = -2.0 * ss2 * sz22;
  final sh3 = -2.0 * ss2 * (sz23 - sz21);

  //  ------------------------ do lunar terms ----------------------
  final ee2 = 2.0 * s1 * s6;
  final e3 = 2.0 * s1 * s7;
  final xi2 = 2.0 * s2 * z12;
  final xi3 = 2.0 * s2 * (z13 - z11);
  final xl2 = -2.0 * s3 * z2;
  final xl3 = -2.0 * s3 * (z3 - z1);
  final xl4 = -2.0 * s3 * (-21.0 - (9.0 * emsq)) * zel;
  final xgh2 = 2.0 * s4 * z32;
  final xgh3 = 2.0 * s4 * (z33 - z31);
  final xgh4 = -18.0 * s4 * zel;
  final xh2 = -2.0 * s2 * z22;
  final xh3 = -2.0 * s2 * (z23 - z21);

  return {
    'snodm': snodm,
    'cnodm': cnodm,
    'sinim': sinim,
    'cosim': cosim,
    'sinomm': sinomm,
    'cosomm': cosomm,
    'day': day,
    'e3': e3,
    'ee2': ee2,
    'em': em,
    'emsq': emsq,
    'gam': gam,
    'peo': peo,
    'pgho': pgho,
    'pho': pho,
    'pinco': pinco,
    'plo': plo,
    'rtemsq': rtemsq,
    'se2': se2,
    'se3': se3,
    'sgh2': sgh2,
    'sgh3': sgh3,
    'sgh4': sgh4,
    'sh2': sh2,
    'sh3': sh3,
    'si2': si2,
    'si3': si3,
    'sl2': sl2,
    'sl3': sl3,
    'sl4': sl4,
    's1': s1,
    's2': s2,
    's3': s3,
    's4': s4,
    's5': s5,
    's6': s6,
    's7': s7,
    'ss1': ss1,
    'ss2': ss2,
    'ss3': ss3,
    'ss4': ss4,
    'ss5': ss5,
    'ss6': ss6,
    'ss7': ss7,
    'sz1': sz1,
    'sz2': sz2,
    'sz3': sz3,
    'sz11': sz11,
    'sz12': sz12,
    'sz13': sz13,
    'sz21': sz21,
    'sz22': sz22,
    'sz23': sz23,
    'sz31': sz31,
    'sz32': sz32,
    'sz33': sz33,
    'xgh2': xgh2,
    'xgh3': xgh3,
    'xgh4': xgh4,
    'xh2': xh2,
    'xh3': xh3,
    'xi2': xi2,
    'xi3': xi3,
    'xl2': xl2,
    'xl3': xl3,
    'xl4': xl4,
    'nm': nm,
    'z1': z1,
    'z2': z2,
    'z3': z3,
    'z11': z11,
    'z12': z12,
    'z13': z13,
    'z21': z21,
    'z22': z22,
    'z23': z23,
    'z31': z31,
    'z32': z32,
    'z33': z33,
    'zmol': zmol,
    'zmos': zmos,
  };
}