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

#include <skrtscatter_phasematrix.h>

Inheritance diagram for skOpticalProperties_IceCrystal:
skOpticalProperties_ParticleBase skOpticalProperties

Public Member Functions

bool Set_AspectRatio (double aspectRatio)
 
bool Set_ScatterAlgorithm (sk_NonsphericalParticle *newscat)
 
virtual bool Set_RefractiveIndex (skRTRefractiveIndex *newri)
 
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.
 
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.
 
virtual bool CalculatePhaseMatrix (double wavenumber, double cosscatterangle, skRTPhaseMatrix *phasematrix, size_t threadindex) override
 Calculate the phase matrix at the specified wavenumber and scattering angle.
 

Detailed Description

[THREAD-SAFE]This class calculates the scattering phase matrix and cross sections for a
specified distribution of nonspherical particles.
Internally the class stores a table giving the phase matrix at a set
of interpolation cos( scattering angles).   The table is calculated
when the base class sk_ExtinctionPhaseMatrix calls Interpolate_PhaseMatrixTables
The call is not made until the user wants a Phase Matrix or cross-section
value;
Note that the class does not detect cases where the user changes the
underlying paramaters of the associated refractive index or particle
distribution.  It is not anticpated that the user will "mess" with these
parameters between usage. 

This class provides for using a number of numerical algorithms for 
computing the scattering properties: randomly- or oriented rotationally-
symmetric particles with the T-matrix code, or for arbitrary target geometries
with the Discrete Dipole approximation code. 
NOTE: for the randomly-oriented T-matrix algorithm, computation of the particle 
size distribution is performed within the DLL function 'TMATRIXRANDOM', so the 
size distribution must be selected before computing any particle
scattering properties.

Calculating the lookup table is quite intensive as for each wavelength
it requires an evaluation of the T-matrix/DDA scattering code over all the
possible angles and particle radii. Computation time increases greatly with
effective size parameter and particle aspect ratio.

The scattering algorithm object must be the first attribute added to the 
scattering particle.  For example, if 'optice' is the scattering particle object
with the associated data types:
    skOpticalProperties_IceCrystalCached*   optice;
    skRTRefractiveIndex*                riIce;
    sk_NonsphericalParticle*            scatIce;
    skRTParticleDist*                   psdIce;
and they are instantiated as:
    optice  = new skOpticalProperties_IceCrystalCached;
    riIce   = new skRTRefractiveIndex_ICE;
    scatIce = new sk_TMatrixRandomWrapper;
    psdIce  = new skRTParticleDist_2Gamma;
    psdIce->SetParameters( radius,width,0 );
then the objects should be attached in the following order:
    optice->Set_ScatterAlgorithm( scatIce );
    optice->Set_ParticleDistribution( psdIce );
    optice->Set_RefractiveIndex( riIce );

/*-----------------------------------------------------------------------—

Member Function Documentation

bool skOpticalProperties_IceCrystal::Set_AspectRatio ( double  aspectRatio)

Set the aspect ratio of the base nonspherical particle

bool skOpticalProperties_IceCrystal::Set_ScatterAlgorithm ( sk_NonsphericalParticle newscat)

Set the scattering algorithm (T-matrix oriented, random, DDA) of the ice crystal to the new value.

Parameters
newscatPointer to the new scattering object. The class will call AddRef() on the new refractive index to keep the object alive and it will call Release() when it is finished with the object.
bool skOpticalProperties_IceCrystal::Set_RefractiveIndex ( skRTRefractiveIndex newri)
virtual

Set the refractive index of the ice crystal to the new value.

Parameters
newriPointer to the new refractive index object. The class will call AddRef() on the new refractive index to keep the object alive and it will call Release() when it is finished with the object.

Implements skOpticalProperties_ParticleBase.

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

The ice crystal size distributions and associated cross-sections have no temperature, pressure or altitude dependency.

Implements skOpticalProperties.

virtual bool skOpticalProperties_IceCrystal::UpdateInternalClimatology ( const GEODETIC_INSTANT &  pt)
inlineoverridevirtual
Function that allows the optical properties class to update any internal
climatologies it may be using. This is useful for optical properties that use
internal climatologies to store various parameters (eg aerosols that store geographical distributions
of mode radius and mode width). The call to UpdateInternalClimatology differs from SetAtmosphericState
in its expected usage: a call to UpdateInternalClimatology configures internal climatologies so they
can quickly service the many subsequent calls to SetAtmosphericState.
Parameters
ptThe time and location at which the next set of cross-sections will be needed. Note thatthe height field is usually ignored as all internal climatologies are expected to cache height profiles of their respective parameters.
Returns
True if success otherwise false.

Implements skOpticalProperties.


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