66     assert(result.
nelem()==nf);
    72     if (out3.sufficient_priority())
    76         os   << 
"    f_grid:      " << f_grid[0] << 
" - "    77         << f_grid[nf-1] << 
" Hz\n"    78         << 
"    data_f_grid: " << data_f_grid[0] << 
" - "    79         << data_f_grid[data_f_grid.nelem()-1] << 
" Hz\n"    80         << 
"    temperature: " << temperature << 
" K\n"    81         << 
"    data_T_grid: " << data_T_grid[0] << 
" - "    82         << data_T_grid[data_T_grid.
nelem()-1] << 
" K\n";
    93     Index i_fstart, i_fstop;
    95     for (i_fstart=0; i_fstart<nf; ++i_fstart)
    96         if (f_grid[i_fstart] >= data_f_grid[0]) 
break;
    99     if (i_fstart==nf) 
return;
   101     for (i_fstop=nf-1; i_fstop>=0; --i_fstop)
   102         if (f_grid[i_fstop] <= data_f_grid[data_f_grid.nelem()-1]) 
break;
   105     if (i_fstop==-1) 
return;
   108     const Index f_extent = i_fstop-i_fstart+1;
   110     if (out3.sufficient_priority())
   113         os << 
"    " << f_extent << 
" frequency extraction points starting at "   114            << 
"frequency index " << i_fstart << 
".\n";
   121     if (f_extent < 1) 
return;
   132     const Index f_order = 3;
   136     if ( data_f_grid.nelem() < f_order+1 )
   139         os << 
"Not enough frequency grid points in CIA data.\n"   140            << 
"You have only " << data_f_grid.
nelem() << 
" grid points.\n"   141            << 
"But need at least " << f_order+1 << 
".";
   142         throw runtime_error(os.str());
   149     switch (data_T_grid.
nelem()) {
   179         } 
catch (runtime_error e) {
   187                 throw runtime_error(e.what());
   194     gridpos_poly(f_gp, data_f_grid, f_grid_active, f_order);
   201         Matrix itw(f_gp.nelem(),f_order+1);
   210         gridpos_poly(T_gp, data_T_grid, temperature, T_order, T_extrapolfac);
   213         Tensor3 itw(f_gp.nelem(),T_gp.nelem(),(f_order+1)*(T_order+1));
   226         interp(result_matrix, itw, cia_data.
data, f_gp, T_gp);
   236         if (result_active[i]<0)
   237             result_active[i] = 0;
   256         if ((cia_data[i].Species(0) == sp1 && cia_data[i].Species(1) ==  sp2)
   257             || (cia_data[i].Species(0) == sp2 && cia_data[i].Species(1) ==  sp1))
   268                         const Index&    dataset,
   281         os << 
"There are only " << 
mdata.
nelem() << 
" datasets in this CIA file.\n"   282            << 
"But you are trying to use dataset " << dataset << 
". (Zero-based indexing.)";
   283         throw runtime_error(os.str());
   328         os << 
"Species does not exist in ARTS: " << name;
   329         throw runtime_error(os.str());
   351     out2 << 
"  Reading file: " << filename << 
"\n";
   386         if (is.eof()) 
continue;
   388         if (line.
nelem() < 100)
   391             os << 
"Error in line " << nline
   392             << 
" reading CIA catalog file " << filename << endl
   393             << 
"Header line unexpectedly short: " << endl << line;
   395             throw runtime_error(os.str());
   401             os << 
"Error in line " << nline
   402             << 
" reading CIA catalog file " << filename << endl;
   404             throw runtime_error(os.str());
   417         istr >> set_wave_min >> set_wave_max >> set_npoints >> set_temp;
   419         if (!istr || isnan(set_temp) || isnan(set_wave_min) || isnan(set_wave_max))
   422             os << 
"Error in line " << nline
   423             << 
" reading CIA catalog file " << filename << endl;
   425             throw runtime_error(os.str());
   430         if (npoints == -1 || wave_min != set_wave_min || wave_max != set_wave_max)
   435             npoints = set_npoints;
   437             wave_min = set_wave_min;
   438             wave_max = set_wave_max;
   444         if (npoints != set_npoints)
   447             os << 
"Error in line " << nline
   448             << 
" reading CIA catalog file " << filename << endl
   449             << 
"Inconsistent number of data points. Expected " << npoints
   450             << 
", got " << set_npoints;
   452             throw runtime_error(os.str());
   455         temp.push_back(set_temp);
   456         cia.push_back(
Vector(npoints));
   460         for (
Index i = 0; i < npoints; i++)
   472             if (isnan(w) || isnan(c) || is.bad() || istr.bad())
   475                 os << 
"Error in line " << nline
   476                 << 
" reading CIA catalog file " << filename << 
":" << endl
   479                 throw runtime_error(os.str());
   487             cia[nset][i] = c / 1e10;
   496         os << 
"Error in line " << nline
   497         << 
" reading CIA catalog file " << filename << endl;
   499         throw runtime_error(os.str());
   531     mdata.push_back(dataset);
   545     os << 
"CIARecord output operator not yet implemented." << endl;
 INDEX Index
The type to use for all integer numbers and indices. 
 
Header file for work with HITRAN collision induced absorption (CIA). 
 
Index nelem() const
Number of elements. 
 
ConstVectorView get_numeric_grid(Index i) const
Get a numeric grid. 
 
Numeric interp(ConstVectorView itw, ConstVectorView a, const GridPos &tc)
Red 1D Interpolate. 
 
void ReadFromCIA(const String &filename, const Verbosity &verbosity)
Read CIA catalog file. 
 
ArrayOfGriddedField2 mdata
The data itself, directly from the HITRAN file. 
 
cmplx FADDEEVA() w(cmplx z, double relerr)
 
This file contains basic functions to handle ASCII files. 
 
Index nelem() const
Returns the number of elements. 
 
String species_name_from_species_index(const Index spec_ind)
Return species name for given species index. 
 
void Extract(VectorView result, ConstVectorView f_grid, const Numeric &temperature, const Index &dataset, const Numeric &T_extrapolfac, const Index &robust, const Verbosity &verbosity) const
Vector version of extract. 
 
void AppendDataset(const Vector &freq, const ArrayOfNumeric &temp, const ArrayOfVector &cia)
Append dataset to mdata. 
 
Index mspecies[2]
The pair of molecules associated with these CIA data. 
 
void set_grid(Index i, const Vector &g)
Set a numeric grid. 
 
void resize(const GriddedField2 &gf)
Make this GriddedField2 the same size as the given one. 
 
NUMERIC Numeric
The type to use for all floating point numbers. 
 
Index nelem() const
Number of elements. 
 
Declarations required for the calculation of absorption coefficients. 
 
void gridpos_poly(ArrayOfGridPosPoly &gp, ConstVectorView old_grid, ConstVectorView new_grid, const Index order, const Numeric &extpolfac)
Set up grid positions for higher order interpolation. 
 
void SetMoleculeName(const Index i, const String &name)
Set each molecule name (from a string) that is associated with this CIARecord. 
 
Index species_index_from_species_name(String name)
Return species index for given species name. 
 
void open_input_file(ifstream &file, const String &name)
Open a file for reading. 
 
Header file for interpolation_poly.cc. 
 
void resize(Index n)
Assignment operator from VectorView. 
 
A constant view of a Vector. 
 
String MoleculeName(const Index i) const
Return each molecule name (as a string) that is associated with this CIARecord. 
 
void set_grid_name(Index i, const String &s)
Set grid name. 
 
CIA data for a single pair of molecules. 
 
Index cia_get_index(const ArrayOfCIARecord &cia_data, const Index sp1, const Index sp2)
Get the index in cia_data for the two given species. 
 
ostream & operator<<(ostream &os, const CIARecord &)
Output operator for CIARecord. 
 
void interpweights(VectorView itw, const GridPos &tc)
Red 1D interpolation weights. 
 
void cia_interpolation(VectorView result, ConstVectorView f_grid, const Numeric &temperature, const GriddedField2 &cia_data, const Numeric &T_extrapolfac, const Index &robust, const Verbosity &verbosity)
Interpolate CIA data. 
 
const Numeric SPEED_OF_LIGHT