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 :
|
return (1.0+a/(1.0+b/(1.0+c)))/(sinel+(a/(sinel+b/(sinel+c)))) |
def mapf(el, a, b, c):
""" simple tropospheric mapping function """
sinel = np.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 :

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 :
|
dm = (1.0/np.sin(el)-mapf(el, aht[0], aht[1], aht[2]))*hgt*1e-3 |
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 ?
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 :
cssrlib/src/cssrlib/gnss.py
Line 1410 in 4843cc7
However, original paper ( https://safe.nrao.edu/wiki/pub/Main/RefBendDelayCalc/Niell_Global.pdf ) list "equation 4" as :
So the form is
(1/(1+a / ... )) / (1+1/(sinel +b / ...))As
(1/y)/(1/x)can be rewritten asx/yThen 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 :
cssrlib/src/cssrlib/gnss.py
Line 1439 in 4843cc7
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 ?