subroutine get_tle_subset( SpacecraftID, pathlen, path, max_sets, & nSets, nGood, ClsLvl, IntlNo, EltSet, EphTyp, Orbit, EpochJD, & dNdT, d2NdT2, bStar, Incl, Node, E, Omega, M, N, status ) ! Given NORAD (US SpaceCom) spacecraft ID, obtain the current ! consistent subset of Norad two-line orbit elements. ! ! B. Knapp, 2003-12-11 ! implicit none ! Input integer*4 SpacecraftID, pathlen, max_sets character*(1024) path ! ! Output integer*4 nSets, nGood, status integer*4 EltSet(MAX_SETS), Orbit(MAX_SETS) real*8 EpochJD(MAX_SETS), dNdT(MAX_SETS), d2NdT2(MAX_SETS), & bStar(MAX_SETS), Incl(MAX_SETS), Node(MAX_SETS), E(MAX_SETS), & Omega(MAX_SETS), M(MAX_SETS), N(MAX_SETS) character*8 IntlNo(MAX_SETS) character*1 ClsLvl(MAX_SETS), EphTyp(MAX_SETS) ! ! Local integer*4 LUN, fStatus, j, SatID real*8 EpochYD character*12 fname ! ! Functions, subroutines external Get_LUN, Free_LUN, NextTle, yd2jd, TLE_Subset ! ! write(fname,10) SpacecraftID 10 format(i8.8,'.tle') call Get_LUN( LUN, fStatus ) open( LUN, file=path(1:pathlen)//fname, status='old', & form='formatted', iostat=fStatus ) if ( fStatus .ne. 0 ) then Status=90 return endif ! j = 1 Status = 0 do while( j .lt. MAX_SETS .and. Status .ge. 0 ) call NextTle( lun, SatID, ClsLvl(j), IntlNo(j), EltSet(j), & EphTyp(j), Orbit(j), EpochYD, dNdT(j), d2NdT2(j), & bStar(j), Incl(j), Node(j), E(j), Omega(j), M(j), N(j), & Status ) if ( Status .eq. 0 ) then N(j) = N(j)/1440.d0 if ( EpochYD/1000.d0 .ge. 57.d0 ) then EpochYD = 1900000.d0+EpochYD else EpochYD = 2000000.d0+EpochYD endif call yd2jd( EpochYD, EpochJD(j) ) NSets = j j = j+1 endif enddo close( LUN ) call Free_LUN( LUN, fStatus ) ! ! How did we end? if ( Status .eq. 0 ) then Status = 99 !Too many element sets return else if ( Status .gt. 0 ) then return !Problem reading elements endif ! ! Select a consistent subset call TLE_Subset( NSets, NGood, ClsLvl, IntlNo, EltSet, EphTyp, & Orbit, EpochJD, dNdT, d2NdT2, bStar, Incl, Node, E, & Omega, M, N, Status ) return end