petitRADTRANS.opacities.clouds
==============================

.. py:module:: petitRADTRANS.opacities.clouds


Attributes
----------

.. autoapisummary::

   petitRADTRANS.opacities.clouds._MISSING_FLOAT
   petitRADTRANS.opacities.clouds._MISSING_NEG_INF


Functions
---------

.. autoapisummary::

   petitRADTRANS.opacities.clouds._selected_clouds_have_effect
   petitRADTRANS.opacities.clouds._build_cloud_species_mass_fractions
   petitRADTRANS.opacities.clouds._resolve_cloud_parameter_key
   petitRADTRANS.opacities.clouds._expand_cloud_parameter_column
   petitRADTRANS.opacities.clouds._standardize_cloud_species_parameter
   petitRADTRANS.opacities.clouds._filter_patchy_clouds
   petitRADTRANS.opacities.clouds._select_loaded_cloud_opacity_tables
   petitRADTRANS.opacities.clouds._init_cloud_branch_outputs
   petitRADTRANS.opacities.clouds._maybe_add_opaque_cloud_deck
   petitRADTRANS.opacities.clouds._maybe_add_power_law_cloud_scattering
   petitRADTRANS.opacities.clouds._validate_power_law_inputs
   petitRADTRANS.opacities.clouds._init_cloud_background_continuum
   petitRADTRANS.opacities.clouds._validate_selected_cloud_species
   petitRADTRANS.opacities.clouds._compute_selected_cloud_branch
   petitRADTRANS.opacities.clouds._maybe_compute_cloud_branch
   petitRADTRANS.opacities.clouds._initialize_hansen_b
   petitRADTRANS.opacities.clouds._initialize_cloud_species_inputs
   petitRADTRANS.opacities.clouds._standardize_f_sed
   petitRADTRANS.opacities.clouds._compute_cloud_opacity_grids_from_known_radii
   petitRADTRANS.opacities.clouds._validate_missing_cloud_radius_arguments
   petitRADTRANS.opacities.clouds._compute_cloud_opacity_grids_with_derived_radii
   petitRADTRANS.opacities.clouds._assemble_cloud_opacity_outputs
   petitRADTRANS.opacities.clouds.init_clouds_particle_porosity_factor
   petitRADTRANS.opacities.clouds.compute_cloud_continuum_opacities
   petitRADTRANS.opacities.clouds._compute_cloud_opacities
   petitRADTRANS.opacities.clouds.compute_species_optical_depths


Module Contents
---------------

.. py:data:: _MISSING_FLOAT

.. py:data:: _MISSING_NEG_INF

.. py:function:: _selected_clouds_have_effect(mass_fractions, selected_cloud_species)

.. py:function:: _build_cloud_species_mass_fractions(mass_fractions, selected_cloud_species)

.. py:function:: _resolve_cloud_parameter_key(parameter, cloud_name)

.. py:function:: _expand_cloud_parameter_column(value, pressures, parameter_name, cloud_name)

.. py:function:: _standardize_cloud_species_parameter(parameter, cloud_species, pressures, parameter_name)

.. py:function:: _filter_patchy_clouds(cloud_species, patchy_clouds)

.. py:function:: _select_loaded_cloud_opacity_tables(clouds_loaded_opacities, cloud_species, selected_cloud_species)

.. py:function:: _init_cloud_branch_outputs(frequencies, pressures, n_clouds)

.. py:function:: _maybe_add_opaque_cloud_deck(cloud_continuum_opacities, pressures, opaque_cloud_top_pressure)

.. py:function:: _maybe_add_power_law_cloud_scattering(scattering_in_transmission, cloud_continuum_opacities_scattering, frequencies, pressures, power_law_opacity_350nm, power_law_opacity_coefficient)

.. py:function:: _validate_power_law_inputs(power_law_opacity_350nm, power_law_opacity_coefficient)

.. py:function:: _init_cloud_background_continuum(frequencies, pressures, n_clouds, scattering_in_transmission, opaque_cloud_top_pressure, power_law_opacity_350nm, power_law_opacity_coefficient, compute_clear_opacities)

.. py:function:: _validate_selected_cloud_species(cloud_species_mass_fractions, selected_cloud_species, mass_fraction_keys)

.. py:function:: _compute_selected_cloud_branch(selected_cloud_species, continuum_seed, pressures, temperatures, frequency_bins_edges, mass_fractions, mean_molar_masses, reference_gravity, cloud_particle_radius_distribution_std, clouds_loaded_opacities, sum_opacities, anisotropic_cloud_scattering, cloud_f_sed, eddy_diffusion_coefficients, cloud_particle_mean_radii, cloud_particle_number_density_grid, cloud_particle_radius_distribution, cloud_hansen_a, cloud_hansen_b, clouds_particle_porosity_factor, cloud_photosphere_median_optical_depth, return_cloud_contribution, target_particle_radii, target_pressure)

.. py:function:: _maybe_compute_cloud_branch(selected_cloud_species, selected_clouds_have_effect, base_continuum_opacities, base_continuum_opacities_scattering, cloud_scattering_opacities, cloud_absorption_opacities, cloud_opacities, cloud_particle_mean_radii, pressures, temperatures, frequency_bins_edges, mass_fractions, mean_molar_masses, reference_gravity, cloud_particle_radius_distribution_std, clouds_loaded_opacities, sum_opacities, anisotropic_cloud_scattering, cloud_f_sed, eddy_diffusion_coefficients, input_cloud_particle_mean_radii, cloud_particle_number_density_grid, cloud_particle_radius_distribution, cloud_hansen_a, cloud_hansen_b, clouds_particle_porosity_factor, cloud_photosphere_median_optical_depth, return_cloud_contribution, target_particle_radii, target_pressure)

.. py:function:: _initialize_hansen_b(cloud_hansen_b, cloud_particle_radius_distribution, cloud_species, pressures)

.. py:function:: _initialize_cloud_species_inputs(cloud_species, cloud_species_mass_fractions, pressures, clouds_loaded_opacities, clouds_particle_porosity_factor, cloud_particle_mean_radii, cloud_hansen_a)

.. py:function:: _standardize_f_sed(cloud_f_sed, cloud_species, pressures_size)

.. py:function:: _compute_cloud_opacity_grids_from_known_radii(cloud_particle_radius_distribution, atmospheric_densities, cloud_particle_density, cloud_species_mass_fractions_grid, cloud_particle_mean_radii, cloud_hansen_b, cloud_particle_radius_distribution_std, cloud_particle_number_density_grid, clouds_loaded_opacities, cloud_species_mass_fractions, pressures, target_particle_radii, target_pressure)

.. py:function:: _validate_missing_cloud_radius_arguments(cloud_particle_radius_distribution_std, cloud_particle_radius_distribution, cloud_f_sed, eddy_diffusion_coefficients, clouds_loaded_opacities, cloud_particle_number_density_grid)

.. py:function:: _compute_cloud_opacity_grids_with_derived_radii(cloud_particle_radius_distribution, reference_gravity, atmospheric_densities, cloud_particle_density, temperatures, mean_molar_masses, cloud_f_sed, cloud_species, pressures, cloud_particle_radius_distribution_std, eddy_diffusion_coefficients, cloud_hansen_b, cloud_species_mass_fractions_grid, cloud_species_mass_fractions, cloud_particle_number_density_grid, clouds_loaded_opacities, target_particle_radii, target_pressure)

.. py:function:: _assemble_cloud_opacity_outputs(clouds_total_absorption_opacities, clouds_total_scattering_opacities, cloud_scattering_reduction_factor, clouds_loaded_opacities, frequency_bins_edges, anisotropic_cloud_scattering, sum_opacities, photospheric_cloud_optical_depths, continuum_opacities)

.. py:function:: init_clouds_particle_porosity_factor(clouds_particle_porosity_factor, cloud_species)

   Normalize and validate per-species cloud porosity factors.

   The input mapping is adjusted to the defaults expected by each cloud
   opacity source. DHS-based tables default to a porosity of ``0.25`` when no
   finite value is supplied, while non-DHS sources default to ``0.0``. The
   function also validates that all resulting porosity factors lie in the
   interval $[0, 1)$.

   Args:
       clouds_particle_porosity_factor:
           Mapping from cloud species name to porosity factor.
       cloud_species:
           Cloud species included in the current calculation.

   Returns:
       Updated porosity-factor mapping with defaults applied.


.. py:function:: compute_cloud_continuum_opacities(frequencies: jax.typing.ArrayLike, frequency_bins_edges: jax.typing.ArrayLike, pressures: jax.typing.ArrayLike, temperatures: jax.typing.ArrayLike, mass_fractions: dict[str, jax.typing.ArrayLike], mean_molar_masses: jax.typing.ArrayLike, reference_gravity: float, scattering_in_transmission: bool, sum_opacities: bool, opaque_cloud_top_pressure: float, power_law_opacity_350nm: float, power_law_opacity_coefficient: float, cloud_species: list[str] | tuple[str], clouds_particle_porosity_factor: dict[str, float], clouds_loaded_opacities: petitRADTRANS.utils.LockedDict[str, jax.typing.ArrayLike], anisotropic_cloud_scattering: bool, cloud_particle_mean_radii: jax.typing.ArrayLike, cloud_particle_radius_distribution_std: float, cloud_particle_number_density_grid: jax.typing.ArrayLike, cloud_f_sed: dict[str, float], eddy_diffusion_coefficients: dict[str, float], cloud_particle_radius_distribution: str, cloud_hansen_a: float, cloud_hansen_b: float, cloud_photosphere_median_optical_depth: float, patchy_clouds: tuple[str], return_cloud_contribution: bool, compute_clear_opacities, target_particle_radii, target_pressure)

   Compute cloud continuum opacity products for cloudy and optional clear branches.

   This is the main cloud entry point used by ``Radtrans``. It builds the
   cloud absorption and scattering continuum contributions, evaluates the
   selected cloud species, and optionally computes a second branch containing
   only the fully covering clouds for partial-cloud post-processing.

   Args:
       frequencies:
           Frequency grid used for continuum outputs.
       frequency_bins_edges:
           Frequency-bin edges used for cloud opacity interpolation.
       pressures:
           Atmospheric pressure grid in cgs units.
       temperatures:
           Atmospheric temperature profile in K.
       mass_fractions:
           Species mass-fraction mapping for the current atmosphere.
       mean_molar_masses:
           Mean molecular mass profile in amu.
       reference_gravity:
           Reference gravity in cgs units.
       scattering_in_transmission:
           Whether scattering is already active in transmission before adding
           cloud contributions.
       sum_opacities:
           Whether cloud opacities should be collapsed into a single absorber
           channel.
       opaque_cloud_top_pressure:
           Optional pressure in bar for an opaque cloud deck.
       power_law_opacity_350nm:
           Optional reference opacity for the power-law cloud scattering model.
       power_law_opacity_coefficient:
           Wavelength exponent for the power-law cloud scattering model.
       cloud_species:
           Cloud species to include in the cloudy branch.
       clouds_particle_porosity_factor:
           Mapping of cloud species to particle porosity factors.
       clouds_loaded_opacities:
           Loaded cloud opacity tables and metadata.
       anisotropic_cloud_scattering:
           If ``True``, use anisotropic scattering when forming continuum
           scattering opacities.
       cloud_particle_mean_radii:
           Optional prescribed particle mean radii.
       cloud_particle_radius_distribution_std:
           Width of the log-normal particle size distribution.
       cloud_particle_number_density_grid:
           Optional custom particle number density grid.
       cloud_f_sed:
           Cloud settling parameter, scalar or per-species mapping.
       eddy_diffusion_coefficients:
           Eddy diffusion coefficient profile or mapping.
       cloud_particle_radius_distribution:
           Particle size distribution model, such as ``"lognormal"``,
           ``"hansen"``, or ``"custom"``.
       cloud_hansen_a:
           Optional Hansen ``a`` parameter or equivalent mean-radius input.
       cloud_hansen_b:
           Optional Hansen ``b`` width parameter.
       cloud_photosphere_median_optical_depth:
           Optional target cloud optical depth near the photosphere.
       patchy_clouds:
           Cloud species affected by ``cloud_fraction`` and therefore
           excluded from the clear branch.
       return_cloud_contribution:
           Whether to propagate cloud-only products required by contribution
           diagnostics.
       compute_clear_opacities:
           If ``True``, also compute the clear branch.
       target_particle_radii:
           Optional target particle radii grid for cloud opacity evaluation.
       target_pressure:
           Optional pressure grid associated with ``target_particle_radii``.

   Returns:
       Tuple containing cloudy continuum absorption and scattering opacities,
       cloud-only opacity diagnostics, particle radii, clear-branch cloud
       products, and the updated transmission-scattering flag.


.. py:function:: _compute_cloud_opacities(pressures, temperatures, cloud_species, frequency_bins_edges, cloud_species_mass_fractions, mean_molar_masses, reference_gravity, cloud_particle_radius_distribution_std, clouds_loaded_opacities, sum_opacities, anisotropic_cloud_scattering, cloud_f_sed=None, eddy_diffusion_coefficients=None, cloud_particle_mean_radii=None, cloud_particle_radius_distribution='lognormal', cloud_hansen_a=None, cloud_hansen_b=None, cloud_particle_number_density_grid=None, clouds_particle_porosity_factor=None, photospheric_cloud_optical_depths=None, continuum_opacities=None, return_cloud_contribution=False, target_particle_radii=None, target_pressure=None)

   Calculate cloud opacity terms for a single cloud branch.

   The function prepares cloud particle properties, evaluates the selected
   particle size distribution against the loaded cloud tables, interpolates the
   resulting opacities onto the model frequency grid, and separates the final
   absorption and scattering products used by the radiative-transfer solvers.

   Args:
       pressures:
           Atmospheric pressure grid in cgs units.
       temperatures:
           Atmospheric temperature profile in K.
       cloud_species:
           Cloud species included in this branch.
       frequency_bins_edges:
           Frequency-bin edges for interpolation of cloud opacity tables.
       cloud_species_mass_fractions:
           Mapping of cloud species to mass-fraction profiles.
       mean_molar_masses:
           Mean molecular mass profile in amu.
       reference_gravity:
           Reference gravity in cgs units.
       cloud_particle_radius_distribution_std:
           Width of the log-normal particle size distribution.
       clouds_loaded_opacities:
           Loaded cloud opacity tables and metadata.
       sum_opacities:
           Whether cloud opacity outputs should be collapsed into a single
           absorber channel.
       anisotropic_cloud_scattering:
           Whether to use anisotropic scattering in the continuum output.
       cloud_f_sed:
           Cloud settling parameter used when radii must be derived.
       eddy_diffusion_coefficients:
           Eddy diffusion coefficient profile or mapping used for derived
           particle radii.
       cloud_particle_mean_radii:
           Optional prescribed cloud particle mean radii.
       cloud_particle_radius_distribution:
           Particle size distribution model.
       cloud_hansen_a:
           Optional Hansen ``a`` parameter or equivalent mean-radius input.
       cloud_hansen_b:
           Optional Hansen ``b`` width parameter.
       cloud_particle_number_density_grid:
           Optional custom particle number density grid.
       clouds_particle_porosity_factor:
           Optional mapping of cloud species to particle porosity factors.
       photospheric_cloud_optical_depths:
           Optional target cloud optical depth near the photosphere.
       continuum_opacities:
           Seed continuum absorption opacities to which cloud absorption is
           added.
       return_cloud_contribution:
           Whether to retain cloud-only products needed for contribution
           diagnostics.
       target_particle_radii:
           Optional target particle radii grid for cloud opacity evaluation.
       target_pressure:
           Optional pressure grid associated with ``target_particle_radii``.

   Returns:
       Tuple ``(continuum_opacities, continuum_opacities_scattering,
       cloud_anisotropic_scattering_opacities, cloud_absorption_opacities,
       cloud_opacities, cloud_particle_mean_radii)``.


.. py:function:: compute_species_optical_depths(reference_gravity, pressures, cloud_opacities)

   Compute cloud optical depths from per-species cloud opacities.

   Optical depths are integrated from the top of the atmosphere downward using
   the atmospheric pressure grid and a vertically constant reference gravity.

   Args:
       reference_gravity:
           Surface gravity in cgs units.
       pressures:
           Atmospheric pressure grid in cgs units.
       cloud_opacities:
           Cloud opacity array with dimensions ``(..., n_layers)``.

   Returns:
       Cloud optical depths with the same shape as ``cloud_opacities``.


