GLIO icon indicating copy to clipboard operation
GLIO copied to clipboard

Error in Niell tropo function calculation ?

Open jonathanmuller opened this issue 6 months ago • 0 comments

Hi,

There is a common pattern I see in all implementations of the Niell tropo across github :

The implementation is always the same :

(1+a / ... ) / (sinel +b / ...) while I believe it should be (sinel +b / ...) / (1+a / ... ) (the opposite)

For example in the code : https://github.com/XikunLiu-huskit/GLIO/blob/332d19ff641f2ada9d9d75f2a6dab013d6015f76/gnss_comm/src/gnss_utility.cpp#L778

    static double mapf(double el, double a, double b, double c)
    {
        double sinel=sin(el);
        return (1.0+a/(1.0+b/(1.0+c)))/(sinel+(a/(sinel+b/(sinel+c))));
    }

However, original paper ( https://safe.nrao.edu/wiki/pub/Main/RefBendDelayCalc/Niell_Global.pdf ) list "equation 4" as :

image So the form is (1/(1+a / ... )) / (1+1/(sinel +b / ...)) As (1/y)/(1/x) can be rewritten as x/y Then the calculation above can be simplified as (sinel +b / ...) /(1+a / ... ) There can be no ambiguity as later it is used directly as follow, without further division or calculation directly as height correction : https://github.com/XikunLiu-huskit/GLIO/blob/332d19ff641f2ada9d9d75f2a6dab013d6015f76/gnss_comm/src/gnss_utility.cpp#L828 image

This is the same (wrong?) implementation as RTKLib and any other commonly used RTK library I could find on github. Am I just wrong about the understanding of the calculation, or is everyone copy-pasting the same error ?

jonathanmuller avatar Jul 29 '24 12:07 jonathanmuller