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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.flat'¶
-
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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.geometrical_optics'¶
-
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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.geometrical_optics_backscatter'¶
-
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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.iem_fung92'¶
-
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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.iem_fung92_brogioni10'¶
-
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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.radar_calibration_sphere'¶
-
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)¶
-
_get_refl
(frequency, polarization, mu1)¶
-
__doc__
= None¶
-
__module__
= 'smrt.substrate.reflector'¶
-
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)¶
-
_get_refl
(specular_reflection, mu1)¶
-
__doc__
= None¶
-
__module__
= 'smrt.substrate.reflector_backscatter'¶
-
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)¶
-
__doc__
= None¶
-
__module__
= 'smrt.substrate.rough_choudhury79'¶
-
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)¶
-
__doc__
= None¶
-
__module__
= 'smrt.substrate.soil_qnh'¶
-
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)¶
-
__doc__
= None¶
-
__module__
= 'smrt.substrate.soil_wegmuller'¶
-
smrt.substrate.test_flat module¶
smrt.substrate.test_reflector module¶
smrt.substrate.test_rough_choudhury79 module¶
smrt.substrate.test_soil_wegmuller module¶
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
-
__doc__
= None¶
-
__init__
(temperature=None, permittivity_model=None, **kwargs)¶
-
__module__
= 'smrt.substrate.transparent'¶
-
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.