BELLHOP computes acoustic fields in oceanic environments via beam tracing. The environment treated consists of an acoustic medium with a sound speed that may depend on range and depth. (However, the present version requires the user write a subroutine to supply the sound speed in cases where the profile is both range and depth dependent.)
A theoretical description may be found in:
Michael B. Porter and Homer P. Bucker, ``Gaussian beam tracing for computing ocean acoustic fields,'' J. Acoust. Soc. Amer. 82, 1349--1359 (1987).
Michael B. Porter and Yong-Chun Liu, “Finite-Element Ray Tracing'', Proceedings of the International Conference on Theoretical and Computational Acoustics, Eds. D. Lee and M. H. Schultz, pp. 947-956, World Scientific (1994).
The following programs are used with BELLHOP :
BELLHOP Main program for doing Gaussian beam tracing
PLOTRAY Produces plots of central rays of beams
ANGLES Given the source and reciever sound speeds, computes the angle of the limiting ray.
PLOTSSP Plots the sound speed profile
BELLHOP produces pressure fields in the NRL standard format and can therefore be plotted using the MATLAB script, plotshd.m.
The steps in running the program are as follows:
1. Set up your environmental file and run PLOTSSP to make sure the SSP looks reasonable.
2. Do a ray trace. That is,
A. Run BELLHOP with the ray trace option to calculate about 50 rays.
B. Run PLOTRAY to make sure you have the angular coverage you expect. Do the rays behave irregularly? If so reduce the step-size and try again.
3. Re-run BELLHOP using the coherent, incoherent or semicoherent option for transmission loss. (Use the default number of beams.)
4. Run plotshd.m to plot a full range-depth field plot.
5. Double the number of beams and check convergence.
Files:
Name Unit Description
Input
*.ENV
1 ENVironmental data
Output
*.PRT
6 PRinT file
*.RAY
21 RAY file
*.SHD
25 SHaDe file
'Munk
profile' ! TITLE
50.0
! FREQ (Hz)
1
! NMEDIA
'SVN'
! SSPOPT (Analytic or C-linear interpolation)
51 0.0
5000.0 ! DEPTH of bottom (m)
0.0 1548.52 /
200.0 1530.29 /
250.0 1526.69 /
400.0 1517.78 /
600.0 1509.49 /
800.0 1504.30 /
1000.0 1501.38 /
1200.0 1500.14 /
1400.0 1500.12 /
1600.0 1501.02 /
1800.0 1502.57 /
2000.0 1504.62 /
2200.0 1507.02 /
2400.0 1509.69 /
2600.0 1512.55 /
2800.0 1515.56 /
3000.0 1518.67 /
3200.0 1521.85 /
3400.0 1525.10 /
3600.0 1528.38 /
3800.0 1531.70 /
4000.0 1535.04 /
4200.0 1538.39 /
4400.0 1541.76 /
4600.0 1545.14 /
4800.0 1548.52 /
5000.0 1551.91 /
'V' 0.0
1
! NSD
1000.0
/
! SD(1:NSD) (m)
2
! NRD
0.0 5000.0
/ !
RD(1:NRD) (m)
501
! NRR
0.0 100.0 /
! RR(1:NR ) (km)
'R'
! Run-type: 'R/C/I/S'
51
! NBEAMS
-11.0 11.0
/ !
ALPHA(1:NBEAMS) (degrees)
200.0 5500.0
101.0 ! STEP (m) ZBOX (m) RBOX (km)
The first
6 blocks in the ENVFIL are common to all the programs in the
Acoustics Toolbox. The following blocks should be appended for
BELLHOP:
Syntax:
NSD
SD(1:NSD)
NRD
RD(1:NRD)
NR
R(1:NR )
Description:
NSD: The number of source depthS
SD(): The source depths (m)
NRD: The number of receiver depths
RD(): The receiver depths (m)
NR: The number of receiver ranges
R(): The receiver ranges (km)
This data is read in using list-directed I/O you can type it just about any way you want, e.g. on one line or split onto several lines. Also if the depths or ranges are equally spaced then you can type just the first and last depths followed by a '/' and the intermediate depths will be generated automatically.
Syntax:
OPTION
Description:
OPTION(1:1): 'R' generates a ray file
'E' generates an eigenray file
'A' generates an amplitude-delay file (ascii)
'a' generate an amplitude-delay file (binary)
'C'
Coherent TL calculation
'I Incoherent TL calculation
'S' Semicoherent TL calculation
(Lloyd mirror source pattern)
OPTION(2:2): 'G' Geometric beams (default)
'B' Gaussian beams
OPTION(3:3): '*' read in a source beam pattern file (sbpfil)
' ' don't (default)
OPTION(4:4): 'R' point source (cylindrical coordinates) (default)
'X' line source (cartesian coordinates)
OPTION(5:5): 'R' rectilinear grid (default)
'I' irregular grid
The ray file and eigenray files have
the same simple ascii format and can be plotted using the fortran code
plotray.f, or the Matlab script plotray.m.
The eigenray option seems to generate a lot of
questions. The way this works is that BELLHOP simply writes the
trajectories for all the beams that contribute at a given receiver
location. To get a useful picture you normally want to use a very fine
fan, only one receiver location, and the geometric beam option. See the
examples in at/tests.
The amplitude-delay file can be used with the Matlab script stackarr.m to 'stack the arrivals', i.e. to convolve them with the source spectrum and plot the channel response. stackarr.m can also be used to simple plot the impulse response.
For TL calculations, the output is in the shdfil format used by all the codes in the Acoustics Toolbox and can be plotted using the Matlab script, plotshd.m. (Use toasc.f to convert the binary shade files to ascii format for use by plotshd.m or whatever plot package you're using.) The pressure field is normally calculated on a rectilinear grid formed by the receiver ranges and depths. If an irregular grid is selected, then the receiver ranges and depths are interpreted as a coordinate pair for the receivers. This option is useful for reverberation calculations where the receivers need to follow the bottom terrain.
There are actually several different types of Gaussian beam options (OPTION(2:2)) implemented in the code. Only the two described above are fully maintained.
The source beam pattern file has the format
NSBPPts
angle1 power1
angle2 power2
...
with angle
in degrees and power in dB. To match a standard point source
calculation one would used anisotropic source with 0 dB for all
angles. (See at/tests/BeamPattern for an example.)
Syntax:
NBEAMS ISINGLE
ALPHA(1:NBEAMS)
Description:
NBEAMS: Number of beams
(use
0 to have the program calculate a value automatically, but
conservatively).
ISINGLE: If the option to compute a single beam in the fan is selected
(top option)
then this selects the index of the beam that is traced.
ALPHA(): Beam angles (negative angles toward surface)
For a ray trace you can type in a sequence of angles or you can type the first and last angles followed by a '/'. For a TL calculation, the rays must be equally spaced otherwise the results will be incorrect.
Syntax:
STEP ZBOX RBOX
Description:
STEP: The step size used for tracing the rays (m).
(Use 0 to let BELLHOP choose the step size.)
ZBOX: The maximum depth to trace a
ray (m).
RBOX: The maximum range to trace a
ray (km).
The
required step size depends on many factors. This
includesfrequency,
size of features in the SSP (such as surface ducts),
range of rcvrs, and whether a coherent or incoherent TL
calculation is performed. If you use STEP=0.0 BELLHOP will use a
default step-size and tell you what it picked. You should then
halve
the step size until the results are convergent to your
required accuracy. To obtain a smooth ray trace you should use
the
spline SSP interpolation and a step-size less than the smallest
distance between SSP data points. Rays are
traced until they exit the box ( ZBOX, RBOX ). By setting
ZBOX less than the water depth you can eliminate bottom
reflections. Make ZBOX, RBOX a bit (say 1%) roomy too make
sure rays are not killed the moment they hit the bottom or
are just reaching your furthest receiver.
The main issue
to be aware of is that ray tracing is very sensitive to environmental
interpolation (both boundary and volume). The Gaussian beam options
reduce that sensitivity significantly; however, one should still be
attentive to this issue. The spline interpolation option to the SSP
should be used with particular caution. In some cases, the spline fit
is very smooth as desired; in other cases, the spline introduces large
wiggles between ssp points, in its effort to produce a smooth curve.
Use PLOTSSP to see how your fit looks.
BELLHOP numerically integrates the
ray equations to trace a ray through the ocean. To avoid artifacts at
discontinuties in the SSP, the step size is dynamically adjusted to
make sure a step always lands on an SSP point, rather than stepping
over it. (The beam curvature needs to be adjusted at each such point.)
It's better to not use more points to describe the SSP than
necessary to capture the physics because BELLHOP will end up using lots
of small steps to have each ray land on the SSP points. Similarly,
BELLHOP uses the altimetry and bathymetry points to define segments in
range, and adjusts the step size so that the rays land on each segment
boundary.
To get your best calculation with a
2D SSP, you should make sure the rays step on and not over the profile
ranges. To do this, include a bathymetry or altimetry file that has
those profile ranges amongst its samples. Those files will then dictate
the range stepping during the ray trace.
BELLHOP has no direct capability for
modeling elastic wave propagation; however, elastic boundaries can
often be treated using BOUNCE to generate an equivalent reflection
coefficient.
You can have BELLHOP use a
range-dependent SSP by creating a separate SSPFIL containing that SSP
data in a matrix form. (See Range-Dependent
SSP File). The range-dependent SSPFIL is read if you select 'Q'
(quadrilateral) for the SSP interpolation. The depths for the SSP
points are read from the ENVFIL; the ranges are specified in the
SSPFIL. See the example in at/tests/Gulf.
BELLHOP will produce some artifacts
for receivers very close the the surface or bottom, because a beam is
essentially folded onto itself upon reflection. The zone of overlap
(which depends on the fatness of the beam) is not treated with a lot of
care. You can minimize such artifacts by making the beams narrow, which
in turn can often be done by using lots of rays. If you want to explore
some behavior for a receiver on the bottom, you generally should offset
it a little bit.