ARTS  2.4.0(git:4fb77825)
m_cia.cc
Go to the documentation of this file.
1 /* Copyright (C) 2012 Oliver Lemke <olemke@core-dump.info> and Stefan
2  Buehler <sbuehler@ltu.se>.
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License as published by the
6  Free Software Foundation; either version 2, or (at your option) any
7  later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17  USA. */
18 
29 #include "absorption.h"
30 #include "arts.h"
31 #include "auto_md.h"
32 #include "cia.h"
33 #include "file.h"
34 #include "messages.h"
35 #include "physics_funcs.h"
36 #include "xml_io.h"
37 
38 extern const Numeric SPEED_OF_LIGHT;
39 
40 /* Workspace method: Doxygen documentation will be auto-generated */
41 void abs_xsec_per_speciesAddCIA( // WS Output:
44  // WS Input:
48  const Vector& f_grid,
49  const Vector& abs_p,
50  const Vector& abs_t,
51  const Matrix& abs_vmrs,
53  // WS Generic Input:
54  const Numeric& T_extrapolfac,
55  const Index& robust,
56  // Verbosity object:
57  const Verbosity& verbosity) {
59 
60  {
61  // Check that all parameters that should have the number of tag
62  // groups as a dimension are consistent:
63  const Index n_tgs = abs_species.nelem();
64  const Index n_xsec = abs_xsec_per_species.nelem();
65  const Index nr_vmrs = abs_vmrs.nrows();
66  // const Index n_cia = abs_cia_data.nelem();
67 
68  if (n_tgs != n_xsec || n_tgs != nr_vmrs) // ||
69  // n_tgs != n_cia)
70  {
71  ostringstream os;
72  os << "The following variables must all have the same dimension:\n"
73  << "abs_species: " << n_tgs << "\n"
74  << "abs_xsec_per_species: " << n_xsec << "\n"
75  << "abs_vmrs.nrows: " << nr_vmrs << "\n";
76  // << "abs_cia_data: " << n_cia;
77  throw runtime_error(os.str());
78  }
79  }
80 
81  // Jacobian overhead START
82  /* NOTE: The calculations below are inefficient and could
83  be made much better by using interp in Extract to
84  return the derivatives as well. */
85  const bool do_jac = supports_CIA(jacobian_quantities);
86  const bool do_freq_jac = do_frequency_jacobian(jacobian_quantities);
87  const bool do_temp_jac = do_temperature_jacobian(jacobian_quantities);
88  Vector dfreq, dabs_t;
91  const ArrayOfIndex jacobian_quantities_position =
93 
94  if (do_freq_jac) {
95  dfreq = f_grid;
96  dfreq += df;
97  }
98  if (do_temp_jac) {
99  dabs_t.resize(abs_t.nelem());
100  dabs_t = abs_t;
101  dabs_t += dt;
102  }
103  // Jacobian overhead END
104 
105  // Useful if there is no Jacobian to calculate
106  ArrayOfMatrix empty;
107 
108  {
109  // Check that all parameters that should have the the dimension of p_grid
110  // are consistent:
111  const Index n_p = abs_p.nelem();
112  const Index n_t = abs_t.nelem();
113  const Index nc_vmrs = abs_vmrs.ncols();
114 
115  if (n_p != n_t || n_p != nc_vmrs) {
116  ostringstream os;
117  os << "The following variables must all have the same dimension:\n"
118  << "abs_p: " << n_p << "\n"
119  << "abs_t: " << n_t << "\n"
120  << "abs_vmrs.ncols: " << nc_vmrs;
121  throw runtime_error(os.str());
122  }
123  }
124 
125  // Allocate a vector with dimension frequencies for constructing our
126  // cross-sections before adding them (more efficient to allocate this here
127  // outside of the loops)
128  Vector xsec_temp(f_grid.nelem());
129 
130  // Jacobian vectors START
131  Vector dxsec_temp_dT;
132  Vector dxsec_temp_dF;
133  if (do_freq_jac) dxsec_temp_dF.resize(f_grid.nelem());
134  if (do_temp_jac) dxsec_temp_dT.resize(f_grid.nelem());
135  // Jacobian vectors END
136 
137  // Loop over CIA data sets.
138  // Index ii loops through the outer array (different tag groups),
139  // index s through the inner array (different tags within each goup).
140  for (Index ii = 0; ii < abs_species_active.nelem(); ii++) {
141  const Index i = abs_species_active[ii];
142 
143  for (Index s = 0; s < abs_species[i].nelem(); s++) {
144  const SpeciesTag& this_species = abs_species[i][s];
145 
146  // Check if this is a CIA tag
147  if (this_species.Type() != SpeciesTag::TYPE_CIA) continue;
148 
149  // Get convenient references of this CIA data record and this
150  // absorption cross-section record:
151  Index this_cia_index = cia_get_index(
152  abs_cia_data, this_species.Species(), this_species.CIASecond());
153 
154  assert(this_cia_index != -1);
155 
156  const CIARecord& this_cia = abs_cia_data[this_cia_index];
157  Matrix& this_xsec = abs_xsec_per_species[i];
158 
159  if (out2.sufficient_priority()) {
160  // Some nice output to out2:
161  out2 << " CIA Species found: " + this_species.Name() + "\n";
162  }
163 
164  // Check that the dimension of this_xsec is
165  // consistent with abs_p and f_grid.
166  if (this_xsec.nrows() != f_grid.nelem()) {
167  ostringstream os;
168  os << "Wrong dimension of abs_xsec_per_species.nrows for species " << i
169  << ":\n"
170  << "should match f_grid (" << f_grid.nelem() << ") but is "
171  << this_xsec.nrows() << ".";
172  throw runtime_error(os.str());
173  }
174  if (this_xsec.ncols() != abs_p.nelem()) {
175  ostringstream os;
176  os << "Wrong dimension of abs_xsec_per_species.ncols for species " << i
177  << ":\n"
178  << "should match abs_p (" << abs_p.nelem() << ") but is "
179  << this_xsec.ncols() << ".";
180  throw runtime_error(os.str());
181  }
182 
183  // Find out index of VMR for the second CIA species.
184  // (The index for the first species is simply i.)
185  Index i_sec = find_first_species_tg(abs_species, this_cia.Species(1));
186 
187  // Catch the case that the VMR for the second species does not exist:
188  if (i_sec < 0) {
189  ostringstream os;
190  os << "VMR profile for second species in CIA species pair does not exist.\n"
191  << "Tag " << this_species.Name() << " needs a VMR profile of "
192  << this_cia.MoleculeName(1) << "!";
193  throw runtime_error(os.str());
194  }
195 
196  // Loop over pressure:
197  for (Index ip = 0; ip < abs_p.nelem(); ip++) {
198  // Get the binary absorption cross sections from the CIA data:
199  try {
200  this_cia.Extract(xsec_temp,
201  f_grid,
202  abs_t[ip],
203  this_species.CIADataset(),
204  T_extrapolfac,
205  robust,
206  verbosity);
207  if (do_freq_jac)
208  this_cia.Extract(dxsec_temp_dF,
209  dfreq,
210  abs_t[ip],
211  this_species.CIADataset(),
212  T_extrapolfac,
213  robust,
214  verbosity);
215  if (do_temp_jac)
216  this_cia.Extract(dxsec_temp_dT,
217  f_grid,
218  dabs_t[ip],
219  this_species.CIADataset(),
220  T_extrapolfac,
221  robust,
222  verbosity);
223  } catch (const std::runtime_error& e) {
224  ostringstream os;
225  os << "Problem with CIA species " << this_species.Name() << ":\n"
226  << e.what();
227  throw runtime_error(os.str());
228  }
229 
230  // We have to multiply with the number density of the second CIA species.
231  // We do not have to multiply with the first, since we still
232  // want to return a (unary) absorption cross-section, not an
233  // absorption coefficient.
234 
235  // Calculate number density from pressure and temperature.
236  const Numeric n =
237  abs_vmrs(i_sec, ip) * number_density(abs_p[ip], abs_t[ip]);
238 
239  if (!do_jac) {
240  xsec_temp *= n;
241  // Add to result variable:
242  this_xsec(joker, ip) += xsec_temp;
243  } else {
244  const Numeric dn_dT =
245  abs_vmrs(i_sec, ip) * dnumber_density_dt(abs_p[ip], abs_t[ip]);
246 
247  for (Index iv = 0; iv < xsec_temp.nelem(); iv++) {
248  this_xsec(iv, ip) += n * xsec_temp[iv];
249  for (Index iq = 0; iq < jacobian_quantities_position.nelem();
250  iq++) {
252  jacobian_quantities[jacobian_quantities_position[iq]]))
253  dabs_xsec_per_species_dx[i][iq](iv, ip) +=
254  n * (dxsec_temp_dF[iv] - xsec_temp[iv]) / df;
255  else if (jacobian_quantities[jacobian_quantities_position[iq]] ==
256  JacPropMatType::Temperature)
257  dabs_xsec_per_species_dx[i][iq](iv, ip) +=
258  n * (dxsec_temp_dT[iv] - xsec_temp[iv]) / dt +
259  xsec_temp[iv] * dn_dT;
261  [jacobian_quantities_position[iq]],
262  this_species.BathSpecies()))
263  dabs_xsec_per_species_dx[i][iq](iv, ip) +=
264  number_density(abs_p[ip], abs_t[ip]) * xsec_temp[iv];
265  }
266  }
267  }
268  }
269  }
270  }
271 }
272 
273 /* Workspace method: Doxygen documentation will be auto-generated */
274 void CIARecordReadFromFile( // WS GOutput:
275  CIARecord& cia_record,
276  // WS Generic Input:
277  const String& species_tag,
278  const String& filename,
279  // Verbosity object:
280  const Verbosity& verbosity) {
281  SpeciesTag species(species_tag);
282 
283  if (species.Type() != SpeciesTag::TYPE_CIA) {
284  ostringstream os;
285  os << "Invalid species tag " << species_tag << ".\n"
286  << "This is not recognized as a CIA type.\n";
287  throw std::runtime_error(os.str());
288  }
289 
290  cia_record.SetSpecies(species.Species(), species.CIASecond());
291  cia_record.ReadFromCIA(filename, verbosity);
292 }
293 
294 /* Workspace method: Doxygen documentation will be auto-generated */
295 void abs_cia_dataAddCIARecord( // WS Output:
297  // WS GInput:
298  const CIARecord& cia_record,
299  const Index& clobber,
300  // WS Input:
301  const Verbosity&) {
302  Index cia_index =
303  cia_get_index(abs_cia_data, cia_record.Species(0), cia_record.Species(1));
304  if (cia_index == -1)
305  abs_cia_data.push_back(cia_record);
306  else if (clobber)
307  abs_cia_data[cia_index] = cia_record;
308  else
309  abs_cia_data[cia_index].AppendDataset(cia_record);
310 }
311 
312 /* Workspace method: Doxygen documentation will be auto-generated */
313 void abs_cia_dataReadFromCIA( // WS Output:
315  // WS Input:
317  const String& catalogpath,
318  const Verbosity& verbosity) {
319  ArrayOfString subfolders;
320  subfolders.push_back("Main-Folder/");
321  subfolders.push_back("Alternate-Folder/");
322 
323  abs_cia_data.resize(0);
324 
325  // Loop species tag groups to find CIA tags.
326  // Index sp loops through the tag groups, index iso through the tags within
327  // each group. Despite the name, iso does not denote the isotope!
328  for (Index sp = 0; sp < abs_species.nelem(); sp++) {
329  for (Index iso = 0; iso < abs_species[sp].nelem(); iso++) {
330  if (abs_species[sp][iso].Type() != SpeciesTag::TYPE_CIA) continue;
331 
332  ArrayOfString cia_names;
333 
334  Index cia_index = cia_get_index(abs_cia_data,
335  abs_species[sp][iso].Species(),
336  abs_species[sp][iso].CIASecond());
337 
338  // If cia_index is not -1, we have already read this datafile earlier
339  if (cia_index != -1) continue;
340 
341  cia_names.push_back(
343  "-" +
345 
346  cia_names.push_back(
348  "-" +
350 
351  ArrayOfString checked_dirs;
352 
353  bool found = false;
354  for (Index fname = 0; !found && fname < cia_names.nelem(); fname++) {
355  String cia_name = cia_names[fname];
356 
357  for (Index dir = 0; !found && dir < subfolders.nelem(); dir++) {
358  ArrayOfString files;
359  checked_dirs.push_back(catalogpath + "/" + subfolders[dir] +
360  cia_name + "/");
361  try {
362  list_directory(files, *(checked_dirs.end() - 1));
363  } catch (const std::runtime_error& e) {
364  continue;
365  }
366 
367  for (Index i = files.nelem() - 1; i >= 0; i--) {
368  if (files[i].find(cia_name) != 0 ||
369  files[i].rfind(".cia") != files[i].length() - 4) {
370  files.erase(files.begin() + i);
371  }
372  }
373  if (files.nelem()) {
374  CIARecord ciar;
375 
376  found = true;
377  String catfile = *(checked_dirs.end() - 1) + files[0];
378 
379  ciar.SetSpecies(abs_species[sp][iso].Species(),
380  abs_species[sp][iso].CIASecond());
381  ciar.ReadFromCIA(catfile, verbosity);
382 
383  abs_cia_data.push_back(ciar);
384  }
385  }
386  }
387 
388  if (!found) {
389  ostringstream os;
390  os << "Error: No data file found for CIA species " << cia_names[0]
391  << endl
392  << "Looked in directories: " << checked_dirs;
393 
394  throw runtime_error(os.str());
395  }
396  }
397  }
398 }
399 
400 /* Workspace method: Doxygen documentation will be auto-generated */
401 void abs_cia_dataReadFromXML( // WS Output:
403  // WS Input:
405  const String& filename,
406  const Verbosity& verbosity) {
408 
409  // Check that all CIA tags from abs_species are present in the
410  // XML file
411 
412  vector<String> missing_tags;
413 
414  // Loop species tag groups to find CIA tags.
415  // Index sp loops through the tag groups, index iso through the tags within
416  // each group. Despite the name, iso does not denote the isotope!
417  for (Index sp = 0; sp < abs_species.nelem(); sp++) {
418  for (Index iso = 0; iso < abs_species[sp].nelem(); iso++) {
419  if (abs_species[sp][iso].Type() != SpeciesTag::TYPE_CIA) continue;
420 
421  Index cia_index = cia_get_index(abs_cia_data,
422  abs_species[sp][iso].Species(),
423  abs_species[sp][iso].CIASecond());
424 
425  // If cia_index is -1, this CIA tag was not present in the input file
426  if (cia_index == -1) {
427  missing_tags.push_back(
429  "-" +
431  }
432  }
433  }
434 
435  if (missing_tags.size()) {
436  ostringstream os;
437  bool first = true;
438 
439  os << "Error: The following CIA tag(s) are missing in input file: ";
440  for (size_t i = 0; i < missing_tags.size(); i++) {
441  if (!first)
442  os << ", ";
443  else
444  first = false;
445  os << missing_tags[i];
446  }
447  throw runtime_error(os.str());
448  }
449 }
450 
451 /* Workspace method: Doxygen documentation will be auto-generated */
452 void CIAInfo( // Generic Input:
453  const String& catalogpath,
454  const ArrayOfString& cia_tags,
455  const Verbosity& verbosity) {
456  CREATE_OUT1;
457 
458  ArrayOfArrayOfSpeciesTag species_tags;
459 
460  for (Index i = 0; i < cia_tags.nelem(); i++) {
461  ArrayOfSpeciesTag this_species_tag;
462 
463  ArrayOfString species_names;
464 
465  cia_tags[i].split(species_names, "-");
466 
467  if (species_names.nelem() != 2) {
468  ostringstream os;
469  os << "ERROR: Cannot parse CIA tag: " << cia_tags[i];
470  throw runtime_error(os.str());
471  }
472 
473  this_species_tag.push_back(
474  SpeciesTag(species_names[0] + "-CIA-" + species_names[1] + "-0"));
475 
476  species_tags.push_back(this_species_tag);
477  }
478 
479  ArrayOfCIARecord cia_data;
480 
481  abs_cia_dataReadFromCIA(cia_data, species_tags, catalogpath, verbosity);
482 
483  Print(cia_data, 1, verbosity);
484 }
Matrix
The Matrix class.
Definition: matpackI.h:1193
SpeciesTag::CIADataset
Index CIADataset() const
CIA dataset index inside this CIA file.
Definition: abs_species_tags.h:115
CIARecord::Species
Index Species(const Index i) const
Return CIA species index.
Definition: cia.h:96
CIASecond
QuantumIdentifier::QType Index LowerQuantumNumbers Index Numeric CIASecond
Definition: arts_api_classes.cc:259
Print
void Print(Workspace &ws, const Agenda &x, const Index &level, const Verbosity &verbosity)
Definition: m_general.cc:76
auto_md.h
ARTS::Var::jacobian_quantities
ArrayOfRetrievalQuantity jacobian_quantities(Workspace &ws) noexcept
Definition: autoarts.h:3924
absorption.h
Declarations required for the calculation of absorption coefficients.
CIARecordReadFromFile
void CIARecordReadFromFile(CIARecord &cia_record, const String &species_tag, const String &filename, const Verbosity &verbosity)
WORKSPACE METHOD: CIARecordReadFromFile.
Definition: m_cia.cc:274
iso
void iso(Array< IsotopologueRecord >::iterator &ii, String name, const ArrayOfNumeric &coeff, const ArrayOfNumeric &temp_range, const Index &coefftype)
Initialize isotopologue and move iterator to next one.
Definition: partition_function_data.cc:1732
joker
const Joker joker
ARTS::Var::verbosity
Verbosity verbosity(Workspace &ws) noexcept
Definition: autoarts.h:7112
SpeciesTag::Name
String Name() const
Return the full name of the tag.
Definition: abs_species_tags.cc:336
temperature_perturbation
Numeric temperature_perturbation(const ArrayOfRetrievalQuantity &js) noexcept
Returns the temperature perturbation if it exists.
Definition: jacobian.cc:1304
SpeciesTag::BathSpecies
Index BathSpecies() const
Molecular species index.
Definition: abs_species_tags.h:70
SPEED_OF_LIGHT
const Numeric SPEED_OF_LIGHT
Vector::resize
void resize(Index n)
Resize function.
Definition: matpackI.cc:404
CIAInfo
void CIAInfo(const String &catalogpath, const ArrayOfString &cia_tags, const Verbosity &verbosity)
WORKSPACE METHOD: CIAInfo.
Definition: m_cia.cc:452
Species
QuantumIdentifier::QType Index LowerQuantumNumbers Species
Definition: arts_api_classes.cc:255
ConstMatrixView::nrows
Index nrows() const
Returns the number of rows.
Definition: matpackI.cc:429
do_temperature_jacobian
bool do_temperature_jacobian(const ArrayOfRetrievalQuantity &js) noexcept
Returns if the array wants the temperature derivative.
Definition: jacobian.cc:1279
ARTS::Var::abs_xsec_per_species
ArrayOfMatrix abs_xsec_per_species(Workspace &ws) noexcept
Definition: autoarts.h:2299
CIARecord::ReadFromCIA
void ReadFromCIA(const String &filename, const Verbosity &verbosity)
Read CIA catalog file.
Definition: cia.cc:316
frequency_perturbation
Numeric frequency_perturbation(const ArrayOfRetrievalQuantity &js) noexcept
Returns the frequency perturbation if it exists.
Definition: jacobian.cc:1312
CREATE_OUT1
#define CREATE_OUT1
Definition: messages.h:205
ARTS::Var::abs_vmrs
Matrix abs_vmrs(Workspace &ws) noexcept
Definition: autoarts.h:2267
Array
This can be used to make arrays out of anything.
Definition: array.h:108
SpeciesTag
A tag group can consist of the sum of several of these.
Definition: abs_species_tags.h:44
number_density
Numeric number_density(const Numeric &p, const Numeric &t)
number_density
Definition: physics_funcs.cc:219
xml_read_from_file
void xml_read_from_file(const String &filename, T &type, const Verbosity &verbosity)
Reads data from XML file.
Definition: xml_io.cc:901
species_name_from_species_index
String species_name_from_species_index(const Index spec_ind)
Return species name for given species index.
Definition: absorption.cc:569
messages.h
Declarations having to do with the four output streams.
ConstMatrixView::ncols
Index ncols() const
Returns the number of columns.
Definition: matpackI.cc:432
ARTS::Var::abs_cia_data
ArrayOfCIARecord abs_cia_data(Workspace &ws) noexcept
Definition: autoarts.h:1769
my_basic_string< char >
equivalent_propmattype_indexes
ArrayOfIndex equivalent_propmattype_indexes(const ArrayOfRetrievalQuantity &js)
Returns a list of positions for the derivatives in Propagation Matrix calculations.
Definition: jacobian.cc:1099
ConstVectorView::nelem
Index nelem() const
Returns the number of elements.
Definition: matpackI.cc:51
find_first_species_tg
Index find_first_species_tg(const ArrayOfArrayOfSpeciesTag &tgs, const Index &spec)
Find first occurrence of species in tag groups.
Definition: abs_species_tags.cc:532
physics_funcs.h
This file contains declerations of functions of physical character.
ARTS::Var::abs_species
ArrayOfArrayOfSpeciesTag abs_species(Workspace &ws) noexcept
Definition: autoarts.h:2157
abs_cia_dataAddCIARecord
void abs_cia_dataAddCIARecord(ArrayOfCIARecord &abs_cia_data, const CIARecord &cia_record, const Index &clobber, const Verbosity &)
WORKSPACE METHOD: abs_cia_dataAddCIARecord.
Definition: m_cia.cc:295
SpeciesTag::CIASecond
Index CIASecond() const
Species index of the 2nd CIA species.
Definition: abs_species_tags.h:109
Numeric
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
Verbosity
Definition: messages.h:49
do_frequency_jacobian
bool do_frequency_jacobian(const ArrayOfRetrievalQuantity &js) noexcept
Returns if the array wants a frequency derivative.
Definition: jacobian.cc:1296
ARTS::Var::f_grid
Vector f_grid(Workspace &ws) noexcept
Definition: autoarts.h:3449
abs_cia_dataReadFromCIA
void abs_cia_dataReadFromCIA(ArrayOfCIARecord &abs_cia_data, const ArrayOfArrayOfSpeciesTag &abs_species, const String &catalogpath, const Verbosity &verbosity)
WORKSPACE METHOD: abs_cia_dataReadFromCIA.
Definition: m_cia.cc:313
LineShape::Type
Type
Type of line shape to compute.
Definition: lineshapemodel.h:788
list_directory
void list_directory(ArrayOfString &files, String dirname)
Return list of files in directory.
Definition: file.cc:543
ARTS::Var::abs_t
Vector abs_t(Workspace &ws) noexcept
Definition: autoarts.h:2186
abs_xsec_per_speciesAddCIA
void abs_xsec_per_speciesAddCIA(ArrayOfMatrix &abs_xsec_per_species, ArrayOfArrayOfMatrix &dabs_xsec_per_species_dx, const ArrayOfArrayOfSpeciesTag &abs_species, const ArrayOfRetrievalQuantity &jacobian_quantities, const ArrayOfIndex &abs_species_active, const Vector &f_grid, const Vector &abs_p, const Vector &abs_t, const Matrix &abs_vmrs, const ArrayOfCIARecord &abs_cia_data, const Numeric &T_extrapolfac, const Index &robust, const Verbosity &verbosity)
WORKSPACE METHOD: abs_xsec_per_speciesAddCIA.
Definition: m_cia.cc:41
ARTS::Var::abs_species_active
ArrayOfIndex abs_species_active(Workspace &ws) noexcept
Definition: autoarts.h:2170
dnumber_density_dt
Numeric dnumber_density_dt(const Numeric &p, const Numeric &t)
dnumber_density_dT
Definition: physics_funcs.cc:243
CIARecord
CIA data for a single pair of molecules.
Definition: cia.h:67
supports_CIA
bool supports_CIA(const ArrayOfRetrievalQuantity &js)
Returns if the array supports CIA derivatives.
Definition: jacobian.cc:1200
CIARecord::SetSpecies
void SetSpecies(const Index first, const Index second)
Set CIA species.
Definition: cia.h:147
file.h
This file contains basic functions to handle ASCII files.
Index
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
ARTS::Var::abs_p
Vector abs_p(Workspace &ws) noexcept
Definition: autoarts.h:2129
ARTS::Var::dabs_xsec_per_species_dx
ArrayOfArrayOfMatrix dabs_xsec_per_species_dx(Workspace &ws) noexcept
Definition: autoarts.h:2986
SpeciesTag::TYPE_CIA
@ TYPE_CIA
Definition: abs_species_tags.h:151
CIARecord::MoleculeName
String MoleculeName(const Index i) const
Return each molecule name (as a string) that is associated with this CIARecord.
Definition: cia.cc:277
is_frequency_parameter
bool is_frequency_parameter(const RetrievalQuantity &t) noexcept
Returns if the Retrieval quantity is a frequency parameter in propagation matrix calculations.
Definition: jacobian.cc:1120
Vector
The Vector class.
Definition: matpackI.h:860
CIARecord::Extract
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.
Definition: cia.cc:249
SpeciesTag::Type
Index Type() const
Return the type of this tag.
Definition: abs_species_tags.h:160
cia_get_index
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.
Definition: cia.cc:237
SpeciesTag::Species
Index Species() const
Molecular species index.
Definition: abs_species_tags.h:64
species_match
bool species_match(const RetrievalQuantity &rq, const ArrayOfSpeciesTag &ast)
Returns if the Retrieval quantity is VMR derivative for all the species in the species tags.
Definition: jacobian.cc:1244
Array::nelem
Index nelem() const
Number of elements.
Definition: array.h:195
cia.h
Header file for work with HITRAN collision induced absorption (CIA).
CREATE_OUTS
#define CREATE_OUTS
Definition: messages.h:209
arts.h
The global header file for ARTS.
xml_io.h
This file contains basic functions to handle XML data files.
abs_cia_dataReadFromXML
void abs_cia_dataReadFromXML(ArrayOfCIARecord &abs_cia_data, const ArrayOfArrayOfSpeciesTag &abs_species, const String &filename, const Verbosity &verbosity)
WORKSPACE METHOD: abs_cia_dataReadFromXML.
Definition: m_cia.cc:401