SRVADD Name
      SRVADD
Author
  
   Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770 
  
   craigm@lheamail.gsfc.nasa.gov 
  
   UPDATED VERSIONs can be found on my WEB PAGE:  
      
      http://cow.physics.wisc.edu/~craigm/idl/idl.html
Purpose
  
   Add velocity 3-vectors according to special relativity
Major Topics
      Physics, Geometry
Calling Sequence
      U0 = SRVADD(U1, V)
Description
 
  
  The function SRVADD performs addition of velocity 3-vectors 
  
  according to special relativity. 
  
  Consider two inertial coordinate frames.  Frame "0" is a "lab" or
     rest frame.  Frame "1" is a "rocket" or moving frame, moving at
     velocity V with respect to the lab frame.  The velocity V is
     allowed to be an arbitrary 3-vector. 
    
    * An observer in the rocket frame sees a body moving at velocity U1.
    
    * An observer in the lab frame sees the same body moving at
             velocity U0. 
    
    * This function solves for U0 in terms of V and U1. 
  
  U1 and V are allowed to be 3xN arrays, which means more than one 
  
  vector can be computed in a single call.  If the dimensions of 
  
  either U1 or V are 3x1, then it will be expanded to match the 
  
  dimensions of the other vector.  This simulates addition by a 
  
  "scalar" vector.  Because V can be a 3xN array, this means that 
  
  multiple "rocket" frames can be computed at one time. 
  
  NOTE: Velocities passed to SRVADD are measured as a *fraction of
        
        the speed of light*.  Therefore, if the velocities are
        
        measured in some physical units, and CLIGHT is the speed of
        
        light in those same units, then the following statement:
          
           U0 = SRVADD(U1/CLIGHT, V/CLIGHT)*CLIGHT
        
        will compute the velocity U0, also in the same units. 
  
  The formula for computing the velocity in the lab frame is:
        
         ( (1-1/GAMMA)*(U1 . VUNIT)*VUNIT + U1/GAMMA + V ) 
    
    U0 = -------------------------------------------------
                    
                                 (1 - U1 . V) 
  
  where  
    
    GAMMA is the Lorentz factor = 1/SQRT(1 - |V|^2) 
    
    VUNIT is the unit vector in the direction of V, = V/|V| 
    
    "." is the vector dot product 
  
  [ IDL notation is not strictly adhered to in this formula, for 
  
  clarity of presentation. ] Inputs
 
  
   U1 - 3-vector or 3xN array, the velocity of a body as seen in the
        
        rocket frame (frame 1).  The velocity is normalized such that
                 the speed of light is 1.
      V - 3-vector or 3xN array, the velocity of the rocket frame as
      
       seen by an observer in the lab.  The velocity is normalized
              such that the speed of light is 1.
Returns
 
  
   A 3xN array, containing the velocity of the body as seen in the 
  
   lab frame.  The velocity is normalized such that the speed of 
  
   light is 1. Keyword Parameters
 
  
   CLASSICAL - if set, then classical velocity addition is performed,
              
               and the relativistic form is disabled.
              
               Default: not set (i.e., relativity is applied)
Example
 
  
   IDL> print, srvadd([0.1d,0,0],   [0.5d,0,0])
        
         0.56504883       0.0000000       0.0000000 
  
   Adds velocities of 0.1 and 0.5 times the speed of light.  The 
  
   result is slightly less than the arithmetic sum. 
  
   IDL> print, srvadd([0.,0.1,0],[0.5d,0,0])
        
         0.50000000     0.086602542       0.0000000 
  
   Adds velocities in two orthogonal directions.  Demonstrates the 
  
   relativistic aberration of velocities (i.e., velocities in the 
  
   perpendicular direction are affected).
Modification History
  
   Written, 28 Jan 2002, CM 
      More documentation, 29 Jan 2002, CM
      Add CLASSICAL keyword, 29 Jul 2002, CM