USML
spreading_hybrid_gaussian.h
1 
5 #ifndef USML_WAVEQ3D_SPREADING_HYBRID_GAUSSIAN_H
6 #define USML_WAVEQ3D_SPREADING_HYBRID_GAUSSIAN_H
7 
8 #include <usml/waveq3d/spreading_model.h>
9 
10 namespace usml {
11 namespace waveq3d {
12 
13 using namespace usml::ocean ;
14 
44 class USML_DECLSPEC spreading_hybrid_gaussian : public spreading_model {
45 
46  friend class wave_queue ;
47 
48  private:
49 
51  vector<double> _norm_de ;
52 
54  matrix<double> _norm_az ;
55 
57  vector<double> _beam_width ;
58 
60  vector<double> _intensity_de ;
61 
63  vector<double> _intensity_az ;
64 
65  matrix<bool> _duplicate ;
66 
72  static const double SPREADING_WIDTH ; // 2 pi
73 
80  static const double OVERLAP ; // 2.0
81 
87  static const double THRESHOLD ; // 1.002305238
88 
89  protected:
90 
108 
113 
138  inline vector<double> gaussian(double d,double w,double A) {
139  _beam_width = _spread + OVERLAP * OVERLAP * w * w ; // sum of squares
140  return element_div(
141  exp( (-0.5*d*d) / _beam_width ),
142  sqrt(_beam_width) ) * A ;
143  }
144 
158  virtual const vector<double>& intensity(
159  const wposition1& location, unsigned de, unsigned az,
160  const vector<double>& offset, const vector<double>& distance ) ;
161 
162  private:
163 
175  void intensity_de( unsigned de, unsigned az,
176  const vector<double>& offset, const vector<double>& distance ) ;
177 
189  void intensity_az( unsigned de, unsigned az,
190  const vector<double>& offset, const vector<double>& distance ) ;
191 
205  double width_de( unsigned de, unsigned az, const vector<double>& offset ) ;
206 
220  double width_az( unsigned de, unsigned az, const vector<double>& offset ) ;
221 
222 } ;
223 
224 } // end of namespace waveq3d
225 } // end of namespace usml
226 
227 #endif
vector< double > _intensity_az
Intensity contribution in azimuthal direction.
Definition: spreading_hybrid_gaussian.h:63
Definition: spreading_model.h:21
vector< double > _norm_de
Normalization in depression/elevation direction.
Definition: spreading_hybrid_gaussian.h:51
vector< double > _intensity_de
Intensity contribution in D/E direction.
Definition: spreading_hybrid_gaussian.h:60
BOOST_UBLAS_INLINE matrix_unary1_traits< E, scalar_exp< typename E::value_type > >::result_type exp(const matrix_expression< E > &e)
Exponential of a matrix.
Definition: matrix_math.h:503
Wavefront propagator for the WaveQ3D model.
Definition: wave_queue.h:63
virtual ~spreading_hybrid_gaussian()
Virtual destructor.
Definition: spreading_hybrid_gaussian.h:112
vector< double > gaussian(double d, double w, double A)
Compute the Gaussian contribution from a single wavefront cell.
Definition: spreading_hybrid_gaussian.h:138
vector< double > _beam_width
Combination of cell width and spreading.
Definition: spreading_hybrid_gaussian.h:57
matrix< double > _norm_az
Normalization in azimuthal direction.
Definition: spreading_hybrid_gaussian.h:54
static const double OVERLAP
Minimum percentage that each Gaussian beam can be expected spread into neighboring beams...
Definition: spreading_hybrid_gaussian.h:80
static const double SPREADING_WIDTH
Number of wavelengths that each Gaussian beam can be expected spread into neighboring beams...
Definition: spreading_hybrid_gaussian.h:72
World location in geodetic earth coordinates (latitude, longitude, and altitude). ...
Definition: wposition1.h:23
static const double THRESHOLD
Limits the extent of the search for Gaussian beam contributions.
Definition: spreading_hybrid_gaussian.h:87
BOOST_UBLAS_INLINE matrix_unary1_traits< E, scalar_sqrt< typename E::value_type > >::result_type sqrt(const matrix_expression< E > &e)
Square root of a matrix.
Definition: matrix_math.h:296
Definition: spreading_hybrid_gaussian.h:44
matrix< bool > _duplicate
Definition: spreading_hybrid_gaussian.h:65