universal-physics-tensor 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +5 -5
  2. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  3. package/dist/atlas/catalog-formal-ref.js +1 -0
  4. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  5. package/dist/atlas/physjs-ref.d.ts +7 -4
  6. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  7. package/dist/atlas/physjs-ref.js +117 -4
  8. package/dist/atlas/physjs-ref.js.map +1 -1
  9. package/dist/bridges/be70-einstein-relation.d.ts +1 -1
  10. package/dist/bridges/be70-einstein-relation.d.ts.map +1 -1
  11. package/dist/bridges/be70-einstein-relation.js +5 -1
  12. package/dist/bridges/be70-einstein-relation.js.map +1 -1
  13. package/dist/bridges/be77-hagen-poiseuille.d.ts +50 -0
  14. package/dist/bridges/be77-hagen-poiseuille.d.ts.map +1 -0
  15. package/dist/bridges/be77-hagen-poiseuille.js +39 -0
  16. package/dist/bridges/be77-hagen-poiseuille.js.map +1 -0
  17. package/dist/bridges/be78-euler-buckling.d.ts +44 -0
  18. package/dist/bridges/be78-euler-buckling.d.ts.map +1 -0
  19. package/dist/bridges/be78-euler-buckling.js +33 -0
  20. package/dist/bridges/be78-euler-buckling.js.map +1 -0
  21. package/dist/bridges/be79-pull-in.d.ts +33 -0
  22. package/dist/bridges/be79-pull-in.d.ts.map +1 -0
  23. package/dist/bridges/be79-pull-in.js +35 -0
  24. package/dist/bridges/be79-pull-in.js.map +1 -0
  25. package/dist/bridges/be80-mott-gurney.d.ts +52 -0
  26. package/dist/bridges/be80-mott-gurney.d.ts.map +1 -0
  27. package/dist/bridges/be80-mott-gurney.js +38 -0
  28. package/dist/bridges/be80-mott-gurney.js.map +1 -0
  29. package/dist/bridges/be81-child-langmuir.d.ts +33 -0
  30. package/dist/bridges/be81-child-langmuir.d.ts.map +1 -0
  31. package/dist/bridges/be81-child-langmuir.js +38 -0
  32. package/dist/bridges/be81-child-langmuir.js.map +1 -0
  33. package/dist/bridges/be82-shockley-diode.d.ts +32 -0
  34. package/dist/bridges/be82-shockley-diode.d.ts.map +1 -0
  35. package/dist/bridges/be82-shockley-diode.js +37 -0
  36. package/dist/bridges/be82-shockley-diode.js.map +1 -0
  37. package/dist/bridges/be83-thomson.d.ts +46 -0
  38. package/dist/bridges/be83-thomson.d.ts.map +1 -0
  39. package/dist/bridges/be83-thomson.js +32 -0
  40. package/dist/bridges/be83-thomson.js.map +1 -0
  41. package/dist/bridges/be84-four-point.d.ts +45 -0
  42. package/dist/bridges/be84-four-point.d.ts.map +1 -0
  43. package/dist/bridges/be84-four-point.js +34 -0
  44. package/dist/bridges/be84-four-point.js.map +1 -0
  45. package/dist/bridges/be85-shot-noise.d.ts +30 -0
  46. package/dist/bridges/be85-shot-noise.d.ts.map +1 -0
  47. package/dist/bridges/be85-shot-noise.js +32 -0
  48. package/dist/bridges/be85-shot-noise.js.map +1 -0
  49. package/dist/bridges/be86-reynolds-analogy.d.ts +45 -0
  50. package/dist/bridges/be86-reynolds-analogy.d.ts.map +1 -0
  51. package/dist/bridges/be86-reynolds-analogy.js +30 -0
  52. package/dist/bridges/be86-reynolds-analogy.js.map +1 -0
  53. package/dist/bridges/be87-capacitor-noise.d.ts +27 -0
  54. package/dist/bridges/be87-capacitor-noise.d.ts.map +1 -0
  55. package/dist/bridges/be87-capacitor-noise.js +32 -0
  56. package/dist/bridges/be87-capacitor-noise.js.map +1 -0
  57. package/dist/bridges/bridge-equations.d.ts +22 -0
  58. package/dist/bridges/bridge-equations.d.ts.map +1 -1
  59. package/dist/bridges/bridge-equations.js +22 -0
  60. package/dist/bridges/bridge-equations.js.map +1 -1
  61. package/dist/bridges/evaluators.d.ts.map +1 -1
  62. package/dist/bridges/evaluators.js +59 -2
  63. package/dist/bridges/evaluators.js.map +1 -1
  64. package/dist/bridges/index.d.ts +25 -3
  65. package/dist/bridges/index.d.ts.map +1 -1
  66. package/dist/bridges/index.js +245 -3
  67. package/dist/bridges/index.js.map +1 -1
  68. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  69. package/dist/cases/brownian-sphere.js +4 -4
  70. package/dist/cases/brownian-sphere.js.map +1 -1
  71. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  72. package/dist/cases/lumped-cooling.js +2 -2
  73. package/dist/cases/lumped-cooling.js.map +1 -1
  74. package/dist/cases/resistor-noise.d.ts.map +1 -1
  75. package/dist/cases/resistor-noise.js +2 -2
  76. package/dist/cases/resistor-noise.js.map +1 -1
  77. package/dist/cases/skin-depth.d.ts.map +1 -1
  78. package/dist/cases/skin-depth.js +2 -2
  79. package/dist/cases/skin-depth.js.map +1 -1
  80. package/dist/cases/types.d.ts +11 -1
  81. package/dist/cases/types.d.ts.map +1 -1
  82. package/dist/cases/types.js +9 -0
  83. package/dist/cases/types.js.map +1 -1
  84. package/dist/cli/closed-form-range.d.ts +1 -1
  85. package/dist/cli/closed-form-range.js +1 -1
  86. package/dist/cli/commands/audit.d.ts.map +1 -1
  87. package/dist/cli/commands/audit.js +6 -1
  88. package/dist/cli/commands/audit.js.map +1 -1
  89. package/dist/cli/commands/search.js +2 -2
  90. package/dist/cli/commands/search.js.map +1 -1
  91. package/dist/cli/search-index.d.ts +1 -1
  92. package/dist/cli/search-index.d.ts.map +1 -1
  93. package/dist/cli/search-index.js +25 -1
  94. package/dist/cli/search-index.js.map +1 -1
  95. package/dist/composition/bridge-analysis.d.ts +8 -0
  96. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  97. package/dist/composition/bridge-analysis.js +35 -6
  98. package/dist/composition/bridge-analysis.js.map +1 -1
  99. package/dist/composition/canonical-graph.d.ts +7 -6
  100. package/dist/composition/canonical-graph.d.ts.map +1 -1
  101. package/dist/composition/canonical-graph.js +13 -9
  102. package/dist/composition/canonical-graph.js.map +1 -1
  103. package/dist/composition/canonical-prefactors.d.ts +4 -2
  104. package/dist/composition/canonical-prefactors.d.ts.map +1 -1
  105. package/dist/composition/canonical-prefactors.js +46 -2
  106. package/dist/composition/canonical-prefactors.js.map +1 -1
  107. package/dist/composition/catalog-graph.d.ts +3 -3
  108. package/dist/composition/catalog-graph.js +3 -3
  109. package/dist/composition/edge.d.ts +10 -2
  110. package/dist/composition/edge.d.ts.map +1 -1
  111. package/dist/composition/edge.js +62 -2
  112. package/dist/composition/edge.js.map +1 -1
  113. package/dist/composition/edges/applied-physicist.d.ts +73 -1
  114. package/dist/composition/edges/applied-physicist.d.ts.map +1 -1
  115. package/dist/composition/edges/applied-physicist.js +426 -25
  116. package/dist/composition/edges/applied-physicist.js.map +1 -1
  117. package/dist/composition/index.d.ts +1 -1
  118. package/dist/composition/index.d.ts.map +1 -1
  119. package/dist/composition/index.js +1 -1
  120. package/dist/composition/index.js.map +1 -1
  121. package/dist/composition/quantities/applied-physicist.d.ts +78 -0
  122. package/dist/composition/quantities/applied-physicist.d.ts.map +1 -1
  123. package/dist/composition/quantities/applied-physicist.js +303 -0
  124. package/dist/composition/quantities/applied-physicist.js.map +1 -1
  125. package/dist/dimensional/bridge-check.d.ts +1 -1
  126. package/dist/dimensional/bridge-check.d.ts.map +1 -1
  127. package/dist/dimensional/bridge-check.js +12 -1
  128. package/dist/dimensional/bridge-check.js.map +1 -1
  129. package/dist/dimensional/units.d.ts.map +1 -1
  130. package/dist/dimensional/units.js +3 -0
  131. package/dist/dimensional/units.js.map +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +2 -2
  135. package/dist/index.js.map +1 -1
  136. package/package.json +1 -1
@@ -21,9 +21,21 @@ import { evaluateKelvinPeltier } from '../../bridges/be73-kelvin-peltier.js';
21
21
  import { evaluateMagneticPressure } from '../../bridges/be74-magnetic-pressure.js';
22
22
  import { evaluateLondonPenetration } from '../../bridges/be75-london-penetration.js';
23
23
  import { evaluatePlasmaBeta } from '../../bridges/be76-plasma-beta.js';
24
+ import { evaluateHagenPoiseuille } from '../../bridges/be77-hagen-poiseuille.js';
25
+ import { evaluateEulerBuckling } from '../../bridges/be78-euler-buckling.js';
26
+ import { evaluatePullIn } from '../../bridges/be79-pull-in.js';
27
+ import { evaluateMottGurney } from '../../bridges/be80-mott-gurney.js';
28
+ import { evaluateChildLangmuir } from '../../bridges/be81-child-langmuir.js';
29
+ import { evaluateShockleyDiode } from '../../bridges/be82-shockley-diode.js';
30
+ import { evaluateThomsonCoefficient } from '../../bridges/be83-thomson.js';
31
+ import { evaluateFourPointSheet } from '../../bridges/be84-four-point.js';
32
+ import { evaluateShotNoise } from '../../bridges/be85-shot-noise.js';
33
+ import { evaluateReynoldsAnalogy } from '../../bridges/be86-reynolds-analogy.js';
34
+ import { evaluateCapacitorNoise } from '../../bridges/be87-capacitor-noise.js';
24
35
  import { DIMENSIONLESS } from '../../dimensional/types.js';
25
36
  import { CONSTANTS } from '../../dimensional/symbolic-constants.js';
26
- import { alfvenSpeedQ, incidenceAngleQ, magneticFluxDensityQ, metricG00Q, plasmaMassDensityQ, poyntingFluxQ, properTemperatureQ, radiationPressureQ, reflectanceQ, tolmanInvariantQ, soundSpeedQ, fastMagnetosonicSpeedQ, electricalMobilityQ, einsteinTemperatureQ, carrierChargeQ, diffusivityQ, latentHeatQ, clapeyronTemperatureQ, specificVolumeChangeQ, clapeyronSlopeQ, redshiftMetricG00OneQ, redshiftMetricG00TwoQ, gravitationalFrequencyRatioQ, seebeckCoefficientQ, peltierTemperatureQ, peltierCoefficientQ, magneticPressureQ, londonPenetrationDepthQ, plasmaBetaQ, carrierDensityQ, effectiveMassQ, temperatureQ, } from '../quantities.js';
37
+ import { withBoundAliases } from '../edge.js';
38
+ import { alfvenSpeedQ, incidenceAngleQ, magneticFluxDensityQ, metricG00Q, plasmaMassDensityQ, poyntingFluxQ, properTemperatureQ, radiationPressureQ, reflectanceQ, tolmanInvariantQ, soundSpeedQ, fastMagnetosonicSpeedQ, electricalMobilityQ, einsteinTemperatureQ, carrierChargeQ, diffusivityQ, latentHeatQ, clapeyronTemperatureQ, specificVolumeChangeQ, clapeyronSlopeQ, redshiftMetricG00OneQ, redshiftMetricG00TwoQ, gravitationalFrequencyRatioQ, seebeckCoefficientQ, peltierTemperatureQ, peltierCoefficientQ, magneticPressureQ, londonPenetrationDepthQ, plasmaBetaQ, carrierDensityQ, effectiveMassQ, temperatureQ, pipeRadiusQ, pipePressureDropQ, dynamicViscosityQ, pipeLengthQ, poiseuilleFlowQ, youngsModulusQ, areaMomentQ, columnLengthQ, bucklingLoadQ, pullInStiffnessQ, pullInGapQ, pullInAreaQ, pullInVoltageQ, mottPermittivityQ, mottMobilityQ, mottVoltageQ, mottThicknessQ, mottGurneyCurrentQ, childCarrierMassQ, childVoltageQ, childGapQ, childLangmuirCurrentQ, shockleySaturationQ, shockleyVoltageQ, shockleyTemperatureQ, shockleyCurrentQ, thomsonTemperatureQ, seebeckSlopeQ, thomsonCoefficientQ, fourPointVoltageQ, fourPointCurrentQ, sheetResistanceQ, shotCurrentQ, shotNoiseQ, skinFrictionQ, stantonNumberQ, capacitorTemperatureQ, capacitanceQ, capacitorVoltageVarianceQ, } from '../quantities.js';
27
39
  const finite = Number.isFinite;
28
40
  const qsym = (q) => ({ kind: 'symbol', name: q.name, dim: q.dim });
29
41
  const csym = (name) => ({ kind: 'symbol', name, dim: CONSTANTS[name].dim });
@@ -34,6 +46,9 @@ const ratio = (num, den) => ({ kind: 'op', op: '/', args: [num, den] });
34
46
  const pow = (base, exp) => ({ kind: 'op', op: '^', args: [base, exp] });
35
47
  /** μ0 = 1/(ε0 c²). The same product the Alfvén and magnetosonic formulas use. */
36
48
  const mu0 = ratio(lit(1), prod(csym('epsilon_0'), pow(csym('c'), lit(2))));
49
+ /** π as a dimensionless leaf. `piMultipleValue` resolves the name. */
50
+ const pi = { kind: 'symbol', name: 'pi', dim: DIMENSIONLESS };
51
+ const expOf = (arg) => ({ kind: 'transcendental', fn: 'exp', arg });
37
52
  /** P_n = (I/c) (1+R) cos²θ. */
38
53
  const BE66_SYMBOLIC = prod(ratio(qsym(poyntingFluxQ), csym('c')), plus(lit(1), qsym(reflectanceQ)), pow({ kind: 'transcendental', fn: 'cos', arg: qsym(incidenceAngleQ) }, lit(2)));
39
54
  /** μ0 = 1/(ε0 c²). v_A = B / √(μ0 ρ). */
@@ -48,7 +63,7 @@ const BE68_SYMBOLIC = prod(qsym(properTemperatureQ), pow(prod(lit(-1), qsym(metr
48
63
  *
49
64
  * @public
50
65
  */
51
- export const be66Edge = {
66
+ export const be66Edge = withBoundAliases({
52
67
  id: 'be-66',
53
68
  beId: 66,
54
69
  kind: 'law',
@@ -77,7 +92,7 @@ export const be66Edge = {
77
92
  }).P_Pa,
78
93
  symbolic: BE66_SYMBOLIC,
79
94
  citation: 'OpenStax University Physics Volume 2, https://openstax.org/books/university-physics-volume-2/pages/16-4-momentum-and-radiation-pressure (absorber I/c, reflector 2I/c). The (1+R) cos²θ factor is this catalog\'s assembly.',
80
- };
95
+ });
81
96
  /**
82
97
  * BE-67 Alfvén speed: (magnetic-flux-density, plasma-mass-density) →
83
98
  * alfven-speed, `v_A = B / √(μ0 ρ)`. `ρ` is the total mass density.
@@ -86,7 +101,7 @@ export const be66Edge = {
86
101
  *
87
102
  * @public
88
103
  */
89
- export const be67Edge = {
104
+ export const be67Edge = withBoundAliases({
90
105
  id: 'be-67',
91
106
  beId: 67,
92
107
  kind: 'law',
@@ -111,7 +126,7 @@ export const be67Edge = {
111
126
  }).v_m_per_s,
112
127
  symbolic: BE67_SYMBOLIC,
113
128
  citation: 'Alfvén 1942 Nature 150:405. SI form B/√(μ0 ρ); ρ is the total mass density.',
114
- };
129
+ });
115
130
  /**
116
131
  * BE-68 Tolman–Ehrenfest: (proper-temperature, metric-g00) →
117
132
  * tolman-invariant, `T √(−g_00)`. Endpoints share the classical
@@ -120,7 +135,7 @@ export const be67Edge = {
120
135
  *
121
136
  * @public
122
137
  */
123
- export const be68Edge = {
138
+ export const be68Edge = withBoundAliases({
124
139
  id: 'be-68',
125
140
  beId: 68,
126
141
  kind: 'law',
@@ -145,7 +160,7 @@ export const be68Edge = {
145
160
  }).invariant_K,
146
161
  symbolic: BE68_SYMBOLIC,
147
162
  citation: 'Tolman & Ehrenfest 1930 Phys. Rev. 36:1791 (T0 √g_44). Catalog form T √(−g_00).',
148
- };
163
+ });
149
164
  /** |ω/k| = √(c_s² + B²/(μ0 ρ)), with μ0 = 1/(ε0 c²). */
150
165
  const BE69_SYMBOLIC = pow(plus(pow(qsym(soundSpeedQ), lit(2)), ratio(pow(qsym(magneticFluxDensityQ), lit(2)), prod(ratio(lit(1), prod(csym('epsilon_0'), pow(csym('c'), lit(2)))), qsym(plasmaMassDensityQ)))), lit(0.5));
151
166
  /** D = μ k_B T / q. */
@@ -164,7 +179,7 @@ const BE73_SYMBOLIC = prod(qsym(seebeckCoefficientQ), qsym(peltierTemperatureQ))
164
179
  *
165
180
  * @public
166
181
  */
167
- export const be69Edge = {
182
+ export const be69Edge = withBoundAliases({
168
183
  id: 'be-69',
169
184
  beId: 69,
170
185
  kind: 'law',
@@ -192,14 +207,14 @@ export const be69Edge = {
192
207
  }).v_m_per_s,
193
208
  symbolic: BE69_SYMBOLIC,
194
209
  citation: 'PhysJS.FastMagnetosonic.speed_eq. Perpendicular compressional phase speed. c_s = 0 is the Alfvén number of a different polarization.',
195
- };
210
+ });
196
211
  /**
197
212
  * BE-70 Einstein relation: (electrical-mobility, einstein-temperature,
198
213
  * carrier-charge) → diffusivity, `D = μ k_B T / q`.
199
214
  *
200
215
  * @public
201
216
  */
202
- export const be70Edge = {
217
+ export const be70Edge = withBoundAliases({
203
218
  id: 'be-70',
204
219
  beId: 70,
205
220
  kind: 'law',
@@ -213,12 +228,13 @@ export const be70Edge = {
213
228
  target: diffusivityQ,
214
229
  confidence: 'established',
215
230
  domain: {
216
- description: 'μ finite, T ≠ 0, q ≠ 0',
231
+ description: 'μ finite, T ≠ 0, q ≠ 0, and μ and q have the same sign',
217
232
  predicate: (i) => finite(i['electrical-mobility']) &&
218
233
  finite(i['einstein-temperature']) &&
219
234
  i['einstein-temperature'] !== 0 &&
220
235
  finite(i['carrier-charge']) &&
221
- i['carrier-charge'] !== 0,
236
+ i['carrier-charge'] !== 0 &&
237
+ i['electrical-mobility'] * i['carrier-charge'] >= 0,
222
238
  },
223
239
  evaluate: (i) => evaluateEinsteinRelation({
224
240
  mu_m2_per_Vs: i['electrical-mobility'],
@@ -227,14 +243,14 @@ export const be70Edge = {
227
243
  }).D_m2_per_s,
228
244
  symbolic: BE70_SYMBOLIC,
229
245
  citation: 'PhysJS.EinsteinRelation.diffusion_eq. Drift cancels diffusion on a Boltzmann profile.',
230
- };
246
+ });
231
247
  /**
232
248
  * BE-71 Clapeyron slope: (specific-latent-heat, clapeyron-temperature,
233
249
  * specific-volume-change) → clapeyron-slope, `dP/dT = L/(T Δv)`.
234
250
  *
235
251
  * @public
236
252
  */
237
- export const be71Edge = {
253
+ export const be71Edge = withBoundAliases({
238
254
  id: 'be-71',
239
255
  beId: 71,
240
256
  kind: 'law',
@@ -262,7 +278,7 @@ export const be71Edge = {
262
278
  }).slope_Pa_per_K,
263
279
  symbolic: BE71_SYMBOLIC,
264
280
  citation: 'PhysJS.Clapeyron.slope_eq. L = T (s2−s1) is already substituted. The entropy slope is not a second edge.',
265
- };
281
+ });
266
282
  /**
267
283
  * BE-72 gravitational redshift: (redshift-metric-g00-1,
268
284
  * redshift-metric-g00-2) → gravitational-frequency-ratio,
@@ -271,7 +287,7 @@ export const be71Edge = {
271
287
  *
272
288
  * @public
273
289
  */
274
- export const be72Edge = {
290
+ export const be72Edge = withBoundAliases({
275
291
  id: 'be-72',
276
292
  beId: 72,
277
293
  kind: 'law',
@@ -296,7 +312,7 @@ export const be72Edge = {
296
312
  }).frequency_ratio,
297
313
  symbolic: BE72_SYMBOLIC,
298
314
  citation: 'PhysJS.GravitationalRedshift.frequency_ratio. Not PhysJS.TolmanEhrenfest.hydrostatic_constant. tolman_same_ratio is nested and is not this edge.',
299
- };
315
+ });
300
316
  /**
301
317
  * BE-73 Kelvin relation: (seebeck-coefficient, peltier-temperature) →
302
318
  * peltier-coefficient, `Π = S T`. Onsager reciprocity is the structure
@@ -304,7 +320,7 @@ export const be72Edge = {
304
320
  *
305
321
  * @public
306
322
  */
307
- export const be73Edge = {
323
+ export const be73Edge = withBoundAliases({
308
324
  id: 'be-73',
309
325
  beId: 73,
310
326
  kind: 'law',
@@ -326,7 +342,7 @@ export const be73Edge = {
326
342
  }).Pi_V,
327
343
  symbolic: BE73_SYMBOLIC,
328
344
  citation: 'PhysJS.KelvinRelation.peltier_eq. L12 = L21 is ThermoelectricOnsager.onsager, a structure field, not an axiom and not an input.',
329
- };
345
+ });
330
346
  /** p_B = B² / (2 μ0). The 2 is the inductor integral, not a Buckingham constant. */
331
347
  const BE74_SYMBOLIC = ratio(pow(qsym(magneticFluxDensityQ), lit(2)), prod(lit(2), mu0));
332
348
  /** λ_L = √(m / (μ0 n e²)). `e` is the elementary charge. */
@@ -340,7 +356,7 @@ const BE76_SYMBOLIC = ratio(prod(qsym(carrierDensityQ), csym('k_B'), qsym(temper
340
356
  *
341
357
  * @public
342
358
  */
343
- export const be74Edge = {
359
+ export const be74Edge = withBoundAliases({
344
360
  id: 'be-74',
345
361
  beId: 74,
346
362
  kind: 'law',
@@ -358,7 +374,7 @@ export const be74Edge = {
358
374
  evaluate: (i) => evaluateMagneticPressure({ B_T: i['magnetic-flux-density'] }).p_Pa,
359
375
  symbolic: BE74_SYMBOLIC,
360
376
  citation: 'PhysJS.MagneticPressure.pressure_eq. U = (L/2) I². C = 1 is the battery work per volume, not this pressure.',
361
- };
377
+ });
362
378
  /**
363
379
  * BE-75 London penetration depth: (effective-mass, carrier-density) →
364
380
  * london-penetration-depth, `λ_L = √(m/(μ0 n e²))`. `e` and `μ0` are
@@ -366,7 +382,7 @@ export const be74Edge = {
366
382
  *
367
383
  * @public
368
384
  */
369
- export const be75Edge = {
385
+ export const be75Edge = withBoundAliases({
370
386
  id: 'be-75',
371
387
  beId: 75,
372
388
  kind: 'law',
@@ -388,7 +404,7 @@ export const be75Edge = {
388
404
  }).lambda_m,
389
405
  symbolic: BE75_SYMBOLIC,
390
406
  citation: 'PhysJS.LondonPenetration.depth_eq. Units also admit μ0 e²/m. Not the classical skin depth.',
391
- };
407
+ });
392
408
  /**
393
409
  * BE-76 plasma beta: (carrier-density, temperature, magnetic-pressure) →
394
410
  * plasma-beta, `β = n k_B T / p_B`. The magnetic-pressure source is
@@ -398,7 +414,7 @@ export const be75Edge = {
398
414
  *
399
415
  * @public
400
416
  */
401
- export const be76Edge = {
417
+ export const be76Edge = withBoundAliases({
402
418
  id: 'be-76',
403
419
  beId: 76,
404
420
  kind: 'bridge',
@@ -425,7 +441,381 @@ export const be76Edge = {
425
441
  }).beta,
426
442
  symbolic: BE76_SYMBOLIC,
427
443
  citation: 'PhysJS.PlasmaBeta.beta_eq. p_B is PhysJS.MagneticPressure.pressure_eq. Using B²/μ0 is half of this beta. Not a plasma-β inequality.',
428
- };
444
+ });
445
+ /** Q = π R⁴ ΔP / (8 μ L). The 8 is the no-slip integral. */
446
+ const BE77_SYMBOLIC = ratio(prod(pi, pow(qsym(pipeRadiusQ), lit(4)), qsym(pipePressureDropQ)), prod(lit(8), qsym(dynamicViscosityQ), qsym(pipeLengthQ)));
447
+ /** P_cr = π² E I / L². Pinned ends. Not the cantilever load. */
448
+ const BE78_SYMBOLIC = ratio(prod(pow(pi, lit(2)), qsym(youngsModulusQ), qsym(areaMomentQ)), pow(qsym(columnLengthQ), lit(2)));
449
+ /** V_pi = √(8 k g0³ / (27 ε0 A)). The fold is g = 2 g0/3. */
450
+ const BE79_SYMBOLIC = pow(ratio(prod(lit(8), qsym(pullInStiffnessQ), pow(qsym(pullInGapQ), lit(3))), prod(lit(27), csym('epsilon_0'), qsym(pullInAreaQ))), lit(0.5));
451
+ /** J = (9/8) ε μ V² / d³. Not Child–Langmuir. */
452
+ const BE80_SYMBOLIC = ratio(prod(lit(9), qsym(mottPermittivityQ), qsym(mottMobilityQ), pow(qsym(mottVoltageQ), lit(2))), prod(lit(8), pow(qsym(mottThicknessQ), lit(3))));
453
+ /** J = (4 ε0 / 9) √(2 e / m) V^{3/2} / d². `e` is the elementary charge. */
454
+ const BE81_SYMBOLIC = ratio(prod(lit(4), csym('epsilon_0'), pow(ratio(prod(lit(2), csym('e')), qsym(childCarrierMassQ)), lit(0.5)), pow(qsym(childVoltageQ), lit(1.5))), prod(lit(9), pow(qsym(childGapQ), lit(2))));
455
+ /** I = I_s (exp(e V / (k_B T)) − 1). Ideality is 1. The minus is the literal −1. */
456
+ const BE82_SYMBOLIC = prod(qsym(shockleySaturationQ), plus(expOf(ratio(prod(csym('e'), qsym(shockleyVoltageQ)), prod(csym('k_B'), qsym(shockleyTemperatureQ)))), lit(-1)));
457
+ /** μ_T = T dS/dT. Not Π = S T. */
458
+ const BE83_SYMBOLIC = prod(qsym(thomsonTemperatureQ), qsym(seebeckSlopeQ));
459
+ /** R_s = (π / ln 2) (V / I). The radial 1/r field is a hypothesis. */
460
+ const BE84_SYMBOLIC = prod(ratio(pi, csym('ln2')), ratio(qsym(fourPointVoltageQ), qsym(fourPointCurrentQ)));
461
+ /** S_I = 2 e I. One-sided. `e` is the elementary charge. */
462
+ const BE85_SYMBOLIC = prod(lit(2), csym('e'), qsym(shotCurrentQ));
463
+ /** St = C_f / 2 at Pr = 1 with matched wall slopes. */
464
+ const BE86_SYMBOLIC = ratio(qsym(skinFrictionQ), lit(2));
465
+ /** ⟨v²⟩ = k_B T / C. One quadratic term. */
466
+ const BE87_SYMBOLIC = ratio(prod(csym('k_B'), qsym(capacitorTemperatureQ)), qsym(capacitanceQ));
467
+ /**
468
+ * BE-77 Hagen–Poiseuille: (radius, pressure drop, viscosity, length) →
469
+ * flux. The axial balance, centerline slope 0, and no-slip are hypotheses.
470
+ *
471
+ * @public
472
+ */
473
+ export const be77Edge = withBoundAliases({
474
+ id: 'be-77',
475
+ beId: 77,
476
+ kind: 'law',
477
+ label: 'Hagen–Poiseuille flux Q = π R⁴ ΔP / (8 μ L)',
478
+ sources: [pipeRadiusQ, pipePressureDropQ, dynamicViscosityQ, pipeLengthQ],
479
+ aliases: {
480
+ 'pipe-radius': ['R_m', 'R'],
481
+ 'pipe-pressure-drop': ['deltaP_Pa', 'deltaP'],
482
+ 'dynamic-viscosity': ['mu_Pa_s'],
483
+ 'pipe-length': ['L_m', 'L'],
484
+ },
485
+ target: poiseuilleFlowQ,
486
+ confidence: 'established',
487
+ domain: {
488
+ description: 'R > 0, ΔP finite, μ ≠ 0, L ≠ 0; circular pipe, not a square duct',
489
+ predicate: (i) => finite(i['pipe-radius']) &&
490
+ i['pipe-radius'] > 0 &&
491
+ finite(i['pipe-pressure-drop']) &&
492
+ finite(i['dynamic-viscosity']) &&
493
+ i['dynamic-viscosity'] !== 0 &&
494
+ finite(i['pipe-length']) &&
495
+ i['pipe-length'] !== 0,
496
+ },
497
+ evaluate: (i) => evaluateHagenPoiseuille({
498
+ R_m: i['pipe-radius'],
499
+ deltaP_Pa: i['pipe-pressure-drop'],
500
+ mu_Pa_s: i['dynamic-viscosity'],
501
+ L_m: i['pipe-length'],
502
+ }).Q_m3_per_s,
503
+ symbolic: BE77_SYMBOLIC,
504
+ citation: 'PhysJS.HagenPoiseuille.flow_eq. f_D Re = 64 follows from Darcy definitions. The Fanning factor is 16. Not a square duct.',
505
+ });
506
+ /**
507
+ * BE-78 Euler buckling: (modulus, area moment, length) → pinned load.
508
+ * The cantilever load is a different factor.
509
+ *
510
+ * @public
511
+ */
512
+ export const be78Edge = withBoundAliases({
513
+ id: 'be-78',
514
+ beId: 78,
515
+ kind: 'law',
516
+ label: 'Euler pinned load P_cr = π² E I / L²',
517
+ sources: [youngsModulusQ, areaMomentQ, columnLengthQ],
518
+ aliases: {
519
+ 'youngs-modulus': ['E_Pa', 'E'],
520
+ 'area-moment': ['I_m4'],
521
+ 'column-length': ['L_m', 'L'],
522
+ },
523
+ target: bucklingLoadQ,
524
+ confidence: 'established',
525
+ domain: {
526
+ description: 'E > 0, I > 0, L > 0; pinned ends y(0) = y(L) = 0',
527
+ predicate: (i) => finite(i['youngs-modulus']) &&
528
+ i['youngs-modulus'] > 0 &&
529
+ finite(i['area-moment']) &&
530
+ i['area-moment'] > 0 &&
531
+ finite(i['column-length']) &&
532
+ i['column-length'] > 0,
533
+ },
534
+ evaluate: (i) => evaluateEulerBuckling({
535
+ E_Pa: i['youngs-modulus'],
536
+ I_m4: i['area-moment'],
537
+ L_m: i['column-length'],
538
+ }).P_N,
539
+ symbolic: BE78_SYMBOLIC,
540
+ citation: 'PhysJS.EulerBuckling.critical_load. The beam equation is a hypothesis. The clamped-free load is π² E I / (4 L²), not this load.',
541
+ });
542
+ /**
543
+ * BE-79 pull-in: (stiffness, rest gap, area) → voltage. Parallel-plate
544
+ * and quasi-static balance are hypotheses. Not a fringing field.
545
+ *
546
+ * @public
547
+ */
548
+ export const be79Edge = withBoundAliases({
549
+ id: 'be-79',
550
+ beId: 79,
551
+ kind: 'law',
552
+ label: 'Pull-in voltage V_pi = √(8 k g0³ / (27 ε0 A))',
553
+ sources: [pullInStiffnessQ, pullInGapQ, pullInAreaQ],
554
+ aliases: {
555
+ 'pull-in-stiffness': ['k_N_per_m', 'k'],
556
+ 'pull-in-gap': ['g0_m', 'g0'],
557
+ 'pull-in-area': ['A_m2', 'A'],
558
+ },
559
+ target: pullInVoltageQ,
560
+ confidence: 'established',
561
+ domain: {
562
+ description: 'k > 0, g0 > 0, A > 0; the fold is g = 2 g0/3, not g0/2',
563
+ predicate: (i) => finite(i['pull-in-stiffness']) &&
564
+ i['pull-in-stiffness'] > 0 &&
565
+ finite(i['pull-in-gap']) &&
566
+ i['pull-in-gap'] > 0 &&
567
+ finite(i['pull-in-area']) &&
568
+ i['pull-in-area'] > 0,
569
+ },
570
+ evaluate: (i) => evaluatePullIn({
571
+ k_N_per_m: i['pull-in-stiffness'],
572
+ g0_m: i['pull-in-gap'],
573
+ A_m2: i['pull-in-area'],
574
+ }).V_pi_V,
575
+ symbolic: BE79_SYMBOLIC,
576
+ citation: 'PhysJS.PullIn.pull_in_eq. C = ε0 A/g and the linear spring are hypotheses. g = g0/2 is not the fold.',
577
+ });
578
+ /**
579
+ * BE-80 Mott–Gurney: drift, Poisson, and an injecting contact. Not
580
+ * Child–Langmuir.
581
+ *
582
+ * @public
583
+ */
584
+ export const be80Edge = withBoundAliases({
585
+ id: 'be-80',
586
+ beId: 80,
587
+ kind: 'law',
588
+ label: 'Mott–Gurney current J = (9/8) ε μ V² / d³',
589
+ sources: [mottPermittivityQ, mottMobilityQ, mottVoltageQ, mottThicknessQ],
590
+ aliases: {
591
+ 'mott-permittivity': ['eps'],
592
+ 'mott-mobility': ['mu_m2_per_Vs', 'mu'],
593
+ 'mott-voltage': ['V_volts', 'V'],
594
+ 'mott-thickness': ['d_m', 'd'],
595
+ },
596
+ target: mottGurneyCurrentQ,
597
+ confidence: 'established',
598
+ domain: {
599
+ description: 'ε > 0, μ > 0, V finite, d > 0; E(0) = 0',
600
+ predicate: (i) => finite(i['mott-permittivity']) &&
601
+ i['mott-permittivity'] > 0 &&
602
+ finite(i['mott-mobility']) &&
603
+ i['mott-mobility'] > 0 &&
604
+ finite(i['mott-voltage']) &&
605
+ finite(i['mott-thickness']) &&
606
+ i['mott-thickness'] > 0,
607
+ },
608
+ evaluate: (i) => evaluateMottGurney({
609
+ eps: i['mott-permittivity'],
610
+ mu_m2_per_Vs: i['mott-mobility'],
611
+ V_volts: i['mott-voltage'],
612
+ d_m: i['mott-thickness'],
613
+ }).J_A_per_m2,
614
+ symbolic: BE80_SYMBOLIC,
615
+ citation: 'PhysJS.MottGurney.current_eq. Drift, Poisson, and the injecting contact are hypotheses. Not Child–Langmuir.',
616
+ });
617
+ /**
618
+ * BE-81 Child–Langmuir. Collisionless energy, Poisson, and the 4/3
619
+ * profile. Poisson is not claimed at the cathode. `e` is elementary.
620
+ *
621
+ * @public
622
+ */
623
+ export const be81Edge = withBoundAliases({
624
+ id: 'be-81',
625
+ beId: 81,
626
+ kind: 'law',
627
+ label: 'Child–Langmuir current J = (4 ε0/9) √(2 e/m) V^{3/2}/d²',
628
+ sources: [childCarrierMassQ, childVoltageQ, childGapQ],
629
+ aliases: {
630
+ 'child-carrier-mass': ['m_kg', 'm'],
631
+ 'child-voltage': ['V_volts', 'V'],
632
+ 'child-gap': ['d_m', 'd'],
633
+ },
634
+ target: childLangmuirCurrentQ,
635
+ confidence: 'established',
636
+ domain: {
637
+ description: 'm > 0, V > 0, d > 0; cathode field 0; Poisson not at x = 0',
638
+ predicate: (i) => finite(i['child-carrier-mass']) &&
639
+ i['child-carrier-mass'] > 0 &&
640
+ finite(i['child-voltage']) &&
641
+ i['child-voltage'] > 0 &&
642
+ finite(i['child-gap']) &&
643
+ i['child-gap'] > 0,
644
+ },
645
+ evaluate: (i) => evaluateChildLangmuir({
646
+ m_kg: i['child-carrier-mass'],
647
+ V_volts: i['child-voltage'],
648
+ d_m: i['child-gap'],
649
+ }).J_A_per_m2,
650
+ symbolic: BE81_SYMBOLIC,
651
+ citation: 'PhysJS.ChildLangmuir.current_eq. e is the elementary charge. Not a drift-only solid.',
652
+ });
653
+ /**
654
+ * BE-82 Shockley diode at ideality 1. Not a diffusion-length ODE.
655
+ *
656
+ * @public
657
+ */
658
+ export const be82Edge = withBoundAliases({
659
+ id: 'be-82',
660
+ beId: 82,
661
+ kind: 'law',
662
+ label: 'Shockley diode I = I_s (exp(e V/(k_B T)) − 1)',
663
+ sources: [shockleySaturationQ, shockleyVoltageQ, shockleyTemperatureQ],
664
+ aliases: {
665
+ 'shockley-saturation': ['I_s_A', 'I_s'],
666
+ 'shockley-voltage': ['V_volts', 'V'],
667
+ 'shockley-temperature': ['T_K', 'T'],
668
+ },
669
+ target: shockleyCurrentQ,
670
+ confidence: 'established',
671
+ domain: {
672
+ description: 'I_s and V finite, T ≠ 0; ideality 1',
673
+ predicate: (i) => finite(i['shockley-saturation']) &&
674
+ finite(i['shockley-voltage']) &&
675
+ finite(i['shockley-temperature']) &&
676
+ i['shockley-temperature'] !== 0,
677
+ },
678
+ evaluate: (i) => evaluateShockleyDiode({
679
+ I_s_A: i['shockley-saturation'],
680
+ V_volts: i['shockley-voltage'],
681
+ T_K: i['shockley-temperature'],
682
+ }).I_A,
683
+ symbolic: BE82_SYMBOLIC,
684
+ citation: 'PhysJS.ShockleyDiode.shockley_eq. Quasi-equilibrium, detailed balance at V = 0, and low injection are hypotheses. Ideality 2 is not this current.',
685
+ });
686
+ /**
687
+ * BE-83 Thomson coefficient. Builds on the Kelvin relation read along
688
+ * temperature. The quantities do not meet be-73, so the edges do not compose.
689
+ *
690
+ * @public
691
+ */
692
+ export const be83Edge = withBoundAliases({
693
+ id: 'be-83',
694
+ beId: 83,
695
+ kind: 'law',
696
+ label: 'Thomson coefficient μ_T = T dS/dT',
697
+ sources: [thomsonTemperatureQ, seebeckSlopeQ],
698
+ aliases: {
699
+ 'thomson-temperature': ['T_K', 'T'],
700
+ 'seebeck-slope': ['dS_dT_V_per_K2', 'dS_dT'],
701
+ },
702
+ target: thomsonCoefficientQ,
703
+ confidence: 'established',
704
+ domain: {
705
+ description: 'T and dS/dT finite; Kelvin along temperature and the Thomson split are hypotheses',
706
+ predicate: (i) => finite(i['thomson-temperature']) && finite(i['seebeck-slope']),
707
+ },
708
+ evaluate: (i) => evaluateThomsonCoefficient({
709
+ T_K: i['thomson-temperature'],
710
+ dS_dT_V_per_K2: i['seebeck-slope'],
711
+ }).mu_V_per_K,
712
+ symbolic: BE83_SYMBOLIC,
713
+ citation: 'PhysJS.Thomson.thomson_eq. Π(t) = S(t) t is PhysJS.KelvinRelation.peltier_eq read along temperature. Not a second copy of Π = S T.',
714
+ });
715
+ /**
716
+ * BE-84 four-point sheet resistance. The radial 1/r potential is a premise.
717
+ *
718
+ * @public
719
+ */
720
+ export const be84Edge = withBoundAliases({
721
+ id: 'be-84',
722
+ beId: 84,
723
+ kind: 'law',
724
+ label: 'Four-point sheet resistance R_s = (π / ln 2) (V/I)',
725
+ sources: [fourPointVoltageQ, fourPointCurrentQ],
726
+ aliases: {
727
+ 'four-point-voltage': ['V_volts', 'V'],
728
+ 'four-point-current': ['I_A', 'I'],
729
+ },
730
+ target: sheetResistanceQ,
731
+ confidence: 'established',
732
+ domain: {
733
+ description: 'V finite, I ≠ 0; probes at 0, s, 2s, 3s; radial field (I R_s)/(2 π r)',
734
+ predicate: (i) => finite(i['four-point-voltage']) && finite(i['four-point-current']) && i['four-point-current'] !== 0,
735
+ },
736
+ evaluate: (i) => evaluateFourPointSheet({
737
+ V_volts: i['four-point-voltage'],
738
+ I_A: i['four-point-current'],
739
+ }).R_s_ohm,
740
+ symbolic: BE84_SYMBOLIC,
741
+ citation: 'PhysJS.FourPoint.sheet_eq. The Laplace field and linear superposition are hypotheses. A sink at 4s is 2π/ln 3. Not PhysJS.Crossing.antisymmetry.',
742
+ });
743
+ /**
744
+ * BE-85 one-sided shot noise. Not Johnson–Nyquist and not the two-sided e I.
745
+ *
746
+ * @public
747
+ */
748
+ export const be85Edge = withBoundAliases({
749
+ id: 'be-85',
750
+ beId: 85,
751
+ kind: 'law',
752
+ label: 'Shot noise S_I = 2 e I',
753
+ sources: [shotCurrentQ],
754
+ aliases: {
755
+ 'shot-current': ['I_A', 'I'],
756
+ },
757
+ target: shotNoiseQ,
758
+ confidence: 'established',
759
+ domain: {
760
+ description: 'I finite; Poisson Var(N) = mean(N); one-sided Δf = 1/(2 T)',
761
+ predicate: (i) => finite(i['shot-current']),
762
+ },
763
+ evaluate: (i) => evaluateShotNoise({ I_A: i['shot-current'] }).S_I_A2_per_Hz,
764
+ symbolic: BE85_SYMBOLIC,
765
+ citation: 'PhysJS.ShotNoise.shot_eq. e is the elementary charge. The two-sided bandwidth gives e I. Not Johnson–Nyquist.',
766
+ });
767
+ /**
768
+ * BE-86 Reynolds analogy. Matched wall slopes and Pr = 1 are hypotheses.
769
+ *
770
+ * @public
771
+ */
772
+ export const be86Edge = withBoundAliases({
773
+ id: 'be-86',
774
+ beId: 86,
775
+ kind: 'law',
776
+ label: 'Reynolds analogy St = C_f / 2',
777
+ sources: [skinFrictionQ],
778
+ aliases: {
779
+ 'skin-friction': ['C_f'],
780
+ },
781
+ target: stantonNumberQ,
782
+ confidence: 'established',
783
+ domain: {
784
+ description: 'C_f finite; normalized wall gradients agree and Pr = 1',
785
+ predicate: (i) => finite(i['skin-friction']),
786
+ },
787
+ evaluate: (i) => evaluateReynoldsAnalogy({ C_f: i['skin-friction'] }).St,
788
+ symbolic: BE86_SYMBOLIC,
789
+ citation: 'PhysJS.ReynoldsAnalogy.reynolds_eq. St Pr = C_f/2 when the slopes match. Pr = 1 is the hypothesis that drops Pr. Not a Nusselt correlation.',
790
+ });
791
+ /**
792
+ * BE-87 capacitor voltage variance. One quadratic term, not (3/2) k_B T/C.
793
+ *
794
+ * @public
795
+ */
796
+ export const be87Edge = withBoundAliases({
797
+ id: 'be-87',
798
+ beId: 87,
799
+ kind: 'law',
800
+ label: 'Capacitor noise ⟨v²⟩ = k_B T / C',
801
+ sources: [capacitorTemperatureQ, capacitanceQ],
802
+ aliases: {
803
+ 'capacitor-temperature': ['T_K', 'T'],
804
+ capacitance: ['C_F', 'C'],
805
+ },
806
+ target: capacitorVoltageVarianceQ,
807
+ confidence: 'established',
808
+ domain: {
809
+ description: 'T finite, C > 0; U = (C/2) V²',
810
+ predicate: (i) => finite(i['capacitor-temperature']) && finite(i['capacitance']) && i['capacitance'] > 0,
811
+ },
812
+ evaluate: (i) => evaluateCapacitorNoise({
813
+ T_K: i['capacitor-temperature'],
814
+ C_F: i['capacitance'],
815
+ }).v2_V2,
816
+ symbolic: BE87_SYMBOLIC,
817
+ citation: 'PhysJS.CapacitorNoise.noise_eq. (3/2) k_B T/C is not this variance. Dropping the energy half gives k_B T/(2 C).',
818
+ });
429
819
  /** The applied-physicist edges, in catalog-id order. @public */
430
820
  export const APPLIED_PHYSICIST_EDGES = [
431
821
  be66Edge,
@@ -439,5 +829,16 @@ export const APPLIED_PHYSICIST_EDGES = [
439
829
  be74Edge,
440
830
  be75Edge,
441
831
  be76Edge,
832
+ be77Edge,
833
+ be78Edge,
834
+ be79Edge,
835
+ be80Edge,
836
+ be81Edge,
837
+ be82Edge,
838
+ be83Edge,
839
+ be84Edge,
840
+ be85Edge,
841
+ be86Edge,
842
+ be87Edge,
442
843
  ];
443
844
  //# sourceMappingURL=applied-physicist.js.map