tercel Subroutine

public subroutine tercel(tjdh, tjdl, xp, yp, vec1, vec2)

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.

Arguments

Type IntentOptional 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

Calls

proc~~tercel~~CallsGraph proc~tercel novas_module::tercel getdt getdt proc~tercel->getdt getmod getmod proc~tercel->getmod proc~ciobas novas_module::ciobas proc~tercel->proc~ciobas proc~cioloc novas_module::cioloc proc~tercel->proc~cioloc proc~erot novas_module::erot proc~tercel->proc~erot proc~frame novas_module::frame proc~tercel->proc~frame proc~nutate novas_module::nutate proc~tercel->proc~nutate proc~preces novas_module::preces proc~tercel->proc~preces proc~sidtim novas_module::sidtim proc~tercel->proc~sidtim proc~spin novas_module::spin proc~tercel->proc~spin proc~times novas_module::times proc~tercel->proc~times proc~wobble novas_module::wobble proc~tercel->proc~wobble setvec setvec proc~tercel->setvec proc~ciobas->proc~frame proc~ciobas->proc~nutate proc~ciobas->proc~preces proc~ciord novas_module::ciord proc~cioloc->proc~ciord proc~eqxra novas_module::eqxra proc~cioloc->proc~eqxra proc~etilt novas_module::etilt proc~nutate->proc~etilt proc~sidtim->getdt proc~sidtim->getmod proc~sidtim->proc~ciobas proc~sidtim->proc~cioloc proc~sidtim->proc~erot proc~sidtim->proc~frame proc~sidtim->proc~nutate proc~sidtim->proc~preces proc~sidtim->proc~times proc~sidtim->proc~eqxra proc~sidtim->proc~etilt ciofil ciofil proc~ciord->ciofil proc~eqxra->proc~etilt proc~etilt->getmod proc~etilt->proc~frame proc~etilt->proc~preces celpol celpol proc~etilt->celpol proc~eect2000 novas_module::eect2000 proc~etilt->proc~eect2000 proc~funarg novas_module::funarg proc~etilt->proc~funarg proc~nod~2 novas_module::nod proc~etilt->proc~nod~2 proc~anmp novas_module::anmp proc~eect2000->proc~anmp proc~nod~2->getmod proc~nu2000a novas_module::nu2000a proc~nod~2->proc~nu2000a proc~nu2000k novas_module::nu2000k proc~nod~2->proc~nu2000k proc~nu2000k->proc~funarg

Called by

proc~~tercel~~CalledByGraph proc~tercel novas_module::tercel proc~zdaz novas_module::zdaz proc~zdaz->proc~tercel

Source Code

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