| dvdot |
|
Table of contents
Procedure
DVDOT ( Derivative of Vector Dot Product, 3-D )
DOUBLE PRECISION FUNCTION DVDOT ( S1, S2 )
Abstract
Compute the derivative of the dot product of two double
precision position vectors.
Required_Reading
None.
Keywords
DERIVATIVE
VECTOR
Declarations
IMPLICIT NONE
DOUBLE PRECISION S1 ( 6 )
DOUBLE PRECISION S2 ( 6 )
Brief_I/O
VARIABLE I/O DESCRIPTION
-------- --- --------------------------------------------------
S1 I First state vector in the dot product.
S2 I Second state vector in the dot product.
The function returns the derivative of the dot product <S1,S2>
Detailed_Input
S1 is any state vector. The components are in order
(x, y, z, dx/dt, dy/dt, dz/dt )
S2 is any state vector.
Detailed_Output
The function returns the derivative of the dot product of the
position portions of the two state vectors S1 and S2.
Parameters
None.
Exceptions
Error free.
Files
None.
Particulars
Given two state vectors S1 and S2 made up of position and
velocity components (P1,V1) and (P2,V2) respectively,
DVDOT calculates the derivative of the dot product of P1 and P2,
i.e. the time derivative
d
-- < P1, P2 > = < V1, P2 > + < P1, V2 >
dt
where <,> denotes the dot product operation.
Examples
The 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) Suppose that given two state vectors whose position components
are unit vectors, and that we need to compute the rate of
change of the angle between the two vectors.
Example code begins here.
PROGRAM DVDOT_EX1
IMPLICIT NONE
C
C SPICELIB functions
C
DOUBLE PRECISION DVDOT
DOUBLE PRECISION VDOT
C
C Local variables.
C
DOUBLE PRECISION DTHETA
DOUBLE PRECISION S1 (6)
DOUBLE PRECISION S2 (6)
C
C Define the two state vectors whose position
C components are unit vectors.
C
DATA S1 /
. 7.2459D-01, 6.6274D-01, 1.8910D-01,
. -1.5990D-06, 1.6551D-06, 7.4873D-07 /
DATA S2 /
. 8.4841D-01, -4.7790D-01, -2.2764D-01,
. 1.0951D-07, 1.0695D-07, 4.8468D-08 /
C
C We know that the Cosine of the angle THETA between them
C is given by
C
C cos(THETA) = VDOT(S1,S2)
C
C Thus by the chain rule, the derivative of the angle is
C given by:
C
C sin(THETA) dTHETA/dt = DVDOT(S1,S2)
C
C Thus for values of THETA away from zero we can compute
C dTHETA/dt as:
C
DTHETA = DVDOT(S1,S2) / SQRT( 1 - VDOT(S1,S2)**2 )
WRITE(*,'(A,F18.12)') 'Rate of change of angle '
. // 'between S1 and S2:', DTHETA
END
When this program was executed on a Mac/Intel/gfortran/64-bit
platform, the output was:
Rate of change of angle between S1 and S2: -0.000002232415
Note that if the position components of S1 and S2 are parallel,
the derivative of the angle between the positions does not
exist. Any code that computes the derivative of the angle
between two position vectors should account for the case
when the position components are parallel.
Restrictions
1) The user is responsible for determining that the states S1 and
S2 are not so large as to cause numeric overflow. In most
cases this won't present a problem.
2) An implicit assumption exists that S1 and S2 are specified in
the same reference frame. If this is not the case, the
numerical result has no meaning.
Literature_References
None.
Author_and_Institution
J. Diaz del Rio (ODC Space)
W.L. Taber (JPL)
Version
SPICELIB Version 1.1.0, 06-JUL-2021 (JDR)
Added IMPLICIT NONE statement.
Edited the header to comply with NAIF standard. Added complete
code examples. Added entry #2 to $Restrictions.
SPICELIB Version 1.0.0, 18-MAY-1995 (WLT)
|
Fri Dec 31 18:36:16 2021