volume_model.h

00001 
00005 #pragma once
00006 
00007 #include <usml/ocean/scattering_constant.h>
00008 
00009 namespace usml {
00010 namespace ocean {
00011 
00012 using boost::numeric::ublas::vector;
00013 
00016 
00025 class USML_DECLSPEC volume_model : public scattering_model {
00026 
00027     //**************************************************
00028     // depth model
00029 
00030   public:
00031 
00041     virtual void depth( const wposition& location,
00042         matrix<double>* rho, matrix<double>* thickness=NULL ) = 0 ;
00043 
00053     virtual void depth( const wposition1& location,
00054         double* rho, double* thickness=NULL ) = 0 ;
00055 
00056     //**************************************************
00057     // reverberation scattering strength model
00058 
00064     void scattering( scattering_model* scattering ) {
00065         if( _scattering ) delete _scattering ;
00066         _scattering = scattering ;
00067     }
00068 
00080     virtual void scattering( const wposition1& location,
00081         const seq_vector& frequencies, double de_incident, double de_scattered,
00082         double az_incident, double az_scattered, vector<double>* amplitude )
00083     {
00084         _scattering->scattering( location,
00085                         frequencies, de_incident, de_scattered,
00086                                 az_incident, az_scattered, amplitude ) ;
00087     }
00088 
00104     virtual void scattering( const wposition& location,
00105         const seq_vector& frequencies, double de_incident, matrix<double> de_scattered,
00106         double az_incident, matrix<double> az_scattered, matrix< vector<double> >* amplitude )
00107     {
00108         _scattering->scattering( location,
00109                         frequencies, de_incident, de_scattered,
00110                                 az_incident, az_scattered, amplitude ) ;
00111     }
00112 
00113     //**************************************************
00114     // initialization
00115 
00121     volume_model( scattering_model* scatter=NULL ) :
00122         _scattering( scatter )
00123     {
00124                 if ( scatter ) {
00125                         _scattering = scatter ;
00126                 } else {
00127                         _scattering = new scattering_constant() ;
00128                 }
00129     }
00130 
00134     virtual ~volume_model() {
00135         if ( _scattering ) delete _scattering ;
00136     }
00137 
00138   private:
00139 
00141     scattering_model* _scattering ;
00142 
00143 };
00144 
00146 }  // end of namespace ocean
00147 }  // end of namespace usml

Generated on 4 May 2015 for USML by  doxygen 1.6.1