// File: /workspace/github_cpp_makefile_star2_O1/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 0x21e23(%rip), %xmm0    # 0x10b870
movsd %xmm0, -0x10(%rbp)
movsd 0x1f616(%rip), %xmm1    # 0x109070
callq 0x94d0
movsd %xmm0, -0x40(%rbp)
movsd -0x10(%rbp), %xmm3
addsd 0x425bf(%rip), %xmm3    # 0x12c030
divsd 0x41cdf(%rip), %xmm3    # 0x12b758
movsd 0x425b7(%rip), %xmm0    # 0x12c038
mulsd %xmm3, %xmm0
addsd 0x425b3(%rip), %xmm0    # 0x12c040
movapd %xmm3, %xmm2
mulsd %xmm3, %xmm2
movsd 0x425ab(%rip), %xmm1    # 0x12c048
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd %xmm3, -0x10(%rbp)
movsd %xmm2, -0x68(%rbp)
mulsd %xmm2, %xmm3
movsd 0x42595(%rip), %xmm0    # 0x12c050
movsd %xmm3, -0x30(%rbp)
mulsd %xmm3, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
callq 0x9710
mulsd 0x4257e(%rip), %xmm0    # 0x12c058
addsd 0x4257e(%rip), %xmm0    # 0x12c060
callq 0x9350
xorpd %xmm1, %xmm1
movsd %xmm0, -0x20(%rbp)
ucomisd %xmm1, %xmm0
xorpd %xmm9, %xmm9
jne 0xe9afd
jnp 0xe9b35
movsd -0x18(%rbp), %xmm0
callq 0x9080
mulsd 0x42559(%rip), %xmm0    # 0x12c068
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 0x4252d(%rip), %xmm0    # 0x12c070
movsd -0x10(%rbp), %xmm7
mulsd %xmm7, %xmm0
addsd 0x42524(%rip), %xmm0    # 0x12c078
movsd 0x42524(%rip), %xmm1    # 0x12c080
movsd -0x68(%rbp), %xmm4
mulsd %xmm4, %xmm1
addsd %xmm0, %xmm1
movsd 0x42517(%rip), %xmm5    # 0x12c088
movsd -0x30(%rbp), %xmm8
mulsd %xmm8, %xmm5
addsd %xmm1, %xmm5
movsd 0x42508(%rip), %xmm1    # 0x12c090
mulsd %xmm7, %xmm1
addsd 0x42504(%rip), %xmm1    # 0x12c098
movsd 0x42504(%rip), %xmm2    # 0x12c0a0
mulsd %xmm4, %xmm2
addsd %xmm1, %xmm2
movapd %xmm8, %xmm1
xorpd %xmm0, %xmm0
mulsd %xmm0, %xmm1
addsd %xmm1, %xmm2
movapd %xmm2, %xmm6
movsd 0x424e7(%rip), %xmm2    # 0x12c0a8
mulsd %xmm7, %xmm2
addsd 0x424e3(%rip), %xmm2    # 0x12c0b0
movsd 0x424e3(%rip), %xmm3    # 0x12c0b8
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movsd 0x424db(%rip), %xmm0    # 0x12c0c0
mulsd %xmm8, %xmm0
addsd %xmm3, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd 0x424cd(%rip), %xmm2    # 0x12c0c8
mulsd %xmm7, %xmm2
addsd 0x424c9(%rip), %xmm2    # 0x12c0d0
movsd 0x424c9(%rip), %xmm3    # 0x12c0d8
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
mulsd 0x424c0(%rip), %xmm8    # 0x12c0e0
addsd %xmm3, %xmm8
movsd %xmm8, -0x30(%rbp)
mulsd 0x424b5(%rip), %xmm7    # 0x12c0e8
addsd 0x424b5(%rip), %xmm7    # 0x12c0f0
mulsd 0x424b5(%rip), %xmm4    # 0x12c0f8
addsd %xmm7, %xmm4
addsd %xmm1, %xmm4
movsd -0x40(%rbp), %xmm0
mulsd 0x1f3e8(%rip), %xmm0    # 0x109040
mulsd 0x34838(%rip), %xmm0    # 0x11e498
addsd -0x38(%rbp), %xmm0
divsd 0x21bb3(%rip), %xmm0    # 0x10b820
mulsd 0x21ba3(%rip), %xmm0    # 0x10b818
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 0x423fd(%rip), %xmm0    # 0x12c100
movsd -0x38(%rbp), %xmm1
mulsd -0x50(%rbp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, -0x38(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x9080
mulsd 0x423e0(%rip), %xmm0    # 0x12c108
movsd %xmm0, -0x48(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x9080
movsd -0x48(%rbp), %xmm2
divsd %xmm0, %xmm2
movsd 0x1f328(%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 0x4237c(%rip), %xmm0    # 0x12c110
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x38(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
callq 0x9080
mulsd 0x4235f(%rip), %xmm0    # 0x12c118
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 0x42334(%rip), %xmm0    # 0x12c120
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 0x42312(%rip), %xmm0    # 0x12c128
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x28(%rbp), %xmm0
divsd 0x219f3(%rip), %xmm0    # 0x10b820
mulsd 0x219e3(%rip), %xmm0    # 0x10b818
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 0x1f1e5(%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 0x421d9(%rip), %xmm0    # 0x12c108
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 0x421b3(%rip), %xmm0    # 0x12c130
movsd -0x50(%rbp), %xmm1
mulsd 0x421ae(%rip), %xmm1    # 0x12c138
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 0x42174(%rip), %xmm0    # 0x12c140
addsd 0x1f09c(%rip), %xmm0    # 0x109070
ucomisd 0x1f13c(%rip), %xmm0    # 0x109118
jb 0xe9fe4
sqrtsd %xmm0, %xmm0
jmp 0xe9fe9
callq 0x9270
movsd 0x1f07f(%rip), %xmm2    # 0x109070
movapd %xmm2, %xmm1
divsd %xmm0, %xmm1
movsd -0x98(%rbp), %xmm0
mulsd 0x1f057(%rip), %xmm0    # 0x109060
mulsd 0x42137(%rip), %xmm1    # 0x12c148
addsd %xmm0, %xmm1
movsd %xmm1, -0x40(%rbp)
movsd -0x68(%rbp), %xmm0
mulsd %xmm0, %xmm0
movapd %xmm2, %xmm1
subsd %xmm0, %xmm1
mulsd 0x4211d(%rip), %xmm1    # 0x12c150
movapd %xmm2, %xmm0
divsd 0x85a49(%rip), %xmm2    # 0x16fa88
movsd %xmm2, -0x10(%rbp)
divsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x85a23(%rip), %xmm0    # 0x16fa78
mulsd 0x420fb(%rip), %xmm0    # 0x12c158
movsd %xmm0, -0x8(%rbp)
movsd -0x38(%rbp), %xmm0
callq 0x9710
mulsd -0x8(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
movsd 0x859f5(%rip), %xmm0    # 0x16fa78
movapd %xmm0, %xmm1
mulsd 0x420c9(%rip), %xmm1    # 0x12c158
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 0x859b7(%rip), %xmm0    # 0x16fa70
mulsd 0x4209f(%rip), %xmm0    # 0x12c160
mulsd 0x859af(%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 0x85981(%rip), %xmm0    # 0x16fa70
movsd 0x42061(%rip), %xmm1    # 0x12c158
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 0x1ef50(%rip), %xmm1    # 0x109070
movapd %xmm1, %xmm2
divsd %xmm0, %xmm2
movsd %xmm2, -0x30(%rbp)
divsd 0x8594b(%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 0x1ef07(%rip), %xmm11   # 0x109070
movapd %xmm11, %xmm1
divsd %xmm0, %xmm1
movsd 0x858ce(%rip), %xmm0    # 0x16fa48
movsd 0x858ce(%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 0x2185b(%rip), %xmm3    # 0x10ba08
movapd %xmm9, %xmm2
mulsd %xmm5, %xmm2
mulsd %xmm3, %xmm5
movsd 0x1ef36(%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 0x1eec7(%rip), %xmm8    # 0x1090b8
mulsd %xmm0, %xmm8
mulsd %xmm6, %xmm8
mulsd %xmm10, %xmm8
mulsd %xmm10, %xmm8
mulsd 0x41692(%rip), %xmm9    # 0x12b8a0
mulsd 0x1ef22(%rip), %xmm2    # 0x109138
addsd %xmm9, %xmm2
mulsd %xmm8, %xmm2
mulsd %xmm12, %xmm7
divsd %xmm7, %xmm2
addsd %xmm5, %xmm2
mulsd 0x85823(%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 0x85828(%rip), %xmm1    # 0x16fa98
movsd 0x85828(%rip), %xmm0    # 0x16faa0
mulsd 0x41b30(%rip), %xmm0    # 0x12bdb0
addsd %xmm1, %xmm0
mulsd %xmm5, %xmm0
leaq 0x222da1(%rip), %rax    # 0x30d030
movsd (%rax), %xmm1
leaq 0x222d9e(%rip), %rcx    # 0x30d038
movsd %xmm1, (%rcx)
mulsd 0x1edaa(%rip), %xmm0    # 0x109050
movsd %xmm0, (%rax)
leaq 0x222dcb(%rip), %rax    # 0x30d07c
movsd 0x41eaf(%rip), %xmm1    # 0x12c168
mulsd %xmm0, %xmm1
addsd 0x41eab(%rip), %xmm1    # 0x12c170
movl $0x1, (%rax)
leaq 0x222d6e(%rip), %rax    # 0x30d040
movsd %xmm1, (%rax)
addq $0xa0, %rsp
popq %rbp
retq