dhfa |
Table of contents
ProcedureDHFA ( Time derivative of half angle ) DOUBLE PRECISION FUNCTION DHFA ( STATE, BODYR) AbstractCalculate the value of the time derivative of the half angle of a spherical body given a state vector STATE and body radius BODYR. Required_ReadingNone. KeywordsNone. DeclarationsIMPLICIT NONE DOUBLE PRECISION STATE (6) DOUBLE PRECISION BODYR Brief_I/OVARIABLE I/O DESCRIPTION -------- --- -------------------------------------------------- STATE I SPICE state vector BODYR I Radius of body Detailed_InputSTATE is the state vector of a target body as seen from an observer. BODYR is the radius of the target body observed from the position in STATE; the target body assumed as a sphere. Detailed_OutputThe function returns the double precision value of the time derivative of the half angle of a spherical body in radians per second. ParametersNone. Exceptions1) If the radius of the body BODYR is less than zero, the error SPICE(BADRADIUS) is signaled. 2) If the position component of STATE equals the zero vector, the error SPICE(DEGENERATECASE) is signaled. 3) If the body radius exceeds the distance from the body to the observer, the error SPICE(BADGEOMETRY) is signaled. FilesNone. ParticularsIn this discussion, the notation < V1, V2 > indicates the dot product of vectors V1 and V2. The expression body_radius sin(ALPHA) = ----------- (1) range describes the half angle (ALPHA) of a spherical body, i.e. the angular radius of the spherical body as viewed by an observer at distance 'range'. Solve for ALPHA -1 body_radius ALPHA = sin ( ----------- ) (2) range Take the derivative of ALPHA with respect to time d 1 d body_radius --(ALPHA) = --------------------- * __ (----------- ) (3) dt 1 - body_radius 2 1/2 dt range ( [ ----------- ] ) range d - body_radius 1 d --(ALPHA) = --------------------- * ------ * __(range) (4) dt 1 - body_radius 2 1/2 2 dt ( [ ----------- ] ) range range With _ _ d < R, V > - -- ( range ) = -------- , range = ||R|| (5) dt - ||R|| Apply (5) to equation (4) _ _ d - body_radius 1 < R, V > --(ALPHA) = --------------------- * ------ * -------- (6) dt 1 - body_radius 2 1/2 2 range ( [ ----------- ] ) range range Carry range through the denominator gives _ _ d - body_radius < R, V > --(ALPHA) = --------------------- * -------- (7) dt 2 2 1/2 2 (range - body_radius ) range So since - - _ _ ^ - < R, V > < R, V > < R, V > = --- = -------- - range ||R|| ^ _ d - body_radius < R, V > --(ALPHA) = --------------------- * -------- (8) dt 2 2 1/2 (range - body_radius ) range ExamplesThe numerical results shown for this example may differ across platforms. The results depend on the SPICE kernels used as input, the compiler and supporting libraries, and the machine specific arithmetic implementation. 1) Compute the half angle derivative at the approximate time corresponding to a maximal angular separation between the Earth and Moon as seen from the Sun, and two weeks later. The two derivate values shall have similar magnitudes but opposite signs. Use the meta-kernel shown below to load the required SPICE kernels. KPL/MK File name: dhfa_ex1.tm This meta-kernel is intended to support operation of SPICE example programs. The kernels shown here should not be assumed to contain adequate or correct versions of data required by SPICE-based user applications. In order for an application to use this meta-kernel, the kernels referenced here must be present in the user's current working directory. The names and contents of the kernels referenced by this meta-kernel are as follows: File name Contents --------- -------- de421.bsp Planetary ephemeris pck00010.tpc Planet orientation and radii naif0012.tls Leapseconds \begindata KERNELS_TO_LOAD = ( 'de421.bsp', 'pck00010.tpc', 'naif0012.tls' ) \begintext End of meta-kernel Example code begins here. PROGRAM DHFA_EX IMPLICIT NONE INTEGER DIM DOUBLE PRECISION ET DOUBLE PRECISION LT DOUBLE PRECISION DHADT DOUBLE PRECISION RAD (3) DOUBLE PRECISION STATE (6) INTEGER STRLEN PARAMETER ( STRLEN = 64 ) CHARACTER*(STRLEN) BEGSTR DOUBLE PRECISION SPD DOUBLE PRECISION DHFA C C Load kernels. C CALL FURNSH ('dhfa_ex1.tm') C C An approximate time corresponding to a maximal angular C separation between the Earth and Moon as seen from the C Sun. C BEGSTR = '2007-DEC-17 04:04:46.935443 (TDB)' CALL STR2ET( BEGSTR, ET ) CALL BODVRD ('SUN', 'RADII', 3, DIM, RAD ) CALL SPKEZR ('MOON', ET, 'J2000', 'NONE', 'SUN', . STATE, LT ) C C The derivative of the half angle at ET should have a C near-to maximal value as the Moon velocity vector points C either towards the Sun or away. C DHADT = DHFA( STATE, RAD(1) ) WRITE(*,*) 'Half angle derivative:' WRITE(*,*) ' at begin time : ', DHADT C C Two weeks later the derivate should have a similar C magnitude but the opposite sign. C ET = SPD() * 14.D0 + ET CALL SPKEZR ('MOON', ET, 'J2000', 'NONE', 'SUN', . STATE, LT ) DHADT = DHFA( STATE, RAD(1) ) WRITE(*,*) ' two weeks later: ', DHADT END When this program was executed on a Mac/Intel/gfortran/64-bit platform, the output was: Half angle derivative: at begin time : -2.5387993682459762E-011 two weeks later: 2.9436205837172777E-011 RestrictionsNone. Literature_ReferencesNone. Author_and_InstitutionN.J. Bachman (JPL) J. Diaz del Rio (ODC Space) E.D. Wright (JPL) VersionSPICELIB Version 1.0.2, 23-JUN-2020 (JDR) Edited the header to comply with NAIF standard. Added problem statement and meta-kernel to the example. Modified output to comply with maximum line length of header comments. SPICELIB Version 1.0.1, 06-JUL-2009 (EDW) Rename of the ZZDHA call to DHFA. SPICELIB Version 1.0.0, 10-FEB-2009 (EDW) (NJB) |
Fri Dec 31 18:36:13 2021