5 #ifndef USML_WAVEQ3D_WAVE_QUEUE_H
6 #define USML_WAVEQ3D_WAVE_QUEUE_H
8 #include <usml/ocean/ocean.h>
9 #include <usml/waveq3d/reverb_model.h>
10 #include <usml/waveq3d/wave_front.h>
11 #include <usml/waveq3d/proplossListener.h>
12 #include <netcdfcpp.h>
17 using namespace usml::ocean ;
19 class reflection_model ;
20 class spreading_model ;
22 class spreading_hybrid_gaussian ;
23 class proplossListener ;
177 typedef enum { CLASSIC_RAY, HYBRID_GAUSSIAN } spreading_type ;
211 spreading_type type=HYBRID_GAUSSIAN
234 return (*_source_de)(de) ;
245 return (*_source_az)(az) ;
287 return _source_de->size() ;
294 return _source_az->size() ;
306 _intensity_threshold =
abs(dThreshold);
313 return _intensity_threshold;
339 bool notifyProplossListeners(
unsigned targetRow,
unsigned targetCol,
eigenray pEigenray);
358 void init_wavefronts() ;
407 void detect_reflections() ;
420 bool detect_reflections_surface(
unsigned de,
unsigned az ) ;
433 bool detect_reflections_bottom(
unsigned de,
unsigned az ) ;
442 void detect_caustics() ;
453 void detect_eigenrays() ;
486 unsigned t1,
unsigned t2,
487 unsigned de,
unsigned az,
488 const double ¢er,
489 double distance2[3][3][3] ) ;
543 unsigned t1,
unsigned t2,
544 unsigned de,
unsigned az,
545 double distance2[3][3][3] ) ;
592 static void compute_offsets(
593 const double distance2[3][3][3],
const c_vector<double,3>& delta,
594 c_vector<double,3>& offset, c_vector<double,3>& distance,
615 static void make_taylor_coeff(
616 const double value[3][3][3],
const c_vector<double,3>& delta,
617 double& center, c_vector<double,3>& gradient, c_matrix<double,3,3>& hessian,
618 bool diagonal_only =
false ) ;
632 NcVar *
_nc_time, *_nc_latitude, *_nc_longitude, *_nc_altitude,
633 *_nc_surface, *_nc_bottom, *_nc_caustic, *_nc_on_edge;
692 void init_netcdf(
const char* filename,
const char* long_name=NULL ) ;
704 void close_netcdf() ;
reflection_model * _reflection_model
Reference to the reflection loss model component.
Definition: wave_queue.h:123
ocean_model & _ocean
Reference to the environmental parameters.
Definition: wave_queue.h:75
Definition: spreading_model.h:21
const wposition * _targets
List of acoustic targets.
Definition: wave_queue.h:111
spreading_model * _spreading_model
Reference to the spreading loss model component.
Definition: wave_queue.h:129
const seq_vector * _source_de
Initial depression/elevation angle (D/E) at the source location (degrees, positive is up)...
Definition: wave_queue.h:93
World location in geodetic earth coordinates (latitude, longitude, and altitude). ...
Definition: wposition.h:39
Wavefront characteristics at a specific point in time.
Definition: wave_front.h:68
unsigned num_de() const
Number of D/E angles in the ray fan.
Definition: wave_queue.h:286
std::vector< proplossListener * > _proplossListenerVec
Vector containing the references of objects that will be used to update classes that require eigenray...
Definition: wave_queue.h:156
const wposition1 _source_pos
Location of the wavefront source in spherical earth coordinates.
Definition: wave_queue.h:86
A single acoustic path between a source and target.
Definition: eigenray.h:24
Wavefront propagator for the WaveQ3D model.
Definition: wave_queue.h:63
void setIntensityThreshold(double dThreshold)
setIntensityThreshold
Definition: wave_queue.h:302
double time()
Elapsed time for the current element in the wavefront.
Definition: wave_queue.h:251
double _time
Time for current entry in the wave_front circular queue (seconds).
Definition: wave_queue.h:106
double getIntensityThreshold()
getIntensityThreshold
Definition: wave_queue.h:312
BOOST_UBLAS_INLINE matrix_unary1_traits< E, scalar_abs< typename E::value_type > >::result_type abs(const matrix_expression< E > &e)
Magnitude of a complex matrix.
Definition: matrix_math.h:257
const wave_front * next()
Return next element in the wavefront.
Definition: wave_queue.h:258
const wave_front * prev()
Return previous element in the wavefront.
Definition: wave_queue.h:272
wave_front * _prev
Definition: wave_queue.h:148
Combines the effects of surface, bottom, and profile into a single model.
Definition: ocean_model.h:20
Definition: reflection_model.h:49
double source_de(unsigned de)
Initial depression/elevation angle at the source location.
Definition: wave_queue.h:233
bool _az_boundary
Create an Azimuthal boundary loop condition upon initialization.
Definition: wave_queue.h:164
const wposition1 & source_pos()
Location of the wavefront source in spherical earth coordinates.
Definition: wave_queue.h:222
static const double time_step
Definition: eigenray_test.cc:20
matrix< double > _targets_sin_theta
Intermediate term: sin of colatitude for targets.
Definition: wave_queue.h:120
A reverberation model listens for interface collision callbacks from a wavefront. ...
Definition: reverb_model.h:24
double _time_step
Propagation step size (seconds).
Definition: wave_queue.h:103
bool _de_branch
Treat all targets that are slightly away from directly above the source as special cases...
Definition: wave_queue.h:170
const seq_vector * _source_az
Initial azimuthal angle (AZ) at the source location (degrees, clockwise from true north)...
Definition: wave_queue.h:100
Definition: spreading_ray.h:33
int _nc_rec
Current record number in netDCF file.
Definition: wave_queue.h:636
double _intensity_threshold
The value of the intensity threshold in dB Any eigenray intensity values that are weaker than this th...
Definition: wave_queue.h:137
double source_az(unsigned az)
Initial azimuthal angle at the source location.
Definition: wave_queue.h:244
NcVar * _nc_time
The netCDF variables used to record the wavefront log.
Definition: wave_queue.h:632
World location in geodetic earth coordinates (latitude, longitude, and altitude). ...
Definition: wposition1.h:23
This class is part of a Observer/Subject pattern for the wave_queue class and allows for multiple pro...
Definition: proplossListener.h:22
const wave_front * past()
Return past element in the wavefront.
Definition: wave_queue.h:279
const wave_front * curr()
Return current element in the wavefront.
Definition: wave_queue.h:265
const seq_vector * _frequencies
Frequencies over which to compute propagation loss (Hz).
Definition: wave_queue.h:81
NcFile * _nc_file
The netCDF file used to record the wavefront log.
Definition: wave_queue.h:629
static const seq_log freq(10e3, 10e3, 1)
A read-only, monotonic sequence of values.
Definition: seq_vector.h:36
unsigned num_az() const
Number of AZ angles in the ray fan.
Definition: wave_queue.h:293
Definition: spreading_hybrid_gaussian.h:44