diff options
Diffstat (limited to 'htdp.f')
| -rw-r--r-- | htdp.f | 508 | 
1 files changed, 343 insertions, 165 deletions
| @@ -3,8 +3,8 @@  **************************************************************  *  NAME:       HTDP (Horizontal Time-Dependent Positioning)  * -*  WRITTEN BY: Richard Snay, Chris Pearson, Jarir Saleh,  -*              and Michael Dennis +*  WRITTEN BY: Michael Dennis, Jarir Saleh, Richard Snay,  +*              and Chris Pearson  *  *  PURPOSE:    Transform coordinates across time  *              and between reference frames @@ -23,8 +23,8 @@  C  You must change HTDP version and date here, if necessary -      HTDP_version = '3.4.0' -      Version_date = 'October 12, 2021' +      HTDP_version = '3.5.0' +      Version_date = 'November 29, 2022'  *** Introduce variables for file IDs @@ -71,8 +71,8 @@ C    1      FORM='UNFORMATTED')       1 '   VERSION DATE:     ', a20                              /)        WRITE(LUOUT,501)     501 FORMAT( -     1 '   AUTHORS: Richard Snay, Chris Pearson, Jarir Saleh,   '/ -     1 '            and Michael Dennis                          '// +     1 '   AUTHORS: Michael Dennis, Jarir Saleh, Richard Snay,  '/ +     1 '            and Chris Pearson                          '//       1 '   Web: https://geodesy.noaa.gov/TOOLS/Htdp/Htdp.shtml  '/       1 '   Email: ngs.cors.htdp@noaa.gov                        '/       1 '********************************************************') @@ -138,10 +138,10 @@ C    1      FORM='UNFORMATTED')        COMMON /CONST/ A,F,E2,EPS,AF,PI,TWOPI,RHOSEC        COMMON /TIMREF/ ITREF -      A = 6.378137D06 +      A = 6378137.D0        F = 1.D0 / 298.257222101D0 -      E2 = 0.6694380022903146D-2 -      AF = A / (1.D0 -F) +      E2 = F*(2.D0 - F)   !Calculate E2 from F rather than hard-coded as done previously +      AF = A / (1.D0 - F)        EPS = F*(2.D0 - F) / ((1.D0 -F)**2)        PI = 4.D0 * DATAN(1.D0)        RHOSEC = (180.D0 * 3600.D0) / PI @@ -1763,7 +1763,7 @@ C***************************************************        IMPLICIT DOUBLE PRECISION (A-H,O-Z)        IMPLICIT INTEGER*4 (I-N) -      parameter (numref = 16) +      parameter (numref = 19)        COMMON /CONST/ A,F,E2,EPS,AF,PI,TWOPI,RHOSEC        COMMON /FILES/ LUIN,LUOUT, I1, I2, I3, I4, I5, I6        CHARACTER   CARD*80 @@ -2154,7 +2154,7 @@ C         IF(JN.EQ.'S' .OR. JW.EQ.'E')GO TO 320        IMPLICIT DOUBLE PRECISION (A-H,O-Z)        IMPLICIT INTEGER*4 (I-N) -      parameter (numref = 16) +      parameter (numref = 19)        parameter (nrsrch = 0)        COMMON /CONST/ A,F,E2,EPS,AF,PI,TWOPI,RHOSEC        COMMON /FILES/ LUIN,LUOUT, I1, I2, I3, I4, I5, I6 @@ -2740,7 +2740,7 @@ c         CALL VTRANF(X,Y,Z,VX,VY,VZ, 1, IOPT)  !No longer NAD83        implicit double precision (a-h,o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        parameter (nbbdim = 10000)        parameter (rad2deg = 180.d0/3.14159265358979d0) @@ -2934,12 +2934,7 @@ c         write (*,*) "Passed TOXYZ"            xt = x2            yt = y2            zt = z2 -           -          write(*,*) -          write(*,*) "x, y, z:    ", x, y, z -          write(*,*) "xt, yt, zt: ", xt, yt, zt -          write(*,*) -           +                               if(.not.(FRMXYZ(xt,yt,zt,ylatt,elont,ehtnew))) STOP 666            ylont = -elont            if(ylont .lt. 0.0d0) ylont = ylont + twopi @@ -3569,10 +3564,9 @@ C  ITRF systems. They will not be used if the transformation involves NAD83(2011  C  However, the NAD 83 Pacific and Mariana frames use the IERS convention ITRF96 = ITRF97.  C  Removed equivalence between NAD83(2011)and WGS84 original (Transit) in v3.4.0. -        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /const/ a, f, e2, eps, af, pi, twopi, rhosec        common /tranpa/ tx(numref), ty(numref), tz(numref),  @@ -3608,7 +3602,7 @@ C  Parameters computed with the IGS convention ITRF96 <> ITRF97        refepc(1) = 1997.0d0  *** From ITRF94 to ITRF88 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx(2) =     0.018d0        ty(2) =     0.000d0        tz(2) =    -0.092d0 @@ -3616,65 +3610,65 @@ C  Parameters computed with the IGS convention ITRF96 <> ITRF97        dty(2) =    0.0d0        dtz(2) =    0.0d0        rx(2) =    -0.0001d0 / rhosec -      ry(2) =     0.0d0                  -      rz(2) =     0.0d0  -      drx(2) =    0.0d0                   -      dry(2) =    0.0d0               -      drz(2) =    0.0d0                    +      ry(2) =     0.0d0 / rhosec +      rz(2) =     0.0d0 / rhosec +      drx(2) =    0.0d0 / rhosec +      dry(2) =    0.0d0 / rhosec +      drz(2) =    0.0d0 / rhosec        scale(2) =  0.749d-8    !Previous 0.74d-8 (prior to v3.3.0)        dscale(2) = 0.0d0        refepc(2) = 1988.0d0  *** From ITRF94 to ITRF89 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx(3) =     0.023d0        ty(3) =     0.036d0        tz(3) =    -0.068d0        dtx(3) =    0.0d0            dty(3) =    0.0d0        dtz(3) =    0.0d0 -      rx(3) =     0.0d0 -      ry(3) =     0.0d0                  -      rz(3) =     0.0d0  -      drx(3) =    0.0d0                   -      dry(3) =    0.0d0               -      drz(3) =    0.0d0                    +      rx(3) =     0.0d0 / rhosec +      ry(3) =     0.0d0 / rhosec +      rz(3) =     0.0d0 / rhosec +      drx(3) =    0.0d0 / rhosec +      dry(3) =    0.0d0 / rhosec +      drz(3) =    0.0d0 / rhosec        scale(3) =  0.439d-8    !Previous 0.43d-8 (prior to v3.3.0)        dscale(3) = 0.0d0        refepc(3) = 1988.0d0  *** From ITRF94 to ITRF90 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx(4) =     0.018d0        ty(4) =     0.012d0        tz(4) =    -0.030d0        dtx(4) =    0.0d0            dty(4) =    0.0d0        dtz(4) =    0.0d0 -      rx(4) =     0.0d0 -      ry(4) =     0.0d0                  -      rz(4) =     0.0d0  -      drx(4) =    0.0d0                   -      dry(4) =    0.0d0               -      drz(4) =    0.0d0                    +      rx(4) =     0.0d0 / rhosec +      ry(4) =     0.0d0 / rhosec +      rz(4) =     0.0d0 / rhosec +      drx(4) =    0.0d0 / rhosec +      dry(4) =    0.0d0 / rhosec +      drz(4) =    0.0d0 / rhosec        scale(4) =  0.099d-8    !Previous 0.09d-8 (prior to v3.3.0)        dscale(4) = 0.0d0        refepc(4) = 1988.0d0  *** From ITRF94 to ITRF91 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx(5) =     0.020d0        ty(5) =     0.016d0        tz(5) =    -0.014d0        dtx(5) =    0.0d0            dty(5) =    0.0d0        dtz(5) =    0.0d0 -      rx(5) =     0.0d0 -      ry(5) =     0.0d0                  -      rz(5) =     0.0d0  -      drx(5) =    0.0d0                   -      dry(5) =    0.0d0               -      drz(5) =    0.0d0                    +      rx(5) =     0.0d0 / rhosec +      ry(5) =     0.0d0 / rhosec +      rz(5) =     0.0d0 / rhosec +      drx(5) =    0.0d0 / rhosec +      dry(5) =    0.0d0 / rhosec +      drz(5) =    0.0d0 / rhosec        scale(5) =  0.069d-8    !Previous 0.06d-8 (prior to v3.3.0)        dscale(5) = 0.0d0        refepc(5) = 1988.0d0 @@ -3687,23 +3681,23 @@ C  Parameters computed with the IGS convention ITRF96 <> ITRF97        dtx(6) =    0.0d0            dty(6) =    0.0d0        dtz(6) =    0.0d0 -      rx(6) =     0.0d0 -      ry(6) =     0.0d0                  -      rz(6) =     0.0d0  -      drx(6) =    0.0d0                   -      dry(6) =    0.0d0               -      drz(6) =    0.0d0                    +      rx(6) =     0.0d0 / rhosec +      ry(6) =     0.0d0 / rhosec +      rz(6) =     0.0d0 / rhosec +      drx(6) =    0.0d0 / rhosec +      dry(6) =    0.0d0 / rhosec +      drz(6) =    0.0d0 / rhosec        scale(6) = -0.071d-8    !Previous -0.08d-8 (prior to v3.3.0)        dscale(6) = 0.0d0        refepc(6) = 1988.0d0  *** From ITRF94 to ITRF93 -***   Update scale in v3.3.0 to match current value published by IERS  -***   (https://itrf.ign.fr/trans_para.php). Supersedes scale in file  -***   "ITRF94.TX" at ftp://itrf-ftp.ign.fr/pub/itrf/itrf94/.   -***   This update also affects the scale for transformations from ITRF94  -***   to all earlier ITRFs in HTDP. -***   Note that this transformation is not published in IERS TN20 (1996). +*** Update scale in v3.3.0 to match current value published by IGN  +*** (2022) "Transformation parameters from ITRF2020 to past ITRFs" at +*** https://itrf.ign.fr/docs/solutions/itrf2020/Transfo-ITRF2020_TRFs.txt +*** This update also affects the scale for transformations from ITRF94  +*** to all earlier ITRFs in HTDP. +*** Note that this transformation is not published in IERS TN20 (1996).        tx(7) =     0.006d0        ty(7) =    -0.005d0        tz(7) =    -0.015d0 @@ -3727,12 +3721,12 @@ C  Parameters computed with the IGS convention ITRF96 <> ITRF97        dtx(8) =    0.0d0        dty(8) =    0.0d0        dtz(8) =    0.0d0 -      rx(8) =     0.0d0 -      ry(8) =     0.0d0 -      rz(8) =     0.0d0 -      drx(8) =    0.0d0 -      dry(8) =    0.0d0 -      drz(8) =    0.0d0 +      rx(8) =     0.0d0 / rhosec +      ry(8) =     0.0d0 / rhosec +      rz(8) =     0.0d0 / rhosec +      drx(8) =    0.0d0 / rhosec +      dry(8) =    0.0d0 / rhosec +      drz(8) =    0.0d0 / rhosec        scale(8) =  0.0d0        dscale(8) = 0.0d0        refepc(8) = 1997.0d0    !Previous 1996.0d0 (prior to v3.4.0) @@ -3775,7 +3769,8 @@ c      refepc(10) = 1997.0d0  *** From ITRF94 to WGS84 original (Transit), added in v3.4.0.  *** Based on IERS-published transformation from ITRF90 to WGS84 (Transit) -*** at ftp://itrf-ftp.ign.fr/pub/itrf/ in file "WGS84.TXT". +*** in Table 3.1 of McCarthy (1992) "IERS standards," IERS Tech. Note 13,  +*** Observatoire de Paris, France: Central Bureau of IERS.         tx(10) =      0.078d0        ty(10) =     -0.505d0        tz(10) =     -0.253d0 @@ -3785,9 +3780,9 @@ c      refepc(10) = 1997.0d0        rx(10) =     -0.0183d0 / rhosec        ry(10) =      0.0003d0 / rhosec        rz(10) =     -0.0070d0 / rhosec -      drx(10) =     0.0d0 -      dry(10) =     0.0d0 -      drz(10) =     0.0d0 +      drx(10) =     0.0d0 / rhosec +      dry(10) =     0.0d0 / rhosec +      drz(10) =     0.0d0 / rhosec        scale(10) = -10.010d-9        dscale(10) =  0.0d0        refepc(10) =  1997.0d0 @@ -3918,6 +3913,80 @@ c      refepc(10) = 1997.0d0        dscale(16) =  0.07201d-9        refepc(16) =  2010.0d0 +*** From ITRF94 to ITRF2020 (also IGS20) +*** assumes that ITRF94 = ITRF96 +*** uses IGS values for ITRF96 -> ITRF97 +*** uses IERS values for ITRF97 -> ITRF2000 +*** uses IERS values for ITRF2000-> ITRF2005 +*** uses IERS values for ITRF2005 -> ITRF2008 +*** uses IERS values for ITRF2008 -> ITRF2014 +*** uses IERS values for ITRF2014 -> ITRF2020 +      tx(17)     = -0.01290d0 +      ty(17)     =  0.00241d0 +      tz(17)     =  0.02827d0 +      dtx(17)    = -0.00079d0 +      dty(17)    =  0.00070d0 +      dtz(17)    =  0.00124d0 +      rx(17)     = -0.00029978d0 / rhosec +      ry(17)     =  0.00042037d0 / rhosec +      rz(17)     =  0.00031714d0 / rhosec +      drx(17)    = -0.00001347d0 / rhosec +      dry(17)    =  0.00001514d0 / rhosec +      drz(17)    =  0.00001973d0 / rhosec +      scale(17)  =  0.05109d-9 +      dscale(17) =  0.07201d-9 +      refepc(17) =  2010.0d0 + +*** From ITRF94 to WGS84(G1150), added in v3.5.0. +*** Uses IGS values for ITRF96 -> ITRF97. +*** Treated as biased with respect to ITRF2000. +*** Based on NGA-published transformation between WGS84(G1150) +*** and WGS84(G1762) = ITRF2008 in Table 2.5 of NGA.STND.0036_1.0.0_WGS84, +*** "Department of Defense World Geodetic System 1984: its definition and  +*** relationships with local geodetic systems", v1.0.0, 2014.  See also +*** Kelly and Dennis (2022) "Transforming Between WGS84 Realizations," +*** J Surv Eng, doi: 10.1061/(ASCE)SU.1943-5428.0000389. +      tx(18)     = -0.00580d0 +      ty(18)     = -0.00019d0 +      tz(18)     = -0.00513d0 +      dtx(18)    = -0.00069d0 +      dty(18)    =  0.00070d0 +      dtz(18)    = -0.00046d0 +      rx(18)     = -0.00029978d0 / rhosec +      ry(18)     =  0.00042037d0 / rhosec +      rz(18)     =  0.00031714d0 / rhosec +      drx(18)    = -0.00001347d0 / rhosec +      dry(18)    =  0.00001514d0 / rhosec +      drz(18)    =  0.00001973d0 / rhosec +      scale(18)  =  4.83109d-9 +      dscale(18) =  0.18201d-9 +      refepc(18) =  2010.0d0 + +*** From ITRF94 to WGS84(G1674), added in v3.5.0. +*** Uses IGS values for ITRF96 -> ITRF97. +*** Treated as biased with respect to ITRF2008. +*** Based on NGA-published bias transformation between WGS84(G1674) +*** and WGS84(G1762) = ITRF2008 in Table 2.5 of NGA.STND.0036_1.0.0_WGS84, +*** "Department of Defense World Geodetic System 1984: its definition and  +*** relationships with local geodetic systems", v1.0.0, 2014. +*** See also Kelly and Dennis (2022) "Transforming Between WGS84 Realizations," +*** J Surv Eng, doi: 10.1061/(ASCE)SU.1943-5428.0000389. +      tx(19)     = -0.00870d0 +      ty(19)     =  0.00091d0 +      tz(19)     =  0.02707d0 +      dtx(19)    = -0.00079d0 +      dty(19)    =  0.00060d0 +      dtz(19)    =  0.00134d0 +      rx(19)     = -0.00056978d0 / rhosec +      ry(19)     =  0.00069037d0 / rhosec +      rz(19)     = -0.00006286d0 / rhosec +      drx(19)    = -0.00001347d0 / rhosec +      dry(19)    =  0.00001514d0 / rhosec +      drz(19)    =  0.00001973d0 / rhosec +      scale(19)  =  6.51109d-9 +      dscale(19) =  0.10201d-9 +      refepc(19) =  2010.0d0 +  C*************************************************************************************************************************  C  Parameters computed with the IERS convention ITRF96 = ITRF97 @@ -3941,7 +4010,7 @@ C  Parameters computed with the IERS convention ITRF96 = ITRF97        refepc1(1) = 1997.0d0  *** From ITRF94 to ITRF88 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx1(2) =     0.018d0        ty1(2) =     0.000d0        tz1(2) =    -0.092d0 @@ -3949,94 +4018,94 @@ C  Parameters computed with the IERS convention ITRF96 = ITRF97        dty1(2) =    0.0d0        dtz1(2) =    0.0d0        rx1(2) =    -0.0001d0 / rhosec -      ry1(2) =     0.0d0                  -      rz1(2) =     0.0d0  -      drx1(2) =    0.0d0                   -      dry1(2) =    0.0d0               -      drz1(2) =    0.0d0                    +      ry1(2) =     0.0d0 / rhosec +      rz1(2) =     0.0d0 / rhosec +      drx1(2) =    0.0d0 / rhosec +      dry1(2) =    0.0d0 / rhosec +      drz1(2) =    0.0d0 / rhosec        scale1(2) =  0.749d-8    !Previous 0.74d-8 (prior to v3.3.0)        dscale1(2) = 0.0d0        refepc1(2) = 1988.0d0  *** From ITRF94 to ITRF89 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx1(3) =     0.023d0        ty1(3) =     0.036d0        tz1(3) =    -0.068d0        dtx1(3) =    0.0d0            dty1(3) =    0.0d0        dtz1(3) =    0.0d0 -      rx1(3) =     0.0d0 -      ry1(3) =     0.0d0                  -      rz1(3) =     0.0d0  -      drx1(3) =    0.0d0                   -      dry1(3) =    0.0d0               -      drz1(3) =    0.0d0                    +      rx1(3) =     0.0d0 / rhosec +      ry1(3) =     0.0d0 / rhosec +      rz1(3) =     0.0d0 / rhosec +      drx1(3) =    0.0d0 / rhosec +      dry1(3) =    0.0d0 / rhosec +      drz1(3) =    0.0d0 / rhosec        scale1(3) =  0.439d-8    !Previous 0.43d-8 (prior to v3.3.0)        dscale1(3) = 0.0d0        refepc1(3) = 1988.0d0  *** From ITRF94 to ITRF90 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx1(4) =     0.018d0        ty1(4) =     0.012d0        tz1(4) =    -0.030d0        dtx1(4) =    0.0d0            dty1(4) =    0.0d0        dtz1(4) =    0.0d0 -      rx1(4) =     0.0d0 -      ry1(4) =     0.0d0                  -      rz1(4) =     0.0d0  -      drx1(4) =    0.0d0                   -      dry1(4) =    0.0d0               -      drz1(4) =    0.0d0                    +      rx1(4) =     0.0d0 / rhosec +      ry1(4) =     0.0d0 / rhosec +      rz1(4) =     0.0d0 / rhosec +      drx1(4) =    0.0d0 / rhosec +      dry1(4) =    0.0d0 / rhosec +      drz1(4) =    0.0d0 / rhosec        scale1(4) =  0.099d-8    !Previous 0.09d-8 (prior to v3.3.0)        dscale1(4) = 0.0d0        refepc1(4) = 1988.0d0  *** From ITRF94 to ITRF91 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx1(5) =     0.020d0        ty1(5) =     0.016d0        tz1(5) =    -0.014d0        dtx1(5) =    0.0d0            dty1(5) =    0.0d0        dtz1(5) =    0.0d0 -      rx1(5) =     0.0d0 -      ry1(5) =     0.0d0                  -      rz1(5) =     0.0d0  -      drx1(5) =    0.0d0                   -      dry1(5) =    0.0d0               -      drz1(5) =    0.0d0                    +      rx1(5) =     0.0d0 / rhosec +      ry1(5) =     0.0d0 / rhosec +      rz1(5) =     0.0d0 / rhosec +      drx1(5) =    0.0d0 / rhosec +      dry1(5) =    0.0d0 / rhosec +      drz1(5) =    0.0d0 / rhosec        scale1(5) =  0.069d-8    !Previous 0.06d-8 (prior to v3.3.0)        dscale1(5) = 0.0d0        refepc1(5) = 1988.0d0  *** From ITRF94 to ITRF92 -***   Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update. +*** Update scale in v3.3.0 due to ITRF94 to ITRF93 transformation update.        tx1(6) =     0.008d0        ty1(6) =     0.002d0        tz1(6) =    -0.008d0        dtx1(6) =    0.0d0            dty1(6) =    0.0d0        dtz1(6) =    0.0d0 -      rx1(6) =     0.0d0 -      ry1(6) =     0.0d0                  -      rz1(6) =     0.0d0  -      drx1(6) =    0.0d0                   -      dry1(6) =    0.0d0               -      drz1(6) =    0.0d0                    +      rx1(6) =     0.0d0 / rhosec +      ry1(6) =     0.0d0 / rhosec +      rz1(6) =     0.0d0 / rhosec +      drx1(6) =    0.0d0 / rhosec +      dry1(6) =    0.0d0 / rhosec +      drz1(6) =    0.0d0 / rhosec        scale1(6) = -0.071d-8    !Previous -0.08d-8 (prior to v3.3.0)        dscale1(6) = 0.0d0        refepc1(6) = 1988.0d0  *** From ITRF94 to ITRF93 -***   Update scale in v3.3.0 to match current value published by IERS  -***   (https://itrf.ign.fr/trans_para.php). Supersedes scale in file  -***   "ITRF94.TX" at ftp://itrf-ftp.ign.fr/pub/itrf/itrf94/.   -***   This update also affects the scale for transformations from ITRF94  -***   to all earlier ITRFs in HTDP. -***   Note that this transformation is not published in IERS TN20 (1996). +*** Update scale in v3.3.0 to match current value published by IGN  +*** (2022) "Transformation parameters from ITRF2020 to past ITRFs" at +*** https://itrf.ign.fr/docs/solutions/itrf2020/Transfo-ITRF2020_TRFs.txt +*** This update also affects the scale for transformations from ITRF94  +*** to all earlier ITRFs in HTDP. +*** Note that this transformation is not published in IERS TN20 (1996).        tx1(7)     =  0.006d0        ty1(7)     = -0.005d0        tz1(7)     = -0.015d0 @@ -4061,12 +4130,12 @@ C  Parameters computed with the IERS convention ITRF96 = ITRF97        dtx1(8)    = 0.d0        dty1(8)    = 0.d0        dtz1(8)    = 0.d0 -      rx1(8)     = 0.d0 -      ry1(8)     = 0.d0 -      rz1(8)     = 0.d0 -      drx1(8)    = 0.d0 -      dry1(8)    = 0.d0 -      drz1(8)    = 0.d0 +      rx1(8)     = 0.d0 / rhosec +      ry1(8)     = 0.d0 / rhosec +      rz1(8)     = 0.d0 / rhosec +      drx1(8)    = 0.d0 / rhosec +      dry1(8)    = 0.d0 / rhosec +      drz1(8)    = 0.d0 / rhosec        scale1(8)  = 0.d0        dscale1(8) = 0.0d0        refepc1(8) = 1997.0d0    !Previous 1996.0d0 (prior to v3.4.0) @@ -4079,12 +4148,12 @@ C  Parameters computed with the IERS convention ITRF96 = ITRF97        dtx1(9)    = 0.0d0        dty1(9)    = 0.0d0        dtz1(9)    = 0.0d0 -      rx1(9)     = 0.0d0 -      ry1(9)     = 0.0d0 -      rz1(9)     = 0.0d0 -      drx1(9)    = 0.0d0 -      dry1(9)    = 0.0d0 -      drz1(9)    = 0.0d0 +      rx1(9)     = 0.0d0 / rhosec +      ry1(9)     = 0.0d0 / rhosec +      rz1(9)     = 0.0d0 / rhosec +      drx1(9)    = 0.0d0 / rhosec +      dry1(9)    = 0.0d0 / rhosec +      drz1(9)    = 0.0d0 / rhosec        scale1(9)  = 0.0d0        dscale1(9) = 0.0d0        refepc1(9) = 1997.0d0    !Previous 2000.0d0 (prior to v3.4.0) @@ -4109,7 +4178,8 @@ c      refepc1(10) = 1997.0d0  *** From ITRF94 to WGS84 original (Transit), added in v3.4.0.  *** Based on IERS-published transformation from ITRF90 to WGS84 (Transit) -*** at ftp://itrf-ftp.ign.fr/pub/itrf/ in file "WGS84.TXT". +*** in Table 3.1 of McCarthy (1992) "IERS standards," IERS Tech. Note 13,  +*** Observatoire de Paris, France: Central Bureau of IERS.         tx1(10) =      0.078d0        ty1(10) =     -0.505d0        tz1(10) =     -0.253d0 @@ -4119,9 +4189,9 @@ c      refepc1(10) = 1997.0d0        rx1(10) =     -0.0183d0 / rhosec        ry1(10) =      0.0003d0 / rhosec        rz1(10) =     -0.0070d0 / rhosec -      drx1(10) =     0.0d0 -      dry1(10) =     0.0d0 -      drz1(10) =     0.0d0 +      drx1(10) =     0.0d0    / rhosec +      dry1(10) =     0.0d0    / rhosec +      drz1(10) =     0.0d0    / rhosec        scale1(10) = -10.010d-9        dscale1(10) =  0.0d0        refepc1(10) =  1997.0d0 @@ -4235,22 +4305,96 @@ c      refepc1(10) = 1997.0d0  *** uses IERS values for ITRF2000 -> ITRF2005  *** uses IERS values for ITRF2005 -> ITRF2008  *** uses IERS values for ITRF2008 -> ITRF2014 -      tx1(16)     = -0.00740d0 -      ty1(16)     =  0.00050d0 -      tz1(16)     =  0.06280d0 -      dtx1(16)    = -0.00010d0 -      dty1(16)    =  0.00050d0 -      dtz1(16)    =  0.00330d0 -      rx1(16)     =  0.0d0        / rhosec -      ry1(16)     =  0.0d0        / rhosec -      rz1(16)     =  0.00026000d0 / rhosec -      drx1(16)    =  0.0d0        / rhosec -      dry1(16)    =  0.0d0        / rhosec -      drz1(16)    =  0.00002000d0 / rhosec +      tx1(16)     = -0.0074d0 +      ty1(16)     =  0.0005d0 +      tz1(16)     =  0.0628d0 +      dtx1(16)    = -0.0001d0 +      dty1(16)    =  0.0005d0 +      dtz1(16)    =  0.0033d0 +      rx1(16)     =  0.0d0     / rhosec +      ry1(16)     =  0.0d0     / rhosec +      rz1(16)     =  0.00026d0 / rhosec +      drx1(16)    =  0.0d0     / rhosec +      dry1(16)    =  0.0d0     / rhosec +      drz1(16)    =  0.00002d0 / rhosec        scale1(16)  = -3.80d-9        dscale1(16) = -0.12d-9        refepc1(16) =  2010.0d0 +*** From ITRF94 to ITRF2020 (also IGS20) +*** assumes that ITRF94 = ITRF96 +*** uses IERS convention ITRF96 = ITRF97 +*** uses IERS values for ITRF97 -> ITRF2000 +*** uses IERS values for ITRF2000 -> ITRF2005 +*** uses IERS values for ITRF2005 -> ITRF2008 +*** uses IERS values for ITRF2008 -> ITRF2014 +*** uses IERS values for ITRF2014 -> ITRF2020 +      tx1(17)     = -0.0060d0 +      ty1(17)     =  0.0009d0 +      tz1(17)     =  0.0624d0 +      dtx1(17)    = -0.0001d0 +      dty1(17)    =  0.0006d0 +      dtz1(17)    =  0.0031d0 +      rx1(17)     =  0.0d0     / rhosec +      ry1(17)     =  0.0d0     / rhosec +      rz1(17)     =  0.00026d0 / rhosec +      drx1(17)    =  0.0d0     / rhosec +      dry1(17)    =  0.0d0     / rhosec +      drz1(17)    =  0.00002d0 / rhosec +      scale1(17)  = -3.38d-9 +      dscale1(17) = -0.12d-9 +      refepc1(17) =  2010.0d0 + +*** From ITRF94 to WGS84(G1150), added in v3.5.0. +*** Uses IERS convention ITRF96 = ITRF97. +*** Treated as biased with respect to ITRF2000. +*** Based on NGA-published transformation between WGS84(G1150) +*** and WGS84(G1762) = ITRF2008 in Table 2.5 of NGA.STND.0036_1.0.0_WGS84, +*** "Department of Defense World Geodetic System 1984: its definition and  +*** relationships with local geodetic systems", v1.0.0, 2014.  See also +*** Kelly and Dennis (2022) "Transforming Between WGS84 Realizations," +*** J Surv Eng, doi: 10.1061/(ASCE)SU.1943-5428.0000389. +      tx1(18)     =  0.0011d0 +      ty1(18)     = -0.0017d0 +      tz1(18)     =  0.0290d0 +      dtx1(18)    =  0.0d0 +      dty1(18)    =  0.0006d0 +      dtz1(18)    =  0.0014d0 +      rx1(18)     =  0.0d0     / rhosec +      ry1(18)     =  0.0d0     / rhosec +      rz1(18)     =  0.00026d0 / rhosec +      drx1(18)    =  0.0d0     / rhosec +      dry1(18)    =  0.0d0     / rhosec +      drz1(18)    =  0.00002d0 / rhosec +      scale1(18)  =  1.40d-9 +      dscale1(18) = -0.01d-9 +      refepc1(18) =  2010.0d0 + +*** From ITRF94 to WGS84(G1674), added in v3.5.0. +*** Uses IERS convention ITRF96 = ITRF97. +*** Treated as biased with respect to ITRF2008. +*** Based on NGA-published bias transformation between WGS84(G1674) +*** and WGS84(G1762) = ITRF2008 in Table 2.5 of NGA.STND.0036_1.0.0_WGS84, +*** "Department of Defense World Geodetic System 1984: its definition and  +*** relationships with local geodetic systems", v1.0.0, 2014. +*** See also Kelly and Dennis (2022) "Transforming Between WGS84 Realizations," +*** J Surv Eng, doi: 10.1061/(ASCE)SU.1943-5428.0000389. +      tx1(19)     = -0.0018d0 +      ty1(19)     = -0.0006d0 +      tz1(19)     =  0.0612d0 +      dtx1(19)    = -0.0001d0 +      dty1(19)    =  0.0005d0 +      dtz1(19)    =  0.0032d0 +      rx1(19)     = -0.00027d0 / rhosec +      ry1(19)     =  0.00027d0 / rhosec +      rz1(19)     = -0.00012d0 / rhosec +      drx1(19)    =  0.0d0     / rhosec +      dry1(19)    =  0.0d0     / rhosec +      drz1(19)    =  0.00002d0 / rhosec +      scale1(19)  =  3.08d-9 +      dscale1(19) = -0.09d-9 +      refepc1(19) =  2010.0d0 +        return        end  ************************************************************* @@ -4272,7 +4416,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa/ tx(numref), ty(numref), tz(numref),        &                dtx(numref), dty(numref), dtz(numref), @@ -4322,7 +4466,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa1/ tx1(numref), ty1(numref), tz1(numref),        &                dtx1(numref), dty1(numref), dtz1(numref), @@ -4372,7 +4516,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa/ tx(numref), ty(numref), tz(numref),        &                dtx(numref), dty(numref), dtz(numref), @@ -4422,7 +4566,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa1/ tx1(numref), ty1(numref), tz1(numref),        &                dtx1(numref), dty1(numref), dtz1(numref), @@ -4465,55 +4609,81 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        common /files/ luin, luout, i1, i2, i3, i4, i5, i6        iframe(1) = 1 -      nframe(1) = 'NAD_83(2011/CORS96/2007)'        +      nframe(1) = 'NAD_83(2011/CORS96/2007)' +              iframe(2) = 12        nframe(2) = 'NAD_83(PA11/PACP00)     ' +              iframe(3) = 13        nframe(3) = 'NAD_83(MA11/MARP00)     ' +              iframe(4) = 10        nframe(4) = 'WGS84 original (Transit)' +              iframe(5) = 5        nframe(5) = 'WGS84(G730)             ' +              iframe(6) = 8        nframe(6) = 'WGS84(G873)             ' -      iframe(7) = 11 +       +      iframe(7) = 18        nframe(7) = 'WGS84(G1150)            ' -      iframe(8) = 15 +       +      iframe(8) = 19        nframe(8) = 'WGS84(G1674)            ' +              iframe(9) = 15 -      nframe(9) = 'WGS84(G1762)    ' +      nframe(9) = 'WGS84(G1762)            ' +              iframe(10)= 16        nframe(10)= 'WGS84(G2139)            ' +        c      iframe(11)= 5                          !Included with ITRF91 in v3.4.0  c      nframe(11)= 'SIO/MIT_92              ' !Included with ITRF91 in v3.4.0 +        iframe(11)= 2        nframe(11)= 'ITRF88                  ' +              iframe(12)= 3        nframe(12)= 'ITRF89                  ' +              iframe(13)= 4        nframe(13)= 'ITRF90                  ' +              iframe(14)= 5        nframe(14)= 'ITRF91                  ' +              iframe(15)= 6        nframe(15)= 'ITRF92                  ' +              iframe(16)= 7        nframe(16)= 'ITRF93                  ' +              iframe(17)= 8        nframe(17)= 'ITRF94                  ' +              iframe(18)= 8        nframe(18)= 'ITRF96                  ' +              iframe(19)= 9        nframe(19)= 'ITRF97                  ' +              iframe(20)= 11        nframe(20)= 'ITRF2000 or IGS00/IGb00 ' +              iframe(21)= 14        nframe(21)= 'ITRF2005 or IGS05       ' +              iframe(22)= 15        nframe(22)= 'ITRF2008 or IGS08/IGb08 ' +              iframe(23)= 16        nframe(23)= 'ITRF2014 or IGS14/IGb14 ' +       +      iframe(24)= 17 +      nframe(24)= 'ITRF2020 or IGS20       '        write(luout, 100)      100 format( @@ -4524,8 +4694,8 @@ c      nframe(11)= 'SIO/MIT_92              ' !Included with ITRF91 in v3.4.0       1'  4...WGS84 original (Transit)                                '/       1'  5...WGS84(G730)   ITRF91 used                               '/       1'  6...WGS84(G873)   ITRF94=ITRF96=ITRF97 used                 '/ -     1'  7...WGS84(G1150)  ITRF2000=IGS00=IGb00 used                 '/ -     1'  8...WGS84(G1674)  ITRF2008=IGS08=IGb08 used                 '/ +     1'  7...WGS84(G1150)  Biased with respect to ITRF2000           '/ +     1'  8...WGS84(G1674)  Biased with respect to ITRF2008           '/       1'  9...WGS84(G1762)  ITRF2008=IGS08=IGb08 used                 '/       1' 10...WGS84(G2139)  ITRF2014=IGS14=IGb14 used                 '/       1'                                                              '/ @@ -4535,7 +4705,7 @@ c      nframe(11)= 'SIO/MIT_92              ' !Included with ITRF91 in v3.4.0       1' 14...ITRF91 (or SIO/MIT_92)      21...ITRF2005 or IGS05      '/       1' 15...ITRF92                      22...ITRF2008 or IGS08/IGb08'/       1' 16...ITRF93                      23...ITRF2014 or IGS14/IGb14'/ -     1' 17...ITRF94 (=ITRF96=ITRF97)                                 '/) +     1' 17...ITRF94 (=ITRF96=ITRF97)     24...ITRF2020 or IGS20      '/)        read (luin, *,err=50,iostat=ios) iopt        if (ios /= 0) goto 50 @@ -4563,7 +4733,7 @@ c      nframe(11)= 'SIO/MIT_92              ' !Included with ITRF91 in v3.4.0        IMPLICIT DOUBLE PRECISION (A-H,O-Z)        IMPLICIT INTEGER*4 (I-N) -      parameter (numref = 16) +      parameter (numref = 19)        parameter (nbbdim = 10000)        CHARACTER    OLDBB*80, NEWBB*80, NAMEIF*80        CHARACTER    NAME24*24 @@ -6214,8 +6384,8 @@ C        DECYR2 = DBLE(IYEAR2) + DBLE(MINO2 - MIN00)/525600.D0  *** to a reference frame identifier in HTDP and back        IMPLICIT INTEGER*4 (I-N) -      parameter ( numref = 16 ) -      COMMON /REFCON/ IRFCON(38), JRFCON(numref) +      parameter ( numref = 19 ) +      COMMON /REFCON/ IRFCON(40), JRFCON(numref)  *** From Bluebook identifier to HTDP indentifier  *** WGS72 Precise @@ -6293,7 +6463,7 @@ C coordinates as if they were NAD 83(2011)coordinates.        IRFCON(22) = 11  *** WGS84 (G1150) -      IRFCON(23) = 11 +      IRFCON(23) = 18  *** IGb00        IRFCON(24) = 11 @@ -6314,7 +6484,7 @@ C coordinates as if they were NAD 83(2011)coordinates.        IRFCON(29) = 15  *** WGS84 (G1674) -      IRFCON(30) = 15 +      IRFCON(30) = 19  *** WGS84 (G1762)        IRFCON(31) = 15 @@ -6339,7 +6509,12 @@ C coordinates as if they were NAD 83(2011)coordinates.  *** WGS84 (G2139)        IRFCON(38) = 16 -       + +*** ITRF2020 +      IRFCON(39) = 17 + +*** IGS20 +      IRFCON(40) = 17  *** From HTDP identifier to Bluebook identifier.  *** NAD 83 (2011/2007/CORS96/...) referenced to North America plate. @@ -6396,6 +6571,9 @@ C coordinates as if they were NAD 83(2011)coordinates.  *** IGb14        JRFCON(16) = 37 +*** ITRF2020 or IGS20 +      JRFCON(17) = 40 +        RETURN        END  *************************************************** @@ -6406,10 +6584,10 @@ C coordinates as if they were NAD 83(2011)coordinates.  *** system used in HTDP        IMPLICIT INTEGER*4 (I-N) -      parameter ( numref = 16 ) -      COMMON /REFCON/ IRFCON(38), JRFCON(numref) +      parameter ( numref = 19 ) +      COMMON /REFCON/ IRFCON(40), JRFCON(numref) -      IF (1 .LE. IBBREF .AND. IBBREF .LE. 38) THEN +      IF (1 .LE. IBBREF .AND. IBBREF .LE. 40) THEN            JREF = IRFCON(IBBREF)        ELSE            WRITE(6, 10) IBBREF @@ -6425,12 +6603,12 @@ C coordinates as if they were NAD 83(2011)coordinates.        SUBROUTINE RFCON1(JREF, IBBREF)  *** Convert reference frame identifier from -*** system used in HTDP to the  system +*** system used in HTDP to the system  *** used in the Bluebook        IMPLICIT INTEGER*4 (I-N) -      parameter ( numref = 16 ) -      COMMON /REFCON/ IRFCON(38), JRFCON(numref) +      parameter ( numref = 19 ) +      COMMON /REFCON/ IRFCON(40), JRFCON(numref)        IF (JREF .EQ. 0) THEN          I = 1 @@ -6478,7 +6656,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa/ tx(numref), ty(numref), tz(numref),        &                dtx(numref), dty(numref), dtz(numref), @@ -6545,7 +6723,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa1/ tx1(numref), ty1(numref), tz1(numref),        &                dtx1(numref), dty1(numref), dtz1(numref), @@ -7183,7 +7361,7 @@ C  The following 2 lines were added on 07/22/2015 after Rich found this bug        implicit double precision (a-h, o-z)        implicit integer*4 (i-n) -      parameter (numref = 16) +      parameter (numref = 19)        character    nameif*80,name24*80        character    NAMEF*80        character    frame1*24, frame2*24 @@ -7365,7 +7543,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        IMPLICIT DOUBLE PRECISION (A-H,O-Z)        IMPLICIT INTEGER*4 (I-N) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa/ tx(numref), ty(numref), tz(numref),       &                dtx(numref), dty(numref), dtz(numref),       &                rx(numref), ry(numref), rz(numref), @@ -7429,7 +7607,7 @@ C  The parameters in common block tranpa1 are computed using the IERS values of        IMPLICIT DOUBLE PRECISION (A-H,O-Z)        IMPLICIT INTEGER*4 (I-N) -      parameter (numref = 16) +      parameter (numref = 19)        common /tranpa1/ tx1(numref), ty1(numref), tz1(numref),        &                dtx1(numref), dty1(numref), dtz1(numref),       &                rx1(numref), ry1(numref), rz1(numref),  | 
