atmospheric 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91653cc446f211fbec67bb75c9ca04fb3135e24bb7d1e1e52707e865508285d5
4
- data.tar.gz: c7cb3677f1d0d1c896815a6607241a58b2649bc43313efc270ce8d124ddf44e7
3
+ metadata.gz: 5cf182abde57d7742252da9f6915f59c249f57333de7621099e4b075acef11b0
4
+ data.tar.gz: 4ee5305a1d85db54d25f576439b03905bda62d068f2c00208fa3dc1e63e7d8ad
5
5
  SHA512:
6
- metadata.gz: f8233e299548737ac029e652c50effc3a94fccc83bf1038295429242f9554da545c0c9abdc8c57638da3abf5e91535ec29d01c9cb3e8d978c4d05411d9b30a6c
7
- data.tar.gz: a8c034abf9efec7b006e9be2d22119083f2d46fbacda5b2592e6d0fcc1fd657e9d1894dcb5e0ec0b81ac07268be51baa29ee3d8e8d2c8f31a26bd0adb1b3330e
6
+ metadata.gz: 5030dc98cd819232d7ace9d4771de89146746640977cb4f29a5a0c6f2759abf86117b7d4f52c8f0cdf58c78171997545ac886e114d084c6a625188b20cb2f3f7
7
+ data.tar.gz: 250a571ecfc2e526eee7176eabd35a716e9c9e366b7149afad9dbb299056b5af94cbf0f2d89b055808627d2c62b45b5e7ead030b6fba8f2c82d49bfc7d65a687
data/README.adoc CHANGED
@@ -13,6 +13,8 @@ units (the ICAO document includes `ft` in addition to `m`).
13
13
 
14
14
  == Usage
15
15
 
16
+ === Formulas and calculations
17
+
16
18
  [source,ruby]
17
19
  ----
18
20
  > require 'atmospheric'
@@ -24,25 +26,322 @@ The available methods are:
24
26
 
25
27
  * `geometric_altitude_from_geopotential(geopotential_altitude)`
26
28
  * `geopotential_altitude_from_geometric(geometric_altitude)`
27
- * `temperature_at_layer_from_H(geopotential_altitude)`
29
+ * `temperature_at_layer_from_geopotential(geopotential_altitude)`
28
30
  * `temperature_at_layer_celcius(geopotential_altitude)`
29
- * `pressure_from_H_mbar(geopotential_altitude)`
30
- * `pressure_from_H_mmhg(geopotential_altitude)`
31
- * `density_from_H(geopotential_altitude)`
31
+ * `pressure_from_geopotential_mbar(geopotential_altitude)`
32
+ * `pressure_from_geopotential_mmhg(geopotential_altitude)`
33
+ * `density_from_geopotential(geopotential_altitude)`
32
34
  * `gravity_at_geopotential(geopotential_altitude)`
33
- * `p_p_n_from_H(geopotential_altitude)`
34
- * `rho_rho_n_from_H(geopotential_altitude)`
35
- * `root_rho_rho_n_from_H(geopotential_altitude)`
36
- * `speed_of_sound_from_H(geopotential_altitude)`
37
- * `dynamic_viscosity_from_H(geopotential_altitude)`
38
- * `kinematic_viscosity_from_H(geopotential_altitude)`
39
- * `thermal_conductivity_from_H(geopotential_altitude)`
40
- * `pressure_scale_height_from_H(geopotential_altitude)`
41
- * `specific_weight_from_H(geopotential_altitude)`
42
- * `air_number_density_from_H(geopotential_altitude)`
43
- * `mean_air_particle_speed_from_H(geopotential_altitude)`
44
- * `air_particle_collision_frequency_from_H(geopotential_altitude)`
45
- * `mean_free_path_of_air_particles_from_H(geopotential_altitude)`
35
+ * `p_p_n_from_geopotential(geopotential_altitude)`
36
+ * `rho_rho_n_from_geopotential(geopotential_altitude)`
37
+ * `root_rho_rho_n_from_geopotential(geopotential_altitude)`
38
+ * `speed_of_sound_from_geopotential(geopotential_altitude)`
39
+ * `dynamic_viscosity_from_geopotential(geopotential_altitude)`
40
+ * `kinematic_viscosity_from_geopotential(geopotential_altitude)`
41
+ * `thermal_conductivity_from_geopotential(geopotential_altitude)`
42
+ * `pressure_scale_height_from_geopotential(geopotential_altitude)`
43
+ * `specific_weight_from_geopotential(geopotential_altitude)`
44
+ * `air_number_density_from_geopotential(geopotential_altitude)`
45
+ * `mean_air_particle_speed_from_geopotential(geopotential_altitude)`
46
+ * `air_particle_collision_frequency_from_geopotential(geopotential_altitude)`
47
+ * `mean_free_path_of_air_particles_from_geopotential(geopotential_altitude)`
48
+
49
+
50
+ == Generating ISO 2533 tables
51
+
52
+ === ISO 2533:1975
53
+
54
+ All tables in the 1975 edition are arranged in these steps in meters:
55
+
56
+ .ISO 2533:1975 table range: step 50 from -2k, 100 above 32k, 200 above 51k to 80k
57
+ ----
58
+ (-2000..31999).step(50) +
59
+ (32000..50999).step(100) +
60
+ (51000..80000).step(200)
61
+ ----
62
+
63
+ Tables 5 to 7 all have height information of the following keys in the hash:
64
+
65
+ * `geopotential-altitude-m`
66
+ * `geopotential-altitude-ft`
67
+ * `geometrical-altitude-m`
68
+ * `geometrical-altitude-ft`
69
+
70
+ ==== Table 5
71
+
72
+ Title:
73
+ "_Temperature (T and t), Pressure (p), Density (p) and Acceleration of free fall
74
+ (g) in terms of geometrical altitude (h) and geopotential altitude (H)_"
75
+
76
+ Provides the following values in addition to geopotential and geometric height:
77
+
78
+ * `temperature-K`
79
+ * `temperature-C`
80
+ * `pressure-mbar`
81
+ * `pressure-mmHg`
82
+ * `density`
83
+ * `acceleration`
84
+
85
+ [source,ruby]
86
+ ----
87
+ Atmospheric::Export::Iso25331975.table_5 #=> Hash
88
+ Atmospheric::Export::Iso25331975.table_5_yaml #=> YAML
89
+ ----
90
+
91
+ ==== Table 6
92
+
93
+ Title:
94
+ "_Relations of p'pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity
95
+ (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of
96
+ geometrical altitude (h), and geopotential altitude (H)_"
97
+
98
+ Provides the following values in addition to geopotential and geometric height:
99
+
100
+ * `ppn`
101
+ * `rhorhon`
102
+ * `sqrt-rhorhon`
103
+ * `speed-of-sound`
104
+ * `dynamic-viscosity`
105
+ * `kinematic-viscosity`
106
+ * `thermal-conductivity`
107
+
108
+ [source,ruby]
109
+ ----
110
+ Atmospheric::Export::Iso25331975.table_6 #=> Hash
111
+ Atmospheric::Export::Iso25331975.table_6_yaml #=> YAML
112
+ ----
113
+
114
+ ==== Table 7
115
+
116
+ Title:
117
+ "_Pressure scale height (H_p) Specific weight (gamma), Air number density (n),
118
+ Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean
119
+ free path of air particles (l) in terms of geometrical altitude (h) and
120
+ geopotential altitude (H)_"
121
+
122
+ * `pressure-scale-height`
123
+ * `specific-weight`
124
+ * `air-number-density`
125
+ * `mean-speed`
126
+ * `frequency`
127
+ * `mean-free-path`
128
+
129
+ [source,ruby]
130
+ ----
131
+ Atmospheric::Export::Iso25331975.table_7 #=> Hash
132
+ Atmospheric::Export::Iso25331975.table_7_yaml #=> YAML
133
+ ----
134
+
135
+
136
+ === ISO 2533 ADD 1:1985
137
+
138
+ Addendum 1 adds "Hypsometrical tables".
139
+
140
+ ==== Table 1 (hPa)
141
+
142
+ Title:
143
+ "_Geopotential altitude as a function of barometric pressure
144
+ for 5 <= p < 20 hPa at intervals of 0.01 hPa_"
145
+
146
+ For the range of `(5.0..19.99).step(0.01)` in hPa.
147
+
148
+ Provides:
149
+
150
+ * `pressure-mbar`
151
+ * `geopotential-altitude`
152
+
153
+ [source,ruby]
154
+ ----
155
+ Atmospheric::Export::HypsometricalTables.table_1 #=> Hash
156
+ Atmospheric::Export::HypsometricalTables.table_1_yaml #=> YAML
157
+ ----
158
+
159
+ ==== Table 2 (hPa)
160
+
161
+ Title:
162
+ "_Geopotential altitude as a function of barometric pressure
163
+ for 20 <= p < 1200 hPa at intervals of 0.1 hPa_"
164
+
165
+ Same as Table 1 but for the range of `(20.0..1199.9).step(0.1)` in hPa.
166
+
167
+ [source,ruby]
168
+ ----
169
+ Atmospheric::Export::HypsometricalTables.table_2 #=> Hash
170
+ Atmospheric::Export::HypsometricalTables.table_2_yaml #=> YAML
171
+ ----
172
+
173
+ ==== Table 3 (mmHg)
174
+
175
+ Title:
176
+ "_Geopotential altitude as a function of barometric pressure for 4 <= p < 10
177
+ mmHg at intervals of 0.01 mmHg_"
178
+
179
+ Same as Table 1 but for the range of `(4.0..9.99).step(0.01)` and results in mmhg.
180
+
181
+ Provides:
182
+
183
+ * `pressure-mmhg`
184
+ * `geopotential-altitude`
185
+
186
+ [source,ruby]
187
+ ----
188
+ Atmospheric::Export::HypsometricalTables.table_3 #=> Hash
189
+ Atmospheric::Export::HypsometricalTables.table_3_yaml #=> YAML
190
+ ----
191
+
192
+ ==== Table 4 (mmHg)
193
+
194
+ Title:
195
+ "_Geopotential altitude as a function of barometric pressure for 10 <= p < 900
196
+ mmHg at intervals of 0.1 mmHg_"
197
+
198
+ Same as Table 3 but for the range of `(10.0..899.9).step(0.1)` and results in mmhg.
199
+
200
+ [source,ruby]
201
+ ----
202
+ Atmospheric::Export::HypsometricalTables.table_4 #=> Hash
203
+ Atmospheric::Export::HypsometricalTables.table_4_yaml #=> YAML
204
+ ----
205
+
206
+ ==== Table 5 (hPa) and Table 6 (mmHg)
207
+
208
+ The difference is Table 5 is in hPa while Table 6 is in mmHg.
209
+
210
+ Title:
211
+ "_Barometric pressure, in hectopascals, as a function of geopotential altitude
212
+ for -1000 <= H < +4600 m at intervals of 1m_"
213
+
214
+ Provides:
215
+
216
+ * `geopotential-altitude`
217
+ * `pressure-mbar`
218
+ * `pressure-mmhg`
219
+
220
+ Range of `(-1000..4599).step(1)`.
221
+
222
+ [source,ruby]
223
+ ----
224
+ Atmospheric::Export::HypsometricalTables.table_56 #=> Hash
225
+ Atmospheric::Export::HypsometricalTables.table_56_yaml #=> YAML
226
+ ----
227
+
228
+ === ISO 2533 ADD 2:1997
229
+
230
+ Addendum 2 is exactly like ISO 2533:1975 with the tables but extended the tables:
231
+
232
+ * 1975's range is -2km to 80km. 1997 provides -5km to 2km (yes -2km to 2km overlaps...)
233
+ * 1975 tables only provide H and h in meters. 1997 adds a lookup table of H and h in feet.
234
+
235
+ .ISO 2533 ADD 2:1997 Tables 1 to 3 have height range in meters
236
+ ----
237
+ (-5000..2000).step(50)
238
+ ----
239
+
240
+ .ISO 2533 ADD 2:1997 Tables 4 to 6 have height range in feet
241
+ ----
242
+ (-16500..-13999).step(250) +
243
+ (-14000..104999).step(200) +
244
+ (105000..262500).step(500)
245
+ ----
246
+
247
+
248
+ ==== Table 1 (-5km to 2km)
249
+
250
+ Title:
251
+ "_Temperature (T and t), pressure (p), density (p) and acceleration of free fall
252
+ (g) in terms of geometrical altitude (h) and geopotential altitude (H) --
253
+ Altitudes in metres_"
254
+
255
+ Exactly same as ISO 2533:1975 Table 5, but with a different height range.
256
+
257
+ In addition, pressure at mmHg is no longer produced, but the implementation
258
+ still provides it for completeness.
259
+
260
+ [source,ruby]
261
+ ----
262
+ Atmospheric::Export::Iso25331997.table_1 #=> Hash
263
+ Atmospheric::Export::Iso25331997.table_1_yaml #=> YAML
264
+ ----
265
+
266
+ ==== Table 2 (-5km to 2km)
267
+
268
+ Title:
269
+ "_Relations of p'pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity
270
+ (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of
271
+ geometrical altitude (h), and geopotential altitude (H) -- Altitudes in metres_"
272
+
273
+ Exactly same as ISO 2533:1975 Table 6, but with a different height range.
274
+
275
+ [source,ruby]
276
+ ----
277
+ Atmospheric::Export::Iso25331997.table_2 #=> Hash
278
+ Atmospheric::Export::Iso25331997.table_2_yaml #=> YAML
279
+ ----
280
+
281
+ ==== Table 3 (-5km to 2km)
282
+
283
+ Title:
284
+ "_Pressure scale height (H_p) Specific weight (gamma), Air number density (n),
285
+ Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean
286
+ free path of air particles (l) in terms of geometrical altitude (h) and
287
+ geopotential altitude (H) -- Altitudes in metres_"
288
+
289
+ Exactly same as ISO 2533:1975 Table 7, but with a different height range.
290
+
291
+ [source,ruby]
292
+ ----
293
+ Atmospheric::Export::Iso25331997.table_3 #=> Hash
294
+ Atmospheric::Export::Iso25331997.table_3_yaml #=> YAML
295
+ ----
296
+
297
+ ==== Table 4 (-16.5kft to 262.5kft)
298
+
299
+ Title:
300
+ "_Temperature (T and t), pressure (p), density (p) and acceleration of free fall
301
+ (g) in terms of geometrical altitude (h) and geopotential altitude (H) --
302
+ Altitudes in feet_"
303
+
304
+ Exactly same as ISO 2533:1975 Table 5, but in feet and different range.
305
+
306
+ Pressure at mmHg is not produced, but the implementation still provides it
307
+ for completeness.
308
+
309
+ [source,ruby]
310
+ ----
311
+ Atmospheric::Export::Iso25331997.table_4 #=> Hash
312
+ Atmospheric::Export::Iso25331997.table_4_yaml #=> YAML
313
+ ----
314
+
315
+ ==== Table 5 (-16.5kft to 262.5kft)
316
+
317
+ Title:
318
+ "_Relations of p'pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity
319
+ (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of
320
+ geometrical altitude (h), and geopotential altitude (H) -- Altitudes in feet_"
321
+
322
+ Exactly same as ISO 2533:1975 Table 6, but in feet and different range.
323
+
324
+ [source,ruby]
325
+ ----
326
+ Atmospheric::Export::Iso25331997.table_5 #=> Hash
327
+ Atmospheric::Export::Iso25331997.table_5_yaml #=> YAML
328
+ ----
329
+
330
+ ==== Table 6 (-16.5kft to 262.5kft)
331
+
332
+ Title:
333
+ "_Pressure scale height (H_p) Specific weight (gamma), Air number density (n),
334
+ Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean
335
+ free path of air particles (l) in terms of geometrical altitude (h) and
336
+ geopotential altitude (H) -- Altitudes in feet_"
337
+
338
+ Exactly same as ISO 2533:1975 Table 7, but in feet and different range.
339
+
340
+ [source,ruby]
341
+ ----
342
+ Atmospheric::Export::Iso25331997.table_6 #=> Hash
343
+ Atmospheric::Export::Iso25331997.table_6_yaml #=> YAML
344
+ ----
46
345
 
47
346
 
48
347
  == Testing
@@ -88,10 +387,9 @@ It is used to generate all the other values.
88
387
 
89
388
  == License
90
389
 
91
- Copyright Ribose and its respective owners.
390
+ Copyright Ribose.
92
391
 
93
392
 
94
393
  == TODO
95
394
 
96
- * make into module
97
395
  * expose this as a plugin to LutaML / Metanorma YAML2text
@@ -0,0 +1,139 @@
1
+ require_relative "./target"
2
+
3
+ module Atmospheric
4
+ module Export
5
+
6
+ module HypsometricalTables
7
+ class TableBase
8
+ include Target
9
+
10
+ def to_h
11
+ d = { "rows" => [] }
12
+ steps.each do |p|
13
+ d["rows"] << row(p)
14
+ end
15
+ d
16
+ end
17
+
18
+ def steps
19
+ (0..0)
20
+ end
21
+
22
+ def row(p)
23
+ {}
24
+ end
25
+ end
26
+
27
+ class TableOne < TableBase
28
+ def steps
29
+ (5.0..19.99).step(0.01)
30
+ end
31
+
32
+ def row(p)
33
+ {
34
+ "pressure-mbar" => p.round(2),
35
+ "geopotential-altitude" => Isa.geopotential_altitude_from_pressure_mbar(p.round(2)).round,
36
+ }
37
+ end
38
+ end
39
+
40
+ class TableTwo < TableBase
41
+ def steps
42
+ (20.0..1199.9).step(0.1)
43
+ end
44
+
45
+ def row(p)
46
+ {
47
+ "pressure-mbar" => p.round(1),
48
+ "geopotential-altitude" => Isa.geopotential_altitude_from_pressure_mbar(p.round(1)).round,
49
+ }
50
+ end
51
+ end
52
+
53
+ class TableThree < TableBase
54
+ def steps
55
+ (4.0..9.99).step(0.01)
56
+ end
57
+
58
+ def row(p)
59
+ {
60
+ "pressure-mmhg" => p.round(2),
61
+ "geopotential-altitude" => Isa.geopotential_altitude_from_pressure_mmhg(p.round(2)).round,
62
+ }
63
+ end
64
+ end
65
+
66
+ class TableFour < TableBase
67
+ def steps
68
+ (10.0..899.9).step(0.1)
69
+ end
70
+
71
+ def row(p)
72
+ {
73
+ "pressure-mmhg" => p.round(1),
74
+ "geopotential-altitude" => Isa.geopotential_altitude_from_pressure_mmhg(p.round(1)).round,
75
+ }
76
+ end
77
+ end
78
+
79
+ class TableFiveSix < TableBase
80
+ def steps
81
+ (-1000..4599).step(1)
82
+ end
83
+
84
+ def row(h)
85
+ {
86
+ "geopotential-altitude" => h,
87
+ "pressure-mbar" => round_to_sig_figs(Isa.pressure_from_geopotential_mbar(h.to_f), 6),
88
+ "pressure-mmhg" => round_to_sig_figs(Isa.pressure_from_geopotential_mmhg(h.to_f), 6),
89
+ }
90
+ end
91
+ end
92
+
93
+ class << self
94
+
95
+ def table_1
96
+ TableOne.new.to_h
97
+ end
98
+
99
+ def table_1_yaml
100
+ TableOne.new.to_yaml
101
+ end
102
+
103
+ def table_2
104
+ TableTwo.new.to_h
105
+ end
106
+
107
+ def table_2_yaml
108
+ TableTwo.new.to_yaml
109
+ end
110
+
111
+ def table_3
112
+ TableThree.new.to_h
113
+ end
114
+
115
+ def table_3_yaml
116
+ TableThree.new.to_yaml
117
+ end
118
+
119
+ def table_4
120
+ TableFour.new.to_h
121
+ end
122
+
123
+ def table_4_yaml
124
+ TableFour.new.to_yaml
125
+ end
126
+
127
+ def table_56
128
+ TableFiveSix.new.to_h
129
+ end
130
+
131
+ def table_56_yaml
132
+ TableFiveSix.new.to_yaml
133
+ end
134
+
135
+ end
136
+ end
137
+
138
+ end
139
+ end
@@ -0,0 +1,72 @@
1
+ require_relative "../target"
2
+
3
+ module Atmospheric
4
+ module Export
5
+ module Iso25331975
6
+ class GroupBase
7
+ include Target
8
+
9
+ def row_big_h(h, unit: :meters)
10
+ hgpm, hgpf = values_in_m_ft(h, unit: unit)
11
+ hgmm = Isa.geometric_altitude_from_geopotential(hgpm)
12
+ hgmf = m_to_ft(hgmm).round
13
+ height_hash(hgmm, hgmf, hgpm, hgpf)
14
+ .merge(self.row_from_geopotential(hgpm))
15
+ end
16
+
17
+ def row_small_h(h, unit: :meters)
18
+ hgmm, hgmf = values_in_m_ft(h, unit: unit)
19
+ hgpm = Isa.geopotential_altitude_from_geometric(hgmm)
20
+ hgpf = m_to_ft(hgpm).round
21
+ height_hash(hgmm, hgmf, hgpm, hgpf)
22
+ .merge(self.row_from_geopotential(hgpm))
23
+ end
24
+
25
+ def height_hash(hgmm, hgmf, hgpm, hgpf)
26
+ {
27
+ "geopotential-altitude-m" => hgmm,
28
+ "geopotential-altitude-ft" => hgmf,
29
+ "geometrical-altitude-m" => hgpm.round,
30
+ "geometrical-altitude-ft" => hgpf.round,
31
+ }
32
+ end
33
+
34
+ def values_in_m_ft(value, unit: :meters)
35
+ case unit
36
+ when :meters
37
+ [value.to_f, m_to_ft(value)]
38
+ when :feet
39
+ [ft_to_m(value), value.to_f]
40
+ end
41
+ end
42
+
43
+ # Step 50 from -2k to 40k, step 100 above 32k, 200 above 51k to 80k
44
+ def steps
45
+ (
46
+ (-2000..31999).step(50) +
47
+ (32000..50999).step(100) +
48
+ (51000..80000).step(200)
49
+ )
50
+ end
51
+
52
+ def steps_unit
53
+ :meters
54
+ end
55
+
56
+ def to_h(unit: steps_unit)
57
+ d = {
58
+ "rows-h" => [],
59
+ "rows-H" => []
60
+ }
61
+
62
+ steps.each do |h|
63
+ d["rows-h"] << row_small_h(h, unit: unit)
64
+ d["rows-H"] << row_big_h(h, unit: unit)
65
+ end
66
+ d
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,36 @@
1
+ require_relative "./group_base"
2
+ # rubocop:disable Metrics/AbcSize
3
+ # rubocop:disable Metrics/BlockLength
4
+ # rubocop:disable Metrics/CyclomaticComplexity
5
+ # rubocop:disable Metrics/MethodLength
6
+ # rubocop:disable Metrics/PerceivedComplexity
7
+ # rubocop:disable Layout/LineLength
8
+ # rubocop:disable Layout/HashAlignment
9
+ module Atmospheric
10
+ module Export
11
+ module Iso25331975
12
+
13
+ class GroupOne < GroupBase
14
+ # In meters only
15
+ def row_from_geopotential(gp_h_f)
16
+ {
17
+ "temperature-K" => (Isa.temperature_at_layer_from_geopotential(gp_h_f) * 1000.0).round,
18
+ "temperature-C" => (Isa.temperature_at_layer_celcius(gp_h_f) * 1000.0).round,
19
+ "pressure-mbar" => round_to_sig_figs(Isa.pressure_from_geopotential_mbar(gp_h_f), 6),
20
+ "pressure-mmHg" => round_to_sig_figs(Isa.pressure_from_geopotential_mmhg(gp_h_f), 6),
21
+ "density" => round_to_sig_figs(Isa.density_from_geopotential(gp_h_f), 6),
22
+ "acceleration" => Isa.gravity_at_geopotential(gp_h_f).round(4),
23
+ }
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ # rubocop:enable Metrics/AbcSize
31
+ # rubocop:enable Metrics/BlockLength
32
+ # rubocop:enable Metrics/CyclomaticComplexity
33
+ # rubocop:enable Metrics/MethodLength
34
+ # rubocop:enable Metrics/PerceivedComplexity
35
+ # rubocop:enable Layout/LineLength
36
+ # rubocop:enable Layout/HashAlignment
@@ -0,0 +1,37 @@
1
+ require_relative "./group_base"
2
+ # rubocop:disable Metrics/AbcSize
3
+ # rubocop:disable Metrics/BlockLength
4
+ # rubocop:disable Metrics/CyclomaticComplexity
5
+ # rubocop:disable Metrics/MethodLength
6
+ # rubocop:disable Metrics/PerceivedComplexity
7
+ # rubocop:disable Layout/LineLength
8
+ # rubocop:disable Layout/HashAlignment
9
+ module Atmospheric
10
+ module Export
11
+ module Iso25331975
12
+
13
+ class GroupThree < GroupBase
14
+ # In meters only
15
+ def row_from_geopotential(gp_h_f)
16
+ {
17
+ "pressure-scale-height" => Isa.pressure_scale_height_from_geopotential(gp_h_f).round(1),
18
+ "specific-weight" => round_to_sig_figs(Isa.specific_weight_from_geopotential(gp_h_f), 5),
19
+ "air-number-density" => round_to_sig_figs(Isa.air_number_density_from_geopotential(gp_h_f), 5),
20
+ "mean-speed" => Isa.mean_air_particle_speed_from_geopotential(gp_h_f).round(2),
21
+ "frequency" => round_to_sig_figs(Isa.air_particle_collision_frequency_from_geopotential(gp_h_f), 5),
22
+ "mean-free-path" => round_to_sig_figs(Isa.mean_free_path_of_air_particles_from_geopotential(gp_h_f), 5),
23
+ }
24
+ end
25
+
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ # rubocop:enable Metrics/AbcSize
32
+ # rubocop:enable Metrics/BlockLength
33
+ # rubocop:enable Metrics/CyclomaticComplexity
34
+ # rubocop:enable Metrics/MethodLength
35
+ # rubocop:enable Metrics/PerceivedComplexity
36
+ # rubocop:enable Layout/LineLength
37
+ # rubocop:enable Layout/HashAlignment
@@ -0,0 +1,38 @@
1
+ require_relative "./group_base"
2
+ # rubocop:disable Metrics/AbcSize
3
+ # rubocop:disable Metrics/BlockLength
4
+ # rubocop:disable Metrics/CyclomaticComplexity
5
+ # rubocop:disable Metrics/MethodLength
6
+ # rubocop:disable Metrics/PerceivedComplexity
7
+ # rubocop:disable Layout/LineLength
8
+ # rubocop:disable Layout/HashAlignment
9
+ module Atmospheric
10
+ module Export
11
+ module Iso25331975
12
+
13
+ class GroupTwo < GroupBase
14
+ # In meters only
15
+ def row_from_geopotential(gp_h_f)
16
+ {
17
+ "ppn" => round_to_sig_figs(Isa.p_p_n_from_geopotential(gp_h_f), 6),
18
+ "rhorhon" => round_to_sig_figs(Isa.rho_rho_n_from_geopotential(gp_h_f), 6),
19
+ "sqrt-rhorhon" => round_to_sig_figs(Isa.root_rho_rho_n_from_geopotential(gp_h_f), 6),
20
+ "speed-of-sound" => (Isa.speed_of_sound_from_geopotential(gp_h_f) * 1000.0).round,
21
+ "dynamic-viscosity" => round_to_sig_figs(Isa.dynamic_viscosity_from_geopotential(gp_h_f), 5),
22
+ "kinematic-viscosity" => round_to_sig_figs(Isa.kinematic_viscosity_from_geopotential(gp_h_f), 5),
23
+ "thermal-conductivity" => round_to_sig_figs(Isa.thermal_conductivity_from_geopotential(gp_h_f), 5),
24
+ }
25
+ end
26
+
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ # rubocop:enable Metrics/AbcSize
33
+ # rubocop:enable Metrics/BlockLength
34
+ # rubocop:enable Metrics/CyclomaticComplexity
35
+ # rubocop:enable Metrics/MethodLength
36
+ # rubocop:enable Metrics/PerceivedComplexity
37
+ # rubocop:enable Layout/LineLength
38
+ # rubocop:enable Layout/HashAlignment