smrt.substrate package

Contains different options to represent the substrate, that is, the lower boundary conditions of the radiative transfer equation.

This is usually the soil, ice, or water but can also be an aluminium plate or an absorber.

To create a substrate, use or implement a helper function such as smrt.inputs.make_soil.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 first read the documentation of smrt.inputs.make_soil.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.

smrt.substrate.flat module

Implements 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: 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

Implements the geometrical optics rough substrate.

See the documentation in smrt.interface.geometrical_optics.

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

Bases: 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 = {'autocorrelation_function': 'gaussian', 'corr_length': None, 'mean_square_slope': None, 'roughness_rms': None, 'shadow_correction': True}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.geometrical_optics_backscatter module

Implements the geometrical optics rough substrate.

See the documentation in smrt.interface.geometrical_optics_backscatter.

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

Bases: 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 = {'autocorrelation_function': 'gaussian', 'corr_length': None, 'mean_square_slope': None, 'roughness_rms': None, 'shadow_correction': True}
specular_reflection_matrix(frequency, eps_1, mu1, npol)

smrt.substrate.iem_fung92 module

Implements 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: 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: 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

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

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

Bases: 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

Implements a reflective boundary condition 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).

param specular_reflection:

Can be a scalar, a function, or a dictionary. - scalar: Uses the same reflection for all angles. - function: Takes a single argument theta array (in radians) and returns the reflection as an array of the same size as theta. - dictionary: Keys must be ‘H’ and ‘V’, and values are a scalar or a function, interpreted as for the non-polarized case.

returns:

A reflector instance.

rtype:

Reflector

Examples:

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

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

# Returns 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 or documented yet.

make_reflector(temperature=None, specular_reflection=None)

Construct a reflector or absorber instance.

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

Bases: Substrate

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

smrt.substrate.reflector_backscatter module

Implements a reflective boundary condition with prescribed reflection coefficient in the specular direction and backscatter coefficient.

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.

The backscattering_coefficient is a dictionary with VV nad HH keys. It is not possible to set HV and VH. Note also that modeling substrate with prescribed backscatter value with the DORT solver is an approximate trick, and the result is only approximatly the prescribed value even for a transparent snowpack.

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

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

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

# Use a function as a function of the cosine of the incidence angle
def reflection_function(mu):
    return 0.5 * mu

ref = make_reflector(specular_reflection=reflection_function)

Note

The backscatter coefficient argument is not implemented or documented yet. Modeling substrate with prescribed backscatter value with the DORT solver is an approximate trick, and the result is only approximately the prescribed value even for a transparent snowpack.

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

Construct a reflector or absorber instance.

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

Bases: 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

Implements the rough boundary reflectivity presented in Choudhury et al. (1979).

This model is not suitable for the active mode and is applicable for ksigma << 1.

param roughness_rms:

The root mean square of the surface roughness.

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

Bases: 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

Implements the QNH soil model proposed by Wang, 1983.

This model is for the passive mode and is not suitable for the active mode.

param Q:

Optional; default is 0.

param N:

Optional; default is 0.

param Nv:

Optional; default is NaN.

param Nh:

Optional; default is NaN.

param H:

Required; the roughness rms (note: called roughness_rms in soil_wegmuller).

Examples

```python 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: 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

Implements the empirical soil model presented in Wegmuller and Maetzler 1999.

This model is often used in microwave radiometry. It is not suitable for the active mode.

param roughness_rms:

The root mean square of the surface roughness.

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

Bases: 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.transparent module

Implements the geometrical optics rough substrate.

See the documentation in smrt.interface.geometrical_optics_backscatter.

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

Bases: 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)