00001
00005 #pragma once
00006
00007 #include <usml/ocean/reflect_loss_model.h>
00008
00009 namespace usml {
00010 namespace ocean {
00011
00012 using boost::numeric::ublas::vector;
00013
00016
00083 class USML_DECLSPEC reflect_loss_rayleigh : public reflect_loss_model {
00084
00085 public:
00086
00088 typedef enum {
00089 CLAY, SILT, SAND, GRAVEL, MORAINE, CHALK, LIMESTONE, BASALT
00090 } bottom_type_enum ;
00091
00092
00100 reflect_loss_rayleigh( bottom_type_enum type ) ;
00101
00109 reflect_loss_rayleigh( size_t type ) ;
00110
00126 reflect_loss_rayleigh(
00127 double density, double speed, double att_bottom=0.0,
00128 double speed_shear=0.0, double att_shear=0.0 ) ;
00129
00141 virtual void reflect_loss(
00142 const wposition1& location,
00143 const seq_vector& frequencies, double angle,
00144 vector<double>* amplitude, vector<double>* phase=NULL ) ;
00145
00146 private:
00147
00165 complex<double> impedance(
00166 double density, double speed, double attenuation, double angle,
00167 complex< double >* cosA, bool shear ) ;
00168
00170 static struct bottom_type_table {
00171 bottom_type_enum type ;
00172 double density ;
00173 double speed ;
00174 double att_bottom ;
00175 double speed_shear ;
00176 double att_shear ;
00177 } lookup[] ;
00178
00179
00180
00181
00183 const double _density_water ;
00184
00186 const double _speed_water ;
00187
00189 const double _density_bottom ;
00190
00192 const double _speed_bottom ;
00193
00195 const double _att_bottom ;
00196
00198 const double _speed_shear ;
00199
00201 const double _att_shear ;
00202
00203 } ;
00204
00206 }
00207 }