# BELLHOP3D

## Overview

## Sample Input

## Description of Inputs

### Source/Receiver Depths and Ranges

### Run Type

### Beam Fan

### Numerical Integrator Info

## Running BELLHOP

## Overview

BELLHOP3D computes acoustic fields in 3D oceanic environments via beam tracing. The environment treated consists of an acoustic medium with a sound speed that may depend on x, y, and z coordinates. Similarly, the surface and bottom boundaries may vary with x and y coordinates. It is patterned after the standard BELLHOP program, so more information about how to run it may be found in the BELLHOP documentation.

The following programs are used with BELLHOP3D :

BELLHOP3D Main program for doing Gaussian beam tracing

PLOTRAY3D Produces plots of central rays of beams

PLOTBTY3D Produces plots of the bathymetry surface

ANGLES Given the source and receiver sound speeds, computes the angle of the limiting ray.

PLOTSSP Plots the sound speed profile

PLOTSSP2D Plots the range-dependent sound speed profile

BELLHOP3D 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 BELLHOP3D with the ray trace option to calculate about 50 rays.

B. Run PLOTRAY3D 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 BELLHOP3D 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 Description

Input
*.ENV ENVironmental data
*.SSP Sound Speed Profile data (optional)

Output
*.PRT PRinT file
*.RAY RAY file
*.SHD SHaDe file

## Sample Input (Environmental) File:

'Munk profile' ! TITLE
50.0 ! FREQ (Hz)
1 ! NMEDIA
'CVW' ! SSPOPT (Analytic or C-linear interpolation)
51 0.0 20000.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 /
20000 1551.91 /
'A' 0.0
20000.0 1600.00 0.0 1.8 0.8 /
1 ! NSx number of source coordinates in x
0.0 / ! x coordinate of source (km)
1 ! NSy number of source coordinates in y
0.0 / ! y coordinate of source (km)
1 ! NSz
1000.0 / ! Sz(1 : NSz) (m)
501 ! NRz
0 5000 / ! Rz(1 : NRz) (m)
1001 ! NRr
0.0 100.0 / ! Rr(1 : NRr ) (km)
2 ! Ntheta (number of bearings)
0.0 1.0 / ! bearing angles (degrees)
'CG 3' ! 'R/C/I/S'
51 6 ! Nalpha
-14.66 14.66 / ! alpha1, 2 (degrees) Elevation/declination angle fan
11 46 ! Nbeta
-2 2 / ! beta1, beta2 (degrees) bearine angle fan
100.0 100.0 100.0 20500.0 ! STEP (m), Box%x (km) Box%y (km) Box%z (m)

## Description of Inputs

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:

### (7) - SOURCE/RECEIVER LOCATIONS (INCLUDING RANGES, DEPTHS, AND BEARINGS)

Syntax:

NSx
Sx(1:NSx)
NSy
Sy(1:NSy)
NRz
Rz(1:NRz)
NR
R(1:NR )
Ntheta
theta( 1:Ntheta )

Description:

NSx: The number of source x-coordinates
Sx(): The source x-coordinates (km)
NSy: The number of source x-coordinates
Sy(): The source y-coordinates (km)
NSz: The number of source depths
Sz(): The source depths (m)
NRz: The number of receiver depths
Rz(): The receiver depths (m)
NRr: The number of receiver ranges
Rr(): The receiver ranges (km)
Ntheta: The number of receiver bearings (radials)
theta(): The receiver bearings (degrees)

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.

You can specify a receiver at zero range; however, the BELLHOP field is singular there--- the pressure is returned as zero.

### (8) - RUN TYPE

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 hat beams in cartesian coordinates (default and fastest option)
'g' Geometric hat beams in ray-centered coordinates (slow)
'B' Geometric Gaussian beams in cartesian coordinates
'b' Geometric Gaussian beams in ray-centered coordinates (slow)

OPTION(3:3): '*' read in a source beam pattern file
' ' don't (default)

OPTION(4:4): 'R' point source (cylindrical coordinates) (default)
('X' line source (cartesian coordinates) does not make sense in 3D and is not implemented)

OPTION(5:5): 'R' rectilinear grid (default)
'I' irregular grid

OPTION(6:6): '2' Nx2D run (default)
'3' 3D run

The ray file and eigenray files have the same simple ascii format and can be plotted using 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. This option has not been used much. The plot routines (plotarr) have not been modified to accomodate it. There may be some other limitations.

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 following the BELLHOP convention, i.e. declination angle in degrees (so that 90 degrees points to the bottom). The power is 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.)

### (9) - BEAM FAN

Syntax:

Nalpha ISINGLE
alpha( 1 : Nalpha )
Nbeta ISINGLE
beta( 1 : Nbeta )

Description:

Nalpha: Number of beams in elevation
(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 elevation angles (degrees) (negative angles toward surface)

Nbeta: Number of beams in azimuth
(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.

beta(): Beam azimuth angles (degrees) (math convention with 0 degrees pointing along the x-axis)

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.

### (10) - NUMERICAL INTEGRATOR INFO

Syntax:

STEP Box%x (km) Box%y (km) Box%z (m)

Description:

STEP: The step size used for tracing the rays (m). (Use 0 to let BELLHOP choose the step size.)
Box%x: The maximum distance in the x-direction to trace a ray (km).
Box%y: The maximum distance in the y-direction to trace a ray (km).
Box%x: The maximum distance in the z-direction to trace a ray (m).

The required step size depends on many factors. This includes frequency, size of features in the SSP (such as surface ducts), range of receivers, 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 ( Box%x, Box%y, Box%z ). The box is defined with the source ( x_s, y_s, 0 ) at the center of the coordinate system. The z-coordinate of the source, z_s, is not used, so the box is oriented around the epicenter of the source. You can make the box 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.

`BELLHOP3D assumes that the SSP and bathymetry are provided everywhere it needs that information for the ray trace. If a ray gets to an x-y coordinate where the bathymetry is not defined below the ray, it prints an error message and aborts the ray trace for that particular ray. Obviously care also needs to be taken to ensure that SSP and bathymetry are using the same coordinate system in terms of orientation and origin.` ``Recall that SSP values between sample points are calculated by interpolation (unless the analytic SSP option is used)`. If your SSP is using dummy values in locations that are below the bottom, that dummy value can influence the SSP calculated inside the water column. For instance, the SSP precisely at the bottom is calculated by interpolation between the two SSP points that bracket the bottom depth. The safest way to handle this is for the user to extrapolate the SSP to provide reasonable numbers into the bottom, rather than using a dummy value.
`

`Tip: If you're running a problem with cylindrical symmetry and your TL plot is not symmetric, there can be a few causes. First, there is some aliasing in the plot routines that results from taking a polar grid and plotting the data on a rectangular one. Second, often people will select a fan of beams in azimuth that does not align with the receiver bearings. That leads to another sort of aliasing effect. Keep in mind that if you want beams every 10 degrees, you need to specify 37 beam azimuths over 360 degrees, not 36. The bearing at 360 degrees is a duplicate of the bearing a 0 degrees and is omitted by BELLHOP3D. However, when this problem is occurring it also indicates that the azimuthal fan is under-sampled.
`

`BELLHOP3D, like BELLHOP develops artifacts near a boundary zone that tends to become wider as you go out in range. This is due to the fact that the beams become fat and there is no attempt to include an image beam that is needed to satisfy the pressure release condition at the boundary. It is easy to spot this effect in a sideview (range-depth) plot. The size of that boundary zone can usually be reduced by tracing a finer fan of beams in declination angle, which makes the beams narrower.
`