boundary_model.h

00001 
00005 #pragma once
00006 
00007 #include <usml/ocean/reflect_loss_constant.h>
00008 #include <usml/ocean/scattering_constant.h>
00009 
00010 namespace usml {
00011 namespace ocean {
00012 
00013 using boost::numeric::ublas::vector;
00014 
00017 
00058 class USML_DECLSPEC boundary_model : public reflect_loss_model, scattering_model {
00059 
00060     //**************************************************
00061     // height model
00062 
00063   public:
00064 
00074     virtual void height( const wposition& location,
00075         matrix<double>* rho, wvector* normal=NULL, bool quick_interp=false ) = 0 ;
00076 
00086     virtual void height( const wposition1& location,
00087         double* rho, wvector1* normal=NULL, bool quick_interp=false ) = 0 ;
00088 
00089     //**************************************************
00090     // reflection loss model
00091 
00097     void reflect_loss( reflect_loss_model* reflect_loss ) {
00098         if ( _reflect_loss ) delete _reflect_loss ;
00099         _reflect_loss = reflect_loss ;
00100     }
00101 
00111     virtual void reflect_loss(
00112         const wposition1& location,
00113         const seq_vector& frequencies, double angle,
00114         vector<double>* amplitude, vector<double>* phase=NULL )
00115     {
00116         _reflect_loss->reflect_loss( location,
00117             frequencies, angle, amplitude, phase ) ;
00118     }
00119 
00120     //**************************************************
00121     // reverberation scattering strength model
00122 
00128     void scattering( scattering_model* scattering ) {
00129         if( _scattering ) delete _scattering ;
00130         _scattering = scattering ;
00131     }
00132 
00144     virtual void scattering( const wposition1& location,
00145         const seq_vector& frequencies, double de_incident, double de_scattered,
00146         double az_incident, double az_scattered, vector<double>* amplitude )
00147     {
00148         _scattering->scattering( location,
00149                         frequencies, de_incident, de_scattered,
00150                                 az_incident, az_scattered, amplitude ) ;
00151     }
00152 
00168     virtual void scattering( const wposition& location,
00169         const seq_vector& frequencies, double de_incident, matrix<double> de_scattered,
00170         double az_incident, matrix<double> az_scattered, matrix< vector<double> >* amplitude )
00171     {
00172         _scattering->scattering( location,
00173                         frequencies, de_incident, de_scattered,
00174                                 az_incident, az_scattered, amplitude ) ;
00175     }
00176 
00177     //**************************************************
00178     // initialization
00179 
00186     boundary_model( reflect_loss_model* reflect_loss=NULL,
00187                     scattering_model* scattering=NULL )
00188     {
00189                 if ( reflect_loss ) {
00190                         _reflect_loss = reflect_loss ;
00191                 } else {
00192                         _reflect_loss = new reflect_loss_constant( 0.0, 0.0 ) ;
00193                 }
00194                 if ( scattering ) {
00195                         _scattering = scattering ;
00196                 } else {
00197                         _scattering = new scattering_constant() ;
00198                 }
00199     }
00200 
00204     virtual ~boundary_model() {
00205         if ( _reflect_loss ) delete _reflect_loss ;
00206         if ( _scattering ) delete _scattering ;
00207     }
00208 
00209   private:
00210 
00212     reflect_loss_model* _reflect_loss ;
00213 
00215     scattering_model* _scattering ;
00216 
00217 };
00218 
00220 }  // end of namespace ocean
00221 }  // end of namespace usml

Generated on 4 May 2015 for USML by  doxygen 1.6.1