ReFRACtor
|
This class maintains the absorber portion of the state. More...
#include <absorber_absco.h>
Public Member Functions | |
AbsorberAbsco (const std::vector< boost::shared_ptr< AbsorberVmr > > Vmr, const boost::shared_ptr< Pressure > &Press, const boost::shared_ptr< Temperature > &Temp, const std::vector< boost::shared_ptr< Altitude > > &Alt, const std::vector< boost::shared_ptr< GasAbsorption > > &Gas_absorption, const boost::shared_ptr< Constant > &C, int Nsub=10) | |
Create an absorber. More... | |
virtual | ~AbsorberAbsco () |
virtual boost::shared_ptr< AbsorberVmr > | absorber_vmr (const std::string &Gas_name) const |
Returns the AbsorberVmr object for a given species index. More... | |
virtual void | add_observer (Observer< Absorber > &Obs) |
Add an observer. More... | |
void | add_observer_and_keep_reference (boost::shared_ptr< Observer< Absorber > > &Obs) |
Add an observer and keep a reference to it. More... | |
AutoDerivative< double > | average_vmr (const std::string &Gas_name) const |
Returns the simple average volume mixing ratio for a gas. More... | |
virtual boost::shared_ptr< Absorber > | clone () const |
Clone an Absorber object. More... | |
virtual boost::shared_ptr< Absorber > | clone (const boost::shared_ptr< Pressure > &Press, const boost::shared_ptr< Temperature > &Temp, const std::vector< boost::shared_ptr< Altitude > > &Alt) const |
This version of clone takes a Pressure, Altitude and Temperature to use. More... | |
ArrayAdWithUnit< double, 1 > | dry_air_column_thickness_layer () const |
This is the dry air column thickness by layer. More... | |
ArrayAdWithUnit< double, 1 > | dry_air_molecular_density_layer () const |
This is a helper function to compute the common part of the dry air mass and wet air mass routines. More... | |
boost::shared_ptr< GasAbsorption > | gas_absorption_ptr (const std::string &Gas_name) const |
Return GasAbsorption as a pointer. More... | |
ArrayAdWithUnit< double, 1 > | gas_column_thickness_layer (const std::string &Gas_name) const |
This is the column thickness of a gas by layer. More... | |
virtual int | gas_index (const std::string &Name) const |
Map a gas name to the index number it appears in optical_depth_each_layer. More... | |
virtual std::string | gas_name (int Species_index) const |
Name of gases, in the order that optical_depth_each_layer returns them. More... | |
AutoDerivativeWithUnit< double > | gas_total_column_thickness (const std::string &Gas_name) const |
This is the total column thickness of a gas. More... | |
ArrayAdWithUnit< double, 1 > | gravity_sublayer (int Spec_index) const |
Return the gravity we use for each sublayer. More... | |
ArrayAdWithUnit< double, 1 > | h2o_vmr_sublayer () const |
Return the H2O volume mixing ratio we use for each sublayer. More... | |
double | integrand (double wn, double p, int Spec_index, int Species_index) const |
Integrand used in the absorption calculation. More... | |
AutoDerivativeWithUnit< double > | integrand_independent_wn (int Spec_index, int Species_index, const DoubleWithUnit &P) const |
This is the portion of the optical depth calculation integrand that is independent on the wave number. More... | |
virtual void | mark_used (const StateVector &Sv, blitz::Array< bool, 1 > &Used) const |
Mark elements that we are actively using (i.e., that aren't ignored). More... | |
virtual void | notify_add (StateVector &Observed_object) |
Called when an object is added to an Observable. More... | |
virtual void | notify_add (AbsorberVmr &Observed_object) |
Called when an object is added to an Observable. More... | |
virtual void | notify_add (Pressure &Observed_object) |
Called when an object is added to an Observable. More... | |
virtual void | notify_add (Temperature &Observed_object) |
Called when an object is added to an Observable. More... | |
virtual void | notify_add (Altitude &Observed_object) |
Called when an object is added to an Observable. More... | |
virtual void | notify_add () |
virtual void | notify_add () |
virtual void | notify_add () |
virtual void | notify_add () |
virtual void | notify_add () |
virtual void | notify_remove (Altitude &Observed_object) |
Called when an object is removed from an Observable. More... | |
virtual void | notify_remove (StateVector &Observed_object) |
Called when an object is removed from an Observable. More... | |
virtual void | notify_remove (AbsorberVmr &Observed_object) |
Called when an object is removed from an Observable. More... | |
virtual void | notify_remove (Temperature &Observed_object) |
Called when an object is removed from an Observable. More... | |
virtual void | notify_remove (Pressure &Observed_object) |
Called when an object is removed from an Observable. More... | |
virtual void | notify_remove () |
virtual void | notify_remove () |
virtual void | notify_remove () |
virtual void | notify_remove () |
virtual void | notify_remove () |
virtual void | notify_update (const StateVector &Sv) |
Called when the Observed object is updated. More... | |
virtual void | notify_update (const Pressure &P) |
For performance, we cache some data as we calculate it. More... | |
virtual void | notify_update (const Temperature &T) |
Called when the Observed object is updated. More... | |
virtual void | notify_update (const Altitude &A) |
Called when the Observed object is updated. More... | |
virtual void | notify_update (const AbsorberVmr &A) |
Called when the Observed object is updated. More... | |
virtual int | number_layer () const |
virtual int | number_species () const |
Number of species. More... | |
virtual int | number_spectrometer () const |
virtual ArrayAd< double, 2 > | optical_depth_each_layer (double wn, int spec_index) const |
This gives the optical depth for each layer, for the given wave number. More... | |
double | optical_depth_each_layer_direct_integrate (double wn, int Spec_index, int Species_index, int Layer_index, double eps_abs=0, double eps_rel=1e-3) const |
Find the optical depth for a layer by directly integrating the integrand function. More... | |
blitz::Array< double, 2 > | optical_depth_each_layer_direct_integrate (double wn, int Spec_index, double eps_abs=0, double eps_rel=1e-3) const |
Version of optical_depth_each_layer_direct_integrate that returns an array of species/layer like optical_depth_each_layer does. More... | |
virtual blitz::Array< double, 2 > | optical_depth_each_layer_nder (double wn, int spec_index) const |
const Pressure & | pressure () const |
ArrayWithUnit< double, 1 > | pressure_sublayer () const |
Return the pressure we use for each sublayer. More... | |
ArrayAd< double, 1 > | pressure_weighting_function_grid () const |
This is the pressure weighting function by grid level. More... | |
ArrayAd< double, 1 > | pressure_weighting_function_layer () const |
This is the pressure weighting function by layer. More... | |
virtual void | print (std::ostream &Os) const |
std::string | print_to_string () const |
Print to string. More... | |
virtual void | remove_observer (Observer< Absorber > &Obs) |
Remove an observer. More... | |
ArrayAdWithUnit< double, 1 > | specific_humidity_layer () const |
Returns specific humidity by layer. More... | |
virtual void | state_vector_name (const StateVector &Sv, blitz::Array< std::string, 1 > &Sv_name) const |
Update any portion of the list of the state vector names that apply to this object. More... | |
ArrayAdWithUnit< double, 1 > | temperature_sublayer () const |
Return the temperature we use for each sublayer. More... | |
AutoDerivative< double > | total_number_density (const std::string &Gas_name) const |
ArrayAdWithUnit< double, 1 > | vmr_sublayer (const std::string &Gas_name) const |
Return the volume mixing ratio we use for each sublayer. More... | |
ArrayAdWithUnit< double, 1 > | wet_air_column_thickness_layer () const |
This is the wet air column thickness by layer. More... | |
virtual AutoDerivative< double > | xgas (const std::string &Gas_name) const |
This calculates the gas column, e.g., XCO2. More... | |
Static Public Attributes | |
static AccumulatedTimer | timer |
Timer for optical_depth_each_layer. More... | |
Protected Member Functions | |
void | add_observer_do (Observer< Absorber > &Obs, Absorber &t) |
Add an observer. More... | |
void | add_observer_do (Observer< Absorber > &Obs) |
void | clean_dead_ptr () |
Remove any dead pointers. More... | |
void | notify_update_do (const Absorber &Self) |
Function to call to notify Observers of a state change. More... | |
void | remove_observer_do (Observer< Absorber > &Obs, Absorber &t) |
Remove an observer. More... | |
void | remove_observer_do (Observer< Absorber > &Obs) |
Protected Attributes | |
std::list< boost::weak_ptr< Observer< Absorber > > > | olist |
std::vector< boost::shared_ptr< Observer< Absorber > > > | ref_list |
This class maintains the absorber portion of the state.
This particular implementation uses the GasAbsorption classes for calculating the gas absorption (e.g, the Absco tables).
Definition at line 23 of file absorber_absco.h.
AbsorberAbsco::AbsorberAbsco | ( | const std::vector< boost::shared_ptr< AbsorberVmr > > | Vmr, |
const boost::shared_ptr< Pressure > & | Press, | ||
const boost::shared_ptr< Temperature > & | Temp, | ||
const std::vector< boost::shared_ptr< Altitude > > & | Alt, | ||
const std::vector< boost::shared_ptr< GasAbsorption > > & | Gas_absorption, | ||
const boost::shared_ptr< Constant > & | C, | ||
int | Nsub = 10 |
||
) |
Create an absorber.
Definition at line 564 of file absorber_absco.cc.
|
inlinevirtual |
Definition at line 37 of file absorber_absco.h.
|
virtual |
Returns the AbsorberVmr object for a given species index.
Implements FullPhysics::Absorber.
Definition at line 880 of file absorber_absco.cc.
|
inlinevirtualinherited |
Add an observer.
Implements FullPhysics::Observable< Absorber >.
Definition at line 32 of file absorber.h.
|
inlineinherited |
Add an observer and keep a reference to it.
See the discussion in the Observer class description for details.
Definition at line 107 of file observer.h.
|
inlineprotectedinherited |
Add an observer.
Definition at line 148 of file observer.h.
|
inlineprotectedinherited |
Definition at line 159 of file observer.h.
AutoDerivative< double > AbsorberAbsco::average_vmr | ( | const std::string & | Gas_name | ) | const |
Returns the simple average volume mixing ratio for a gas.
The units returned are mole / mole, same as for vmr.
Definition at line 818 of file absorber_absco.cc.
|
inlineprotectedinherited |
Remove any dead pointers.
Definition at line 196 of file observer.h.
|
virtual |
Clone an Absorber object.
Note that the cloned version will not be attached to and StateVector or Observer<Absorber>, although you can of course attach them after receiving the cloned object.
Because this isn't attached to the StateVector, one use of the clone operator is to create a "frozen" Absorber object.
Implements FullPhysics::Absorber.
Definition at line 611 of file absorber_absco.cc.
|
virtual |
This version of clone takes a Pressure, Altitude and Temperature to use.
The intent is that the Pressure, Altitude and Temperature has been cloned from the original Pressure, Altitude and Temperature (although this class has no way to verify this). This allows sets of objects to be cloned using a common Pressure, Altitude and Temperature clones, e.g. Atmosphere.
Implements FullPhysics::Absorber.
Definition at line 624 of file absorber_absco.cc.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::dry_air_column_thickness_layer | ( | ) | const |
This is the dry air column thickness by layer.
This is the size of pressure_grid() - 1.
Definition at line 696 of file absorber_absco.cc.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::dry_air_molecular_density_layer | ( | ) | const |
This is a helper function to compute the common part of the dry air mass and wet air mass routines.
It returns dry air molecular density (per square meter) in the case where there is no water vapor. Returns units of molecules m^-2
Definition at line 669 of file absorber_absco.cc.
boost::shared_ptr< GasAbsorption > AbsorberAbsco::gas_absorption_ptr | ( | const std::string & | Gas_name | ) | const |
Return GasAbsorption as a pointer.
Definition at line 896 of file absorber_absco.cc.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::gas_column_thickness_layer | ( | const std::string & | Gas_name | ) | const |
This is the column thickness of a gas by layer.
This is the size of pressure_grid() - 1.
Definition at line 770 of file absorber_absco.cc.
|
virtualinherited |
Map a gas name to the index number it appears in optical_depth_each_layer.
This return -1 if the Name is not one of the gases.
Definition at line 28 of file absorber.cc.
|
inlinevirtual |
Name of gases, in the order that optical_depth_each_layer returns them.
Implements FullPhysics::Absorber.
Definition at line 47 of file absorber_absco.h.
AutoDerivativeWithUnit< double > AbsorberAbsco::gas_total_column_thickness | ( | const std::string & | Gas_name | ) | const |
This is the total column thickness of a gas.
Definition at line 793 of file absorber_absco.cc.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::gravity_sublayer | ( | int | Spec_index | ) | const |
Return the gravity we use for each sublayer.
This is meant for diagnostic purposes.
Definition at line 847 of file absorber_absco.cc.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::h2o_vmr_sublayer | ( | ) | const |
Return the H2O volume mixing ratio we use for each sublayer.
This is meant for diagnostic purposes.
Definition at line 927 of file absorber_absco.cc.
double AbsorberAbsco::integrand | ( | double | wn, |
double | P, | ||
int | Spec_index, | ||
int | Species_index | ||
) | const |
Integrand used in the absorption calculation.
This is in Pa^-1. wn should be in cm^-1, and P in Pascals.
Definition at line 56 of file absorber_absco.cc.
AutoDerivativeWithUnit< double > AbsorberAbsco::integrand_independent_wn | ( | int | Spec_index, |
int | Species_index, | ||
const DoubleWithUnit & | P | ||
) | const |
This is the portion of the optical depth calculation integrand that is independent on the wave number.
We separate this out because we can calculate this portion once and cache it. This only changes if the Pressure, Temperature, Altitude, or VMR has changed (e.g., the state vector is updated).
Definition at line 41 of file absorber_absco.cc.
|
inlinevirtualinherited |
Mark elements that we are actively using (i.e., that aren't ignored).
You only need to mark the ones that are used as true, everything is already initialized as false. Default is to do nothing.
Reimplemented in FullPhysics::SubStateVectorObserver.
Definition at line 26 of file state_vector_observer.h.
|
inlinevirtualinherited |
Called when an object is added to an Observable.
Default is to do nothing.
Definition at line 47 of file observer.h.
|
inlinevirtualinherited |
Called when an object is added to an Observable.
Default is to do nothing.
Reimplemented in FullPhysics::AtmosphereOco, and FullPhysics::SubStateVectorObserver.
Definition at line 47 of file observer.h.
|
inlinevirtualinherited |
Called when an object is added to an Observable.
Default is to do nothing.
Definition at line 47 of file observer.h.
|
inlinevirtualinherited |
Called when an object is added to an Observable.
Default is to do nothing.
Definition at line 47 of file observer.h.
|
inlinevirtualinherited |
Called when an object is added to an Observable.
Default is to do nothing.
Definition at line 47 of file observer.h.
|
inlinevirtualinherited |
Definition at line 48 of file observer.h.
|
inlinevirtualinherited |
Definition at line 48 of file observer.h.
|
inlinevirtualinherited |
Definition at line 48 of file observer.h.
|
inlinevirtualinherited |
Definition at line 48 of file observer.h.
|
inlinevirtualinherited |
Definition at line 48 of file observer.h.
|
inlinevirtualinherited |
Called when an object is removed from an Observable.
Default is to do nothing.
Definition at line 55 of file observer.h.
|
inlinevirtualinherited |
Called when an object is removed from an Observable.
Default is to do nothing.
Reimplemented in FullPhysics::AtmosphereOco, and FullPhysics::SubStateVectorObserver.
Definition at line 55 of file observer.h.
|
inlinevirtualinherited |
Called when an object is removed from an Observable.
Default is to do nothing.
Definition at line 55 of file observer.h.
|
inlinevirtualinherited |
Called when an object is removed from an Observable.
Default is to do nothing.
Definition at line 55 of file observer.h.
|
inlinevirtualinherited |
Called when an object is removed from an Observable.
Default is to do nothing.
Definition at line 55 of file observer.h.
|
inlinevirtualinherited |
Definition at line 56 of file observer.h.
|
inlinevirtualinherited |
Definition at line 56 of file observer.h.
|
inlinevirtualinherited |
Definition at line 56 of file observer.h.
|
inlinevirtualinherited |
Definition at line 56 of file observer.h.
|
inlinevirtualinherited |
Definition at line 56 of file observer.h.
|
inlinevirtual |
Called when the Observed object is updated.
Reimplemented from FullPhysics::Observer< StateVector >.
Definition at line 42 of file absorber_absco.h.
|
inlinevirtual |
For performance, we cache some data as we calculate it.
This becomes stale when the pressure is changed, so we observe press and mark the cache when it changes.
Reimplemented from FullPhysics::Observer< Pressure >.
Definition at line 58 of file absorber_absco.h.
|
inlinevirtual |
Called when the Observed object is updated.
Reimplemented from FullPhysics::Observer< Temperature >.
Definition at line 63 of file absorber_absco.h.
|
inlinevirtual |
Called when the Observed object is updated.
Reimplemented from FullPhysics::Observer< Altitude >.
Definition at line 68 of file absorber_absco.h.
|
inlinevirtual |
Called when the Observed object is updated.
Reimplemented from FullPhysics::Observer< AbsorberVmr >.
Definition at line 73 of file absorber_absco.h.
|
inlineprotectedinherited |
Function to call to notify Observers of a state change.
The object should pass itself to this function, so it can be passed to the Observers.
Definition at line 121 of file observer.h.
|
inlinevirtual |
Definition at line 46 of file absorber_absco.h.
|
inlinevirtual |
Number of species.
Reimplemented from FullPhysics::Absorber.
Definition at line 44 of file absorber_absco.h.
|
inlinevirtual |
Definition at line 45 of file absorber_absco.h.
|
virtual |
This gives the optical depth for each layer, for the given wave number.
Note this only includes the Absorbers portion of this, Atmosphere class combines this with Rayleigh and Aerosol scattering.
This has size of pres->number_active_layer() x number_species()
We include the derivative of this with respect to the state vector.
Implements FullPhysics::Absorber.
Definition at line 597 of file absorber_absco.cc.
double AbsorberAbsco::optical_depth_each_layer_direct_integrate | ( | double | wn, |
int | Spec_index, | ||
int | Species_index, | ||
int | Layer_index, | ||
double | eps_abs = 0 , |
||
double | eps_rel = 1e-3 |
||
) | const |
Find the optical depth for a layer by directly integrating the integrand function.
Note that this is slower than the optical_depth_each_layer function, and also doesn't calculate the Jacobians. But it is more accurate, and can be used as a diagnostic tool to investigate the accuracy of optical_depth_each_layer
Definition at line 83 of file absorber_absco.cc.
blitz::Array< double, 2 > AbsorberAbsco::optical_depth_each_layer_direct_integrate | ( | double | wn, |
int | Spec_index, | ||
double | eps_abs = 0 , |
||
double | eps_rel = 1e-3 |
||
) | const |
Version of optical_depth_each_layer_direct_integrate that returns an array of species/layer like optical_depth_each_layer does.
Definition at line 114 of file absorber_absco.cc.
|
virtual |
Definition at line 604 of file absorber_absco.cc.
|
inline |
Definition at line 105 of file absorber_absco.h.
|
inline |
Return the pressure we use for each sublayer.
This is meant for diagnostic purposes.
Definition at line 115 of file absorber_absco.h.
ArrayAd< double, 1 > AbsorberAbsco::pressure_weighting_function_grid | ( | ) | const |
This is the pressure weighting function by grid level.
This is calculated so that: XCO2 = (co2 on grid levels) dot (press_wf_lev)
Definition at line 751 of file absorber_absco.cc.
ArrayAd< double, 1 > AbsorberAbsco::pressure_weighting_function_layer | ( | ) | const |
This is the pressure weighting function by layer.
This is the size of pressure_grid() - 1.
Definition at line 736 of file absorber_absco.cc.
|
virtual |
Reimplemented from FullPhysics::StateVectorObserver.
Definition at line 828 of file absorber_absco.cc.
|
inlineinherited |
Print to string.
This is primarily useful for SWIG wrappers to this class, e.g. a to_s method in ruby.
Definition at line 31 of file printable.h.
|
inlinevirtualinherited |
Remove an observer.
Implements FullPhysics::Observable< Absorber >.
Definition at line 34 of file absorber.h.
|
inlineprotectedinherited |
Remove an observer.
Definition at line 173 of file observer.h.
|
inlineprotectedinherited |
Definition at line 181 of file observer.h.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::specific_humidity_layer | ( | ) | const |
Returns specific humidity by layer.
Definition at line 641 of file absorber_absco.cc.
|
inlinevirtualinherited |
Update any portion of the list of the state vector names that apply to this object.
Default is to do nothing.
Reimplemented in FullPhysics::SubStateVectorObserver.
Definition at line 34 of file state_vector_observer.h.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::temperature_sublayer | ( | ) | const |
Return the temperature we use for each sublayer.
This is meant for diagnostic purposes.
Definition at line 912 of file absorber_absco.cc.
AutoDerivative<double> FullPhysics::AbsorberAbsco::total_number_density | ( | const std::string & | Gas_name | ) | const |
ArrayAdWithUnit< double, 1 > AbsorberAbsco::vmr_sublayer | ( | const std::string & | Gas_name | ) | const |
Return the volume mixing ratio we use for each sublayer.
This is meant for diagnostic purposes.
Definition at line 863 of file absorber_absco.cc.
ArrayAdWithUnit< double, 1 > AbsorberAbsco::wet_air_column_thickness_layer | ( | ) | const |
This is the wet air column thickness by layer.
This is the size of pressure_grid() - 1.
Definition at line 715 of file absorber_absco.cc.
|
virtual |
This calculates the gas column, e.g., XCO2.
This is the dry air mole fraction of the gas, see section 3.5.4 of the ATB
We include the derivative of this with respect to the state vector.
Implements FullPhysics::Absorber.
Definition at line 802 of file absorber_absco.cc.
|
protectedinherited |
Definition at line 200 of file observer.h.
|
protectedinherited |
Definition at line 201 of file observer.h.
|
staticinherited |
Timer for optical_depth_each_layer.
Definition at line 31 of file absorber.h.