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
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
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
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 }
00147 }