Go back to documentation Homepage

3.2.3. The refractiveIndex module

This is a collection of utilities to deal with the formulation of ice and ice-air mixtures refractive index in the microwave for radar and radiometer remote sensing applications

3.2.3.1. The dielectric models for ice

This submodule provides access to implementations of refractive index models for ice in the microwave. The implemented models currently available are the Matzler 2006, Warren 2008, and Iwabuchi 2011 formulations

This module provides a list of ice refractive index models to compute the dielectric properties of ice according to the requested frequency and temeperatures. The module can be also used as a standalone python script.

Example

The python script is callable as

$ python ice.py Temperature Frequency

and returns the complex refractive index of ice at the requested Temperature [Kelvin] and Frequency [Hz]

Notes

It is possible to call the functions implemented in this module using nd-arrays. The function arguments must either have exactly the same shape allowing element-wise application of the functions or one of the two must be a scalar which will be spread across the nd computations

Temperature should be provided in Kelvin and frequency in Hz The specific called algorithm check for arguments values to be within the limits of validity of the dielectric model and raises ValueError in case they are not respected

snowScatt.refractiveIndex.ice.eps(temperature, frequency, model='Matzler_2006', matzlerCheckTemperature=True)[source]

Ice complex relative dielectric constant according to the requested model

Parameters:
  • temperature (float) – nd array of temperature [Kelvin]
  • frequency (float) – nd array of frequency [Hz]
  • model (string) – dielectric model name default to Matzler (2006)
  • matzlerCheckTemperature (bool) – check temperature range for Matzler (2006) (default True)
Returns:

Relative dielectric constant of ice at the requested frequency and temperature

Return type:

nd - complex

Raises:

ValueError – If a negative frequency or temperature is passed as an argument

snowScatt.refractiveIndex.ice.iwabuchi_yang_2011(temperature, frequency)[source]

Ice complex relative dielectric constant according to Iwabuchi (2011) ‘Temperature dependence of ice optical constants: Implications for simulating the single-scattering properties of cold ice clouds’ J. Quant. Spec. Rad. Tran. 112, 2520-2525

The model is valid for temperature ranging from 160 to 270 K. Frequency/wavelength range of validity is [150 MHz/2 meters; 44 nanometers]

Source of the table is the additional material published along with the paper

Parameters:
  • temperature (float) – nd array of temperature [Kelvin] which will be ignored
  • frequency (float) – nd array of frequency [Hz]
Returns:

Relative dielectric constant of ice at the requested frequency and temperature

Return type:

nd - complex

Raises:

ValueError – If a negative frequency or temperature is passed as an argument

snowScatt.refractiveIndex.ice.matzler_2006(temperature, frequency, checkTemperature=True)[source]

Ice complex relative dielectric constant according to Matzler (2006) “Thermal Microwave Radiation: application to remote sensing, Chapter 5, pp 456-460”

Parameters:
  • temperature (float) – nd array of temperature [Kelvin]
  • frequency (float) – nd array of frequency [Hz]
  • checkTemperature (bool) – check temperature range for Matzler (2006) (default True)
Returns:

Relative dielectric constant of ice at the requested frequency and temperature

Return type:

nd - complex

Raises:

ValueError – If a negative frequency or temperature is passed as an argument

snowScatt.refractiveIndex.ice.n(temperature, frequency, model='Matzler_2006', matzlerCheckTemperature=True)[source]

Ice complex refractive index according to the requested model

Parameters:
  • temperature (float) – nd array of temperature [Kelvin]
  • frequency (float) – nd array of frequency [Hz]
  • model (string) – dielectric model name default to Matzler (2006)
  • matzlerCheckTemperature (bool) – check temperature range for Matzler (2006) (default True)
Returns:

Refractive index of ice at the requested frequency and temperature

Return type:

nd - complex

Raises:

ValueError – If a negative frequency or temperature is passed as an argument

snowScatt.refractiveIndex.ice.warren_brandt_2008(frequency)[source]

Ice complex relative dielectric constant according to Warren (2008) ‘Optical constants of ice from the ultraviolet to the microwave: A revised compilation.’ J. Geophys. Res., 113, D14220, doi:10.1029/2007JD009744 which updates and corrects Warren, S. G. (1984), ‘Optical constants of ice from the ultraviolet to the microwave’, Appl. Opt., 23, 1206–1225.

The model is valid for temperature = 266 K, thus this parameter is dropped Source of the tables https://atmos.washington.edu/ice_optical_constants/

Parameters:frequency (float) – nd array of frequency [Hz]
Returns:Relative dielectric constant of ice at the requested frequency and temperature
Return type:nd - complex
Raises:ValueError – If a negative frequency or temperature is passed as an argument

3.2.3.2. The dielectric mixing formula

This submodule provides access to dielectric mixing formula of Maxwell-Garnett, Bruggeman and Shivola

Implement a few effective medium approximation formulas…

Both material dielectric models and EMAs usually work with dielec permittivity and refractive index is derived as sqrt(eps), hence this modules is implemented to always take eps as arguments of both the eps and n functions for computational efficiency

This module works using just unitless quantities. Which is amazing by itself but also solves a lot of implementation problems :)

The module can be also used as a standalone python script.

Example

The python script is callable as

$ python mixing.py refractive_indices volume_fractions

and returns the complex refractive index of the mixture

Notes

It is possible to call the functions implemented in this module using nd-arrays. The function arguments must either have exactly the same shape allowing element-wise application of the functions or one of the two must be a scalar which will be spread across the nd computations

Refractive indexes should be complex values.

snowScatt.refractiveIndex.mixing.bruggeman(eps, mix)[source]

Bruggeman EMA for the refractive index.

‘D.A.G. Bruggeman, Ann. Phys. 24, 636 (1935)’

Parameters:
  • eps (Tuple of complex) – dielectric permittivity of the media
  • mix (Tuple of float) – the volume fractions of the media, len(mix)==len(m) (if sum(mix)!=1, these are taken relative to sum(mix))
Returns:

  • The Bruggeman approximation for the complex refractive index of
  • the effective medium

The first element of the eps and mix tuples is taken as the matrix and the second as the inclusion.

Bruggeman model has the advantage with respect to MG of beeing symmetric

snowScatt.refractiveIndex.mixing.maxwell_garnett(eps, mix)[source]
Maxwell-Garnett EMA for the refractive index.

AKA: Rayleigh mixing formula [Sihvola, 1989]

The MG relation for effective medium approximation is derived for the case of small, highly diluted, spatially well separated, optically soft and spherical inclusions in a medium. Also the size of the considered volume should be small.

The MG relation is asymmetric, the order of medium and inclusion in the formula counts. This is a consequence of the aformentioned assumptions.

J.C.M. Garnett, Philos. Trans. R. Soc. 203, 385 (1904); 205, 237 (1906).

Parameters:
  • eps (Tuple of complex) – dielectric permittivity of the media
  • mix (Tuple of float) – the volume fractions of the media
Returns:

  • The Maxwell-Garnett approximation for the complex refractive index of
  • the effective medium

The first element of the eps and mix tuples is taken as the matrix and the second as the inclusion.

snowScatt.refractiveIndex.mixing.sihvola(eps, mix, ni=0.85)[source]

Sihvola EMA for the refractive index.

For instructions, see mg_refractive in this module, except this routine only works for two components.

The original formulation is defaulted to ni=0.85 which has been found to be the best for many snow applications. Also, the analitic solution for Sihvola modified EMA is way too complicated to be written and computed efficiently: a numerically converging solution is applied instead.

A.H. Sihvola ‘Self-Consistency Aspects of Dielectric Mixing Theories’ IEEE Trans. Geos. Rem. Sens. vol 27, n 4, 1989

Parameters:
  • eps (Tuple of complex) – dielectric permittivity of the media
  • mix (Tuple of float) – the volume fractions of the media
Returns:

  • The Sihvola approximation for the complex refractive index of
  • the effective medium

The first element of the eps and mix tuples is taken as the matrix and the second as the inclusion.

Sihvola model with default ni=0.85 is found to give best results in terms of computed scattering properties of snow [Petty 20…] and it is symmetric with respect to the order of inclusions and matrix

WARNING: Routine copied from original pamtra fortran code, not sure it is correct!

snowScatt.refractiveIndex.mixing.sihvola_paper(eps, mix, ni=0.85)[source]

Sihvola EMA for the refractive index.

At the moment this routine only works for two components. Further developments are needed to make it work for more components

The original formulation is defaulted to ni=0.85 which has been found to be the best for many snow applications. Also, the analitic solution for Sihvola modified EMA is way too complicated to be written and computed efficiently: a numerically converging solution is applied instead.

A.H. Sihvola ‘Self-Consistency Aspects of Dielectric Mixing Theories’ IEEE Trans. Geos. Rem. Sens. vol 27, n 4, 1989

Parameters:
  • eps (Tuple of complex) – dielectric permittivity of the media
  • mix (Tuple of float) – the volume fractions of the media
Returns:

  • The Sihvola approximation for the complex refractive index of
  • the effective medium

3.2.3.3. Convenient function for snow

This submodule provides access to convenience functions that combine the refractive index submodule for ice and the dielectric mixing submodule in order to calculate the average dielectric properties of snowflakes as homogeneous mixtures of ice and air. It converts the snow density into volume fraction of ice and air and uses a dielectric mixing model and an ice refractive index model to estimate the dielectric properties of the mixture

This module computes snow dielectric properties as a homogeneous mixture of ice and air or maybe even other stuff …

The module can be also used as a standalone python script.

Example

The python script is callable as

$ python snow.py Temperature Frequency Density

and returns the complex refractive index of snow at the requested Temperature [Kelvin], Frequency [Hz] and density [kg/m**3]

Notes

It is possible to call the functions implemented in this module using nd-arrays. The function arguments must either have exactly the same shape allowing element-wise application of the functions or one of the two must be a scalar which will be spread across the nd computations

Temperature should be provided in Kelvin, frequency in Hz and density in kg/m**3 The dielectric module checks for arguments values to be within the limits of validity of the dielectric model and raises ValueError in case they are not respected

snowScatt.refractiveIndex.snow.eps(temperature, frequency, density, model_mix='Bruggeman', model_ice='Matzler_2006', matzlerCheckTemperature=True)[source]

Effective complex relative dielectric constant of snow according to the specified models for ice dielectric properties, effective medium approximation function and effective density of the snowflake

Parameters:
  • temperature (float) – nd array of temperature [Kelvin]
  • frequency (float) – nd array of frequency [Hz]
  • density (float) – nd array of effective density [kg/m**3]
  • model_mix (string) – Effective Medium Approximation model name default to Bruggeman
  • model_ice (string) – dielectric model name default to Matzler (2006)
  • matzlerCheckTemperature (bool) – check temperature range for Matzler (2006) (default True)
Returns:

Relative dielectric constant of snow at the requested frequency and temperature

Return type:

nd - complex

snowScatt.refractiveIndex.snow.n(temperature, frequency, density, model_mix='Bruggeman', model_ice='Matzler_2006', matzlerCheckTemperature=True)[source]
Effective refractive index of snow according to the specified models
for ice dielectric properties, effective medium approximation function and effective density of the snowflake
Parameters:
  • temperature (float) – nd array of temperature [Kelvin]
  • frequency (float) – nd array of frequency [Hz]
  • density (float) – nd array of effective density [kg/m**3]
  • model_mix (string) – Effective Medium Approximation model name default to Bruggeman
  • model_ice (string) – dielectric model name default to Matzler (2006)
  • matzlerCheckTemperature (bool) – check temperature range for Matzler (2006) (default True)
Returns:

Refractive index of snow at the requested frequency and temperature

Return type:

nd - complex

3.2.3.4. Dielectric utilities

This submodule provides access to conveninence function to make conversions between commonly used dielectric quatities like the complex refractive index n, the complex dielectric permittivity eps, the complex radar dielectric factor K (Clausius-Mossotti) and its real squared norm K2

This module provides a short list of utilities and complementary functions for the refractive index module.

Basic conversion from refractive index to dielectric permittivity (and viceversa) is implemented. The module also provides a conversion function from dielectric permittivity to radar dielectric factor K2 which is of great importance in radar applications

snowScatt.refractiveIndex.utilities.K(eps)[source]

Rayleigh complex dielectric factor This is basically the K complex factor that defines the Radar dielectric factor K**2. It is useful in Rayleigh theory to define absorption cross section from its imaginary part

Parameters:eps (complex) – nd array of complex relative dielectric constants
Returns:Rayleigh complex dielectric factor K
Return type:nd - float
snowScatt.refractiveIndex.utilities.K2(eps)[source]

Radar dielectric factor K**2

Parameters:eps (complex) – nd array of complex relative dielectric constants
Returns:Radar dielectric factor K**2 real
Return type:nd - float