@woosh/meep-engine 2.130.0 → 2.131.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 (70) hide show
  1. package/package.json +1 -1
  2. package/src/core/color/illuminant/D65_spd_analytical.d.ts +12 -0
  3. package/src/core/color/illuminant/D65_spd_analytical.d.ts.map +1 -0
  4. package/src/core/color/illuminant/D65_spd_analytical.js +70 -0
  5. package/src/core/color/illuminant/D65_spd_tabulated.d.ts +13 -0
  6. package/src/core/color/illuminant/D65_spd_tabulated.d.ts.map +1 -0
  7. package/src/core/color/illuminant/D65_spd_tabulated.js +105 -0
  8. package/src/core/color/sRGB/sRGB_cmf.d.ts +11 -0
  9. package/src/core/color/sRGB/sRGB_cmf.d.ts.map +1 -0
  10. package/src/core/color/sRGB/sRGB_cmf.js +22 -0
  11. package/src/core/color/xyz/xyz_cmf_tabulated.d.ts +22 -0
  12. package/src/core/color/xyz/xyz_cmf_tabulated.d.ts.map +1 -0
  13. package/src/core/color/xyz/xyz_cmf_tabulated.js +212 -0
  14. package/src/core/color/xyz/xyz_cmf_wyman.d.ts +13 -0
  15. package/src/core/color/xyz/xyz_cmf_wyman.d.ts.map +1 -0
  16. package/src/core/color/xyz/xyz_cmf_wyman.js +65 -0
  17. package/src/core/color/xyz/xyz_to_rgb.d.ts +3 -3
  18. package/src/core/color/xyz/xyz_to_rgb.d.ts.map +1 -1
  19. package/src/core/color/xyz/xyz_to_rgb.js +2 -2
  20. package/src/core/math/complex/complex_add.d.ts +8 -0
  21. package/src/core/math/complex/complex_add.d.ts.map +1 -0
  22. package/src/core/math/complex/complex_add.js +11 -0
  23. package/src/core/math/complex/complex_div.d.ts +8 -0
  24. package/src/core/math/complex/complex_div.d.ts.map +1 -0
  25. package/src/core/math/complex/complex_div.js +12 -0
  26. package/src/core/math/complex/complex_mul.d.ts +8 -0
  27. package/src/core/math/complex/complex_mul.d.ts.map +1 -0
  28. package/src/core/math/complex/complex_mul.js +10 -0
  29. package/src/core/math/complex/complex_sub.d.ts +8 -0
  30. package/src/core/math/complex/complex_sub.d.ts.map +1 -0
  31. package/src/core/math/complex/complex_sub.js +10 -0
  32. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD.d.ts +40 -0
  33. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD.d.ts.map +1 -0
  34. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD.js +124 -0
  35. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD_PRECOMPUTED.d.ts +168 -0
  36. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD_PRECOMPUTED.d.ts.map +1 -0
  37. package/src/core/math/physics/mie/MIE_PARTICLES_STANDARD_PRECOMPUTED.js +163 -0
  38. package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts +18 -0
  39. package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -0
  40. package/src/core/math/physics/mie/compute_bhmie_optical_properties.js +151 -0
  41. package/src/core/math/physics/mie/compute_lorenz_mie_optical_properties.d.ts +12 -0
  42. package/src/core/math/physics/mie/compute_lorenz_mie_optical_properties.d.ts.map +1 -0
  43. package/src/core/math/physics/mie/compute_lorenz_mie_optical_properties.js +363 -0
  44. package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts +15 -0
  45. package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts.map +1 -0
  46. package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.js +148 -0
  47. package/src/core/math/physics/mie/ri_air.d.ts +7 -0
  48. package/src/core/math/physics/mie/ri_air.d.ts.map +1 -0
  49. package/src/core/math/physics/mie/ri_air.js +69 -0
  50. package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts +7 -0
  51. package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts.map +1 -0
  52. package/src/core/math/physics/mie/ri_ammonium_sulfate.js +140 -0
  53. package/src/core/math/physics/mie/ri_brine.d.ts +7 -0
  54. package/src/core/math/physics/mie/ri_brine.d.ts.map +1 -0
  55. package/src/core/math/physics/mie/ri_brine.js +145 -0
  56. package/src/core/math/physics/mie/ri_dust.d.ts +7 -0
  57. package/src/core/math/physics/mie/ri_dust.d.ts.map +1 -0
  58. package/src/core/math/physics/mie/ri_dust.js +153 -0
  59. package/src/core/math/physics/mie/ri_pollen.d.ts +7 -0
  60. package/src/core/math/physics/mie/ri_pollen.d.ts.map +1 -0
  61. package/src/core/math/physics/mie/ri_pollen.js +146 -0
  62. package/src/core/math/physics/mie/ri_smoke.d.ts +7 -0
  63. package/src/core/math/physics/mie/ri_smoke.d.ts.map +1 -0
  64. package/src/core/math/physics/mie/ri_smoke.js +151 -0
  65. package/src/core/math/physics/mie/ri_soot.d.ts +7 -0
  66. package/src/core/math/physics/mie/ri_soot.d.ts.map +1 -0
  67. package/src/core/math/physics/mie/ri_soot.js +148 -0
  68. package/src/core/math/physics/mie/ri_water.d.ts +7 -0
  69. package/src/core/math/physics/mie/ri_water.d.ts.map +1 -0
  70. package/src/core/math/physics/mie/ri_water.js +148 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * ☁️ AIR (Medium)
3
+ * @param {number[]} result complex number, refraction index
4
+ * @param {number} wavelength_nm in nanometers
5
+ */
6
+ export function ri_air(result: number[], wavelength_nm: number): void;
7
+ //# sourceMappingURL=ri_air.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ri_air.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/ri_air.js"],"names":[],"mappings":"AA4DA;;;;GAIG;AACH,+BAHW,MAAM,EAAE,iBACR,MAAM,QAKhB"}
@@ -0,0 +1,69 @@
1
+ import {
2
+ ParameterLookupTable
3
+ } from "../../../../engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js";
4
+
5
+ /**
6
+ * Values for standard air (15°C, 1 atm, 450 ppm CO₂)
7
+ */
8
+ const AIR_REFRACTION_INDEX_LUT = ParameterLookupTable.from(
9
+ 2, // number of columns in the table [n, k]
10
+ // RI lookup data (n, k) for standard air across UV to long-wave IR
11
+ [
12
+ // UV (short-wave)
13
+ 1.0003280, 0.0, // 200nm
14
+ 1.0003070, 0.0, // 250nm
15
+ 1.0002930, 0.0, // 300nm
16
+ 1.0002850, 0.0, // 350nm
17
+ // Visible baseline (kept from previous table for continuity)
18
+ 1.0002801, 0.0, // 400nm
19
+ 1.0002785, 0.0, // 450nm
20
+ 1.0002773, 0.0, // 500nm
21
+ 1.0002765, 0.0, // 550nm
22
+ 1.0002759, 0.0, // 600nm
23
+ 1.0002755, 0.0, // 650nm
24
+ 1.0002751, 0.0, // 700nm
25
+ // Near-IR to long-wave IR
26
+ 1.0002747, 0.0, // 800nm
27
+ 1.0002740, 0.0, // 900nm
28
+ 1.0002734, 0.0, // 1000nm (1µm)
29
+ 1.0002720, 0.0, // 1500nm (1.5µm)
30
+ 1.0002710, 0.0, // 2000nm (2µm)
31
+ 1.0002700, 0.0, // 3000nm (3µm)
32
+ 1.0002690, 0.0, // 5000nm (5µm)
33
+ 1.0002685, 0.0, // 10000nm (10µm)
34
+ 1.0002682, 0.0 // 20000nm (20µm)
35
+ ],
36
+ // lookup positions, in nanometers
37
+ [
38
+ 200,
39
+ 250,
40
+ 300,
41
+ 350,
42
+ 400,
43
+ 450,
44
+ 500,
45
+ 550,
46
+ 600,
47
+ 650,
48
+ 700,
49
+ 800,
50
+ 900,
51
+ 1000,
52
+ 1500,
53
+ 2000,
54
+ 3000,
55
+ 5000,
56
+ 10000,
57
+ 20000
58
+ ]
59
+ )
60
+
61
+ /**
62
+ * ☁️ AIR (Medium)
63
+ * @param {number[]} result complex number, refraction index
64
+ * @param {number} wavelength_nm in nanometers
65
+ */
66
+ export function ri_air(result, wavelength_nm) {
67
+ // can effectively be assumed [1,0] but we're being more precise
68
+ AIR_REFRACTION_INDEX_LUT.sample(wavelength_nm, result);
69
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 🌫️ Ammonium sulfate (continental haze surrogate)
3
+ * @param {number[]} result complex number, refraction index
4
+ * @param {number} wavelength_nm in nanometers
5
+ */
6
+ export function ri_ammonium_sulfate(result: number[], wavelength_nm: number): void;
7
+ //# sourceMappingURL=ri_ammonium_sulfate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ri_ammonium_sulfate.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/ri_ammonium_sulfate.js"],"names":[],"mappings":"AAoIA;;;;GAIG;AACH,4CAHW,MAAM,EAAE,iBACR,MAAM,QAIhB"}
@@ -0,0 +1,140 @@
1
+ import {
2
+ ParameterLookupTable
3
+ } from "../../../../engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js";
4
+
5
+ /**
6
+ * Ammonium sulfate aerosol ("(NH4)2SO4") complex refractive index m = n + i k, wavelength in nm.
7
+ * Assumptions: dry crystalline aerosol surrogate for continental haze; ~300 K; morphology not modeled.
8
+ * Guidance/sources (composite, smoothed for Mie with linear interpolation):
9
+ * - Toon, Pollack & Khare (1976); d'Almeida et al. (1991); Hess et al. (1998, OPAC) — visible/NIR anchors (n≈1.52, k≈0).
10
+ * - Palmer & Williams (1975) optical constants compendium; Querry (1985/1991) — UV and MIR/LWIR band behavior.
11
+ * Notes:
12
+ * - In the visible, k is extremely small (≈1e-6–1e-5). We use small nonzero values to avoid divide-by-zero corner cases.
13
+ * - MIR bands associated with sulfate and ammonium groups raise k around ~3 µm (weak) and ~7–10 µm (stronger).
14
+ * - Coverage: 200–20,000 nm; denser sampling near MIR bands.
15
+ */
16
+ const AMMONIUM_SULFATE_REFRACTION_INDEX_LUT = ParameterLookupTable.from(
17
+ 2, // [n, k]
18
+ [
19
+ // UV (short-wave) — increasing absorption
20
+ 1.560, 2.0e-2, // 200 nm
21
+ 1.550, 8.0e-3, // 220 nm
22
+ 1.545, 3.5e-3, // 240 nm
23
+ 1.540, 1.5e-3, // 260 nm
24
+ 1.535, 8.0e-4, // 280 nm
25
+ 1.532, 3.5e-4, // 300 nm
26
+ 1.530, 2.0e-4, // 320 nm
27
+ 1.528, 1.2e-4, // 340 nm
28
+ 1.5265, 8.0e-5, // 360 nm
29
+ 1.5255, 6.0e-5, // 380 nm
30
+ // Visible (very low absorption; n≈1.52)
31
+ 1.5250, 5.0e-5, // 400 nm
32
+ 1.5245, 3.0e-5, // 450 nm
33
+ 1.5240, 2.0e-5, // 500 nm
34
+ 1.5235, 2.0e-5, // 550 nm
35
+ 1.5230, 2.0e-5, // 600 nm
36
+ 1.5225, 2.0e-5, // 650 nm
37
+ 1.5220, 2.0e-5, // 700 nm
38
+ // NIR/SWIR (0.7–2.5 µm): still tiny k; slight dispersion in n
39
+ 1.5218, 2.0e-5, // 750 nm
40
+ 1.5215, 2.0e-5, // 800 nm
41
+ 1.5210, 3.0e-5, // 900 nm
42
+ 1.5205, 4.0e-5, // 1000 nm
43
+ 1.5200, 4.5e-5, // 1064 nm
44
+ 1.5195, 6.0e-5, // 1200 nm
45
+ 1.5190, 8.0e-5, // 1300 nm
46
+ 1.5185, 1.6e-4, // 1450 nm
47
+ 1.5180, 1.3e-4, // 1550 nm
48
+ 1.5178, 1.2e-4, // 1650 nm
49
+ 1.5175, 1.2e-4, // 1750 nm
50
+ 1.5172, 1.8e-4, // 1940 nm
51
+ 1.5170, 1.8e-4, // 2000 nm
52
+ 1.5165, 2.2e-4, // 2200 nm
53
+ 1.5160, 2.8e-4, // 2400 nm
54
+ 1.5158, 3.0e-4, // 2500 nm
55
+ // Mid-IR (2.7–5 µm): weak-to-moderate absorption near 3 µm
56
+ 1.5155, 6.0e-4, // 2700 nm
57
+ 1.5150, 1.5e-3, // 2900 nm
58
+ 1.5145, 3.5e-3, // 3000 nm
59
+ 1.5140, 5.0e-3, // 3100 nm
60
+ 1.5135, 6.0e-3, // 3200 nm
61
+ 1.5130, 6.5e-3, // 3300 nm
62
+ 1.5125, 6.0e-3, // 3500 nm
63
+ 1.5120, 4.0e-3, // 3700 nm
64
+ 1.5115, 2.5e-3, // 4000 nm
65
+ 1.5110, 1.6e-3, // 4500 nm
66
+ 1.5105, 1.2e-3, // 5000 nm
67
+ // Long-wave IR (5–20 µm): strong sulfate bands ~7–10 µm
68
+ 1.5100, 4.0e-3, // 6000 nm
69
+ 1.5100, 8.0e-3, // 7000 nm
70
+ 1.5105, 1.8e-2, // 8000 nm
71
+ 1.5110, 3.5e-2, // 9000 nm
72
+ 1.5120, 5.5e-2, // 10000 nm (10 µm)
73
+ 1.5140, 3.5e-2, // 12000 nm
74
+ 1.5160, 1.5e-2, // 15000 nm
75
+ 1.5180, 8.0e-3, // 20000 nm
76
+ ],
77
+ [
78
+ 200,
79
+ 220,
80
+ 240,
81
+ 260,
82
+ 280,
83
+ 300,
84
+ 320,
85
+ 340,
86
+ 360,
87
+ 380,
88
+ 400,
89
+ 450,
90
+ 500,
91
+ 550,
92
+ 600,
93
+ 650,
94
+ 700,
95
+ 750,
96
+ 800,
97
+ 900,
98
+ 1000,
99
+ 1064,
100
+ 1200,
101
+ 1300,
102
+ 1450,
103
+ 1550,
104
+ 1650,
105
+ 1750,
106
+ 1940,
107
+ 2000,
108
+ 2200,
109
+ 2400,
110
+ 2500,
111
+ 2700,
112
+ 2900,
113
+ 3000,
114
+ 3100,
115
+ 3200,
116
+ 3300,
117
+ 3500,
118
+ 3700,
119
+ 4000,
120
+ 4500,
121
+ 5000,
122
+ 6000,
123
+ 7000,
124
+ 8000,
125
+ 9000,
126
+ 10000,
127
+ 12000,
128
+ 15000,
129
+ 20000
130
+ ]
131
+ );
132
+
133
+ /**
134
+ * 🌫️ Ammonium sulfate (continental haze surrogate)
135
+ * @param {number[]} result complex number, refraction index
136
+ * @param {number} wavelength_nm in nanometers
137
+ */
138
+ export function ri_ammonium_sulfate(result, wavelength_nm) {
139
+ AMMONIUM_SULFATE_REFRACTION_INDEX_LUT.sample(wavelength_nm, result);
140
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 🌊 Sea-salt (brine) — maritime haze surrogate
3
+ * @param {number[]} result complex number, refraction index
4
+ * @param {number} wavelength_nm in nanometers
5
+ */
6
+ export function ri_brine(result: number[], wavelength_nm: number): void;
7
+ //# sourceMappingURL=ri_brine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ri_brine.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/ri_brine.js"],"names":[],"mappings":"AAyIA;;;;GAIG;AACH,iCAHW,MAAM,EAAE,iBACR,MAAM,QAIhB"}
@@ -0,0 +1,145 @@
1
+ import {
2
+ ParameterLookupTable
3
+ } from "../../../../engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js";
4
+
5
+ /**
6
+ * Sea-salt aerosol (deliquesced brine) complex refractive index m = n + i k, wavelength in nm.
7
+ * Assumptions: maritime haze surrogate; aqueous brine droplet at ~300 K; morphology not modeled.
8
+ * Guidance/sources (composite, smoothed):
9
+ * - Refractive index of seawater/brine in visible n≈1.37–1.40 (dependent on salinity and wavelength).
10
+ * - Hale & Querry (1973) water bands for k behavior in IR; salt slightly perturbs n, k remains water-like.
11
+ * - Querry NaCl for dry-salt context; here we target deliquesced brine typical for haze.
12
+ * Notes:
13
+ * - Visible k is extremely small; we use tiny nonzero values for numerical stability.
14
+ * - MIR/LWIR follow water band structure but with slightly different n baseline.
15
+ * - Coverage: 200–20,000 nm; denser near 3 µm and 6–10 µm regions.
16
+ */
17
+ const SEASALT_BRINE_REFRACTION_INDEX_LUT = ParameterLookupTable.from(
18
+ 2, // [n, k]
19
+ [
20
+ // UV (short-wave)
21
+ 1.4100, 2.0e-4, // 200 nm (strong UV absorption relative to visible)
22
+ 1.4000, 6.0e-5, // 220 nm
23
+ 1.3950, 2.0e-5, // 240 nm
24
+ 1.3900, 8.0e-6, // 260 nm
25
+ 1.3860, 3.0e-6, // 280 nm
26
+ 1.3820, 1.2e-6, // 300 nm
27
+ 1.3795, 8.0e-7, // 320 nm
28
+ 1.3775, 5.0e-7, // 340 nm
29
+ 1.3760, 3.0e-7, // 360 nm
30
+ 1.3750, 2.0e-7, // 380 nm
31
+ // Visible (400–700 nm): n≈1.38–1.39, very small k
32
+ 1.3745, 1.5e-7, // 400 nm
33
+ 1.3738, 1.2e-7, // 450 nm
34
+ 1.3730, 1.0e-7, // 500 nm
35
+ 1.3725, 1.0e-7, // 550 nm
36
+ 1.3720, 1.2e-7, // 600 nm
37
+ 1.3718, 1.5e-7, // 650 nm
38
+ 1.3715, 2.0e-7, // 700 nm
39
+ // NIR/SWIR (0.7–2.5 µm): weak absorption until ~970/1450/1940 nm bands
40
+ 1.3712, 3.0e-7, // 750 nm
41
+ 1.3710, 4.0e-7, // 800 nm
42
+ 1.3705, 1.2e-6, // 900 nm
43
+ 1.3700, 3.5e-6, // 950 nm
44
+ 1.3695, 1.5e-5, // 970 nm
45
+ 1.3690, 8.0e-6, // 1000 nm
46
+ 1.3685, 3.0e-6, // 1064 nm
47
+ 1.3678, 4.5e-5, // 1200 nm
48
+ 1.3672, 1.8e-4, // 1300 nm
49
+ 1.3660, 1.2e-3, // 1450 nm
50
+ 1.3650, 2.0e-4, // 1550 nm
51
+ 1.3640, 4.5e-4, // 1650 nm
52
+ 1.3630, 1.8e-3, // 1750 nm
53
+ 1.3610, 1.2e-2, // 1940 nm
54
+ 1.3600, 6.0e-3, // 2000 nm
55
+ 1.3580, 2.0e-3, // 2200 nm
56
+ 1.3560, 9.0e-4, // 2400 nm
57
+ 1.3550, 6.0e-4, // 2500 nm
58
+ // Mid-IR (2.5–5 µm) — OH stretch complex 2.9–3.2 µm
59
+ 1.3520, 1.0e-2, // 2700 nm
60
+ 1.3480, 8.0e-2, // 2900 nm
61
+ 1.3460, 3.5e-1, // 3000 nm
62
+ 1.3430, 9.0e-1, // 3100 nm
63
+ 1.3400, 1.5e+0, // 3200 nm
64
+ 1.3380, 1.2e+0, // 3300 nm
65
+ 1.3350, 7.0e-1, // 3500 nm
66
+ 1.3320, 3.5e-1, // 3700 nm
67
+ 1.3290, 1.8e-1, // 4000 nm
68
+ 1.3260, 9.0e-2, // 4500 nm
69
+ 1.3240, 6.0e-2, // 5000 nm
70
+ // Long-wave IR (5–20 µm): elevated k due to vibrational modes
71
+ 1.3200, 1.8e-1, // 6000 nm
72
+ 1.3180, 3.5e-1, // 7000 nm
73
+ 1.3160, 7.0e-1, // 8000 nm
74
+ 1.3140, 9.0e-1, // 9000 nm
75
+ 1.3125, 1.1e+0, // 10000 nm
76
+ 1.3110, 9.0e-1, // 12000 nm
77
+ 1.3095, 7.0e-1, // 15000 nm
78
+ 1.3080, 5.5e-1, // 20000 nm
79
+ ],
80
+ [
81
+ 200,
82
+ 220,
83
+ 240,
84
+ 260,
85
+ 280,
86
+ 300,
87
+ 320,
88
+ 340,
89
+ 360,
90
+ 380,
91
+ 400,
92
+ 450,
93
+ 500,
94
+ 550,
95
+ 600,
96
+ 650,
97
+ 700,
98
+ 750,
99
+ 800,
100
+ 900,
101
+ 950,
102
+ 970,
103
+ 1000,
104
+ 1064,
105
+ 1200,
106
+ 1300,
107
+ 1450,
108
+ 1550,
109
+ 1650,
110
+ 1750,
111
+ 1940,
112
+ 2000,
113
+ 2200,
114
+ 2400,
115
+ 2500,
116
+ 2700,
117
+ 2900,
118
+ 3000,
119
+ 3100,
120
+ 3200,
121
+ 3300,
122
+ 3500,
123
+ 3700,
124
+ 4000,
125
+ 4500,
126
+ 5000,
127
+ 6000,
128
+ 7000,
129
+ 8000,
130
+ 9000,
131
+ 10000,
132
+ 12000,
133
+ 15000,
134
+ 20000
135
+ ]
136
+ );
137
+
138
+ /**
139
+ * 🌊 Sea-salt (brine) — maritime haze surrogate
140
+ * @param {number[]} result complex number, refraction index
141
+ * @param {number} wavelength_nm in nanometers
142
+ */
143
+ export function ri_brine(result, wavelength_nm) {
144
+ SEASALT_BRINE_REFRACTION_INDEX_LUT.sample(wavelength_nm, result);
145
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 💨 MINERAL DUST
3
+ * @param {number[]} result complex number, refraction index
4
+ * @param {number} wavelength_nm in nanometers
5
+ */
6
+ export function ri_dust(result: number[], wavelength_nm: number): void;
7
+ //# sourceMappingURL=ri_dust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ri_dust.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/ri_dust.js"],"names":[],"mappings":"AAiJA;;;;GAIG;AACH,gCAHW,MAAM,EAAE,iBACR,MAAM,QAIhB"}
@@ -0,0 +1,153 @@
1
+ import {
2
+ ParameterLookupTable
3
+ } from "../../../../engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js";
4
+
5
+ /**
6
+ * Complex refractive index of mineral dust (silicate-rich, e.g., Saharan): n + i k, wavelength in nm.
7
+ * Assumptions: dry, ~300 K, bulk effective constants representative of a typical desert mineral dust
8
+ * (quartz/feldspar/clays mix). Morphology not modeled; values intended for bulk-equivalent Mie.
9
+ *
10
+ * Composite sources and notes:
11
+ * - OPAC mineral dust (Hess et al., 1998) — visible/NIR anchors (m ≈ 1.53 + 0.008i at 0.55 µm).
12
+ * - Sokolik & Toon (1999), JGR 104, 9423–9444 — spectral behavior and strong Si–O features in 8–12 µm.
13
+ * - Querry (1985/1991), Optical constants of minerals — silicate trends in MIR/LWIR (quartz/feldspars/clays).
14
+ * - Patterson, Winchester & Barlow (1977), and Shettle & Fenn (1979) — atmospheric dust guidance.
15
+ *
16
+ * Table design:
17
+ * - 200–20,000 nm coverage; linear interpolation by ParameterLookupTable.
18
+ * - Preserves your original 400–700 nm values exactly to avoid visible-range regressions in graphics.
19
+ * - Denser sampling near 3 µm OH-complex and the strong 9–10 µm Si–O reststrahlen band.
20
+ */
21
+ const DUST_REFRACTION_INDEX_LUT = ParameterLookupTable.from(
22
+ 2, // number of columns in the table [n, k]
23
+ // Lookup data (n, k) per wavelength below. Wavelength positions are in nm.
24
+ [
25
+ // UV (short-wave): increasing absorption towards deep UV
26
+ 1.550, 6.0e-2, // 200 nm
27
+ 1.540, 3.5e-2, // 220 nm
28
+ 1.535, 2.0e-2, // 240 nm
29
+ 1.530, 1.5e-2, // 260 nm
30
+ 1.525, 1.1e-2, // 280 nm
31
+ 1.523, 9.5e-3, // 300 nm
32
+ 1.522, 9.0e-3, // 320 nm
33
+ 1.521, 8.7e-3, // 340 nm
34
+ 1.5205, 8.5e-3, // 360 nm
35
+ 1.5200, 8.4e-3, // 380 nm
36
+ // Visible (preserve exact legacy values for 400–700 nm)
37
+ 1.5200, 8.2e-3, // 400 nm
38
+ 1.5200, 7.0e-3, // 450 nm
39
+ 1.5200, 6.0e-3, // 500 nm
40
+ 1.5200, 5.0e-3, // 550 nm
41
+ 1.5100, 4.0e-3, // 600 nm
42
+ 1.5100, 3.5e-3, // 650 nm
43
+ 1.5100, 3.0e-3, // 700 nm
44
+ // NIR/SWIR (0.7–2.5 µm): modest absorption; slight dispersion in n
45
+ 1.5150, 3.2e-3, // 750 nm
46
+ 1.5140, 3.0e-3, // 800 nm
47
+ 1.5130, 3.2e-3, // 900 nm
48
+ 1.5120, 3.5e-3, // 1000 nm
49
+ 1.5120, 3.8e-3, // 1064 nm
50
+ 1.5110, 4.5e-3, // 1200 nm
51
+ 1.5100, 5.5e-3, // 1300 nm
52
+ 1.5090, 8.0e-3, // 1450 nm
53
+ 1.5080, 7.0e-3, // 1550 nm
54
+ 1.5070, 6.5e-3, // 1650 nm
55
+ 1.5060, 6.2e-3, // 1750 nm
56
+ 1.5050, 7.0e-3, // 1940 nm
57
+ 1.5050, 7.5e-3, // 2000 nm
58
+ 1.5040, 9.0e-3, // 2200 nm
59
+ 1.5030, 1.2e-2, // 2400 nm
60
+ 1.5030, 1.4e-2, // 2500 nm
61
+ // Mid-IR (2.5–5 µm): increasing absorption toward lattice/OH bands
62
+ 1.5030, 2.0e-2, // 2700 nm
63
+ 1.5040, 3.0e-2, // 2900 nm
64
+ 1.5050, 3.5e-2, // 3000 nm
65
+ 1.5060, 4.0e-2, // 3100 nm
66
+ 1.5080, 4.5e-2, // 3200 nm
67
+ 1.5100, 5.0e-2, // 3300 nm
68
+ 1.5120, 5.5e-2, // 3500 nm
69
+ 1.5150, 6.0e-2, // 3700 nm
70
+ 1.5180, 7.0e-2, // 4000 nm
71
+ 1.5220, 8.0e-2, // 4500 nm
72
+ 1.5250, 9.0e-2, // 5000 nm (5 µm)
73
+ // Long-wave IR (5–20 µm): strong Si–O stretch band near 9–10 µm
74
+ 1.5300, 1.2e-1, // 6000 nm
75
+ 1.5400, 1.8e-1, // 7000 nm
76
+ 1.5500, 3.0e-1, // 8000 nm
77
+ 1.5600, 4.0e-1, // 8500 nm
78
+ 1.5700, 5.5e-1, // 9000 nm
79
+ 1.5800, 7.0e-1, // 9500 nm
80
+ 1.5900, 8.0e-1, // 10000 nm (10 µm)
81
+ 1.5800, 5.0e-1, // 11000 nm
82
+ 1.5600, 3.0e-1, // 12000 nm
83
+ 1.5300, 1.5e-1, // 15000 nm
84
+ 1.5000, 8.0e-2, // 20000 nm (20 µm)
85
+ ],
86
+ // Wavelength positions (nm) corresponding to the (n,k) pairs above
87
+ [
88
+ 200,
89
+ 220,
90
+ 240,
91
+ 260,
92
+ 280,
93
+ 300,
94
+ 320,
95
+ 340,
96
+ 360,
97
+ 380,
98
+ 400,
99
+ 450,
100
+ 500,
101
+ 550,
102
+ 600,
103
+ 650,
104
+ 700,
105
+ 750,
106
+ 800,
107
+ 900,
108
+ 1000,
109
+ 1064,
110
+ 1200,
111
+ 1300,
112
+ 1450,
113
+ 1550,
114
+ 1650,
115
+ 1750,
116
+ 1940,
117
+ 2000,
118
+ 2200,
119
+ 2400,
120
+ 2500,
121
+ 2700,
122
+ 2900,
123
+ 3000,
124
+ 3100,
125
+ 3200,
126
+ 3300,
127
+ 3500,
128
+ 3700,
129
+ 4000,
130
+ 4500,
131
+ 5000,
132
+ 6000,
133
+ 7000,
134
+ 8000,
135
+ 8500,
136
+ 9000,
137
+ 9500,
138
+ 10000,
139
+ 11000,
140
+ 12000,
141
+ 15000,
142
+ 20000
143
+ ]
144
+ );
145
+
146
+ /**
147
+ * 💨 MINERAL DUST
148
+ * @param {number[]} result complex number, refraction index
149
+ * @param {number} wavelength_nm in nanometers
150
+ */
151
+ export function ri_dust(result, wavelength_nm) {
152
+ DUST_REFRACTION_INDEX_LUT.sample(wavelength_nm, result);
153
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 🌿 POLLEN (Organic)
3
+ * @param {number[]} result complex number, refraction index
4
+ * @param {number} wavelength_nm in nanometers
5
+ */
6
+ export function ri_pollen(result: number[], wavelength_nm: number): void;
7
+ //# sourceMappingURL=ri_pollen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ri_pollen.d.ts","sourceRoot":"","sources":["../../../../../../src/core/math/physics/mie/ri_pollen.js"],"names":[],"mappings":"AA0IA;;;;GAIG;AACH,kCAHW,MAAM,EAAE,iBACR,MAAM,QAIhB"}