skOpticalProperties  2.1
Public Member Functions | List of all members
skOpticalProperties_RayleighDryAir Class Reference

#include <skrtscatter_phasematrix.h>

Inheritance diagram for skOpticalProperties_RayleighDryAir:
skOpticalProperties

Public Member Functions

 skOpticalProperties_RayleighDryAir ()
 
virtual bool SetAtmosphericState (skClimatology *neutralatmosphere, const GEODETIC_INSTANT &pt, bool *crosssectionschanged) override
 
virtual bool UpdateInternalClimatology (const GEODETIC_INSTANT &pt) override
 
virtual bool CalculateCrossSections (double wavenumber, double *absxs, double *extxs, double *scattxs, size_t threadindex) override
 Calculate cross-sections at the specified wave-number. More...
 
virtual bool CalculatePhaseMatrix (double wavenumber, double cosscatterangle, skRTPhaseMatrix *phasematrix, size_t threadindex) override
 Calculate the phase matrix at the specified wavenumber and scattering angle. More...
 
virtual bool IsScatterer () const override
 Returns true if this particles scatters radiation.
 
virtual bool IsAbsorber () const override
 Returns true if this particles absorbs radiation radiation.
 
- Public Member Functions inherited from skOpticalProperties
 skOpticalProperties ()
 
bool GetRotatedPhaseMatrix (double wavenum, double mu, double muprime, double dphi, skRTPhaseMatrix *rotatedmatrix, size_t threadindex)
 Returns the rotated phase matrix necessary for scattering. More...
 
void CheckCosineRange (double *mu)
 
bool IsDeltaFunctionForwardScatter () const
 Returns true if this cross-section has a delta function forward scatter element.
 
virtual bool CalculateCrossSectionsArray (const std::vector< double > &wavenumber, std::vector< double > *absxs, std::vector< double > *extxs, std::vector< double > *scattxs)
 Calculate cross-sections at the specified array of wave-numbers. More...
 

Detailed Description

This class calculates the corss-sections phase matrix elements for Rayleigh scattering due to dry air. It follows the algorithm presented by Bates 1984 and exactly replicates his cross-section calculations to the 4 significant digits in his Table 1. Note that this code calculates the cross-section per "air" molecule. The number of air molecules per cm3 is simply the total number of all molecules per cm3. The cross-section is pre-weighted to account for the different gas ratios in the mix. This class does not cache any phase matrices as its relatively efficient to calculate them on the fly.

The only difference between my calculation and Bates is that I make an account for the tiny fraction of gas that is not N2, O2, Ar or CO2. I assume the small residual gas is similar in properties to Argon. Bates does not describe what he does with the small residual (it is implied that it is ignored in his paper).
Thread Safety
The code was modified in February 2014 to be thread safe for CalculateCrossSections and CalculatePhaseMatrix.
References:
  1. Rayleigh Scattering by Air: D.R. Bates. Planet. Space. Sci., 32, 6, 785-790, 1984
  2. The Refractive indices and Verdet constants of the inert gases: A. Dalgarno and A.E. Kingston., Proc. Roy. Soc. A., 259, 424-429, 1960.
  3. Interferometric determination of the refractive index of carbon dioxide in the ultra violet region. A. Bideua-Mehu, Y. Guern, R. Adjean and A. Johannin-Gilles. Optics Communications, 9, 432-434, 1973.

Constructor & Destructor Documentation

skOpticalProperties_RayleighDryAir::skOpticalProperties_RayleighDryAir ( )
Construct the Rayleigh, Dry Air scattering object.   

Member Function Documentation

bool skOpticalProperties_RayleighDryAir::SetAtmosphericState ( skClimatology *  neutralatmosphere,
const GEODETIC_INSTANT &  pt,
bool *  crosssectionschanged 
)
overridevirtual

The Rayleigh cross-section in this implementation has no dependency upon atmospheric state, in the sense that we assume the atmosphere has the same proportions of O2, N2, CO2 and Ar.

Implements skOpticalProperties.

bool skOpticalProperties_RayleighDryAir::UpdateInternalClimatology ( const GEODETIC_INSTANT &  pt)
overridevirtual

The Rayleigh cross-section has no dependency on climatology parameters such as pressure and temperature. Thus this method does nothing.

Implements skOpticalProperties.

bool skOpticalProperties_RayleighDryAir::CalculateCrossSections ( double  wavenum,
double *  absxs,
double *  extxs,
double *  scattxs,
size_t  threadindex 
)
overridevirtual

Calculate cross-sections at the specified wave-number.

Calculates the Rayleigh cross-sections of Dry Air using the formulae given in Bates 1984. Note that I have compared this calculation to Bate's Rayleigh cross section calculations in Table 1 of his 1984 paper and found exact agreement (to the 4 significant digits he published).

The only difference between my calculation and Bates is that I make an account for the tiny fraction of gas that is not N2, O2, Ar or CO2. I assume the small residual gas is similar in properties to Argon. Bates does not describe what he does with the small residual (it is implied that it is ignored in his paper).

This class does not pre-calculate any phase matrix tables as its efficient to generate them on the fly.

Implements skOpticalProperties.

bool skOpticalProperties_RayleighDryAir::CalculatePhaseMatrix ( double  wavenumber,
double  cosscatterangle,
skRTPhaseMatrix phasematrix,
size_t  threadindex 
)
overridevirtual

Calculate the phase matrix at the specified wavenumber and scattering angle.

Set the extinction, ansorption and scattering cross-sections.

Reimplemented from skOpticalProperties.


The documentation for this class was generated from the following files: