Pedersen and Gordon's "NLAYER": a normal-mode transmission loss program. Reference: D. F. Gordon (1979), "UNDERWATER SOUND PROPAGATION-LOSS PROGRAM Computation by normal modes for layered oceans and sediments", Technical Report 393, Naval Ocean Systems Center, San Diego, California 92152. This 1994 PC version (modified by M. V. Hall) has some minor (mainly cosmetic) differences from the 1979 version, as follows: A. WITH RELATION TO APPENDIX A IN THE REFERENCE (PAGES 43 - 73). 1. (page 43) In an attempt to reduce its size so that it is not too large for the (Microsoft) Fortran post-optimiser, the main program NLAYER has had material transferred from it to 3 new subroutines (MODES, EIGENFN, and LOSSES). 2. (page 43) Subroutine RCOEF and calls to it have been deleted. 3. (page 44) The dimensions of the various arrays are now prescribed by variables initialised in a parameter statement (in the include file PARAM.INC). Also, new array FMAM is defined to replace FMAG when used as an array (FMAG was sometimes used as an array and sometimes as a scalar). 4. The running indices used in do-loops have been standardised 5. The names given to the maximum number of values attained by each parameter in each particular run, have been standardised. The effects of the changes in items 3 to 5 above are summarised in the following table: Parameter Running Index Dimension Particular Value Layers L LDN LX Modes M MDN MX Receivers J JDN JX Ranges K KDN KX In the 1979 version, the dimensions were: LDN = 12, MDN = 350, JDN = 51. The number of ranges was not specified (no array sizes depended on the number of ranges). In the 1994 version, the dimensions are LDN = 12, JDN = 6, MDN = 31, and KDN = 80. These may of course be increased, but if a PC is being used caution is required. 6. (page 44) The 1979 version read a card deck and wrote the output to a line printer. The 1994 version prompts the user for an input file name, opens and reads that file, opens another file (with the same prefix but different suffix) and writes the output to that file. 7. (page 45) The variable GAMMAI(LX) is set to 0 8. (page 52) By catering for more than one set of values for the minimum, maximum and incremental values for receiver depth, the 1979 version allowed unequal increments in receiver depth. This facility has been deleted in the 1994 version. 9. (page 55) Variable FMAG(I) has been replaced by FMAM(I) 10. (page 60) The array variable CON has been written as CON(I + 1). 11. (page 72) In the DIMENSION statement, A(1) and B(1) have been replaced by A(*) and B(*). B. WITH RELATION TO APPENDIX B (PAGES 74 - 88) 1. (page 74) Each input data file is now assumed to contain only one "run". Reading a new set of keys or source/receiver depths is not catered for in the 1994 version. 2. (page 74) Only 3 of the 9 control keys now serve any purpose. 3. (page 74) PUNCH statements have been deleted 4. (page 75) The 3 keys retained have the following functions: K1 = 1, write individual Depth Function values K6: 0 --> large quantity of mode data output; 1 --> medium quantity; 2 --> small quantity K8: If equal to 1, the program reads TLIM from the next line (the default value is 25) 5. On page 77, input data for 4 runs are listed. Run 1 is defined by lines 3 - 21; Run 2 by lines 3 - 17 & 24 - 27 (Run 2 has the same frequency and acoustic properties as Run 1, but different receiver depths and ranges); Run 3 by lines 29 - 45; and Run 4 by lines 46 - 65. Input data files (named EXAMPLE2.DAT and EXAMPLE4.DAT) have been written for runs 2 and 4. When applied to the program, the outputs may be compared with David Gordon's outputs presented at pages 82 and 87-88 respectively. The only differences should be: (a) even though K3 > 1 for run 4, the 1994 version will not write out the reflection coefficients. (b) since the 1994 version accepts only one line of data for receiver depths (it therefore requires the increment in receiver depth to be uniform), the depth of 500 in run 4 has been omitted. (If important, it could be included by setting the initial and incremental depths to 500 rather than 1000). (c) in writing eigenvalues, the 1979 version wrote the horizontal wavenumber (denoted by LAMBDA); whereas the 1994 version writes the horizontal phase speed (V = 2 ? f /LAMBDA). To quickly check that the eigenvalues are correct, look at the results for the (inter-mode) Interference Range. C. GENERAL COMMENTS. In the 1994 PC version, the make file is nlayer.mak. When compiling MODES.FOR, a warning is given that label 46 is "used across blocks". This is due to the fact that an unconditional GO TO statement transfers control to a statement inside a DO-loop (it occurs on page 48). The program runs satisfactorily in spite of this feature. Since fixed formats are used for reading the profiles of the acoustic properties (8f10.4), the receiver depths (3f10.4), and the ranges (3f10.4), the user needs to be careful that the numerals in the data file lie in the appropriate columns. (If a free format is used, then zeroes must be explicitly entered for many array elements that could otherwise be left as blanks. Referring to the input for Run 4 on page 77 for example, the 24 elements in columns 1 to 6 of lines 51 to 54, as well as the 5 elements in columns 1 to 5 of line 50, would all have to be set to zero). Providing K6 = 2, numeric data (except for the range and transmission loss data) written by the 1994 version are preceded with either alphabetic characters or a tilde (~). The purpose of this is that such data will be ignored by graphics programs that search the file for numerals, facilitating the plotting of transmission loss versus range.