00001
00005 #pragma once
00006
00007 #include <usml/ocean/reflect_loss_model.h>
00008 #include <usml/ocean/wave_height_pierson.h>
00009
00010 namespace usml {
00011 namespace ocean {
00012
00013 using boost::numeric::ublas::vector;
00014
00017
00055 class USML_DECLSPEC reflect_loss_eckart: public reflect_loss_model {
00056
00057 public:
00058
00064 reflect_loss_eckart( double wind_speed ) :
00065 _wind_speed2( wind_speed * wind_speed )
00066 {
00067 }
00068
00080 virtual void reflect_loss(const wposition1& location,
00081 const seq_vector& frequencies, double angle,
00082 vector<double>* amplitude, vector<double>* phase = NULL)
00083 {
00084 noalias(*amplitude) = frequencies ;
00085 *amplitude = 8.6e-9 * abs2( (*amplitude) * _wind_speed2 * sin(angle) );
00086 if ( phase ) {
00087 noalias(*phase) = scalar_vector<double>( frequencies.size(), M_PI );
00088 }
00089 }
00090
00091 private:
00092
00094 const double _wind_speed2;
00095 };
00096
00098 }
00099 }