NETSIM  1.0.1
Hardware-in-the-loopacousticnetworksimulator
environment.proto
Go to the documentation of this file.
1 syntax = "proto2";
2 
3 import "goby/protobuf/option_extensions.proto";
4 
5 package netsim.bellhop.protobuf;
6 
7 message Environment
8 {
9  //
10  // PARAMETERS THAT BECOME THE BELLHOP ENV FILE
11  //
12 
13  optional string title = 1 [
14  (goby.field).description =
15  "Title of this environmental file for your use",
16  default = "Environmental File"
17  ];
18  optional uint32 freq = 2
19  [(goby.field).description = "Hertz", default = 25000];
20  optional Output output = 3
21  [(goby.field).description =
22  "Parameters governing the output of BELLHOP"];
23  optional Surface surface = 4
24  [(goby.field).description = "Parameters that model the sea surface"];
25  repeated WaterColumn water_column = 5
26  [(goby.field).description = "Parameters that model the water column"];
27  optional Bottom bottom = 6
28  [(goby.field).description = "Parameters that model the sea floor"];
29  optional Sources sources = 7 [(goby.field).description =
30  "Parameters that determine acoustic "
31  "\"source(s)\" in the ray trace"];
32  optional Receivers receivers = 8
33  [(goby.field).description =
34  "Parameters that determine the acoustic \"receiver(s)\" in the "
35  "ray trace"];
36  optional Beams beams = 9
37  [(goby.field).description =
38  "Parameters that govern the beams used in the ray trace"];
39 
40  message Output
41  {
42  enum OutputType
43  {
44  ARRIVAL_TIMES = 1;
45  EIGENRAYS = 2;
46  RAYS = 3;
47  COHERENT_PRESSURE = 4;
48  INCOHERENT_PRESSURE = 5;
49  SEMICOHERENT_PRESSURE = 6;
50  }
51  optional OutputType type = 1 [
52  (goby.field).description =
53  "Type of ray trace to perform and file to output(ARR, RAY, or "
54  "SHD)",
55  default = INCOHERENT_PRESSURE
56  ];
57  }
58 
59  message Medium
60  {
61  enum MediumType
62  {
63  VACUUM = 1;
64  RIGID = 2;
65  HALF_SPACE = 3;
66  REFLECTION_COEFFICIENT = 4;
67  }
68  optional MediumType type = 1
69  [(goby.field).description = "The type of the medium"];
70  optional Attenuation attenuation = 2
71  [(goby.field).description =
72  "Attenuation parameters of the medium; only used for type == "
73  "HALF_SPACE"];
74  optional double cp = 3 [(goby.field).description =
75  "The compressional speed (m/s) of the "
76  "medium; only used for type == HALF_SPACE"];
77  optional double cs = 4 [(goby.field).description =
78  "The shear speed (m/s) of the medium; only "
79  "used for type == HALF_SPACE"];
80  optional double density = 5
81  [(goby.field).description =
82  "Density in g/cm^3; only used for type == HALF_SPACE"];
83  optional double depth = 6
84  [(goby.field).description =
85  "The depth of this medium interface (0 = surface)"];
86  repeated RCSample rc_sample = 7
87  [(goby.field).description = "rc table vs angle"];
88 
89  message RCSample
90  {
91  optional double angle = 1
92  [(goby.field).description = "Grazing angle"];
93  optional double rc = 2
94  [(goby.field).description = "Reflection Coefficient in dB"];
95  optional double phase = 3
96  [(goby.field).description = "Phase angle in degrees"];
97  }
98 
99  message Attenuation
100  {
101  enum Units
102  {
103  DB_PER_M_KHZ = 1;
104  PARAMETER_LOSS = 2;
105  DB_PER_M = 3;
106  NEPERS_PER_M = 4;
107  Q_FACTOR = 5;
108  DB_PER_WAVELENGTH = 6;
109  }
110  optional Units units = 1
111  [(goby.field).description =
112  "Must use same units for surface and bottom attenuation"];
113  optional double value = 2;
114  }
115  }
116 
117  message Surface
118  {
119  optional Medium medium = 1;
120  }
121 
122  message WaterColumn
123  {
124  enum SSPInterpolation
125  {
126  CUBIC_SPLINE = 1;
127  C_LINEAR = 2;
128  N2_LINEAR = 3;
129  }
130  optional SSPInterpolation interpolation_type = 1 [
131  (goby.field).description =
132  "The method used to interpolate the discrete sound speed "
133  "profile (SSP) points",
134  default = CUBIC_SPLINE
135  ];
136  repeated double eof_coef = 2
137  [(goby.field).description = "EOF coefficient"];
138  optional bool use_attenuation = 3 [
139  (goby.field).description = "Enable Thorpe volume attenuation",
140  default = true
141  ];
142  repeated SSPSample sample = 4;
143  message SSPSample
144  {
145  optional double depth = 1
146  [(goby.field).description =
147  "The depth of this sample (positive, measured from the "
148  "surface)"];
149  optional double cp = 2
150  [(goby.field).description =
151  "The compressional speed at this point"];
152  repeated double eof = 3
153  [(goby.field).description = "EOF at this depth"];
154  }
155  optional double range = 5 [
156  (goby.field).description = "Range of range dependent SVP",
157  default = 0
158  ];
159  optional double bathymetry = 6 [
160  (goby.field).description = "Bathymetry for range dependent SVP",
161  default = 0
162  ];
163  }
164 
165  message Bottom
166  {
167  optional Medium medium = 1;
168  }
169 
170  message Sources
171  {
172  optional uint32 number_in_depth = 1
173  [(goby.field).description =
174  "The number of sources vertically; sources are all assumed to "
175  "be at range == 0"];
176  optional SourcePosition first = 2
177  [(goby.field).description =
178  "The position of the shallowest source"];
179  optional SourcePosition last = 3
180  [(goby.field).description = "The position of the deepest source"];
181 
182  message SourcePosition
183  {
184  optional double depth = 1;
185  }
186  }
187 
188  message Receivers
189  {
190  optional uint32 number_in_depth = 1
191  [(goby.field).description = "The number of receivers vertically"];
192  optional uint32 number_in_range = 2
193  [(goby.field).description = "The number of receivers horizontally"];
194 
195  optional ReceiverPosition first = 3
196  [(goby.field).description =
197  "The position of the shallowest source at the closest range"];
198  optional ReceiverPosition last = 4
199  [(goby.field).description =
200  "The position of the deepest source at the furthest range"];
201  message ReceiverPosition
202  {
203  optional double depth = 1;
204  optional double range = 2;
205  }
206  }
207 
208  message Beams
209  {
210  enum ApproximationType
211  {
212  GEOMETRIC = 1;
213  CARTESIAN = 2;
214  RAY_CENTERED = 3;
215  GAUSSIAN = 4;
216  }
217  optional ApproximationType approximation_type = 1
218  [(goby.field).description =
219  "The method used to approximate the finite element shape used "
220  "in the ray trace"];
221  optional int32 theta_min = 2 [
222  (goby.field).description =
223  "The smallest ray angle used in the ray trace. theta=0 is "
224  "horizontal.",
225  default = -90
226  ];
227  optional int32 theta_max = 3 [
228  (goby.field).description =
229  "The largest ray angle. theta=0 is horizontal",
230  default = 90
231  ];
232  optional uint32 number = 4
233  [(goby.field).description = "The number of rays used", default = 0];
234  }
235 
236  //
237  // PARAMETERS THAT GOVERN CREATION OF THE BELLHOP ENV FILE (in iBellhop)
238  //
239 
240  optional AdaptiveInfo adaptive_info = 100
241  [(goby.field).description =
242  "Not used in the BELLHOP ENV file, but used by iBellhop to "
243  "adaptively populate certain fields of this message"];
244 
245  message AdaptiveInfo
246  {
247  optional string contact = 1
248  [(goby.field).description =
249  "The name of a contact (NAME= field in NODE_REPORT) used to "
250  "find the `source` position in the ray trace."];
251  optional string ownship = 2
252  [(goby.field).description =
253  "The name of our vehicle (NAME= field in NODE_REPORT). If "
254  "omitted, the Community name is used. This is used to find "
255  "the `receiver` position(s) in the ray trace"];
256 
257  optional bool read_shd = 3 [
258  (goby.field).description =
259  "Read the generated SHD file (if applicable) and parse it into "
260  "a list of TL values. Currently used for the BHV_AcommsDepth",
261  default = false
262  ];
263 
264  optional bool full_shd_matrix = 10 [
265  (goby.field).description =
266  "Add entire matrix of SHD file output as serialized_tl_matrix "
267  "in response.",
268  default = false
269  ];
270 
271  optional bool auto_receiver_ranges = 4 [
272  (goby.field).description =
273  "If true, the `receiver.first.range` and `receiver.last.range` "
274  "will be set automatically based on the current trajectory of "
275  "the `ownship` and `contact` based on the lastest NODE_REPORT. "
276  "The calculated window will be the predicted position from now "
277  "until `look_ahead_seconds` in the future.",
278  default = false
279  ];
280 
281  optional int32 auto_receiver_ranges_delta = 7 [
282  (goby.field).description =
283  "Delta in meters between receivers when using "
284  "auto_receiver_ranges==true",
285  default = 1
286  ];
287 
288  optional uint32 look_ahead_seconds = 5 [
289  (goby.field).description =
290  "The number of seconds to look ahead for when calculated "
291  "receiver ranges using `auto_receiver_ranges`",
292  default = 60
293  ];
294 
295  optional bool auto_source_depth = 6 [
296  (goby.field).description =
297  "If true, set `source.first.depth` based on the position of "
298  "`contact`",
299  default = false
300  ];
301  }
302 }