THIS SUBROUTINE ROTATES A VECTOR FROM THE TERRESTRIAL TO THE CELESTIAL SYSTEM. SPECIFICALLY, IT TRANSFORMS A VECTOR IN THE ITRS (A ROTATING EARTH-FIXED SYSTEM) TO THE GCRS (A LOCAL SPACE-FIXED SYSTEM) BY APPLYING ROTATIONS FOR POLAR MOTION, EARTH ROTATION, NUTATION, PRECESSION, AND THE DYNAMICAL-TO-GCRS FRAME TIE.
TJDH = UT1 JULIAN DATE, HIGH-ORDER PART (IN)
TJDL = UT1 JULIAN DATE, LOW-ORDER PART (IN)
THE JULIAN DATE MAY BE SPLIT AT ANY POINT, BUT
FOR HIGHEST PRECISION, SET TJDH TO BE THE INTEGRAL
PART OF THE JULIAN DATE, AND SET TJDL TO BE THE
FRACTIONAL PART
XP = CONVENTIONALLY-DEFINED X COORDINATE OF CELESTIAL
INTERMEDIATE POLE WITH RESPECT TO ITRS POLE,
IN ARCSECONDS (IN)
YP = CONVENTIONALLY-DEFINED Y COORDINATE OF CELESTIAL
INTERMEDIATE POLE WITH RESPECT TO ITRS POLE,
IN ARCSECONDS (IN)
VEC1 = POSITION VECTOR, GEOCENTRIC EQUATORIAL RECTANGULAR
COORDINATES, REFERRED TO ITRS AXES (TERRESTRIAL
SYSTEM) (IN)
VEC2 = POSITION VECTOR, GEOCENTRIC EQUATORIAL RECTANGULAR
COORDINATES, REFERRED TO GCRS AXES (CELESTIAL
SYSTEM) (OUT)
NOTE 1: SET XP=YP=0.D0 TO ELIMINATE POLAR MOTION ROTATION.
NOTE 2: SEE ALSO SUBROUTINE SETDT TO SET THE VALUE OF DELTA-T (DELTA-T = TT - UT1) TO BE USED HERE.
NOTE 3: BOTH TJDH AND TJDL SHOULD BE NON-NEGATIVE FOR NORMAL USE (TJDL=0.D0 IS OK). A NEGATIVE VALUE OF TJDH IS USED TO INVOKE A SPECIAL OPTION WHERE THE OUTPUT VECTOR IS PRODUCED WITH RESPECT TO THE EQUATOR AND EQUINOX OF DATE, AND THE DATE FOR WHICH THE TRANSFORMATION APPLIES IS TAKEN FROM TJDL ONLY. THIS OPTION WORKS ONLY IN 'EQUINOX' MODE.
NOTE 4: INPUT PARAMETERS XP, YP WERE XPOLE, YPOLE IN NOVAS F3.0. THE NAMES WERE CHANGED FOR CONSISTANCY THROUGHOUT NOVAS AND WITH IERS CONVENTIONS.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp) | :: | tjdh | ||||
real(kind=wp) | :: | tjdl | ||||
real(kind=wp) | :: | xp | ||||
real(kind=wp) | :: | yp | ||||
real(kind=wp), | dimension(3) | :: | vec1 | |||
real(kind=wp), | dimension(3) | :: | vec2 |
subroutine tercel ( tjdh, tjdl, xp, yp, vec1, vec2 ) real(wp) :: tjdh,tjdl,xp,yp,vec1,vec2, & deltat,utjdh,utjdl,utjd,ttjd,tdbjd,t,secdif, & gast,rcio,theta,v1,v2,v3,v4,x,y,z dimension vec1(3), vec2(3), v1(3), v2(3), v3(3), v4(3), & x(3), y(3), z(3) call getdt ( deltat ) if ( tjdh >= 0.d0 ) then utjdh = tjdh utjdl = tjdl else utjdh = tjdl utjdl = 0.d0 end if utjd = utjdh + utjdl ! TIME ARGUMENT FOR PRECESSION AND NUTATION IS TDB ttjd = utjd + deltat tdbjd = ttjd call times ( tdbjd, t, secdif ) tdbjd = ttjd + secdif / 86400.d0 ! GET METHOD/ACCURACY MODE call getmod ( mode ) if ( mode >= 2 ) then ! 'EQUINOX' MODE ! APPLY POLAR MOTION if ( xp == 0.d0 .and. yp == 0.d0 ) then v1(1) = vec1(1) v1(2) = vec1(2) v1(3) = vec1(3) else call wobble ( tdbjd, xp, yp, vec1, v1 ) end if ! APPLY EARTH ROTATION call sidtim ( utjdh, utjdl, 1, gast ) call spin ( -gast * 15.d0, v1, v2 ) ! SPECIAL OPTION SKIPS REMAINING TRANSFORMATIONS if ( tjdh < 0.d0 ) then vec2(1) = v2(1) vec2(2) = v2(2) vec2(3) = v2(3) else ! APPLY NUTATION AND PRECESSION call nutate ( -tdbjd, v2, v3 ) call preces ( tdbjd, v3, jd_j2000, v4 ) ! APPLY FRAME-TIE MATRIX call frame ( v4, -1, vec2 ) end if else ! 'CIO-TIO-THETA' MODE ! SEE G. KAPLAN (2003), 'ANOTHER LOOK AT NON-ROTATING ORIGINS', ! PROCEEDINGS OF IAU XXV JOINT DISCUSSION 16 (PREPRINT), ! EQ. (3) AND (4). ! APPLY POLAR MOTION, TRANSFORMING THE VECTOR TO THE TERRESTRIAL ! INTERMEDIATE SYSTEM if ( xp == 0.d0 .and. yp == 0.d0 ) then v1(1) = vec1(1) v1(2) = vec1(2) v1(3) = vec1(3) else call wobble ( tdbjd, xp, yp, vec1, v1 ) end if ! OBTAIN THE BASIS VECTORS, IN THE GCRS, OF THE CELESTIAL ! INTERMEDIATE SYSTEM call cioloc ( tdbjd, rcio, kcio ) call ciobas ( tdbjd, rcio, kcio, x, y, z ) ! COMPUTE AND APPLY THE EARTH ROTATION ANGLE THETA, TRANSFORMING ! THE VECTOR TO THE CELESTIAL INTERMEDIATE SYSTEM call erot ( utjdh, utjdl, theta ) call spin ( -theta, v1, v2 ) ! TRANSFORM THE VECTOR FROM THE CELESTIAL INTERMEDIATE SYSTEM ! TO THE GCRS vec2(1) = x(1) * v2(1) + y(1) * v2(2) + z(1) * v2(3) vec2(2) = x(2) * v2(1) + y(2) * v2(2) + z(2) * v2(3) vec2(3) = x(3) * v2(1) + y(3) * v2(2) + z(3) * v2(3) end if ! STORE COMPUTED POSITION VECTOR FOR POSSIBLE LATER RETRIEVAL call setvec ( vec2 ) end subroutine tercel