Source code for pyLBL.mt_ckd.water_vapor

from numpy import power, zeros

from .utils import air_number_density, BandedContinuum, Continuum, dry_air_number_density, \
                   P0, radiation_term, Spectrum, subgrid_bounds, T0


[docs]class WaterVaporSelfContinuum(BandedContinuum): def __init__(self): self.bands = [WaterVaporARMSelfContinuum(self.path),]
[docs]class WaterVaporARMSelfContinuum(Continuum): """Water vapor self continuum coefficients. Attributes: data: Dictionary that maps temperatures (keys) to Spectrum objects containing data read from an input dataset (values). """ def __init__(self, path): self.data = {296: Spectrum(path, "bs296"), 260: Spectrum(path, "bs260")}
[docs] def spectra(self, temperature, pressure, vmr): t_factor = (temperature - T0)/(260. - T0) nh2o = dry_air_number_density(pressure, temperature, vmr)*vmr["H2O"] n = air_number_density(pressure, temperature, vmr) rad = radiation_term(self.grid()[:], temperature) return \ nh2o*(nh2o/n)*(pressure/P0)*(T0/temperature)*1.e-20*rad * \ self.data[296].data[:]*power(self.data[260].data[:]/self.data[296].data[:], t_factor)
[docs] def grid(self): return self.data[296].wavenumbers()
[docs]class WaterVaporForeignContinuum(BandedContinuum): def __init__(self): self.bands = [WaterVaporIASIForeignContinuum(self.path),]
[docs]class WaterVaporIASIForeignContinuum(Continuum): """Water vapor foreign continuum coefficients. Attributes: data: Spectrum object containing data read from an input dataset. scale: Array of scaling factors. """ def __init__(self, path): self.data = Spectrum(path, "bfh2o") x = Spectrum(path, "xfac_rhu") self.scale = zeros(self.data.data.size) lower, upper = subgrid_bounds(self.data.grid, x.grid) self.scale[lower + 1:upper + 1] = x.data[1:] self.scale[lower] = self.scale[lower + 1] u = upper + 1 w = self.grid()[u:] vdelsq1 = (w[:] - 255.67)*(w[:] - 255.67) vf1 = power((w[:] - 255.67)/57.83, 8) vdelmsq1 = (w[:] + 255.67)*(w[:] + 255.67) vmf1 = power((w[:] + 255.67)/57.83, 8) vf2 = power(w[:]/630., 8) self.scale[u:] = \ 1. + (0.06 - 0.42*((57600./(vdelsq1[:] + 57600. + vf1[:])) + (57600./(vdelmsq1[:] + 57600. + vmf1[:]))))/(1. + 0.3*vf2[:])
[docs] def spectra(self, temperature, pressure, vmr): nh2o = dry_air_number_density(pressure, temperature, vmr)*vmr["H2O"] n = air_number_density(pressure, temperature, vmr) rad = radiation_term(self.grid()[:], temperature) return \ (1. - (nh2o/n))*(pressure/P0)*(T0/temperature)*1.e-20*nh2o*rad * \ self.scale[:]*self.data.data[:]
[docs] def grid(self): return self.data.wavenumbers()