Source code for pytmosph3r.atmosphere.inputatmosphere

from typing import Optional, Union

import numpy as np

from pytmosph3r.config.factory import create_obj
from .atmosphere import Atmosphere


[docs] class InputAtmosphere(Atmosphere): """Class to build an atmosphere of your own, which will override the datafile.""" def __init__(self, grid=None, pressure=None, max_pressure=None, min_pressure=None, temperature=None, gas_mix_ratio=None, transparent_gases=None, aerosols=None, winds=None, chemistry=None, molar_mass=None, albedo_surf=None, wn_albedo_cutoff=None ): """Create the atmosphere you want (or you deserve). Args: grid (:class:`~pytmosph3r.grid.Grid3D`): Grid representing the coordinate system (level+layer, latitude, longitude). pressure (float, :obj:`array`, optional): Pressure for each point in :py:attr:`grid`. Incompatible with :py:attr:`max_pressure`. max_pressure (float) : Maximum pressure (at the surface). Incompatible with :py:attr:`pressure`. min_pressure (float) : Minimum pressure to use in the highest column of the model. temperature (float, :obj:`array`, dict): Temperature for each point in :py:attr:`grid`. If it is an array or a float, it will simply define the temperature over the whole grid. If used as a dictionary, it can configure :class:`~pytmosph3r.atmosphere.simple2d.Simple2DTemperature`. gas_mix_ratio (float, :obj:`array`): Volume Mixing Ratio of gases (dictionary :code:`{'H2O': array, ...}`. transparent_gases (list, optional): Gases considered transparent (not taken into account for the contributions). aerosols (float, :obj:`array`): Aerosols: number density of particles (in number per unit volume). chemistry (:class:`pytmosph3r.chemistry.Chemistry`): Chemistry module. Either a class of :class:`pytmosph3r.chemistry.Chemistry` or your personal module (which should probably inherit from :class:`pytmosph3r.chemistry.Chemistry`, or at least change the gas mix ratio of the atmosphere). albedo_surf (ndarray, optional): 2d array with the albedo value to use on each column. wn_albedo_cutoff (ndarray, optional): 2d array with the cutoff value of the low pass filter on each column. """ super().__init__(self.__class__.__name__) if aerosols is None: aerosols = {} if gas_mix_ratio is None: gas_mix_ratio = {} self.grid = grid self.pressure = pressure self.max_pressure = max_pressure self.min_pressure = min_pressure if max_pressure and min_pressure and max_pressure < min_pressure: self.critical( f"max_pressure = {max_pressure} < min_pressure = {min_pressure}. I am reversing them but check if " f"it " f"is not a mistake.") self.max_pressure = min_pressure self.min_pressure = max_pressure self.temperature = temperature self.winds = winds self.gas_mix_ratio = gas_mix_ratio self.transparent_gases = transparent_gases self.aerosols = aerosols self.altitude = None # Altitude for each point in :py:attr:`grid`. # Treat the albedo of the planet surface # 2d array of float. self.albedo_surf: Optional[Union[float, np.ndarray]] = albedo_surf self.wn_albedo_cutoff: Optional[Union[float, np.ndarray]] = wn_albedo_cutoff if chemistry is None or (isinstance(chemistry, dict) and not len(chemistry)): self.chemistry = None elif isinstance(chemistry, dict): self.chemistry = create_obj({"Chemistry": chemistry}, "Chemistry") else: self.chemistry = chemistry self.molar_mass = molar_mass if self.molar_mass is not None: self.recompute_molar_mass = False
[docs] def outputs(self): return ["altitude"]