GasAbsLookup Class Reference

An absorption lookup table. More...

#include <gas_abs_lookup.h>

Collaboration diagram for GasAbsLookup:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 GasAbsLookup ()
void Adapt (const ArrayOfArrayOfSpeciesTag &current_species, ConstVectorView current_f_grid)
 Adapt lookup table to current calculation.
void Extract (Matrix &sga, const Index &p_interp_order, const Index &t_interp_order, const Index &h2o_interp_order, const Index &f_index, const Numeric &p, const Numeric &T, ConstVectorView abs_vmrs) const
 Extract scalar gas absorption coefficients from the lookup table.
void GetFgrid (Vector &f) const
void GetPgrid (Vector &p) const

Private Attributes

ArrayOfArrayOfSpeciesTag species
 The species tags for which the table is valid.
ArrayOfIndex nonlinear_species
 The species tags with non-linear treatment.
Vector f_grid
 The frequency grid [Hz].
Vector p_grid
 The pressure grid for the table [Pa].
Vector log_p_grid
 The natural log of the pressure grid.
Matrix vmrs_ref
 The reference VMR profiles.
Vector t_ref
 The reference temperature profile [K].
Vector t_pert
 The vector of temperature perturbations [K].
Vector nls_pert
 The vector of perturbations for the VMRs of the nonlinear species.
Tensor4 xsec
 Absorption cross sections.

Friends

void xml_read_from_stream (istream &is_xml, GasAbsLookup &gal, bifstream *pbifs)
 Reads GasAbsLookup from XML input stream.
void xml_write_to_stream (ostream &os_xml, const GasAbsLookup &gal, bofstream *pbofs, const String &name)
 Writes GasAbsLookup to XML output stream.
void abs_lookupCreate (GasAbsLookup &abs_lookup, Index &abs_lookup_is_adapted, const ArrayOfArrayOfSpeciesTag &abs_species, const ArrayOfArrayOfLineRecord &abs_lines_per_species, const ArrayOfLineshapeSpec &abs_lineshape, const ArrayOfArrayOfSpeciesTag &abs_nls, const Vector &f_grid, const Vector &abs_p, const Matrix &abs_vmrs, const Vector &abs_t, const Vector &abs_t_pert, const Vector &abs_nls_pert, const Vector &abs_n2, const ArrayOfString &abs_cont_names, const ArrayOfString &abs_cont_models, const ArrayOfVector &abs_cont_parameters)
 WORKSPACE METHOD: abs_lookupCreate.
Numeric calc_lookup_error (const GasAbsLookup &al, const Index &abs_p_interp_order, const Index &abs_t_interp_order, const Index &abs_nls_interp_order, const bool ignore_errors, const Vector &abs_n2, const ArrayOfArrayOfLineRecord &abs_lines_per_species, const ArrayOfLineshapeSpec &abs_lineshape, const ArrayOfString &abs_cont_names, const ArrayOfString &abs_cont_models, const ArrayOfVector &abs_cont_parameters, const Numeric &local_p, const Numeric &local_t, const Vector &local_vmrs)
 Compare lookup and LBL calculation.
void abs_lookupTestAccuracy (const GasAbsLookup &abs_lookup, const Index &abs_lookup_is_adapted, const Index &abs_p_interp_order, const Index &abs_t_interp_order, const Index &abs_nls_interp_order, const Vector &abs_n2, const ArrayOfArrayOfLineRecord &abs_lines_per_species, const ArrayOfLineshapeSpec &abs_lineshape, const ArrayOfString &abs_cont_names, const ArrayOfString &abs_cont_models, const ArrayOfVector &abs_cont_parameters)
 WORKSPACE METHOD: abs_lookupTestAccuracy.


Detailed Description

An absorption lookup table.

This class holds an absorption lookup table, as well as all information that is necessary to use the table to extract absorption. Extraction routines are implemented as member functions.

Definition at line 43 of file gas_abs_lookup.h.


Constructor & Destructor Documentation

GasAbsLookup::GasAbsLookup (  )  [inline]

Definition at line 45 of file gas_abs_lookup.h.


Member Function Documentation

void GasAbsLookup::Adapt ( const ArrayOfArrayOfSpeciesTag current_species,
ConstVectorView  current_f_grid 
)

Adapt lookup table to current calculation.

This method has the following tasks:

1. Find and remember the indices of the current species in the lookup table. At the same time verify that each species is included in the table exactly once.

2. Find and remember the frequencies of the current calculation in the lookup table. At the same time verify that all frequencies are included and that no frequency occurs twice.

3. Use the species and frequency index lists to build the new lookup table.

4. Replace original table by the new one.

5. Initialize log_p_grid.

The method is intended to be called only once per ARTS job, more or less directly from a corresponding workspace method. Therefore, runtime errors are thrown, rather than assertions, if something is wrong.

Parameters:
current_species The list of species for the current calculation.
current_f_grid The list of frequencies for the current calculation.
Date:
2002-12-12

Definition at line 117 of file gas_abs_lookup.cc.

References chk_contains(), chk_if_decreasing(), chk_if_in_range(), chk_if_increasing(), chk_matrix_ncols(), chk_matrix_nrows(), chk_size(), chk_vector_length(), f_grid, find_new_grid_in_old_grid(), get_tag_group_name(), is_unique(), joker, log_p_grid, ConstTensor4View::nbooks(), ConstTensor4View::ncols(), ConstVectorView::nelem(), Array< base >::nelem(), nls_pert, nonlinear_species, out2, out3, p_grid, Tensor4::resize(), Matrix::resize(), Vector::resize(), species, t_pert, t_ref, transform(), vmrs_ref, and xsec.

Referenced by abs_lookupAdapt().

void GasAbsLookup::Extract ( Matrix sga,
const Index p_interp_order,
const Index t_interp_order,
const Index h2o_interp_order,
const Index f_index,
const Numeric p,
const Numeric T,
ConstVectorView  abs_vmrs 
) const

Extract scalar gas absorption coefficients from the lookup table.

This carries out a simple interpolation in temperature and pressure. The interpolated value is then scaled by the ratio between actual VMR and reference VMR. In the case of nonlinear species the interpolation goes also over H2O VMR.

All input parameters (f_index, p, T, VMRs for non-linear species) must be in the range coverd by the table. Violation will result in a runtime error. Those checks are here, because they are a bit difficult to make outside, due to the irregularity of the grids. Otherwise there are no runtime checks in this function, only assertions. This is, because the function is called many times inside the RT calculation.

In this case pressure is not an altitude coordinate, so we are free to choose the type of interpolation that gives lowest interpolation errors or is easiest. I tested both linear and log p interpolation with the result that log p interpolation is slightly better, so that is used.

Return values:
sga A Matrix with scalar gas absorption coefficients [1/m]. Dimension is adjusted automatically to either [1,n_species] or [n_f_grid,n_species]!
Parameters:
f_index The frequency index. If this is >=0, it means that absorption for this frequency will be extracted. (The leading dimension of sga will be 1.) If this is <0, it means that absorption for ALL frequencies is extracted. (The leading dimension of sga will be n_f_grid.)
p The pressures [Pa].
T The temperature [K].
abs_vmrs The VMRs [absolute number]. Dimension: [species].
Date:
2002-09-20, 2003-02-22, 2007-05-22
Author:
Stefan Buehler

Definition at line 509 of file gas_abs_lookup.cc.

References DEBUG_ONLY, f_grid, find_first_species_tg(), gridpos_poly(), GridPosPoly::idx, interpweights(), is_size(), joker, log_p_grid, ConstVectorView::nelem(), Array< base >::nelem(), nls_pert, nonlinear_species, ConstTensor4View::npages(), number_density(), p_grid, Matrix::resize(), species, species_index_from_species_name(), t_pert, t_ref, vmrs_ref, and xsec.

Referenced by abs_scalar_gasExtractFromLookup(), and calc_lookup_error().

void GasAbsLookup::GetFgrid ( Vector f  )  const

Definition at line 1059 of file gas_abs_lookup.cc.

References f_grid, ConstVectorView::nelem(), and Vector::resize().

Referenced by f_gridFromGasAbsLookup().

void GasAbsLookup::GetPgrid ( Vector p  )  const

Definition at line 1066 of file gas_abs_lookup.cc.

References ConstVectorView::nelem(), p_grid, and Vector::resize().

Referenced by p_gridFromGasAbsLookup().


Friends And Related Function Documentation

void xml_read_from_stream ( istream &  is_xml,
GasAbsLookup gal,
bifstream pbifs 
) [friend]

Reads GasAbsLookup from XML input stream.

Parameters:
is_xml XML Input stream
gal GasAbsLookup return value
pbifs Pointer to binary input stream. NULL in case of ASCII file.

Definition at line 58 of file xml_io_compound_types.cc.

void xml_write_to_stream ( ostream &  os_xml,
const GasAbsLookup gal,
bofstream pbofs,
const String name 
) [friend]

Writes GasAbsLookup to XML output stream.

Parameters:
os_xml XML Output stream
gal GasAbsLookup
pbofs Pointer to binary file stream. NULL for ASCII output.
name Optional name attribute

Definition at line 90 of file xml_io_compound_types.cc.

void abs_lookupCreate ( GasAbsLookup abs_lookup,
Index abs_lookup_is_adapted,
const ArrayOfArrayOfSpeciesTag abs_species,
const ArrayOfArrayOfLineRecord abs_lines_per_species,
const ArrayOfLineshapeSpec abs_lineshape,
const ArrayOfArrayOfSpeciesTag abs_nls,
const Vector f_grid,
const Vector abs_p,
const Matrix abs_vmrs,
const Vector abs_t,
const Vector abs_t_pert,
const Vector abs_nls_pert,
const Vector abs_n2,
const ArrayOfString abs_cont_names,
const ArrayOfString abs_cont_models,
const ArrayOfVector abs_cont_parameters 
) [friend]

WORKSPACE METHOD: abs_lookupCreate.

Creates a gas absorption lookup table.

The lookup table stores absorption cross-sections as a function of pressure. Additionally, absorption can be stored as a function of temperature for temperature perturbations from a reference profile.

Additionally, absorption can be stored as a function of water vapor VMR perturbations from a reference profile. The variable *abs_nls* specifies, for which species water vapor perturbations should be generated.

Note, that the absorbing gas can be any gas, but the perturbing gas is always H2O.

In contrast to other absorption functions, this method does not use the input variable *abs_h2o*. This is because *abs_h2o* has to be set interally to allow perturbations. If there are more than one H2O species, the first is assumed to be the main one.

Author:
Stefan Buehler
Parameters:
[out] abs_lookup WS Output
[out] abs_lookup_is_adapted WS Output
[in] abs_species WS Input
[in] abs_lines_per_species WS Input
[in] abs_lineshape WS Input
[in] abs_nls WS Input
[in] f_grid WS Input
[in] abs_p WS Input
[in] abs_vmrs WS Input
[in] abs_t WS Input
[in] abs_t_pert WS Input
[in] abs_nls_pert WS Input
[in] abs_n2 WS Input
[in] abs_cont_names WS Input
[in] abs_cont_models WS Input
[in] abs_cont_parameters WS Input

Definition at line 58 of file m_abs_lookup.cc.

Numeric calc_lookup_error ( const GasAbsLookup al,
const Index abs_p_interp_order,
const Index abs_t_interp_order,
const Index abs_nls_interp_order,
const bool  ignore_errors,
const Vector abs_n2,
const ArrayOfArrayOfLineRecord abs_lines_per_species,
const ArrayOfLineshapeSpec abs_lineshape,
const ArrayOfString abs_cont_names,
const ArrayOfString abs_cont_models,
const ArrayOfVector abs_cont_parameters,
const Numeric local_p,
const Numeric local_t,
const Vector local_vmrs 
) [friend]

Compare lookup and LBL calculation.

This is a helper function used by abs_lookupTestAccuracy. It takes local p, T, and VMR conditions, performs lookup table extraction and line by line absorption calculation, and compares the difference.

Parameters:
al Lookup table
abs_p_interp_order Pressure interpolation order.
abs_t_interp_order Temperature interpolation order.
abs_nls_interp_order H2O interpolation order.
ignore_errors If true, we ignore runtime errors in lookup table extraction. This is handy, because in some cases it is not easy to make sure that all local conditions are inside the valid range for the lookup table.
local_p 
local_t 
local_vmrs 
Returns:
The maximum of the absolute value of the relative difference between lookup and LBL, in percent. Or -1 if the case should be ignored according to the "ignore_errors" flag.

Definition at line 2044 of file m_abs_lookup.cc.

void abs_lookupTestAccuracy ( const GasAbsLookup abs_lookup,
const Index abs_lookup_is_adapted,
const Index abs_p_interp_order,
const Index abs_t_interp_order,
const Index abs_nls_interp_order,
const Vector abs_n2,
const ArrayOfArrayOfLineRecord abs_lines_per_species,
const ArrayOfLineshapeSpec abs_lineshape,
const ArrayOfString abs_cont_names,
const ArrayOfString abs_cont_models,
const ArrayOfVector abs_cont_parameters 
) [friend]

WORKSPACE METHOD: abs_lookupTestAccuracy.

Test accuracy of absorption lookup table.

Explicitly compare absorption from the lookup table with line-by-line calculations for strategically selected conditions (in-between the lookup table grid points).

Produces no workspace output, only output to the output streams.

Author:
Stefan Buehler
Parameters:
[in] abs_lookup WS Input
[in] abs_lookup_is_adapted WS Input
[in] abs_p_interp_order WS Input
[in] abs_t_interp_order WS Input
[in] abs_nls_interp_order WS Input
[in] abs_n2 WS Input
[in] abs_lines_per_species WS Input
[in] abs_lineshape WS Input
[in] abs_cont_names WS Input
[in] abs_cont_models WS Input
[in] abs_cont_parameters WS Input

Definition at line 2153 of file m_abs_lookup.cc.


Member Data Documentation

The species tags for which the table is valid.

Definition at line 136 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), calc_lookup_error(), Extract(), xml_read_from_stream(), and xml_write_to_stream().

The species tags with non-linear treatment.

This is the list of species for which the H2O VMR should be varied when calculating the lookup table. This must be inside the range of species. If nonlinear_species is an empty vector, it means that all species should be treated linearly. (No absorption for perturbed species profiles is stored.)

Definition at line 145 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), Extract(), xml_read_from_stream(), and xml_write_to_stream().

The frequency grid [Hz].

Must be sorted in ascending order.

Definition at line 149 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), Adapt(), calc_lookup_error(), Extract(), GetFgrid(), xml_read_from_stream(), and xml_write_to_stream().

The pressure grid for the table [Pa].

Must be sorted in decreasing order.

Definition at line 153 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), Extract(), GetPgrid(), xml_read_from_stream(), and xml_write_to_stream().

The natural log of the pressure grid.

This is not stored with the table, it is calculated by the abs_lookupAdapt method.

We are interpolating the cross sections in log(p). Storing this with the table avoids having to calculate it over and over again.

Definition at line 161 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), and Extract().

The reference VMR profiles.

The VMRs for all species, associated with p_grid. Dimension: [n_species, n_p_grid]. These VMRs are needed to scale the absorption coefficient to other VMRs. We are never working with "absorption cross-sections", always with real absorption coefficients, so we have to remember the associated VMR values.

Physical unit: Absolute value.

Definition at line 171 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), Extract(), xml_read_from_stream(), and xml_write_to_stream().

The reference temperature profile [K].

This is a temperature profile. The dimension must be the same as p_grid.

Definition at line 176 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), Extract(), xml_read_from_stream(), and xml_write_to_stream().

The vector of temperature perturbations [K].

This can have any number of elements. Example: [-20,-10,0,10,20]. The actual temperatures for which absorption is stored are t_ref + t_pert for each level. The reference temperature itself should normally also be included, hence t_pert should always include 0. Must be sorted in ascending order!

The vector t_pert may be an empty vector (nelem()=0), which marks the special case that no interpolation in temperature should be done. If t_pert is not empty, you will get an error message if you try to extract absorption for temperatures outside the range of t_pert.

Definition at line 190 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), Extract(), xml_read_from_stream(), and xml_write_to_stream().

The vector of perturbations for the VMRs of the nonlinear species.

These apply to all the species that have been set as nonlinear_species.

Fractional units are used! Example: [0,.5,1,10,100], meaning from VMR 0 to 100 times the profile given in abs_vmrs. The reference value should normally be included, hence nls_pert should always include the value 1.

If nonlinear_species is an empty vector, it means that there are no nonlinear species. Then nls_pert must also be an empty vector.

Definition at line 205 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), abs_lookupTestAccuracy(), Adapt(), Extract(), xml_read_from_stream(), and xml_write_to_stream().

Absorption cross sections.

Physical unit: m^2

Attention:
We want to interpolate these beasts in pressure. To keep interpolation errors small it is better to store cross-sections, not coefficients. The absorption coefficient alpha is given by alpha = xsec * n, where n is the number density.
Dimension: [ a, b, c, d ]

Simplest case (no temperature perturbations, no vmr perturbations):
a = 1
b = n_species
c = n_f_grid
d = n_p_grid

Standard case (temperature perturbations, but no vmr perturbations):
a = n_t_pert
b = n_species
c = n_f_grid
d = n_p_grid

Full case (with temperature perturbations and vmr perturbations):
a = n_t_pert
b = n_species + n_nonlinear_species * ( n_nls_pert - 1 )
c = n_f_grid
d = n_p_grid

Note that the last three dimensions are identical to the dimensions of abs_per_tg in ARTS-1-0. This should simplify computation of the lookup table with this old ARTS version.

Definition at line 239 of file gas_abs_lookup.h.

Referenced by abs_lookupCreate(), Adapt(), Extract(), xml_read_from_stream(), and xml_write_to_stream().


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

Generated on Mon Mar 23 14:06:59 2009 for ARTS by  doxygen 1.5.6