45 : TclClass(
"Module/UW/PROPAGATIONROGERS")
57 , sound_speed_water_bottom(1500)
58 , sound_speed_water_surface(1520)
59 , sound_speed_sediment(1585)
60 , density_sediment(1.740)
62 , attenuation_coeff_sediment(0.51)
78 Tcl &tcl = Tcl::instance();
81 if (strcasecmp(argv[1],
"getBottomDepth") == 0) {
84 }
else if (strcasecmp(argv[1],
"getSoundSpeedWaterBottom") == 0) {
87 }
else if (strcasecmp(argv[1],
"getSoundSpeedWaterSurface") == 0) {
90 }
else if (strcasecmp(argv[1],
"getSoundSpeedSediment") == 0) {
93 }
else if (strcasecmp(argv[1],
"getDensitySediment") == 0) {
96 }
else if (strcasecmp(argv[1],
"getDensityWater") == 0) {
99 }
else if (strcasecmp(argv[1],
"getAttenuationCoeffSediment") == 0) {
103 }
else if (argc == 3) {
104 if (strcasecmp(argv[1],
"setBottomDepth") == 0) {
107 }
else if (strcasecmp(argv[1],
"setSoundSpeedWaterBottom") == 0) {
110 }
else if (strcasecmp(argv[1],
"setSoundSpeedWaterSurface") == 0) {
113 }
else if (strcasecmp(argv[1],
"setSoundSpeedSediment") == 0) {
116 }
else if (strcasecmp(argv[1],
"setDensitySediment") == 0) {
119 }
else if (strcasecmp(argv[1],
"setDensityWater") == 0) {
122 }
else if (strcasecmp(argv[1],
"setAttenuationCoeffSediment") == 0) {
127 return UnderwaterMPropagation::command(argc, argv);
133 hdr_MPhy *ph = HDR_MPHY(p);
135 Position *sp = ph->srcPosition;
136 Position *rp = ph->dstPosition;
138 MSpectralMask *sm = ph->srcSpectralMask;
144 const double frequency_ =
145 ph->srcSpectralMask->getFreq();
146 const double distance_ = sp->getDist(rp);
150 const double gain = pow(10,
160 std::cout << NOW <<
" UnderwaterPhysicalRogersMode::getGain()"
161 <<
" distance=" << distance_ <<
" frequency=" << frequency_
162 <<
" gain=" << gain << std::endl;
168 const double &_sound_speed_water_bottom,
const double &_distance,
169 const double &_frequency,
const double &_bottom_depth)
171 const double theta_g_ =
getTheta_g(_bottom_depth, _distance);
172 const double theta_l_ = std::max(
getTheta_g_max(_sound_speed_water_bottom),
173 getTheta_c(_sound_speed_water_bottom, _frequency, _bottom_depth));
176 if (theta_g_ >= theta_l_) {
177 return (15 * log10(_distance) +
178 5 * log10(_bottom_depth *
getBeta()) +
179 (
getBeta() * _distance * pow(theta_l_, 2)) /
180 (4 * _bottom_depth) -
181 7.18 +
getThorp(_frequency / 1000.0) * _distance);
183 return (10 * log10(_distance) +
184 10 * log10(_bottom_depth / (2 * theta_l_)) +
185 (
getBeta() * _distance * pow(theta_l_, 2)) /
186 (4 * _bottom_depth) +
187 getThorp(_frequency / 1000.0) * _distance);
const double getTheta_g_max(const double &_sound_speed_water_bottom) const
Maximum grazion angle for an RBR mode.
double density_water
Water density (g/cm^3).
const double getTheta_c(const double &_sound_speed_water_bottom, const double &_frequency, const double &_bottom_depth) const
Cutoff angle of the lowest mode.
double density_sediment
Sediment density (g/cm^3).
double sound_speed_water_bottom
Speed of sound in water at the sea bottom level (m/s).
const double getBeta() const
Bottom loss (dB/rad) derived from the expression for the Rayleigh reflection coefficient for a two-fl...
double sound_speed_water_surface
Speed of sound in water at the sea surface level (m/s).
double getThorp(double _frequency)
Absorption coefficient calculated by using Thorp's equation.
double attenuation_coeff_sediment
Attenuation coefficient of the sediment (dB/(m*kHz)).
virtual double getAttenuation(const double &_sound_speed_water_bottom, const double &_distance, const double &_frequency, const double &_bottom_depth)
Attenuation of acoustic signal in underwater channel.
UnderwaterPhysicalRogersModel()
Constructor of UnderwaterMPhyBpskDb class.
virtual double getGain(Packet *p)
double bottom_depth
Water depth (m)
double sound_speed_sediment
Speed of sound in the sediment (m/s).
virtual int command(int, const char *const *)
TCL command interpreter.
const double getTheta_g(const double &_bottom_depth, const double &_distance) const
Effective angle of the last mode striped.
UwPhysicalRogersModelClass()
TclObject * create(int, const char *const *)
UwPhysicalRogersModelClass class_module_UnderwaterPhysicalRogersModel
Definition of UwPhysicalRogersModel class.