// File: /workspace/github_cpp_makefile_star2_O3/jkingan[P]ladyheather/heathmsc.cpp
// Function: calc_gals(double, double, double, double)
double calc_gals(double jd, double lat, double lon, double alt)
{
double tl0, j1900, t, n, el1, sl, pl, hl, pl1, i, nu, tl;
double chi, chi1, ll1, cosalf, sinalf, alf, xi, sigma, ll, lm;
double costht, cosphi, c, rl, ap, ap1, dl, D, gm, gs, g0, love;
double fmjd;

    fmjd = jd - JD_MJD;

    tl0 = fmod(fmjd, 1.0) * 24.0;
    j1900 = fMJD_TO_J1900(fmjd);
    t = j1900 / 36525.0;
    n = POLY(t, 4.523601612, -33.75715303, 0.0000367488, 0.0000000387);
    el1 = POLY(t, 0.01675104, -0.0000418, 0.000000126, 0);
    sl = POLY(t, 4.720023438, 8399.7093, 0.0000440695, 0.0000000329);
    pl = POLY(t, 5.835124721, 71.01800936, -0.0001805446, -0.0000002181);
    hl = POLY(t, 4.881627934,628.3319508, 0.0000052796, 0);
    pl1 = POLY(t, 4.908229467, 0.0300052641, 7.9024e-06, 0.0000000581);
    i = acos(0.9136975738 - 0.0356895353 * cos(n));
    if(i) nu = asin(0.0896765581 * sin(n) / sin(i));
else  nu = 0.0;
    tl = RAD(15.0 * tl0 + lon);
    chi = tl + hl - nu;
    chi1 = tl + hl;
    ll1 = hl + 2.0 * el1 * sin(hl - pl1);
    cosalf = cos(n) * cos(nu) + sin(n) * sin(nu) * 0.9173938078;
    sinalf = 0.3979806546 * sin(n) / sin(i);
    alf = 2.0 * atan(sinalf / (1 + cosalf));
    xi = n - alf;
    sigma = sl - xi;
    ll = sigma + 0.1098 * sin(sl - pl)
        + 0.0037675125 * sin(2 * (sl - pl))
        + 0.0154002735 * sin(sl - 2 * hl + pl)
        + 0.0076940028 * sin(2 * (sl - hl));
    lm = RAD(lat);   // lamda
    costht = sin(lm) * sin(i) * sin(ll) + cos(lm) *
        ( SQ2(cos(0.5 * i)) * cos(ll - chi) + SQ2(sin(0.5 * i)) * cos(ll + chi) );
    cosphi = sin(lm) * 0.3979806546 * sin(ll1) + cos(lm) *
        ( 0.9586969039 * cos(ll1 - chi1) + 0.0413030961 * cos(ll1 + chi1) );
    c = 1 / sqrt(1 + 0.006738 * SQ2(sin(lm)));
    rl = 6.37827e+08 * c + alt * 100.0; // meters to cm
    ap = 2.60930776e-11;
    ap1 = 1.0 / (1.495e+13 * (1.0 - el1 * el1));
    dl = 1.0 / (1.0 / cl
        + ap * el * cos(sl - pl)
        + ap * el * el * cos(2.0 * (sl - pl))
        + 1.875 * ap * ml * el * cos(sl - 2.0 * hl + pl)
        + ap * ml * ml * cos(2.0 * (sl - hl)) );
    D = 1.0 / (1.0 / cl1
        + ap1 * el1 * cos(hl - pl1));
    gm = mu * m * rl * (3.0 * SQ2(costht) - 1.0) / SQ3(dl)
        + 1.5 * mu * m * rl * rl * (5 * SQ3(costht) - 3 * costht) / SQ4(dl);
    gs = mu * s * rl * (3.0 * SQ2(cosphi) - 1.0) / SQ3(D);
    love = (1.0 + love_h2 - 1.5 * love_k2);
    g0 = (gm + gs) * love;

#if 0
    sprintf(plot_title, "%.6f  %.9e  %.3e  %.2f  %.2f  %.2f",
           fmjd,
           (980 - g0) / 100.0,  // g in m/s2 units
           -g0 / 980.0,         // pendulum clock rate
           g0 * 1e6,            // delta g in ugal units
           gm * love * 1e6, gs * love * 1e6);
#endif

    last_ugals = ugals;
    ugals = g0 * 1.0E6;
    have_ugals = 1;
    tide_cm = (ugals * 0.17785) - 0.9766;  // emprical conversion from uGal to cm of displacement

    return ugals;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movsd %xmm3, -0x98(%rbp)
movsd %xmm2, -0x38(%rbp)
movsd %xmm1, -0x28(%rbp)
addsd 0x213c0(%rip), %xmm0    # 0x10b880
movsd %xmm0, -0x10(%rbp)
movsd 0x1eba3(%rip), %xmm1    # 0x109070
callq 0x94d0
movsd %xmm0, -0x40(%rbp)
movsd -0x10(%rbp), %xmm3
addsd 0x41c2c(%rip), %xmm3    # 0x12c110
divsd 0x4134c(%rip), %xmm3    # 0x12b838
movsd 0x41c24(%rip), %xmm0    # 0x12c118
mulsd %xmm3, %xmm0
addsd 0x41c20(%rip), %xmm0    # 0x12c120
movapd %xmm3, %xmm2
mulsd %xmm3, %xmm2
movsd 0x41c18(%rip), %xmm1    # 0x12c128
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd %xmm3, -0x10(%rbp)
movsd %xmm2, -0x68(%rbp)
mulsd %xmm2, %xmm3
movsd 0x41c02(%rip), %xmm0    # 0x12c130
movsd %xmm3, -0x30(%rbp)
mulsd %xmm3, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0x9710
mulsd 0x41beb(%rip), %xmm0    # 0x12c138
addsd 0x41beb(%rip), %xmm0    # 0x12c140
callq 0x9350
xorpd %xmm1, %xmm1
movsd %xmm0, -0x20(%rbp)
ucomisd %xmm1, %xmm0
xorpd %xmm9, %xmm9
jne 0xea570
jnp 0xea5a8
movsd -0x18(%rbp), %xmm0
callq 0x9080
mulsd 0x41bc6(%rip), %xmm0    # 0x12c148
movsd %xmm0, -0x8(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
movsd -0x8(%rbp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x9660
movapd %xmm0, %xmm9
movsd %xmm9, -0x48(%rbp)
movsd 0x41b9a(%rip), %xmm0    # 0x12c150
movsd -0x10(%rbp), %xmm7
mulsd %xmm7, %xmm0
addsd 0x41b91(%rip), %xmm0    # 0x12c158
movsd 0x41b91(%rip), %xmm1    # 0x12c160
movsd -0x68(%rbp), %xmm4
mulsd %xmm4, %xmm1
addsd %xmm0, %xmm1
movsd 0x41b84(%rip), %xmm5    # 0x12c168
movsd -0x30(%rbp), %xmm8
mulsd %xmm8, %xmm5
addsd %xmm1, %xmm5
movsd 0x41b75(%rip), %xmm1    # 0x12c170
mulsd %xmm7, %xmm1
addsd 0x41b71(%rip), %xmm1    # 0x12c178
movsd 0x41b71(%rip), %xmm2    # 0x12c180
mulsd %xmm4, %xmm2
addsd %xmm1, %xmm2
movapd %xmm8, %xmm1
xorpd %xmm0, %xmm0
mulsd %xmm0, %xmm1
addsd %xmm1, %xmm2
movapd %xmm2, %xmm6
movsd 0x41b54(%rip), %xmm2    # 0x12c188
mulsd %xmm7, %xmm2
addsd 0x41b50(%rip), %xmm2    # 0x12c190
movsd 0x41b50(%rip), %xmm3    # 0x12c198
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movsd 0x41b48(%rip), %xmm0    # 0x12c1a0
mulsd %xmm8, %xmm0
addsd %xmm3, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd 0x41b3a(%rip), %xmm2    # 0x12c1a8
mulsd %xmm7, %xmm2
addsd 0x41b36(%rip), %xmm2    # 0x12c1b0
movsd 0x41b36(%rip), %xmm3    # 0x12c1b8
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
mulsd 0x41b2d(%rip), %xmm8    # 0x12c1c0
addsd %xmm3, %xmm8
movsd %xmm8, -0x30(%rbp)
mulsd 0x41b22(%rip), %xmm7    # 0x12c1c8
addsd 0x41b22(%rip), %xmm7    # 0x12c1d0
mulsd 0x41b22(%rip), %xmm4    # 0x12c1d8
addsd %xmm7, %xmm4
addsd %xmm1, %xmm4
movsd -0x40(%rbp), %xmm0
mulsd 0x1e975(%rip), %xmm0    # 0x109040
mulsd 0x33e65(%rip), %xmm0    # 0x11e538
addsd -0x38(%rbp), %xmm0
divsd 0x21150(%rip), %xmm0    # 0x10b830
mulsd 0x21140(%rip), %xmm0    # 0x10b828
movsd %xmm6, -0x8(%rbp)
addsd %xmm6, %xmm0
movsd %xmm0, -0x40(%rbp)
subsd %xmm9, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd %xmm4, -0x68(%rbp)
addsd %xmm4, %xmm4
movsd %xmm4, -0x10(%rbp)
movapd %xmm6, %xmm0
subsd %xmm5, %xmm0
movsd %xmm0, -0x90(%rbp)
callq 0x9080
mulsd -0x10(%rbp), %xmm0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x9710
movsd %xmm0, -0x50(%rbp)
movsd -0x48(%rbp), %xmm0
callq 0x9710
movsd %xmm0, -0x38(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x9080
movsd %xmm0, -0x78(%rbp)
movsd -0x48(%rbp), %xmm0
callq 0x9080
mulsd -0x78(%rbp), %xmm0
mulsd 0x41a6a(%rip), %xmm0    # 0x12c1e0
movsd -0x38(%rbp), %xmm1
mulsd -0x50(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, -0x38(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x9080
mulsd 0x41a4d(%rip), %xmm0    # 0x12c1e8
movsd %xmm0, -0x48(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
movsd -0x48(%rbp), %xmm2
divsd %xmm0, %xmm2
movsd 0x1e8b5(%rip), %xmm0    # 0x109070
movsd -0x38(%rbp), %xmm1
addsd %xmm0, %xmm1
divsd %xmm1, %xmm2
movapd %xmm2, %xmm0
callq 0x92d0
addsd %xmm0, %xmm0
movsd -0x18(%rbp), %xmm1
subsd %xmm0, %xmm1
movsd -0x30(%rbp), %xmm0
movapd %xmm0, %xmm2
subsd %xmm1, %xmm2
movsd %xmm2, -0x18(%rbp)
subsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
callq 0x9080
mulsd 0x419e9(%rip), %xmm0    # 0x12c1f0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x38(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
callq 0x9080
mulsd 0x419cc(%rip), %xmm0    # 0x12c1f8
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x8(%rbp), %xmm1
addsd %xmm1, %xmm1
movsd -0x30(%rbp), %xmm0
subsd %xmm1, %xmm0
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
callq 0x9080
mulsd 0x419a1(%rip), %xmm0    # 0x12c200
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x30(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x9080
mulsd 0x4197f(%rip), %xmm0    # 0x12c208
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x28(%rbp), %xmm0
divsd 0x20f90(%rip), %xmm0    # 0x10b830
mulsd 0x20f80(%rip), %xmm0    # 0x10b828
movsd %xmm0, -0x28(%rbp)
callq 0x9080
movsd %xmm0, -0x18(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
mulsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9080
movsd %xmm0, -0x18(%rbp)
movsd -0x28(%rbp), %xmm0
callq 0x9710
movsd %xmm0, -0x78(%rbp)
movsd -0x20(%rbp), %xmm0
mulsd 0x1e772(%rip), %xmm0    # 0x109068
movsd %xmm0, -0x20(%rbp)
callq 0x9710
movsd %xmm0, -0x70(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9710
mulsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x8(%rbp), %xmm0
subsd -0x60(%rbp), %xmm0
callq 0x9710
movsd %xmm0, -0x88(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
movsd %xmm0, -0x80(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
mulsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x8(%rbp), %xmm0
addsd -0x60(%rbp), %xmm0
callq 0x9710
mulsd -0x20(%rbp), %xmm0
movsd -0x88(%rbp), %xmm1
mulsd -0x70(%rbp), %xmm1
addsd %xmm0, %xmm1
mulsd -0x78(%rbp), %xmm1
movsd -0x18(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x28(%rbp), %xmm0
callq 0x9080
mulsd 0x41846(%rip), %xmm0    # 0x12c1e8
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
callq 0x9080
movsd %xmm0, -0x20(%rbp)
movsd -0x28(%rbp), %xmm0
callq 0x9710
movsd %xmm0, -0x60(%rbp)
movsd -0x10(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
callq 0x9710
movsd %xmm0, -0x50(%rbp)
movsd -0x10(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
callq 0x9710
mulsd 0x41820(%rip), %xmm0    # 0x12c210
movsd -0x50(%rbp), %xmm1
mulsd 0x4181b(%rip), %xmm1    # 0x12c218
addsd %xmm0, %xmm1
mulsd -0x60(%rbp), %xmm1
movsd -0x20(%rbp), %xmm0
mulsd -0x8(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x28(%rbp), %xmm0
callq 0x9080
movsd %xmm0, -0x40(%rbp)
movsd -0x28(%rbp), %xmm0
callq 0x9080
mulsd -0x40(%rbp), %xmm0
mulsd 0x417e1(%rip), %xmm0    # 0x12c220
addsd 0x1e629(%rip), %xmm0    # 0x109070
ucomisd 0x1e6c9(%rip), %xmm0    # 0x109118
jb 0xeaa57
sqrtsd %xmm0, %xmm0
jmp 0xeaa5c
callq 0x9270
movsd 0x1e60c(%rip), %xmm2    # 0x109070
movapd %xmm2, %xmm1
divsd %xmm0, %xmm1
movsd -0x98(%rbp), %xmm0
mulsd 0x1e5e4(%rip), %xmm0    # 0x109060
mulsd 0x417a4(%rip), %xmm1    # 0x12c228
addsd %xmm0, %xmm1
movsd %xmm1, -0x40(%rbp)
movsd -0x68(%rbp), %xmm0
mulsd %xmm0, %xmm0
movapd %xmm2, %xmm1
subsd %xmm0, %xmm1
mulsd 0x4178a(%rip), %xmm1    # 0x12c230
movapd %xmm2, %xmm0
divsd 0x84fd6(%rip), %xmm2    # 0x16fa88
movsd %xmm2, -0x10(%rbp)
divsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x84fb0(%rip), %xmm0    # 0x16fa78
mulsd 0x41768(%rip), %xmm0    # 0x12c238
movsd %xmm0, -0x8(%rbp)
movsd -0x38(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x84f82(%rip), %xmm0    # 0x16fa78
movapd %xmm0, %xmm1
mulsd 0x41736(%rip), %xmm1    # 0x12c238
mulsd %xmm0, %xmm1
movsd %xmm1, -0x8(%rbp)
movsd -0x48(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x84f44(%rip), %xmm0    # 0x16fa70
mulsd 0x4170c(%rip), %xmm0    # 0x12c240
mulsd 0x84f3c(%rip), %xmm0    # 0x16fa78
movsd %xmm0, -0x8(%rbp)
movsd -0x58(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x84f0e(%rip), %xmm0    # 0x16fa70
movsd 0x416ce(%rip), %xmm1    # 0x12c238
mulsd %xmm0, %xmm1
mulsd %xmm0, %xmm1
movsd %xmm1, -0x8(%rbp)
movsd -0x30(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd 0x1e4dd(%rip), %xmm1    # 0x109070
movapd %xmm1, %xmm2
divsd %xmm0, %xmm2
movsd %xmm2, -0x30(%rbp)
divsd 0x84ed8(%rip), %xmm1    # 0x16fa80
movsd %xmm1, -0x10(%rbp)
movsd -0x28(%rbp), %xmm0
mulsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x90(%rbp), %xmm0
callq 0x9710
mulsd -0x28(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd 0x1e494(%rip), %xmm11   # 0x109070
movapd %xmm11, %xmm1
divsd %xmm0, %xmm1
movsd 0x84e5b(%rip), %xmm0    # 0x16fa48
movsd 0x84e5b(%rip), %xmm6    # 0x16fa50
movapd %xmm0, %xmm7
mulsd %xmm6, %xmm7
movsd -0x40(%rbp), %xmm10
mulsd %xmm10, %xmm7
movsd -0x18(%rbp), %xmm9
movapd %xmm9, %xmm5
mulsd %xmm9, %xmm5
movsd 0x20de8(%rip), %xmm3    # 0x10ba08
movapd %xmm9, %xmm2
mulsd %xmm5, %xmm2
mulsd %xmm3, %xmm5
movsd 0x1e4c3(%rip), %xmm4    # 0x1090f8
addsd %xmm4, %xmm5
mulsd %xmm7, %xmm5
movsd -0x30(%rbp), %xmm8
movapd %xmm8, %xmm7
mulsd %xmm8, %xmm7
mulsd %xmm8, %xmm7
movapd %xmm8, %xmm12
divsd %xmm7, %xmm5
movsd 0x1e454(%rip), %xmm8    # 0x1090b8
mulsd %xmm0, %xmm8
mulsd %xmm6, %xmm8
mulsd %xmm10, %xmm8
mulsd %xmm10, %xmm8
mulsd 0x40cff(%rip), %xmm9    # 0x12b980
mulsd 0x1e4af(%rip), %xmm2    # 0x109138
addsd %xmm9, %xmm2
mulsd %xmm8, %xmm2
mulsd %xmm12, %xmm7
divsd %xmm7, %xmm2
addsd %xmm5, %xmm2
mulsd 0x84db0(%rip), %xmm0    # 0x16fa58
mulsd %xmm10, %xmm0
movsd -0x20(%rbp), %xmm5
mulsd %xmm5, %xmm5
mulsd %xmm3, %xmm5
addsd %xmm4, %xmm5
mulsd %xmm0, %xmm5
movapd %xmm1, %xmm0
mulsd %xmm1, %xmm0
mulsd %xmm1, %xmm0
divsd %xmm0, %xmm5
addsd %xmm2, %xmm5
movapd %xmm11, %xmm1
addsd 0x84db5(%rip), %xmm1    # 0x16fa98
movsd 0x84db5(%rip), %xmm0    # 0x16faa0
mulsd 0x4119d(%rip), %xmm0    # 0x12be90
addsd %xmm1, %xmm0
mulsd %xmm5, %xmm0
leaq 0x22232e(%rip), %rax    # 0x30d030
movsd (%rax), %xmm1
leaq 0x22232b(%rip), %rcx    # 0x30d038
movsd %xmm1, (%rcx)
mulsd 0x1e337(%rip), %xmm0    # 0x109050
movsd %xmm0, (%rax)
leaq 0x222358(%rip), %rax    # 0x30d07c
movsd 0x4151c(%rip), %xmm1    # 0x12c248
mulsd %xmm0, %xmm1
addsd 0x41518(%rip), %xmm1    # 0x12c250
movl $0x1, (%rax)
leaq 0x2222fb(%rip), %rax    # 0x30d040
movsd %xmm1, (%rax)
addq $0xa0, %rsp
popq %rbp
retq