// File: DoubleString[P]RtConverter/src/Rtklib/rtkcmn.cpp
// Function: bamboo::tropmodel(bamboo::gtime_t, double const*, double const*, double)
extern double tropmodel(gtime_t time, const double *pos, const double *azel,
                        double humi)
{
    const double temp0=15.0; /* temparature at sea level */
    double hgt,pres,temp,e,z,trph,trpw;
    
    if (pos[2]<-100.0||1E4<pos[2]||azel[1]<=0) return 0.0;
    
    /* standard atmosphere */
    hgt=pos[2]<0.0?0.0:pos[2];
    
    pres=1013.25*pow(1.0-2.2557E-5*hgt,5.2568);
    temp=temp0-6.5E-3*hgt+273.16;
    e=6.108*humi*exp((17.15*temp-4684.0)/(temp-38.45));
    
    /* saastamoninen model */
    z=pi/2.0-azel[1];
    trph=0.0022768*pres/(1.0-0.00266*cos(2.0*pos[0])-0.00028*hgt/1E3)/cos(z);
    trpw=0.002277*(1255.0/temp+0.05)*e/cos(z);
    return trph+trpw;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x18(%rbp)
movsd %xmm0, -0x10(%rbp)
movq %rsi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movsd %xmm1, -0x30(%rbp)
movsd 0x2fb07(%rip), %xmm0    # 0xc75d0
movsd %xmm0, -0x38(%rbp)
movq -0x20(%rbp), %rax
movsd 0x2faee(%rip), %xmm0    # 0xc75c8
ucomisd 0x10(%rax), %xmm0
ja 0x97b06
movq -0x20(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd 0x2fae6(%rip), %xmm1    # 0xc75d8
ucomisd %xmm1, %xmm0
ja 0x97b06
movq -0x28(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd 0x8(%rax), %xmm0
jb 0x97b13
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x97d12
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
ucomisd 0x10(%rax), %xmm0
jbe 0x97b2b
xorps %xmm0, %xmm0
movsd %xmm0, -0x78(%rbp)
jmp 0x97b39
movq -0x20(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x40(%rbp), %xmm0
movsd 0x2faf8(%rip), %xmm1    # 0xc7648
mulsd %xmm1, %xmm0
movsd 0x24304(%rip), %xmm1    # 0xbbe60
addsd %xmm1, %xmm0
movsd 0x2fad8(%rip), %xmm1    # 0xc7640
callq 0x9d10
movaps %xmm0, %xmm1
movsd 0x2fac0(%rip), %xmm0    # 0xc7638
mulsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x40(%rbp), %xmm0
movsd 0x2faa2(%rip), %xmm1    # 0xc7630
mulsd %xmm1, %xmm0
movsd 0x2fa36(%rip), %xmm1    # 0xc75d0
addsd %xmm1, %xmm0
movsd 0x2fa82(%rip), %xmm1    # 0xc7628
addsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movsd 0x2fa69(%rip), %xmm0    # 0xc7620
mulsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x50(%rbp), %xmm0
movsd 0x2fa3f(%rip), %xmm1    # 0xc7610
mulsd %xmm1, %xmm0
movsd 0x2fa3b(%rip), %xmm1    # 0xc7618
addsd %xmm1, %xmm0
movsd -0x50(%rbp), %xmm1
movsd 0x2fa1a(%rip), %xmm2    # 0xc7608
subsd %xmm2, %xmm1
divsd %xmm1, %xmm0
callq 0x9d70
movaps %xmm0, %xmm1
movsd -0x98(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movq -0x28(%rbp), %rax
movsd 0x2525d(%rip), %xmm0    # 0xbce78
subsd 0x8(%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
movsd 0x2f9d3(%rip), %xmm0    # 0xc7600
mulsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movq -0x20(%rbp), %rax
movsd 0x25b0a(%rip), %xmm0    # 0xbd750
mulsd (%rax), %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0x90(%rbp), %xmm0
movsd 0x2f996(%rip), %xmm2    # 0xc75f8
mulsd %xmm2, %xmm1
movsd 0x241f2(%rip), %xmm2    # 0xbbe60
addsd %xmm2, %xmm1
movsd 0x2f976(%rip), %xmm2    # 0xc75f0
mulsd -0x40(%rbp), %xmm2
movsd 0x257a1(%rip), %xmm3    # 0xbd428
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x60(%rbp), %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0x88(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
movsd 0x2f927(%rip), %xmm1    # 0xc75e8
divsd -0x50(%rbp), %xmm1
movsd 0x2f852(%rip), %xmm0    # 0xc7520
addsd %xmm0, %xmm1
movsd 0x2f906(%rip), %xmm0    # 0xc75e0
mulsd %xmm1, %xmm0
mulsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x60(%rbp), %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x68(%rbp), %xmm0
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
addq $0xa0, %rsp
popq %rbp
retq