C+ C NAME: C smei_orbit_time2 C PURPOSE: C Returns time at which Coriolis was in specified orbit C CALLING SEQUENCE: subroutine smei_orbit_time2(iorbit,dorbit,tt) C INPUTS: C iorbit integer Coriolis orbit number C dorbit double precision Coriolis orbit fraction C OUTPUTS: C tt(2) integer time at which Coriolis was at specified orbit C CALLS: C smei_orbit_info2, ArrI4Copy, Time2Delta, Time2Day8, Time2Add C PROCEDURE: C MODIFICATION HISTORY: C JUN-2004, Paul Hick (UCSD/CASS) C MAR-2007, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C Increased NORBIT_MAX from 20000 to 40000 C- integer iorbit double precision dorbit integer tt(2) double precision porbit ! Return arg in smei_orbit_period2 character cSay*11 /'smei_orbit2'/ parameter (NORBIT_MAX = 40000) integer orbit0 /-1/ integer torbit(2,NORBIT_MAX) save orbit0, norbit, torbit integer dt(2) double precision forbit double precision day if (orbit0 .eq. -1) call smei_orbit_info2(NORBIT_MAX,orbit0,norbit,torbit) jorbit = iorbit-orbit0 ! Array index (may be out of range) forbit = dorbit i = forbit if (forbit .lt. 0 .and. i .ne. forbit) i = i-1 i = jorbit+i ! Would-be array index if forbit is positive fraction of one i = max(1,min(i,norbit-1)) ! Make sure array index is valid forbit = forbit-(i-jorbit) ! Positive fraction of one call ArrI4Copy(2,torbit(1,i),tt) call Time2Delta(torbit(1,i+1),torbit(1,i),dt) call Time2Day8(0,dt,day) day = forbit*day call Time2Day8(1,dt,day) call Time2Add(tt,dt,tt) return C+ C NAME: C smei_orbit2 C PURPOSE: C Coriolis orbit number at specified time C CALLING SEQUENCE: entry smei_orbit2(tt,iorbit,dorbit) C INPUTS: C tt(2) integer time C OUTPUTS: C iorbit integer Coriolis orbit number C dorbit double precision C Coriolis orbit fraction C CALLS: C Time2YDoy, Time2Delta, Time2Day8, smei_orbit_period, smei_orbit_time C PROCEDURE: C See href=smei_orbit_time= C MODIFICATION HISTORY: C JUN-2004, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- if (orbit0 .eq. -1) call smei_orbit_info2(NORBIT_MAX,orbit0,norbit,torbit) iorbit = 1 call Time2Delta(tt,torbit(1,iorbit),dt) call Time2Day8(0,dt,day) do while (iorbit .lt. norbit .and. day .ge. 0.0d0) iorbit = iorbit+1 call Time2Delta(tt,torbit(1,iorbit),dt) call Time2Day8(0,dt,day) end do iorbit = max(1,iorbit-1) call Time2Delta(tt,torbit(1,iorbit),dt) call Time2Day8(0,dt,dorbit) call Time2Delta(torbit(1,iorbit+1),torbit(1,iorbit),dt) call Time2Day8(0,dt,day) dorbit = dorbit/day i = dorbit if (dorbit .lt. 0.0d0 .and. i .ne. dorbit) i = i-1 dorbit = dorbit-i iorbit = iorbit+i+orbit0 return C+ C NAME: C smei_orbit_period2 C PURPOSE: C Coriolis orbital period C CALLING SEQUENCE: entry smei_orbit_period2(iorbit,dorbit,porbit) C INPUTS: C orbit double precision C Coriolis orbit number C OUTPUTS: C smei_orbit_period2 C double precision C orbital period in days C CALLS: C smei_orbit_info2 C PROCEDURE: C See href=smei_orbit_time2= C MODIFICATION HISTORY: C JUN-2004, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- if (orbit0 .eq. -1) call smei_orbit_info2(NORBIT_MAX,orbit0,norbit,torbit) forbit = dorbit i = forbit if (forbit .lt. 0 .and. i .ne. forbit) i = i-1 i = max(1,min(i,norbit-1)) i = iorbit+i-orbit0 call Time2Delta(torbit(1,i+1),torbit(1,i),dt) call Time2Day8(0,dt,porbit) return end