NETSIM 1.2.0
Hardware-in-the-loop acoustic network simulator
 
Loading...
Searching...
No Matches
environment.proto
Go to the documentation of this file.
1syntax = "proto2";
2
3import "goby/protobuf/option_extensions.proto";
4
5package netsim.bellhop.protobuf;
6
7message 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}