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.
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.
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.
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)
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.
smrt.substrate.transparent module
Implements the geometrical optics rough substrate.
See the documentation in smrt.interface.geometrical_optics_backscatter.