1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
//! A solid has two wave speeds and `AcousticProps` has room for one.
//!
//! `pantometry-elastic` computes `c_p = √((λ+2μ)/ρ)` and `c_s = √(μ/ρ)` from the two constants a
//! material is stated with. `pantometry-core`'s catalogue carries a single `sound_speed` per substance,
//! entered independently of the elastic constants beside it. This is where the two meet, and it is
//! the fourth test of that shape — after `fields_and_rays`, `loss_and_lumps` and `a_slit`.
//!
//! # What it found: one field with two meanings
//!
//! A fluid has one speed because it has no shear modulus to carry a second. A solid has two
//! longitudinal ones — the **bulk** wave `√((λ+2μ)/ρ)`, constrained by the material around it, and the
//! **rod** wave `√(E/ρ)`, free to bulge sideways — and one number cannot say which is meant.
//!
//! The six entries turn out not to mean the same one, and the split is clean:
//!
//! ```text
//! rod stated bulk vs bulk vs rod
//! ice 3150 3840 3834 +0.1% +21.9% bulk
//! Al 6061 5052 6320 6149 +2.8% +25.1% bulk
//! 304 stainless 4912 5790 5623 +3.0% +17.9% bulk
//! Cu ETP 3614 4760 4483 +6.2% +31.7% bulk
//! N-BK7 5716 5680 6048 −6.1% −0.6% rod
//! elec. steel 5113 5100 5853 −12.9% −0.3% rod
//! ```
//!
//! Four are the bulk wave and two are the rod wave, and every one of the six is within 6.2% of
//! whichever it is. Nothing in [`AcousticProps`](pantometry_core::substance::AcousticProps) records which,
//! because for the fluid the type was designed around there is only one.
//!
//! # Why the four are not exact, and ice is
//!
//! Read as a bulk wave, a stated speed implies a modulus. Against the catalogued `E`:
//!
//! ```text
//! ice 9.1 against 9.1 GPa exact
//! Al 6061 72.8 against 68.9 +5.7%
//! 304 stainless 204.7 against 193.0 +6.1%
//! Cu ETP 131.9 against 117.0 +12.7%
//! ```
//!
//! **A tensile test and an ultrasonic measurement are not the same measurement.** The static modulus
//! includes whatever the specimen does inelastically at low stress; the dynamic one is taken at
//! megahertz and small strain, and for annealed metals it comes out higher. Copper is the softest of
//! the three and the furthest apart, which is the direction that says so.
//!
//! Ice agrees exactly because both of its numbers came from the same acoustic experiment — its
//! elastic constants *are* back-calculated from velocity. So the one entry that agrees is the one
//! where agreement was never independent, and the three that disagree are the three where it was.
//!
//! # What is therefore asserted
//!
//! The `ν`-only identity, at machine precision, which is about the arithmetic and not the catalogue.
//! Ice's two routes agreeing to 0.14%, which is the one place they can be compared. And that every
//! entry sits within 7% of one of the two speeds — a bound that a shear speed, a fluid's, or a
//! slipped decimal all fail, and which is as tight as independently sourced data allows.
//!
use *;
use Elastic;
/// The substances that carry both an elastic description and a sound speed.
/// These four lines used to live here, and that was the finding: every consumer wanting to solve an
/// elastic problem with a catalogue material wrote them. `Elastic::from_substance` is them, in the
/// library, and this file using it is the check that it is the right shape.
/// **The speed ratio is Poisson's ratio and nothing else, for every material in the catalogue.**
///
/// `c_p/c_s = √(2(1−ν)/(1−2ν))`. Both `E` and `ρ` cancel out of it, which is what makes it the
/// sharpest statement available here: it is checked against `speed_ratio`, which is written from `ν`
/// alone and shares no arithmetic with the two speeds it is compared to.
///
/// A machine-precision equality, because it is an algebraic identity rather than a discretisation.
/// **A shear wave is slower than a pressure wave, always, and a fluid has no shear wave at all.**
///
/// `c_p > c_s` for every `ν > −1`, which is why the P in P-wave means *primary*: it is the first
/// arrival at a seismometer, and the gap between the two is how the distance to the source is got.
///
/// The fluid half is the one that says the two speeds are about the material and not the solver:
/// water has no `mechanical` entry at all, so there is no `μ` to make a shear wave out of, and the
/// catalogue declines rather than reporting zero.
/// **Every catalogued `sound_speed` is one of the two longitudinal speeds, to within 7%.**
///
/// The cross-domain check, and it is a *classification* rather than an equality because measuring it
/// showed the field carries two different quantities. Four entries are the bulk wave and two are the
/// rod wave; the test works out which each is nearer and requires the gap to be small.
///
/// That is a real constraint. A shear speed would be 40% below the rod speed, a fluid's further, and
/// a slipped decimal further still — all fail. What it cannot do is be tighter, because the numbers
/// either side of it come from different experiments: see this file's header for the static-versus-
/// dynamic modulus gap that puts copper 6.2% out.
///
/// Two earlier drafts asserted `rod ≤ stated ≤ bulk` with 0.1% and then 2% of slack. Both were false
/// — of six entries, three sit *above* the bulk speed and two *below* the rod speed — and the second
/// draft failed on aluminium, which is not an edge case.
/// **Ice is the one entry where the two crates agree to a tenth of a percent, and that is the check.**
///
/// The others are bracketed; this one is *equal*, which is what says the elastic route and the
/// acoustic route are computing the same physical quantity rather than two plausible ones. `E`, `ν`
/// and `ρ` go in one side, a measured velocity comes out the other, and 3834 against 3840 m/s is
/// three independent numbers meeting a fourth.
///
/// It matters that this is ice and not a metal: ice is isotropic polycrystalline and its elastic
/// constants come from the same acoustic measurement its sound speed does, so the two are *supposed*
/// to agree. Where they do not — copper, electrical steel — the numbers came from different
/// experiments on differently processed material, and that is the honest reading rather than an
/// error in either crate.