skOpticalProperties
2.1

#include <skrtscatter_phasematrix.h>
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 crosssections at the specified wavenumber. 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 crosssection 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 crosssections at the specified array of wavenumbers. More...  
This class calculates the corsssections phase matrix elements for Rayleigh scattering due to dry air. It follows the algorithm presented by Bates 1984 and exactly replicates his crosssection calculations to the 4 significant digits in his Table 1. Note that this code calculates the crosssection per "air" molecule. The number of air molecules per cm3 is simply the total number of all molecules per cm3. The crosssection is preweighted 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.
skOpticalProperties_RayleighDryAir::skOpticalProperties_RayleighDryAir  (  ) 
Construct the Rayleigh, Dry Air scattering object.

overridevirtual 
The Rayleigh crosssection 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.

overridevirtual 
The Rayleigh crosssection has no dependency on climatology parameters such as pressure and temperature. Thus this method does nothing.
Implements skOpticalProperties.

overridevirtual 
Calculate crosssections at the specified wavenumber.
Calculates the Rayleigh crosssections 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 precalculate any phase matrix tables as its efficient to generate them on the fly.
Implements skOpticalProperties.

overridevirtual 
Calculate the phase matrix at the specified wavenumber and scattering angle.
Set the extinction, ansorption and scattering crosssections.
Reimplemented from skOpticalProperties.