Source code for taurex.contributions.simpleclouds

from .contribution import Contribution
import numpy as np
from taurex.data.fittable import fitparam


[docs]class SimpleCloudsContribution(Contribution): """ Optically thick cloud deck up to a certain height These have the form: .. math:: \\tau(\\lambda,z) = \\begin{cases} \\infty & \\quad \\text{if } P(z) >= P_{0}\\\\ 0 & \\quad \\text{if } P(z) < P_{0} \\end{cases} Where :math:`P_{0}` is the pressure at the top of the cloud-deck Parameters ---------- clouds_pressure: float Pressure at top of cloud deck """ def __init__(self, clouds_pressure=1e3): super().__init__('SimpleClouds') self._cloud_pressure = clouds_pressure @property def order(self): return 3
[docs] def contribute(self, model, start_layer, end_layer, density_offset, layer, density, tau, path_length=None): tau[layer] += self.sigma_xsec[layer, :]
[docs] def prepare_each(self, model, wngrid): """ Returns an absorbing cross-section that is infinitely absorping up to a certain height Parameters ---------- model: :class:`~taurex.model.model.ForwardModel` Forward model wngrid: :obj:`array` Wavenumber grid Yields ------ component: :obj:`tuple` of type (str, :obj:`array`) ``Clouds`` and opacity array. """ contrib = np.zeros(shape=(model.nLayers, wngrid.shape[0],)) cloud_filtr = model.pressureProfile >= self._cloud_pressure contrib[cloud_filtr, :] = np.inf self._contrib = contrib yield 'Clouds', self._contrib
@fitparam(param_name='clouds_pressure', param_latex='$P_\mathrm{clouds}$', default_mode='log', default_fit=False, default_bounds=[1e-3, 1e6]) def cloudsPressure(self): """ Cloud top pressure in Pascal """ return self._cloud_pressure @cloudsPressure.setter def cloudsPressure(self, value): self._cloud_pressure = value
[docs] def write(self, output): contrib = super().write(output) contrib.write_scalar('clouds_pressure', self._cloud_pressure) return contrib
[docs] @classmethod def input_keywords(self): return ['SimpleClouds', 'ThickClouds', ]