Source code for pyLBL.mt_ckd.ozone

from .utils import BandedContinuum, Continuum, dry_air_number_density, radiation_term, \
                   Spectrum, T273


[docs]class OzoneContinuum(BandedContinuum): def __init__(self): self.bands = [OzoneChappuisWulfContinuum(self.path), OzoneHartleyHugginsContinuum(self.path), OzoneUVContinuum(self.path)]
[docs]class OzoneChappuisWulfContinuum(Continuum): """Ozone continuum in the Chappuis and Wulf band. Attributes: data: List of Spectrum objects containing data read from an input dataset. """ def __init__(self, path): self.data = [Spectrum(path, "x_o3"), Spectrum(path, "y_o3"), Spectrum(path, "z_o3")]
[docs] def spectra(self, temperature, pressure, vmr): no3 = dry_air_number_density(pressure, temperature, vmr)*vmr["O3"] dt = temperature - T273 rad = radiation_term(self.grid()[:], temperature) return 1.e-20*no3*rad*(self.data[0].data[:] + self.data[1].data[:]*dt + self.data[2].data[:]*dt*dt)/self.grid()[:]
[docs] def grid(self): return self.data[0].wavenumbers()
[docs]class OzoneHartleyHugginsContinuum(Continuum): """Ozone Hartly-Huggins continuum cros sections. Attributes: data: List of Spectrum objects containing data read from an input dataset. """ def __init__(self, path): self.data = [Spectrum(path, "o3_hh0"), Spectrum(path, "o3_hh1"), Spectrum(path, "o3_hh2")]
[docs] def spectra(self, temperature, pressure, vmr): no3 = dry_air_number_density(pressure, temperature, vmr)*vmr["O3"] dt = temperature - T273 rad = radiation_term(self.grid()[:], temperature) return \ 1.e-20*no3*rad*(self.data[0].data[:]/self.grid()[:]) * \ (1. + self.data[1].data[:]*dt + self.data[2].data[:]*dt*dt)
[docs] def grid(self): return self.data[0].wavenumbers()
[docs]class OzoneUVContinuum(Continuum): """Ozone ultra-violet continuum coefficients. Attributes: data: A Spectrum object containing data read from an input dataset. """ def __init__(self, path): self.data = Spectrum(path, "o3_huv")
[docs] def spectra(self, temperature, pressure, vmr): no3 = dry_air_number_density(pressure, temperature, vmr)*vmr["O3"] rad = radiation_term(self.grid()[:], temperature) return no3*rad*self.data.data[:]/self.grid()[:]
[docs] def grid(self): return self.data.wavenumbers()