UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

146 lines (143 loc) 4.46 kB
import { ParameterLookupTable } from "../../../../engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js"; /** * Sea-salt aerosol (deliquesced brine) complex refractive index m = n + i k, wavelength in nm. * Assumptions: maritime haze surrogate; aqueous brine droplet at ~300 K; morphology not modeled. * Guidance/sources (composite, smoothed): * - Refractive index of seawater/brine in visible n≈1.37–1.40 (dependent on salinity and wavelength). * - Hale & Querry (1973) water bands for k behavior in IR; salt slightly perturbs n, k remains water-like. * - Querry NaCl for dry-salt context; here we target deliquesced brine typical for haze. * Notes: * - Visible k is extremely small; we use tiny nonzero values for numerical stability. * - MIR/LWIR follow water band structure but with slightly different n baseline. * - Coverage: 200–20,000 nm; denser near 3 µm and 6–10 µm regions. */ const SEASALT_BRINE_REFRACTION_INDEX_LUT = ParameterLookupTable.from( 2, // [n, k] [ // UV (short-wave) 1.4100, 2.0e-4, // 200 nm (strong UV absorption relative to visible) 1.4000, 6.0e-5, // 220 nm 1.3950, 2.0e-5, // 240 nm 1.3900, 8.0e-6, // 260 nm 1.3860, 3.0e-6, // 280 nm 1.3820, 1.2e-6, // 300 nm 1.3795, 8.0e-7, // 320 nm 1.3775, 5.0e-7, // 340 nm 1.3760, 3.0e-7, // 360 nm 1.3750, 2.0e-7, // 380 nm // Visible (400–700 nm): n≈1.38–1.39, very small k 1.3745, 1.5e-7, // 400 nm 1.3738, 1.2e-7, // 450 nm 1.3730, 1.0e-7, // 500 nm 1.3725, 1.0e-7, // 550 nm 1.3720, 1.2e-7, // 600 nm 1.3718, 1.5e-7, // 650 nm 1.3715, 2.0e-7, // 700 nm // NIR/SWIR (0.7–2.5 µm): weak absorption until ~970/1450/1940 nm bands 1.3712, 3.0e-7, // 750 nm 1.3710, 4.0e-7, // 800 nm 1.3705, 1.2e-6, // 900 nm 1.3700, 3.5e-6, // 950 nm 1.3695, 1.5e-5, // 970 nm 1.3690, 8.0e-6, // 1000 nm 1.3685, 3.0e-6, // 1064 nm 1.3678, 4.5e-5, // 1200 nm 1.3672, 1.8e-4, // 1300 nm 1.3660, 1.2e-3, // 1450 nm 1.3650, 2.0e-4, // 1550 nm 1.3640, 4.5e-4, // 1650 nm 1.3630, 1.8e-3, // 1750 nm 1.3610, 1.2e-2, // 1940 nm 1.3600, 6.0e-3, // 2000 nm 1.3580, 2.0e-3, // 2200 nm 1.3560, 9.0e-4, // 2400 nm 1.3550, 6.0e-4, // 2500 nm // Mid-IR (2.5–5 µm) — OH stretch complex 2.9–3.2 µm 1.3520, 1.0e-2, // 2700 nm 1.3480, 8.0e-2, // 2900 nm 1.3460, 3.5e-1, // 3000 nm 1.3430, 9.0e-1, // 3100 nm 1.3400, 1.5e+0, // 3200 nm 1.3380, 1.2e+0, // 3300 nm 1.3350, 7.0e-1, // 3500 nm 1.3320, 3.5e-1, // 3700 nm 1.3290, 1.8e-1, // 4000 nm 1.3260, 9.0e-2, // 4500 nm 1.3240, 6.0e-2, // 5000 nm // Long-wave IR (5–20 µm): elevated k due to vibrational modes 1.3200, 1.8e-1, // 6000 nm 1.3180, 3.5e-1, // 7000 nm 1.3160, 7.0e-1, // 8000 nm 1.3140, 9.0e-1, // 9000 nm 1.3125, 1.1e+0, // 10000 nm 1.3110, 9.0e-1, // 12000 nm 1.3095, 7.0e-1, // 15000 nm 1.3080, 5.5e-1, // 20000 nm ], [ 200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, 800, 900, 950, 970, 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 ] ); /** * 🌊 Sea-salt (brine) — maritime haze surrogate * @param {number[]} result complex number, refraction index * @param {number} wavelength_nm in nanometers */ export function ri_brine(result, wavelength_nm) { SEASALT_BRINE_REFRACTION_INDEX_LUT.sample(wavelength_nm, result); }