// File: /workspace/github_cpp_makefile_star2_O2/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 0x1fa33(%rip), %xmm0    # 0xf58f8
movsd %xmm0, -0x10(%rbp)
movsd 0x1d19e(%rip), %xmm1    # 0xf3070
callq 0x94d0
movsd %xmm0, -0x40(%rbp)
movsd -0x10(%rbp), %xmm3
addsd 0x40157(%rip), %xmm3    # 0x116040
divsd 0x3f887(%rip), %xmm3    # 0x115778
movsd 0x4014f(%rip), %xmm0    # 0x116048
mulsd %xmm3, %xmm0
addsd 0x4014b(%rip), %xmm0    # 0x116050
movapd %xmm3, %xmm2
mulsd %xmm3, %xmm2
movsd 0x40143(%rip), %xmm1    # 0x116058
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd %xmm3, -0x10(%rbp)
movsd %xmm2, -0x68(%rbp)
mulsd %xmm2, %xmm3
movsd 0x4012d(%rip), %xmm0    # 0x116060
movsd %xmm3, -0x30(%rbp)
mulsd %xmm3, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0x9710
mulsd 0x40116(%rip), %xmm0    # 0x116068
addsd 0x40116(%rip), %xmm0    # 0x116070
callq 0x9340
xorpd %xmm1, %xmm1
movsd %xmm0, -0x20(%rbp)
ucomisd %xmm1, %xmm0
xorpd %xmm9, %xmm9
jne 0xd5f75
jnp 0xd5fad
movsd -0x18(%rbp), %xmm0
callq 0x9080
mulsd 0x400f1(%rip), %xmm0    # 0x116078
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 0x400c5(%rip), %xmm0    # 0x116080
movsd -0x10(%rbp), %xmm7
mulsd %xmm7, %xmm0
addsd 0x400bc(%rip), %xmm0    # 0x116088
movsd 0x400bc(%rip), %xmm1    # 0x116090
movsd -0x68(%rbp), %xmm4
mulsd %xmm4, %xmm1
addsd %xmm0, %xmm1
movsd 0x400af(%rip), %xmm5    # 0x116098
movsd -0x30(%rbp), %xmm8
mulsd %xmm8, %xmm5
addsd %xmm1, %xmm5
movsd 0x400a0(%rip), %xmm1    # 0x1160a0
mulsd %xmm7, %xmm1
addsd 0x4009c(%rip), %xmm1    # 0x1160a8
movsd 0x4009c(%rip), %xmm2    # 0x1160b0
mulsd %xmm4, %xmm2
addsd %xmm1, %xmm2
movapd %xmm8, %xmm1
xorpd %xmm0, %xmm0
mulsd %xmm0, %xmm1
addsd %xmm1, %xmm2
movapd %xmm2, %xmm6
movsd 0x4007f(%rip), %xmm2    # 0x1160b8
mulsd %xmm7, %xmm2
addsd 0x4007b(%rip), %xmm2    # 0x1160c0
movsd 0x4007b(%rip), %xmm3    # 0x1160c8
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movsd 0x40073(%rip), %xmm0    # 0x1160d0
mulsd %xmm8, %xmm0
addsd %xmm3, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd 0x40065(%rip), %xmm2    # 0x1160d8
mulsd %xmm7, %xmm2
addsd 0x40061(%rip), %xmm2    # 0x1160e0
movsd 0x40061(%rip), %xmm3    # 0x1160e8
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
mulsd 0x40058(%rip), %xmm8    # 0x1160f0
addsd %xmm3, %xmm8
movsd %xmm8, -0x30(%rbp)
mulsd 0x4004d(%rip), %xmm7    # 0x1160f8
addsd 0x4004d(%rip), %xmm7    # 0x116100
mulsd 0x4004d(%rip), %xmm4    # 0x116108
addsd %xmm7, %xmm4
addsd %xmm1, %xmm4
movsd -0x40(%rbp), %xmm0
mulsd 0x1cf70(%rip), %xmm0    # 0xf3040
mulsd 0x32450(%rip), %xmm0    # 0x108528
addsd -0x38(%rbp), %xmm0
divsd 0x1f7c3(%rip), %xmm0    # 0xf58a8
mulsd 0x1f7b3(%rip), %xmm0    # 0xf58a0
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 0x3ff95(%rip), %xmm0    # 0x116110
movsd -0x38(%rbp), %xmm1
mulsd -0x50(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, -0x38(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x9080
mulsd 0x3ff78(%rip), %xmm0    # 0x116118
movsd %xmm0, -0x48(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
movsd -0x48(%rbp), %xmm2
divsd %xmm0, %xmm2
movsd 0x1ceb0(%rip), %xmm0    # 0xf3070
movsd -0x38(%rbp), %xmm1
addsd %xmm0, %xmm1
divsd %xmm1, %xmm2
movapd %xmm2, %xmm0
callq 0x92c0
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 0x3ff14(%rip), %xmm0    # 0x116120
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x38(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
callq 0x9080
mulsd 0x3fef7(%rip), %xmm0    # 0x116128
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 0x3fecc(%rip), %xmm0    # 0x116130
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 0x3feaa(%rip), %xmm0    # 0x116138
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x28(%rbp), %xmm0
divsd 0x1f603(%rip), %xmm0    # 0xf58a8
mulsd 0x1f5f3(%rip), %xmm0    # 0xf58a0
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 0x1cd6d(%rip), %xmm0    # 0xf3068
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 0x3fd71(%rip), %xmm0    # 0x116118
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 0x3fd4b(%rip), %xmm0    # 0x116140
movsd -0x50(%rbp), %xmm1
mulsd 0x3fd46(%rip), %xmm1    # 0x116148
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 0x3fd0c(%rip), %xmm0    # 0x116150
addsd 0x1cc24(%rip), %xmm0    # 0xf3070
ucomisd 0x1ccc4(%rip), %xmm0    # 0xf3118
jb 0xd645c
sqrtsd %xmm0, %xmm0
jmp 0xd6461
callq 0x9260
movsd 0x1cc07(%rip), %xmm2    # 0xf3070
movapd %xmm2, %xmm1
divsd %xmm0, %xmm1
movsd -0x98(%rbp), %xmm0
mulsd 0x1cbdf(%rip), %xmm0    # 0xf3060
mulsd 0x3fccf(%rip), %xmm1    # 0x116158
addsd %xmm0, %xmm1
movsd %xmm1, -0x40(%rbp)
movsd -0x68(%rbp), %xmm0
mulsd %xmm0, %xmm0
movapd %xmm2, %xmm1
subsd %xmm0, %xmm1
mulsd 0x3fcb5(%rip), %xmm1    # 0x116160
movapd %xmm2, %xmm0
divsd 0x835d1(%rip), %xmm2    # 0x159a88
movsd %xmm2, -0x10(%rbp)
divsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x835ab(%rip), %xmm0    # 0x159a78
mulsd 0x3fc93(%rip), %xmm0    # 0x116168
movsd %xmm0, -0x8(%rbp)
movsd -0x38(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x8357d(%rip), %xmm0    # 0x159a78
movapd %xmm0, %xmm1
mulsd 0x3fc61(%rip), %xmm1    # 0x116168
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 0x8353f(%rip), %xmm0    # 0x159a70
mulsd 0x3fc37(%rip), %xmm0    # 0x116170
mulsd 0x83537(%rip), %xmm0    # 0x159a78
movsd %xmm0, -0x8(%rbp)
movsd -0x58(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x83509(%rip), %xmm0    # 0x159a70
movsd 0x3fbf9(%rip), %xmm1    # 0x116168
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 0x1cad8(%rip), %xmm1    # 0xf3070
movapd %xmm1, %xmm2
divsd %xmm0, %xmm2
movsd %xmm2, -0x30(%rbp)
divsd 0x834d3(%rip), %xmm1    # 0x159a80
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 0x1ca8f(%rip), %xmm11   # 0xf3070
movapd %xmm11, %xmm1
divsd %xmm0, %xmm1
movsd 0x83456(%rip), %xmm0    # 0x159a48
movsd 0x83456(%rip), %xmm6    # 0x159a50
movapd %xmm0, %xmm7
mulsd %xmm6, %xmm7
movsd -0x40(%rbp), %xmm10
mulsd %xmm10, %xmm7
movsd -0x18(%rbp), %xmm9
movapd %xmm9, %xmm5
mulsd %xmm9, %xmm5
movsd 0x1f45b(%rip), %xmm3    # 0xf5a80
movapd %xmm9, %xmm2
mulsd %xmm5, %xmm2
mulsd %xmm3, %xmm5
movsd 0x1cabe(%rip), %xmm4    # 0xf30f8
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 0x1ca4f(%rip), %xmm8    # 0xf30b8
mulsd %xmm0, %xmm8
mulsd %xmm6, %xmm8
mulsd %xmm10, %xmm8
mulsd %xmm10, %xmm8
mulsd 0x3f23a(%rip), %xmm9    # 0x1158c0
mulsd 0x1cab2(%rip), %xmm2    # 0xf3140
addsd %xmm9, %xmm2
mulsd %xmm8, %xmm2
mulsd %xmm12, %xmm7
divsd %xmm7, %xmm2
addsd %xmm5, %xmm2
mulsd 0x833ab(%rip), %xmm0    # 0x159a58
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 0x833b0(%rip), %xmm1    # 0x159a98
movsd 0x833b0(%rip), %xmm0    # 0x159aa0
mulsd 0x3f6c8(%rip), %xmm0    # 0x115dc0
addsd %xmm1, %xmm0
mulsd %xmm5, %xmm0
leaq 0x220929(%rip), %rax    # 0x2f7030
movsd (%rax), %xmm1
leaq 0x220926(%rip), %rcx    # 0x2f7038
movsd %xmm1, (%rcx)
mulsd 0x1c932(%rip), %xmm0    # 0xf3050
movsd %xmm0, (%rax)
leaq 0x220953(%rip), %rax    # 0x2f707c
movsd 0x3fa47(%rip), %xmm1    # 0x116178
mulsd %xmm0, %xmm1
addsd 0x3fa43(%rip), %xmm1    # 0x116180
movl $0x1, (%rax)
leaq 0x2208f6(%rip), %rax    # 0x2f7040
movsd %xmm1, (%rax)
addq $0xa0, %rsp
popq %rbp
retq