UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

141 lines (138 loc) 4.38 kB
import { ParameterLookupTable } from "../../../../engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js"; /** * Ammonium sulfate aerosol ("(NH4)2SO4") complex refractive index m = n + i k, wavelength in nm. * Assumptions: dry crystalline aerosol surrogate for continental haze; ~300 K; morphology not modeled. * Guidance/sources (composite, smoothed for Mie with linear interpolation): * - Toon, Pollack & Khare (1976); d'Almeida et al. (1991); Hess et al. (1998, OPAC) — visible/NIR anchors (n≈1.52, k≈0). * - Palmer & Williams (1975) optical constants compendium; Querry (1985/1991) — UV and MIR/LWIR band behavior. * Notes: * - In the visible, k is extremely small (≈1e-6–1e-5). We use small nonzero values to avoid divide-by-zero corner cases. * - MIR bands associated with sulfate and ammonium groups raise k around ~3 µm (weak) and ~7–10 µm (stronger). * - Coverage: 200–20,000 nm; denser sampling near MIR bands. */ const AMMONIUM_SULFATE_REFRACTION_INDEX_LUT = ParameterLookupTable.from( 2, // [n, k] [ // UV (short-wave) — increasing absorption 1.560, 2.0e-2, // 200 nm 1.550, 8.0e-3, // 220 nm 1.545, 3.5e-3, // 240 nm 1.540, 1.5e-3, // 260 nm 1.535, 8.0e-4, // 280 nm 1.532, 3.5e-4, // 300 nm 1.530, 2.0e-4, // 320 nm 1.528, 1.2e-4, // 340 nm 1.5265, 8.0e-5, // 360 nm 1.5255, 6.0e-5, // 380 nm // Visible (very low absorption; n≈1.52) 1.5250, 5.0e-5, // 400 nm 1.5245, 3.0e-5, // 450 nm 1.5240, 2.0e-5, // 500 nm 1.5235, 2.0e-5, // 550 nm 1.5230, 2.0e-5, // 600 nm 1.5225, 2.0e-5, // 650 nm 1.5220, 2.0e-5, // 700 nm // NIR/SWIR (0.7–2.5 µm): still tiny k; slight dispersion in n 1.5218, 2.0e-5, // 750 nm 1.5215, 2.0e-5, // 800 nm 1.5210, 3.0e-5, // 900 nm 1.5205, 4.0e-5, // 1000 nm 1.5200, 4.5e-5, // 1064 nm 1.5195, 6.0e-5, // 1200 nm 1.5190, 8.0e-5, // 1300 nm 1.5185, 1.6e-4, // 1450 nm 1.5180, 1.3e-4, // 1550 nm 1.5178, 1.2e-4, // 1650 nm 1.5175, 1.2e-4, // 1750 nm 1.5172, 1.8e-4, // 1940 nm 1.5170, 1.8e-4, // 2000 nm 1.5165, 2.2e-4, // 2200 nm 1.5160, 2.8e-4, // 2400 nm 1.5158, 3.0e-4, // 2500 nm // Mid-IR (2.7–5 µm): weak-to-moderate absorption near 3 µm 1.5155, 6.0e-4, // 2700 nm 1.5150, 1.5e-3, // 2900 nm 1.5145, 3.5e-3, // 3000 nm 1.5140, 5.0e-3, // 3100 nm 1.5135, 6.0e-3, // 3200 nm 1.5130, 6.5e-3, // 3300 nm 1.5125, 6.0e-3, // 3500 nm 1.5120, 4.0e-3, // 3700 nm 1.5115, 2.5e-3, // 4000 nm 1.5110, 1.6e-3, // 4500 nm 1.5105, 1.2e-3, // 5000 nm // Long-wave IR (5–20 µm): strong sulfate bands ~7–10 µm 1.5100, 4.0e-3, // 6000 nm 1.5100, 8.0e-3, // 7000 nm 1.5105, 1.8e-2, // 8000 nm 1.5110, 3.5e-2, // 9000 nm 1.5120, 5.5e-2, // 10000 nm (10 µm) 1.5140, 3.5e-2, // 12000 nm 1.5160, 1.5e-2, // 15000 nm 1.5180, 8.0e-3, // 20000 nm ], [ 200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, 800, 900, 1000, 1064, 1200, 1300, 1450, 1550, 1650, 1750, 1940, 2000, 2200, 2400, 2500, 2700, 2900, 3000, 3100, 3200, 3300, 3500, 3700, 4000, 4500, 5000, 6000, 7000, 8000, 9000, 10000, 12000, 15000, 20000 ] ); /** * 🌫️ Ammonium sulfate (continental haze surrogate) * @param {number[]} result complex number, refraction index * @param {number} wavelength_nm in nanometers */ export function ri_ammonium_sulfate(result, wavelength_nm) { AMMONIUM_SULFATE_REFRACTION_INDEX_LUT.sample(wavelength_nm, result); }