reflection_model Class Reference

Collaboration diagram for reflection_model:
Collaboration graph
[legend]

Constructor & Destructor Documentation

reflection_model ( wave_queue wave  )  [inline, private]

Hide default constructor to prohibit use by non-friends.

virtual ~reflection_model (  )  [inline, private, virtual]

Member Function Documentation

bool bottom_reflection ( size_t  de,
size_t  az,
double  depth 
) [private]

Reflect a single acoustic ray from the ocean bottom.

Computes boundary reflection loss and re-initializes the direction of the ray. Adds reflection attenuation and phase to existing values.

The distance (in time) from the "current" wavefront to the boundary collision is given by:

\[ \Delta\tau_{collision} = h \frac{ \hat{r} \bullet \hat{n} } { \frac{d\vec{r}}{d\tau} \bullet \hat{n} } \]

where:

  • h = height above bottom at "current" wavefront
  • $ \vec{r} $ = position in spherical earth coords
  • $ \hat{r} $ = position normal in spherical earth coords
  • $ \hat{n} $ = surface normal
  • $ \Delta\tau_{collision} $ = time step needed for collision

The direction of the reflected ray is given by the vector equation:

\[ \hat{R} = \hat{I} - 2 (\hat{I} \bullet \hat{n}) \hat{n} \]

where:

  • $ \hat{n} $ = surface normal
  • $ \hat{I} $ = incident direction in spherical earth coords
  • $ \hat{R} $ = reflected direction in spherical earth coords

Note that small errors in the surface normal have a large effect when the ray path is nearly parallel to the ocean floor. If the reflection does not point the ray back-into the water column, the next time step will include an erroneous reflection in which both the current and next location are below the bottom. This implement uses the height differential between the current and next rays to refine the dot product $ \frac{d\vec{r}}{d\tau} \bullet \hat{n} $ when this becomes a problem.

For near-miss instances, please refer to the section on MIN_REFLECT.

Parameters:
de D/E angle index number of reflected ray.
az AZ angle index number of reflected ray.
depth Depth that ray has penetrated into the bottom.
Returns:
True for an actual reflection, False for a near-miss.
void collision_location ( size_t  de,
size_t  az,
double  dtime,
wposition1 position,
wvector1 ndirection,
double *  speed 
) const [private]

Computes a refined location and direction at the point of collision.

Uses a second order Taylor series around the current location to estimate these values.

Parameters:
de D/E angle index number.
az AZ angle index number.
dtime The distance (in time) from the "current" wavefront to the boundary collision.
position Refined position of the reflection (output).
ndirection Normalized direction at the point of reflection (output).
speed Speed of sound at the point of reflection (output).
void reflection_copy ( wave_front element,
size_t  de,
size_t  az,
wave_front results 
) [static, private]

Copy new wave element data into the destination wavefront.

Used by reflection_reinit() to change the direction of one ray in the wavefront.

Parameters:
element Destination for new information.
de D/E angle index number of reflected ray.
az AZ angle index number of reflected ray.
results Wave element data with new information.
void reflection_reinit ( size_t  de,
size_t  az,
double  dtime,
const wposition1 position,
const wvector1 direction,
double  speed 
) [private]

Re-initialize an individual ray after reflection.

Uses the position and reflected direction to initialize a temporary 1x1 wavefront. Then, the position and direction of the 1x1 wavefront are copied into the reflected ray.

Parameters:
de D/E angle index number of reflected ray.
az AZ angle index number of reflected ray.
dtime The distance (in time) from the "current" wavefront to the boundary collision.
position Position of the reflection.
direction Direction (un-normalized) after reflection.
speed Speed of sound at the point of reflection.
bool surface_reflection ( size_t  de,
size_t  az 
) [private]

Reflect a single acoustic ray from the ocean surface.

Computes boundary reflection loss and re-initializes the direction of the ray. Adds reflection attenuation and phase to existing values.

Because the ocean surface has fixed normal, the generic collision equations (used by the bottom_reflection() method) can be simplified into the form:

\[ \Delta\tau_{collision} = \frac{ h }{ \frac{dr}{d\tau} } \]

\[ R_{\rho} = - I_{\rho}, R_{\theta} = I_{\theta}, R_{\phi} = I_{\phi} \]

where:

  • h = distance from current ray to ocean surface
  • r = radial component of position in spherical earth coords
  • $ \Delta\tau_{collision} $ = time step needed for collision
  • $ \hat{I} $ = incident direction in spherical earth coords
  • $ \hat{R} $ = reflected direction in spherical earth coords

The direction of the reflected ray is computed by taking the negative of the radial component.

This routine exits without producing a reflection if this calculation indicates that a near-miss has occurred. A near-miss is defined as the case where the grazing angle is zero or negative. In a near-miss, the ray is already heading back into the water column without the help of a reflection.

Parameters:
de D/E angle index number of reflected ray.
az AZ angle index number of reflected ray.
Returns:
True for an actual reflection, False for a near-miss.

Friends And Related Function Documentation

friend class wave_queue [friend]

Member Data Documentation

wave_queue& _wave [private]

Wavefront object associated with this model.

const double MIN_REFLECT = 6.0 [static, private]

The assumption that the surface normal is constant across the time step breaks down when the incident ray is nearly parallel to the bottom.

Establishing a minimize grazing angle prevents the model from becoming unstable under these conditions.

The minimum grazing angle is asin( MIN_REFLECT / c ) where c is the speed of sound. A value where MIN_REFLECT=6.0 results in a minimum grazing angle of about 0.23 degrees. We assume that this value is much lower than the uncertainty in the gridded bathymetry slope.

const double TOO_SHALLOW [private]

If the water is too shallow, bottom_reflection() uses a horizontal normal to simulate reflection from "dry land".

Without this, the propagation could wander into a region where the ocean bottom was above the surface and all propagation elements evaluated to NaN. This approximation has very little practical effect because the rays should already be very weak, due to multiple bottom interactions, by the time they reach the beach.

It is automatically set to a value that is 300 times the time step of the wavefront. This value 1/5 the length of a typical time step (1500*dt).


Generated on 4 May 2015 for USML by  doxygen 1.6.1