SMRT

smrt.substrate package

Submodules

smrt.substrate.flat module

Implement the flat interface boundary for the bottom layer (substrate). The reflection and transmission are computed using the Fresnel coefficients. This model does not take any specific parameter.

class Flat(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = []
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
optional_args = {}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.geometrical_optics module

Implement the geometrical optics rough substrate. See the documentation in geometrical_optics

class GeometricalOptics(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = ['mean_square_slope']
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
ft_even_diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, m_max, npol)
optional_args = {'shadow_correction': True}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.geometrical_optics_backscatter module

Implement the geometrical optics rough substrate. See the documentation in geometrical_optics_backscatter.

class GeometricalOpticsBackscatter(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = ['mean_square_slope']
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
ft_even_diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, m_max, npol)
optional_args = {'shadow_correction': True}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.iem_fung92 module

Implement the flat interface boundary for the bottom layer (substrate). The reflection and transmission are computed using the Fresnel coefficients. This model does not take any specific parameter.

class IEM_Fung92(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = ['roughness_rms', 'corr_length']
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
ft_even_diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, m_max, npol)
optional_args = {'autocorrelation_function': 'exponential', 'series_truncation': 10, 'warning_handling': 'print'}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.iem_fung92_brogioni10 module

Implement the flat interface boundary for the bottom layer (substrate). The reflection and transmission are computed using the Fresnel coefficients. This model does not take any specific parameter.

class IEM_Fung92_Briogoni10(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = ['roughness_rms', 'corr_length']
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
ft_even_diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, m_max, npol)
optional_args = {'autocorrelation_function': 'exponential', 'series_truncation': 10, 'warning_handling': 'print'}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.radar_calibration_sphere module

Implement the radar_calibration_sphere interface boundary for the bottom layer (substrate).

class RadarCalibrationSphere(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = []
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
ft_even_diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, m_max, npol)
optional_args = {}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.reflector module

Implement a reflective boundary conditions with prescribed reflection coefficient in the specular direction. The reflection is set to a value or a function of theta. Azimuthal symmetry is assumed (no dependence on phi).

The specular_reflection parameter can be a scalar, a function or a dictionary.

  • scalar: same reflection is use for all angles
  • function: the function must take a unique argument theta array (in radians) and return the reflection as an array of the same size as theta
  • dictionary: in this case, the keys must be ‘H’ and ‘V’ and the values are a scalar or a function and are interpreted as for the non-polarized case.

To make a reflector, it is recommended to use the helper function make_reflector().

Examples:

# the full path import is required
from smrt.substrate.reflector import make_reflector

# return a perfect reflector (the temperature is useless in this specific case)
ref = make_reflector(temperature=260, specular_reflection=1)

# return a perfect absorber / black body.
ref = make_reflector(temperature=260, specular_reflection=0)

# Specify a frequency and polarization dictionary of reflectivity
ref = make_reflector(specular_reflection={(21e9, 'H'): 0.5, (21e9, 'V'): 0.6, (36e9, 'H'): 0.7, (36e9, 'V'): 0.8})

Note

the backscatter coefficient argument is not implemented/documented yet.

make_reflector(temperature=None, specular_reflection=None)

Construct a reflector or absorber instance.

class Reflector(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.Substrate

args = []
optional_args = {'backscatter_coefficient': None, 'specular_reflection': None}
specular_reflection_matrix(frequency, eps_1, mu1, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.reflector_backscatter module

Implement a reflective boundary conditions with prescribed reflection coefficient in the specular direction. The reflection is set to a value or a function of theta. Azimuthal symmetry is assumed (no dependence on phi).

The specular_reflection parameter can be a scalar, a function or a dictionary.

  • scalar: same reflection is use for all angles
  • function: the function must take a unique argument theta array (in radians) and return the reflection as an array of the same size as theta
  • dictionary: in this case, the keys must be ‘H’ and ‘V’ and the values are a scalar or a function and are interpreted as for the non-polarized case.

To make a reflector, it is recommended to use the helper function make_reflector().

Examples:

# the full path import is required
from smrt.substrate.reflector import make_reflector

# return a perfect reflector (the temperature is useless in this specific case)
ref = make_reflector(temperature=260, specular_reflection=1)

# return a perfect absorber / black body.
ref = make_reflector(temperature=260, specular_reflection=0)

Note

the backscatter coefficient argument is not implemented/documented yet.

make_reflector(temperature=None, specular_reflection=None, backscattering_coefficient=None)

Construct a reflector or absorber instance.

class Reflector(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.Substrate

args = []
optional_args = {'backscattering_coefficient': None, 'specular_reflection': None}
specular_reflection_matrix(frequency, eps_1, mu1, npol)
ft_even_diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, m_max, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.rough_choudhury79 module

Implement the rough boundary reflectivity presented in Choudhury et al. (1979). It is not suitable for the active mode.

Applicable for ksigma<<1

parameters: roughness_rms

class ChoudhuryReflectivity(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.Substrate

args = ['roughness_rms']
optional_args = {}
adjust(rh, rv, frequency, eps_1, mu1)
specular_reflection_matrix(frequency, eps_1, mu1, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.soil_qnh module

Implement the QNH soil model proposed by Wang, 1983. This model is for the passive mode, it is not suitable for the active mode.

parameters: Q, N, H (or Nv and Nh instead of N)

Q and N are set to zero by default. The roughness rms is called H and is a required parameter (note: it is called roughness_rms in soil_wegmuller)

Examples:
soil = make_soil(“soil_qnh”, “dobson85”, moisture=0.2, sand=0.4, clay=0.3, drymatter=1100,
Q=0, N=0, H=1e-2)
class SoilQNH(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.Substrate

args = ['H']
optional_args = {'N': 0.0, 'Nh': nan, 'Nv': nan, 'Q': 0.0}
adjust(rh, rv, mu1)
specular_reflection_matrix(frequency, eps_1, mu1, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.soil_wegmuller module

Implement the empirical soil model presented in Wegmuller and Maetzler 1999. It is often used in microwave radiometry. It is not suitable for the active mode.

parameters: roughness_rms

class SoilWegmuller(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.Substrate

args = ['roughness_rms']
optional_args = {}
adjust(rh, rv, frequency, eps_1, mu1)
specular_reflection_matrix(frequency, eps_1, mu1, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.test_flat module

test_make_flat()

smrt.substrate.test_reflector module

test_scalar_specular()
test_dict_specular()
test_func_specular()
test_dict_multifrequency()
test_missing_frequency_warning()
test_emissivity_reflectivity_relation()
test_tuple_dict_multifrequency()
test_inverted_reflector_dictionary()

smrt.substrate.test_rough_choudhury79 module

test_make_rough_choudhury()
test_rough_choudhury_reflection()
test_raises_ksigma_warning()
test_make_rough_water()
test_equivalence_fresnel()

smrt.substrate.test_soil_qnh module

test_make_soil_qnh()
test_make_soil_qnh_params()
soil_setup()
test_soil_qnh_reflection()
test_soil_qnh_emissivity()

smrt.substrate.test_soil_wegmuller module

test_make_soil_wegmuller()
test_soil_wegmuller_reflection()

smrt.substrate.transparent module

Implement the geometrical optics rough substrate. See the documentation in geometrical_optics_backscatter.

class Transparent(temperature=None, permittivity_model=None, **kwargs)

Bases: smrt.core.interface.SubstrateBase

args = []
diffuse_reflection_matrix(frequency, eps_1, mu_s, mu_i, dphi, npol)
emissivity_matrix(frequency, eps_1, mu1, npol)
optional_args = {}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

Module contents

This directory contains different options to represent the substrate, that is the lower boundary conditions of the radiation transfer equation. This is usually the soil or ice or water but can be an aluminium plate or an absorber.

To create a substrate, use/implement an helper function such as make_soil(). This function is able to automatically load a specific soil model .

Examples:

from smrt import make_soil
soil = make_soil("soil_wegmuller", "dobson85", moisture=0.2, sand=0.4, clay=0.3, drymatter=1100, roughness_rms=1e-2)

It is recommended to read first the documentation of make_soil() and then explore the different types of soil models.

For developers

To develop a new substrate formulation, you must add a file in the smrt/substrate directory. The name of the file is used by make_soil to build the substrate object.