ARTS  2.3.1285(git:92a29ea9-dirty)
methods.cc
Go to the documentation of this file.
1 /* Copyright (C) 2000-2012
2  Stefan Buehler <sbuehler@uni-bremen.de>
3  Patrick Eriksson <patrick.eriksson@chalmers.se>
4  Oliver Lemke <olemke@ltu.se>
5 
6  This program is free software; you can redistribute it and/or modify it
7  under the terms of the GNU General Public License as published by the
8  Free Software Foundation; either version 2, or (at your option) any
9  later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19  USA. */
20 
33 #include <array>
34 #include "methods.h"
35 #include "arts.h"
36 #include "wsv_aux.h"
37 
38 namespace global_data {
40 extern const ArrayOfString wsv_group_names;
41 } // namespace global_data
42 
43 template <typename ... T>
44 std::array<String, sizeof...(T)> string_array(const T&... input)
45 {
46  return {String(input)...};
47 }
48 
49 template <size_t LEN_OF_NAME,
50  size_t LEN_OF_DESCRIPTION,
51  size_t NUM_OF_AUTHORS,
52  size_t NUM_OF_OUTPUTS,
53  size_t NUM_OF_GOUT_ARGS,
54  size_t NUM_OF_GOUT_TYPES,
55  size_t NUM_OF_GOUT_DESCRIPTIONS,
56  size_t NUM_OF_INPUTS,
57  size_t NUM_OF_GIN_ARGS,
58  size_t NUM_OF_GIN_TYPES,
59  size_t NUM_OF_GIN_DEFAULTS,
60  size_t NUM_OF_GIN_DESCRIPTIONS,
61  typename ... Ts>
63  const char (&name) [LEN_OF_NAME],
64  const char (&description) [LEN_OF_DESCRIPTION],
65  const std::array<String, NUM_OF_AUTHORS>& authors,
66  const std::array<String, NUM_OF_OUTPUTS>& output,
67  const std::array<String, NUM_OF_GOUT_ARGS>& gout,
68  const std::array<String, NUM_OF_GOUT_TYPES>& gouttype,
69  const std::array<String, NUM_OF_GOUT_DESCRIPTIONS>& goutdesc,
70  const std::array<String, NUM_OF_INPUTS>& input,
71  const std::array<String, NUM_OF_GIN_ARGS>& gin,
72  const std::array<String, NUM_OF_GIN_TYPES>& gintype,
73  const std::array<String, NUM_OF_GIN_DEFAULTS>& gindefault,
74  const std::array<String, NUM_OF_GIN_DESCRIPTIONS>& gindesc,
75  Ts ... flags)
76 {
77  static_assert(LEN_OF_NAME > 1, "Must have a name");
78  static_assert(LEN_OF_DESCRIPTION > 1, "Must have a description");
79  static_assert(NUM_OF_AUTHORS not_eq 0, "Must have at least one author");
80  static_assert(NUM_OF_GOUT_ARGS == NUM_OF_GOUT_TYPES, "GOUT type(s) count does not match number of GOUT");
81  static_assert(NUM_OF_GOUT_ARGS == NUM_OF_GOUT_DESCRIPTIONS, "GOUT description(s) count does not match number of GOUT");
82  static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_TYPES, "GIN type(s) count does not match number of GIN");
83  static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_DEFAULTS, "GIN default(s) count does not match number of GIN");
84  static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_DESCRIPTIONS, "GIN description(s) count does not match number of GIN");
85 
86  return MdRecord(name,
87  description,
88  ArrayOfString(authors),
89  ArrayOfString(output),
90  ArrayOfString(gout),
91  ArrayOfString(gouttype),
92  ArrayOfString(goutdesc),
93  ArrayOfString(input),
94  ArrayOfString(gin),
95  ArrayOfString(gintype),
96  ArrayOfString(gindefault),
97  ArrayOfString(gindesc),
98  bool(flags) ...);
99 }
100 
101 // Some #defines and typedefs to make the records better readable:
102 #define NAME(x) x
103 #define DESCRIPTION(x) x
104 #define AUTHORS(...) \
105  string_array( __VA_ARGS__ )
106 #define OUT(...) \
107  string_array( __VA_ARGS__ )
108 #define GOUT(...) \
109  string_array( __VA_ARGS__ )
110 #define GOUT_TYPE(...) \
111  string_array( __VA_ARGS__ )
112 #define GOUT_DESC(...) \
113  string_array( __VA_ARGS__ )
114 #define IN(...) \
115  string_array( __VA_ARGS__ )
116 #define GIN(...) \
117  string_array( __VA_ARGS__ )
118 #define GIN_TYPE(...) \
119  string_array( __VA_ARGS__ )
120 #define GIN_DEFAULT(...) \
121  string_array( __VA_ARGS__ )
122 #define GIN_DESC(...) \
123  string_array( __VA_ARGS__ )
124 #define SETMETHOD(x) x
125 #define AGENDAMETHOD(x) x
126 #define USES_TEMPLATES(x) x
127 #define PASSWORKSPACE(x) x
128 #define PASSWSVNAMES(x) x
129 
130 /* Here's a template record entry: (PE 2008-09-20)
131 
132  md_data_raw.push_back
133  ( create_mdrecord
134  ( NAME( "MethodName" ),
135  DESCRIPTION
136  (
137  "A concise summary of the method.\n"
138  "\n"
139  "A more detailed description of the method. Try to describe the\n"
140  "purpose of the method and important considerations. Try to avoid\n"
141  "references to other WSMs as they might change. Refer to the user\n"
142  "guide for more complex information (as long as it exists, or that\n"
143  "you add it to AUG!).\n"
144  "\n"
145  "You do not need to describe workspace variables used. That\n"
146  "information is found in workspace.cc. Generic\n"
147  "output and input variables must be described in GIN_DESC and\n"
148  "GOUT_DESC below.\n"
149  ),
150  AUTHORS( "Your Name" ),
151  OUT(),
152  GOUT(),
153  GOUT_TYPE(),
154  GOUT_DESC(),
155  IN(),
156  GIN( "descriptive_name_for_generic_input1" ),
157  GIN_TYPE( "GenericInput1Type" ),
158  GIN_DEFAULT( NODEF ),
159  GIN_DESC( "Description for Generic Input Variable 1" )
160  ));
161 
162  For variable descriptions longer than one line, use the following format.
163  Don't forget to remove the space in '/ *' and '* /' if you copy this template.
164  I had to put it in there because C++ doesn't allow nested comments.
165 
166  md_data_raw.push_back
167  ( create_mdrecord
168  ( NAME( "MethodName" ),
169  ...
170  ...
171  ...
172  GIN( gin_var1, gin_var2, gin_var3 )
173  GIN_TYPE( "GInput1Type", "GInput2Type", "GInput3Type" ),
174  GIN_DEFAULT( NODEF ),
175  GIN_DESC( / * gin_var1 * /
176  "Long description for Generic Input Variable 1 "
177  "which can span multiple lines like for example "
178  "this one. Don't put any \n in the variable descriptions.",
179  / * gin_var2 * /
180  "Long description for Generic Input Variable 2 "
181  "which can span multiple lines like for example "
182  "this one. Don't put any \n in the variable descriptions.",
183  / * gin_var3 * /
184  "Long description for Generic Input Variable 3 "
185  "which can span multiple lines like for example "
186  "this one. Don't put any \n in the variable descriptions."
187  )
188 
189 */
190 
192  // The variable md_data is defined in file methods_aux.cc.
194 
195  // Initialise to zero, just in case:
196  md_data_raw.resize(0);
197 
198  // String with all array groups
199  const String ARRAY_GROUPS = get_array_groups_as_string();
200  // String with all groups that also exist as an array type
201  const String GROUPS_WITH_ARRAY_TYPE = get_array_groups_as_string(true, true);
202  // String with all array types whose element type is also available as a group
203  const String ARRAY_GROUPS_WITH_BASETYPE =
204  get_array_groups_as_string(true, false);
205 
207 
208  for (ArrayOfString::const_iterator it = wsv_group_names.begin();
209  it != wsv_group_names.end();
210  it++) {
211  if (*it != "Any") {
212  md_data_raw.push_back(MdRecord(
213  NAME(String(*it + "Create").c_str()),
214  DESCRIPTION(
215  String("Creates a variable of group " + *it +
216  ".\n"
217  "\n"
218  "After being created, the variable is uninitialized.\n")
219  .c_str()),
220  ArrayOfString(AUTHORS("Oliver Lemke")),
221  ArrayOfString(OUT()),
222  ArrayOfString(GOUT("out")),
223  ArrayOfString(GOUT_TYPE((*it).c_str())),
224  ArrayOfString(GOUT_DESC("Variable to create.")),
225  ArrayOfString(IN()),
226  ArrayOfString(GIN()),
229  ArrayOfString(GIN_DESC())));
230  }
231  }
232 
234  // Let's put in the functions in alphabetical order. This gives a clear rule
235  // for where to place a new function and this gives a nicer results when
236  // the functions are listed by "arts -m all".
237  // No distinction is made between uppercase and lowercase letters.
238  // Patrick Eriksson 2002-05-08
240 
241  md_data_raw.push_back(create_mdrecord(
242  NAME("AbsInputFromAtmFields"),
243  DESCRIPTION("Initialises the WSVs *abs_p*, *abs_t* and *abs_vmrs* from\n"
244  "*p_grid, *t_field* and *vmr_field*.\n"
245  "\n"
246  "This only works for a 1D atmosphere!\n"),
247  AUTHORS("Stefan Buehler"),
248  OUT("abs_p", "abs_t", "abs_vmrs"),
249  GOUT(),
250  GOUT_TYPE(),
251  GOUT_DESC(),
252  IN("atmosphere_dim", "p_grid", "t_field", "vmr_field"),
253  GIN(),
254  GIN_TYPE(),
255  GIN_DEFAULT(),
256  GIN_DESC()));
257 
258  md_data_raw.push_back(create_mdrecord(
259  NAME("AbsInputFromRteScalars"),
260  DESCRIPTION(
261  "Initialize absorption input WSVs from local atmospheric conditions.\n"
262  "\n"
263  "The purpose of this method is to allow an explicit line-by-line\n"
264  "calculation, e.g., by *abs_coefCalcFromXsec*, to be put inside the\n"
265  "*propmat_clearsky_agenda*. What the method does is to prepare absorption\n"
266  "input parameters (pressure, temperature, VMRs), from the input\n"
267  "parameters to *propmat_clearsky_agenda*.\n"),
268  AUTHORS("Stefan Buehler"),
269  OUT("abs_p", "abs_t", "abs_vmrs"),
270  GOUT(),
271  GOUT_TYPE(),
272  GOUT_DESC(),
273  IN("rtp_pressure", "rtp_temperature", "rtp_vmr"),
274  GIN(),
275  GIN_TYPE(),
276  GIN_DEFAULT(),
277  GIN_DESC()));
278 
279  md_data_raw.push_back(create_mdrecord(
280  NAME("abs_cia_dataAddCIARecord"),
281  DESCRIPTION(
282  "Takes CIARecord as input and appends the results in the appropriate place.\n"
283  "\n"
284  "If CIARecord has same species as species in *abs_cia_data*, then the array\n"
285  "position is used to append all of the CIARecord into the array. If clobber\n"
286  "evaluates as true, cia_record overwrites the appropriate *abs_cia_data*. If\n"
287  "species in cia_record are not in *abs_cia_data*, the CIARecord is pushed back.\n"),
288  AUTHORS("Richard Larsson"),
289  OUT("abs_cia_data"),
290  GOUT(),
291  GOUT_TYPE(),
292  GOUT_DESC(),
293  IN("abs_cia_data"),
294  GIN("cia_record", "clobber"),
295  GIN_TYPE("CIARecord", "Index"),
296  GIN_DEFAULT(NODEF, "0"),
297  GIN_DESC("CIA record to append to *abs_cia_data*.",
298  "If true, the new input clobbers the old cia data.")));
299 
300  md_data_raw.push_back(create_mdrecord(
301  NAME("abs_cia_dataReadFromCIA"),
302  DESCRIPTION(
303  "Read data from a CIA data file for all CIA molecules defined\n"
304  "in *abs_species*.\n"
305  "\n"
306  "The units in the HITRAN file are:\n"
307  "Frequency: cm^(-1)\n"
308  "Binary absorption cross-section: cm^5 molec^(-2)\n"
309  "\n"
310  "Upon reading we convert this to the ARTS internal SI units \n"
311  "of Hz and m^5 molec^(-2).\n"),
312  AUTHORS("Oliver Lemke"),
313  OUT("abs_cia_data"),
314  GOUT(),
315  GOUT_TYPE(),
316  GOUT_DESC(),
317  IN("abs_species"),
318  GIN("catalogpath"),
319  GIN_TYPE("String"),
321  GIN_DESC("Path to the CIA catalog directory.")));
322 
323  md_data_raw.push_back(create_mdrecord(
324  NAME("abs_cia_dataReadFromXML"),
325  DESCRIPTION(
326  "Read data from a CIA XML file and check that all CIA tags defined\n"
327  "in *abs_species* are present in the file.\n"
328  "\n"
329  "The units of the data are described in *abs_cia_dataReadFromCIA*.\n"),
330  AUTHORS("Oliver Lemke"),
331  OUT("abs_cia_data"),
332  GOUT(),
333  GOUT_TYPE(),
334  GOUT_DESC(),
335  IN("abs_species"),
336  GIN("filename"),
337  GIN_TYPE("String"),
338  GIN_DEFAULT(""),
339  GIN_DESC("Name of the XML file.")));
340 
341  md_data_raw.push_back(create_mdrecord(
342  NAME("abs_coefCalcFromXsec"),
343  DESCRIPTION("Calculate absorption coefficients from cross sections.\n"
344  "\n"
345  "This calculates both the total absorption and the\n"
346  "absorption per species.\n"
347  "\n"
348  "Cross sections are multiplied by n*VMR.\n"),
349  AUTHORS("Stefan Buehler", "Axel von Engeln"),
350  OUT("abs_coef",
351  "src_coef",
352  "dabs_coef_dx",
353  "dsrc_coef_dx",
354  "abs_coef_per_species",
355  "src_coef_per_species"),
356  GOUT(),
357  GOUT_TYPE(),
358  GOUT_DESC(),
359  IN("abs_xsec_per_species",
360  "src_xsec_per_species",
361  "dabs_xsec_per_species_dx",
362  "dsrc_xsec_per_species_dx",
363  "abs_species",
364  "jacobian_quantities",
365  "abs_vmrs",
366  "abs_p",
367  "abs_t"),
368  GIN(),
369  GIN_TYPE(),
370  GIN_DEFAULT(),
371  GIN_DESC()));
372 
373  md_data_raw.push_back(create_mdrecord(
374  NAME("abs_cont_descriptionAppend"),
375  DESCRIPTION(
376  "Appends the description of a continuum model or a complete absorption\n"
377  "model to *abs_cont_names* and *abs_cont_parameters*.\n"
378  "\n"
379  "See online documentation for *abs_cont_names* for a list of\n"
380  "allowed models and for information what parameters they require. See\n"
381  "file includes/continua.arts for default parameters for the various models.\n"),
382  AUTHORS("Thomas Kuhn", "Stefan Buehler"),
383  OUT("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
384  GOUT(),
385  GOUT_TYPE(),
386  GOUT_DESC(),
387  IN("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
388  GIN("tagname", "model", "userparam"),
389  GIN_TYPE("String", "String", "Vector"),
390  GIN_DEFAULT(NODEF, NODEF, "[]"),
391  GIN_DESC(
392  "The name (species tag) of a continuum model. Must match one\n"
393  "of the models implemented in ARTS.\n",
394  "A string selecting a particular continuum/full model under this\n"
395  "species tag.\n",
396  "A Vector containing the required parameters for the selected model.\n"
397  "The meaning of the parameters and how many parameters are required\n"
398  "depends on the model.\n")));
399 
400  md_data_raw.push_back(create_mdrecord(
401  NAME("abs_cont_descriptionInit"),
402  DESCRIPTION(
403  "Initializes the two workspace variables for the continuum description,\n"
404  "*abs_cont_names* and *abs_cont_parameters*.\n"
405  "\n"
406  "This method does not really do anything, except setting the two\n"
407  "variables to empty Arrays. It is just necessary because the method\n"
408  "*abs_cont_descriptionAppend* wants to append to the variables.\n"
409  "\n"
410  "Formally, the continuum description workspace variables are required\n"
411  "by the absorption calculation methods (e.g., *abs_coefCalcFromXsec*). Therefore you\n"
412  "always have to call at least *abs_cont_descriptionInit*, even if you do\n"
413  "not want to use any continua.\n"),
414  AUTHORS("Thomas Kuhn", "Stefan Buehler"),
415  OUT("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
416  GOUT(),
417  GOUT_TYPE(),
418  GOUT_DESC(),
419  IN(),
420  GIN(),
421  GIN_TYPE(),
422  GIN_DEFAULT(),
423  GIN_DESC()));
424 
425  md_data_raw.push_back(create_mdrecord(
426  NAME("abs_hitran_relmat_dataReadHitranRelmatDataAndLines"),
427  DESCRIPTION("Reads HITRAN line mixing data from a basedir\n"
428  "The basedir must point at line mixing data as provided by HITRAN.\n"
429  "The lines will be changed such that ALL CO2 lines are truncated\n"
430  "before adding the HITRAN line mixing lines.\n"
431  "\n"
432  "The available modes are such that \"VP*\" uses Voigt profiles and\n"
433  "\"SDVP*\" uses speed-dependent Voigt profiles, where the \"_Y\"\n"
434  "signifies if Rosenkranz-style line mixing is considered or not, and\n"
435  "the \"W\" at the end signifies that full calculations are used. At\n"
436  "the line mixing limit, line mixing is simply turned off.\n"
437  "\n"
438  "The \"FullW\" mode uses Lorentzian calculations with the full relaxation\n"
439  "matrix until the line mixing limit is reached and it switches to Voigt.\n"
440  "\n"
441  "The HITRAN LM data is available for download at:\n"
442  "https://hitran.org/supplementary/\n"
443  ),
444  AUTHORS("Richard Larsson"),
445  OUT("abs_hitran_relmat_data", "abs_lines_per_species"),
446  GOUT(),
447  GOUT_TYPE(),
448  GOUT_DESC(),
449  IN("abs_lines_per_species", "abs_species"),
450  GIN("basedir", "linemixinglimit", "fmin", "fmax", "stot", "mode"),
451  GIN_TYPE("String", "Numeric", "Numeric", "Numeric", "Numeric", "String"),
452  GIN_DEFAULT(NODEF, "-1", "0", "1e99", "0", "VP_W"),
453  GIN_DESC("Direcory where the linemixing data is to be found",
454  "Line mixing limit as defined by *AbsorptionLines*",
455  "Minimum frequency to read from",
456  "Maximum frequency to read until",
457  "Minimum integrated band strength to consider",
458  "Mode of calculations. The options are: \"VP\", \"VP_Y\", \"SDVP\", \"SDVP_Y\", \"FullW\", and \"VP_W\""
459  )));
460 
461  md_data_raw.push_back(create_mdrecord(
462  NAME("abs_linesCleanupEmpty"),
463  DESCRIPTION("Removes empty bands from *abs_lines*.\n"),
464  AUTHORS("Richard Larsson"),
465  OUT("abs_lines"),
466  GOUT(),
467  GOUT_TYPE(),
468  GOUT_DESC(),
469  IN("abs_lines"),
470  GIN(),
471  GIN_TYPE(),
472  GIN_DEFAULT(),
473  GIN_DESC()));
474 
475  md_data_raw.push_back(create_mdrecord(
476  NAME("abs_linesKeepBands"),
477  DESCRIPTION("Keep only *qid*-matches in *abs_lines*\n"
478  "\n"
479  "The ignore values will ignore isotopologue and/or species.\n"
480  "The latter means the isotopologue has to be ignores.\n"),
481  AUTHORS("Richard Larsson"),
482  OUT("abs_lines"),
483  GOUT(),
484  GOUT_TYPE(),
485  GOUT_DESC(),
486  IN("abs_lines"),
487  GIN("qid", "ignore_spec", "ignore_isot"),
488  GIN_TYPE("QuantumIdentifier", "Index", "Index"),
489  GIN_DEFAULT(NODEF, "1", "1"),
490  GIN_DESC("Band ID", "If species is to be ignores", "If isotopologue is to be ignored")));
491 
492  md_data_raw.push_back(create_mdrecord(
493  NAME("abs_linesRemoveBand"),
494  DESCRIPTION("Removes *qid* band from *abs_lines*\n"),
495  AUTHORS("Richard Larsson"),
496  OUT("abs_lines"),
497  GOUT(),
498  GOUT_TYPE(),
499  GOUT_DESC(),
500  IN("abs_lines"),
501  GIN("qid"),
502  GIN_TYPE("QuantumIdentifier"),
504  GIN_DESC("Band ID")));
505 
506  md_data_raw.push_back(create_mdrecord(
507  NAME("abs_linesRemoveUnusedLocalQuantumNumbers"),
508  DESCRIPTION(
509  "Removes unused quantums from local values in the line lists\n"),
510  AUTHORS("Richard Larsson"),
511  OUT("abs_lines"),
512  GOUT(),
513  GOUT_TYPE(),
514  GOUT_DESC(),
515  IN("abs_lines"),
516  GIN(),
517  GIN_TYPE(),
518  GIN_DEFAULT(),
519  GIN_DESC()));
520 
521  md_data_raw.push_back(create_mdrecord(
522  NAME("abs_linesReplaceWithLines"),
523  DESCRIPTION(
524  "Replace all lines in *abs_lines* that match with lines in replacement_lines.\n"
525  "\n"
526  "Each replacement_lines must match excatly a single line in *abs_lines*.\n"
527  "\n"
528  "The matching required identical quantum number signatures to work\n"
529  "\n"
530  "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers.\n"),
531  AUTHORS("Richard Larsson"),
532  OUT("abs_lines"),
533  GOUT(),
534  GOUT_TYPE(),
535  GOUT_DESC(),
536  IN("abs_lines"),
537  GIN("replacing_lines"),
538  GIN_TYPE("ArrayOfAbsorptionLines"),
540  GIN_DESC("Line-array that replace lines in *abs_lines*.")));
541 
542  md_data_raw.push_back(create_mdrecord(
543  NAME("abs_linesAppendWithLines"),
544  DESCRIPTION(
545  "Appends all lines in *abs_lines* that match with lines in replacement_lines if *safe*.\n"
546  "If not *safe*, appends all lines.\n"
547  "\n"
548  "No appended line is allowed to match any line in *abs_lines* if *safe*\n"
549  "\n"
550  "Conditional behavior if *safe*:\n"
551  "\tIf the AbosorptionLines to be appended match no AbsorptionLines\n"
552  "\tin *abs_lines*, then the entire AbsorptionLines is appended.\n"
553  "\tOtherwise, only a single AbsorptionLines can be matched and is not\n"
554  "\tallowed to have any internal matches\n"
555  "\n"
556  "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers\n"
557  "in *safe* mode.\n"),
558  AUTHORS("Richard Larsson"),
559  OUT("abs_lines"),
560  GOUT(),
561  GOUT_TYPE(),
562  GOUT_DESC(),
563  IN("abs_lines"),
564  GIN("appending_lines", "safe"),
565  GIN_TYPE("ArrayOfAbsorptionLines", "Index"),
566  GIN_DEFAULT(NODEF, "1"),
567  GIN_DESC("Line-array that appends lines in *abs_lines*.",
568  "Flag whether to check quantum numbers or not")));
569 
570  md_data_raw.push_back(create_mdrecord(
571  NAME("abs_linesDeleteWithLines"),
572  DESCRIPTION(
573  "Deletes all lines in *abs_lines* that match with lines in replacement_lines.\n"
574  "\n"
575  "If a deleted line has no match, then nothing happens.\n"
576  "\n"
577  "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers.\n"
578  "There is no need to have all values correct.\n"),
579  AUTHORS("Richard Larsson"),
580  OUT("abs_lines"),
581  GOUT(),
582  GOUT_TYPE(),
583  GOUT_DESC(),
584  IN("abs_lines"),
585  GIN("deleting_lines"),
586  GIN_TYPE("ArrayOfAbsorptionLines"),
588  GIN_DESC("Line-array that removes lines from *abs_lines*.")));
589 
590  md_data_raw.push_back(create_mdrecord(
591  NAME("abs_linesDeleteBadF0"),
592  DESCRIPTION(
593  "Deletes all lines in *abs_lines* that have bad central frequencies\n"
594  "\n"
595  "If lower evaluates as true, deletes all lines with a frequency below f0.\n"
596  "Otherwise deletes all lines with a frequency above f0.\n"),
597  AUTHORS("Richard Larsson"),
598  OUT("abs_lines"),
599  GOUT(),
600  GOUT_TYPE(),
601  GOUT_DESC(),
602  IN("abs_lines"),
603  GIN("f0", "lower"),
604  GIN_TYPE("Numeric", "Index"),
605  GIN_DEFAULT(NODEF, "1"),
606  GIN_DESC("Target frequency",
607  "Lower or upper flag (eval as boolean)")));
608 
609  md_data_raw.push_back(create_mdrecord(
610  NAME("abs_linesDeleteLinesWithUndefinedLocalQuanta"),
611  DESCRIPTION(
612  "Deletes all lines in *abs_lines* that have undefined local quanta\n"),
613  AUTHORS("Richard Larsson"),
614  OUT("abs_lines"),
615  GOUT(),
616  GOUT_TYPE(),
617  GOUT_DESC(),
618  IN("abs_lines"),
619  GIN(),
620  GIN_TYPE(),
621  GIN_DEFAULT(),
622  GIN_DESC()));
623 
624  md_data_raw.push_back(create_mdrecord(
625  NAME("abs_linesDeleteLinesWithBadOrHighChangingJs"),
626  DESCRIPTION("Deletes all lines in *abs_lines* that have undefined Js or Js\n"
627  "that change more than 1 between energy levels\n"),
628  AUTHORS("Richard Larsson"),
629  OUT("abs_lines"),
630  GOUT(),
631  GOUT_TYPE(),
632  GOUT_DESC(),
633  IN("abs_lines"),
634  GIN(),
635  GIN_TYPE(),
636  GIN_DEFAULT(),
637  GIN_DESC()));
638 
639  md_data_raw.push_back(create_mdrecord(
640  NAME("abs_linesDeleteLinesWithQuantumNumberAbove"),
641  DESCRIPTION("Deletes all lines in *abs_lines* that have too large quantum number\n"),
642  AUTHORS("Richard Larsson"),
643  OUT("abs_lines"),
644  GOUT(),
645  GOUT_TYPE(),
646  GOUT_DESC(),
647  IN("abs_lines"),
648  GIN("quantumnumber", "quantumnumber_value"),
649  GIN_TYPE("String", "Index"),
651  GIN_DESC("Quantum number identified", "Value")));
652 
653  md_data_raw.push_back(create_mdrecord(
654  NAME("abs_linesPrintDefinedQuantumNumbers"),
655  DESCRIPTION("Print the count of defined quantum numbers in the catalog\n"),
656  AUTHORS("Richard Larsson"),
657  OUT(),
658  GOUT(),
659  GOUT_TYPE(),
660  GOUT_DESC(),
661  IN("abs_lines"),
662  GIN(),
663  GIN_TYPE(),
664  GIN_DEFAULT(),
665  GIN_DESC()));
666 
667  md_data_raw.push_back(create_mdrecord(
668  NAME("abs_lines_per_speciesReadSplitCatalog"),
669  DESCRIPTION("Reads *abs_lines_per_species* split by\n"
670  "*abs_linesWriteSplitXML* or *abs_lines_per_speciesWriteSplitXML*\n"
671  "\n"
672  "Note that this will sort the isotopologue\n"),
673  AUTHORS("Richard Larsson"),
674  OUT("abs_lines_per_species"),
675  GOUT(),
676  GOUT_TYPE(),
677  GOUT_DESC(),
678  IN("abs_species"),
679  GIN("basename"),
680  GIN_TYPE("String"),
682  GIN_DESC("The path to the split catalog files")));
683 
684  md_data_raw.push_back(create_mdrecord(
685  NAME("abs_linesReadSpeciesSplitCatalog"),
686  DESCRIPTION("Reads a catalog of absorption lines files in a directory\n"),
687  AUTHORS("Richard Larsson"),
688  OUT("abs_lines"),
689  GOUT(),
690  GOUT_TYPE(),
691  GOUT_DESC(),
692  IN(),
693  GIN("basename", "robust"),
694  GIN_TYPE("String", "Index"),
695  GIN_DEFAULT(NODEF, "0"),
696  GIN_DESC("The path to the split catalog files",
697  "Flag to continue in case nothing is found [0 throws, 1 continues]")));
698 
699  md_data_raw.push_back(create_mdrecord(
700  NAME("abs_lines_per_speciesReadSpeciesSplitCatalog"),
701  DESCRIPTION("See *abs_lines_per_speciesReadSplitCatalog* but expects\n"
702  "a single file per species of *ArrayOfAbsorptionLines*\n"),
703  AUTHORS("Richard Larsson"),
704  OUT("abs_lines_per_species"),
705  GOUT(),
706  GOUT_TYPE(),
707  GOUT_DESC(),
708  IN("abs_species"),
709  GIN("basename", "robust"),
710  GIN_TYPE("String", "Index"),
711  GIN_DEFAULT(NODEF, "0"),
712  GIN_DESC("The path to the split catalog files",
713  "Flag to continue in case nothing is found [0 throws, 1 continues]")));
714 
715  md_data_raw.push_back(create_mdrecord(
716  NAME("abs_lines_per_speciesSetEmpty"),
717  DESCRIPTION("Empties *abs_lines_per_species* at the correct size.\n"),
718  AUTHORS("Richard Larsson"),
719  OUT("abs_lines_per_species"),
720  GOUT(),
721  GOUT_TYPE(),
722  GOUT_DESC(),
723  IN("abs_species"),
724  GIN(),
725  GIN_TYPE(),
726  GIN_DEFAULT(),
727  GIN_DESC()));
728 
729  md_data_raw.push_back(
730  create_mdrecord(NAME("abs_linesSetEmptyBroadeningParametersToEmpty"),
731  DESCRIPTION("Sets a broadening parameter to empty if it is efficiently empty\n"
732  "\n"
733  "This will not save RAM but it will save disk space (reading time),\n"
734  "and computational time by not doing unecessary calculations\n"),
735  AUTHORS("Richard Larsson"),
736  OUT("abs_lines"),
737  GOUT(),
738  GOUT_TYPE(),
739  GOUT_DESC(),
740  IN("abs_lines"),
741  GIN(),
742  GIN_TYPE(),
743  GIN_DEFAULT(),
744  GIN_DESC()));
745 
746  md_data_raw.push_back(
747  create_mdrecord(NAME("abs_linesSetNormalization"),
748  DESCRIPTION("Sets normalization type for all lines.\n"
749  "\n"
750  "Available options:\n"
751  "\t\"VVH\" \t - \t Van Vleck and Huber\n"
752  "\t\"VVW\" \t - \t Van Vleck and Weisskopf\n"
753  "\t\"RQ\" \t - \t Rosenkranz quadratic\n"
754  "\t\"None\" \t - \t No extra normalization\n"
755  "\n"
756  "See the theory guide for more details.\n"),
757  AUTHORS("Richard Larsson"),
758  OUT("abs_lines"),
759  GOUT(),
760  GOUT_TYPE(),
761  GOUT_DESC(),
762  IN("abs_lines"),
763  GIN("option"),
764  GIN_TYPE("String"),
766  GIN_DESC("Method of line normalizations")));
767 
768  md_data_raw.push_back(
769  create_mdrecord(NAME("abs_lines_per_speciesSetNormalization"),
770  DESCRIPTION("See *abs_linesSetNormalization*\n"),
771  AUTHORS("Richard Larsson"),
772  OUT("abs_lines_per_species"),
773  GOUT(),
774  GOUT_TYPE(),
775  GOUT_DESC(),
776  IN("abs_lines_per_species"),
777  GIN("option"),
778  GIN_TYPE("String"),
780  GIN_DESC("Method of line normalizations")));
781 
782  md_data_raw.push_back(
783  create_mdrecord(NAME("abs_linesSetNormalizationForMatch"),
784  DESCRIPTION("See *abs_linesSetNormalization* for options\n"
785  "\n"
786  "This function only acts on matches between the bands and input ID\n"),
787  AUTHORS("Richard Larsson"),
788  OUT("abs_lines"),
789  GOUT(),
790  GOUT_TYPE(),
791  GOUT_DESC(),
792  IN("abs_lines"),
793  GIN("option", "ID"),
794  GIN_TYPE("String", "QuantumIdentifier"),
796  GIN_DESC("Method of line normalizations",
797  "ID of one or more bands")));
798 
799  md_data_raw.push_back(
800  create_mdrecord(NAME("abs_lines_per_speciesSetNormalizationForMatch"),
801  DESCRIPTION("See *abs_linesSetNormalization* for options\n"
802  "\n"
803  "This function only acts on matches between the bands and input ID\n"),
804  AUTHORS("Richard Larsson"),
805  OUT("abs_lines_per_species"),
806  GOUT(),
807  GOUT_TYPE(),
808  GOUT_DESC(),
809  IN("abs_lines_per_species"),
810  GIN("option", "ID"),
811  GIN_TYPE("String", "QuantumIdentifier"),
813  GIN_DESC("Method of line normalizations",
814  "ID of one or more bands")));
815 
816  md_data_raw.push_back(
817  create_mdrecord(NAME("abs_lines_per_speciesSetNormalizationForSpecies"),
818  DESCRIPTION("See *abs_linesSetNormalization* but for single species\n"),
819  AUTHORS("Richard Larsson"),
820  OUT("abs_lines_per_species"),
821  GOUT(),
822  GOUT_TYPE(),
823  GOUT_DESC(),
824  IN("abs_lines_per_species", "abs_species"),
825  GIN("option", "species_tag"),
826  GIN_TYPE("String", "String"),
828  GIN_DESC("Method of line normalizations",
829  "The species tag from *abs_species* to change")));
830 
831  md_data_raw.push_back(
832  create_mdrecord(NAME("abs_linesSetMirroring"),
833  DESCRIPTION("Sets mirroring type for all lines.\n"
834  "\n"
835  "Available options:\n"
836  "\t\"None\" \t - \t No mirrored line\n"
837  "\t\"Same\" \t - \t Mirrored line broadened by line shape\n"
838  "\t\"Manual\" \t - \t Manually mirrored line (be careful; allows all frequencies)\n"
839  "\t\"Lorentz\" \t - \t Mirrored line broadened by Lorentz\n"
840  "\n"
841  "Note that mirroring is never applied for DP line shape\n"
842  "Also note that Lorentz profile is approached by most line shapes at high frequency offset.\n"
843  "Also note that Manual settings are potentially dangerous as other frequency\n"
844  "offsets might not work as hoped.\n"),
845  AUTHORS("Richard Larsson"),
846  OUT("abs_lines"),
847  GOUT(),
848  GOUT_TYPE(),
849  GOUT_DESC(),
850  IN("abs_lines"),
851  GIN("option"),
852  GIN_TYPE("String"),
854  GIN_DESC("Method of line mirroring")));
855 
856  md_data_raw.push_back(
857  create_mdrecord(NAME("abs_lines_per_speciesSetMirroring"),
858  DESCRIPTION("See *abs_linesSetMirroring*\n"),
859  AUTHORS("Richard Larsson"),
860  OUT("abs_lines_per_species"),
861  GOUT(),
862  GOUT_TYPE(),
863  GOUT_DESC(),
864  IN("abs_lines_per_species"),
865  GIN("option"),
866  GIN_TYPE("String"),
868  GIN_DESC("Method of line mirroring")));
869 
870  md_data_raw.push_back(
871  create_mdrecord(NAME("abs_linesSetMirroringForMatch"),
872  DESCRIPTION("See *abs_linesSetMirroring* for options\n"
873  "\n"
874  "This function only acts on matches between the bands and input ID\n"),
875  AUTHORS("Richard Larsson"),
876  OUT("abs_lines"),
877  GOUT(),
878  GOUT_TYPE(),
879  GOUT_DESC(),
880  IN("abs_lines"),
881  GIN("option", "ID"),
882  GIN_TYPE("String", "QuantumIdentifier"),
884  GIN_DESC("Method of line mirroring",
885  "ID of one or more bands")));
886 
887  md_data_raw.push_back(
888  create_mdrecord(NAME("abs_lines_per_speciesSetMirroringForMatch"),
889  DESCRIPTION("See *abs_linesSetMirroring* for options\n"
890  "\n"
891  "This function only acts on matches between the bands and input ID\n"),
892  AUTHORS("Richard Larsson"),
893  OUT("abs_lines_per_species"),
894  GOUT(),
895  GOUT_TYPE(),
896  GOUT_DESC(),
897  IN("abs_lines_per_species"),
898  GIN("option", "ID"),
899  GIN_TYPE("String", "QuantumIdentifier"),
901  GIN_DESC("Method of line mirroring",
902  "ID of one or more bands")));
903 
904  md_data_raw.push_back(
905  create_mdrecord(NAME("abs_lines_per_speciesSetMirroringForSpecies"),
906  DESCRIPTION("See *abs_linesSetMirroring* but for single species\n"),
907  AUTHORS("Richard Larsson"),
908  OUT("abs_lines_per_species"),
909  GOUT(),
910  GOUT_TYPE(),
911  GOUT_DESC(),
912  IN("abs_lines_per_species", "abs_species"),
913  GIN("option", "species_tag"),
914  GIN_TYPE("String", "String"),
916  GIN_DESC("Method of line mirroring",
917  "The species tag from *abs_species* to change")));
918 
919  md_data_raw.push_back(
920  create_mdrecord(NAME("abs_linesSetPopulation"),
921  DESCRIPTION("Sets population type for all lines.\n"
922  "\n"
923  "Available options:\n"
924  "\t\"LTE\" \t - \t Standard distribution by temperature\n"
925  "\t\"NLTE-VibrationalTemperatures\" \t - \t LTE but with vibrational temperatures\n"
926  "\t\"NLTE\" \t - \t Distribution is given as input\n"
927  "\n"
928  "You must have set *nlte_field* and/or its ilk to use the NLTE methods.\n"),
929  AUTHORS("Richard Larsson"),
930  OUT("abs_lines"),
931  GOUT(),
932  GOUT_TYPE(),
933  GOUT_DESC(),
934  IN("abs_lines"),
935  GIN("option"),
936  GIN_TYPE("String"),
938  GIN_DESC("Method of line population")));
939 
940  md_data_raw.push_back(
941  create_mdrecord(NAME("abs_lines_per_speciesSetPopulation"),
942  DESCRIPTION("See *abs_linesSetPopulation*\n"),
943  AUTHORS("Richard Larsson"),
944  OUT("abs_lines_per_species"),
945  GOUT(),
946  GOUT_TYPE(),
947  GOUT_DESC(),
948  IN("abs_lines_per_species"),
949  GIN("option"),
950  GIN_TYPE("String"),
952  GIN_DESC("Method of line population")));
953 
954  md_data_raw.push_back(
955  create_mdrecord(NAME("abs_linesSetPopulationForMatch"),
956  DESCRIPTION("See *abs_linesSetPopulation* for options\n"
957  "\n"
958  "This function only acts on matches between the bands and input ID\n"),
959  AUTHORS("Richard Larsson"),
960  OUT("abs_lines"),
961  GOUT(),
962  GOUT_TYPE(),
963  GOUT_DESC(),
964  IN("abs_lines"),
965  GIN("option", "ID"),
966  GIN_TYPE("String", "QuantumIdentifier"),
968  GIN_DESC("Method of line population",
969  "ID of one or more bands")));
970 
971  md_data_raw.push_back(
972  create_mdrecord(NAME("abs_lines_per_speciesSetPopulationForMatch"),
973  DESCRIPTION("See *abs_linesSetPopulation* for options\n"
974  "\n"
975  "This function only acts on matches between the bands and input ID\n"),
976  AUTHORS("Richard Larsson"),
977  OUT("abs_lines_per_species"),
978  GOUT(),
979  GOUT_TYPE(),
980  GOUT_DESC(),
981  IN("abs_lines_per_species"),
982  GIN("option", "ID"),
983  GIN_TYPE("String", "QuantumIdentifier"),
985  GIN_DESC("Method of line population",
986  "ID of one or more bands")));
987 
988  md_data_raw.push_back(
989  create_mdrecord(NAME("abs_lines_per_speciesSetPopulationForSpecies"),
990  DESCRIPTION("See *abs_linesSetPopulation* but for single species\n"),
991  AUTHORS("Richard Larsson"),
992  OUT("abs_lines_per_species"),
993  GOUT(),
994  GOUT_TYPE(),
995  GOUT_DESC(),
996  IN("abs_lines_per_species", "abs_species"),
997  GIN("option", "species_tag"),
998  GIN_TYPE("String", "String"),
1000  GIN_DESC("Method of line population",
1001  "The species tag from *abs_species* to change")));
1002 
1003  md_data_raw.push_back(
1004  create_mdrecord(NAME("abs_linesSetLineShapeType"),
1005  DESCRIPTION("Sets shape calculations type for all lines.\n"
1006  "\n"
1007  "Available options:\n"
1008  "\t\"DP\" \t - \t Doppler profile\n"
1009  "\t\"LP\" \t - \t Lorentz profile\n"
1010  "\t\"VP\" \t - \t Voigt profile\n"
1011  "\t\"SDVP\" \t - \t Speed-dependent Voigt profile\n"
1012  "\t\"HTP\" \t - \t Hartman-Tran profile\n"
1013  "\n"
1014  "See the theory guide for more details.\n"),
1015  AUTHORS("Richard Larsson"),
1016  OUT("abs_lines"),
1017  GOUT(),
1018  GOUT_TYPE(),
1019  GOUT_DESC(),
1020  IN("abs_lines"),
1021  GIN("option"),
1022  GIN_TYPE("String"),
1023  GIN_DEFAULT(NODEF),
1024  GIN_DESC("Method of line shape calculations")));
1025 
1026  md_data_raw.push_back(
1027  create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeType"),
1028  DESCRIPTION("See *abs_linesSetLineShapeType*\n"),
1029  AUTHORS("Richard Larsson"),
1030  OUT("abs_lines_per_species"),
1031  GOUT(),
1032  GOUT_TYPE(),
1033  GOUT_DESC(),
1034  IN("abs_lines_per_species"),
1035  GIN("option"),
1036  GIN_TYPE("String"),
1037  GIN_DEFAULT(NODEF),
1038  GIN_DESC("Method of line shape calculations")));
1039 
1040  md_data_raw.push_back(
1041  create_mdrecord(NAME("abs_linesSetLineShapeTypeForMatch"),
1042  DESCRIPTION("See *abs_linesSetLineShapeType* for options\n"
1043  "\n"
1044  "This function only acts on matches between the bands and input ID\n"),
1045  AUTHORS("Richard Larsson"),
1046  OUT("abs_lines"),
1047  GOUT(),
1048  GOUT_TYPE(),
1049  GOUT_DESC(),
1050  IN("abs_lines"),
1051  GIN("option", "ID"),
1052  GIN_TYPE("String", "QuantumIdentifier"),
1054  GIN_DESC("Method of line shape calculations",
1055  "ID of one or more bands")));
1056 
1057  md_data_raw.push_back(
1058  create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeTypeForMatch"),
1059  DESCRIPTION("See *abs_linesSetLineShapeType* for options\n"
1060  "\n"
1061  "This function only acts on matches between the bands and input ID\n"),
1062  AUTHORS("Richard Larsson"),
1063  OUT("abs_lines_per_species"),
1064  GOUT(),
1065  GOUT_TYPE(),
1066  GOUT_DESC(),
1067  IN("abs_lines_per_species"),
1068  GIN("option", "ID"),
1069  GIN_TYPE("String", "QuantumIdentifier"),
1071  GIN_DESC("Method of line shape calculations",
1072  "ID of one or more bands")));
1073 
1074  md_data_raw.push_back(
1075  create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeTypeForSpecies"),
1076  DESCRIPTION("See *abs_linesSetLineShapeType* but for single species\n"),
1077  AUTHORS("Richard Larsson"),
1078  OUT("abs_lines_per_species"),
1079  GOUT(),
1080  GOUT_TYPE(),
1081  GOUT_DESC(),
1082  IN("abs_lines_per_species", "abs_species"),
1083  GIN("option", "species_tag"),
1084  GIN_TYPE("String", "String"),
1086  GIN_DESC("Method of line shape calculations",
1087  "The species tag from *abs_species* to change")));
1088 
1089  md_data_raw.push_back(
1090  create_mdrecord(NAME("abs_linesSetCutoff"),
1091  DESCRIPTION("Sets cutoff type and magnitude for all lines.\n"
1092  "\n"
1093  "The line is cut off when this is active at the given frequency.\n"
1094  "The only non-zero range is from this range to its negative equivalent\n"
1095  "\n"
1096  "Available options:\n"
1097  "\t\"None\" \t - \t No cutoff\n"
1098  "\t\"ByLine\" \t - \t Cutoff relative line center, highest frequency: F0+cutoff\n"
1099  "\t\"ByBand\" \t - \t Absolute frequency, highest frequency: cutoff\n"
1100  "\n"
1101  "For \"ByLine\", the negative frequency is at F0-cutoff\n"
1102  "For \"ByBand\", the negative frequency is at cutoff minus twice the average band frequency\n"),
1103  AUTHORS("Richard Larsson"),
1104  OUT("abs_lines"),
1105  GOUT(),
1106  GOUT_TYPE(),
1107  GOUT_DESC(),
1108  IN("abs_lines"),
1109  GIN("option", "value"),
1110  GIN_TYPE("String", "Numeric"),
1112  GIN_DESC("Method of line shape calculations",
1113  "Value of cutoff")));
1114 
1115  md_data_raw.push_back(
1116  create_mdrecord(NAME("abs_lines_per_speciesSetCutoff"),
1117  DESCRIPTION("See *abs_linesSetCutoff*\n"),
1118  AUTHORS("Richard Larsson"),
1119  OUT("abs_lines_per_species"),
1120  GOUT(),
1121  GOUT_TYPE(),
1122  GOUT_DESC(),
1123  IN("abs_lines_per_species"),
1124  GIN("option", "value"),
1125  GIN_TYPE("String", "Numeric"),
1127  GIN_DESC("Method of line shape calculations",
1128  "Value of cutoff")));
1129 
1130  md_data_raw.push_back(
1131  create_mdrecord(NAME("abs_linesSetCutoffForMatch"),
1132  DESCRIPTION("See *abs_linesSetCutoff* for more options.\n"
1133  "\n"
1134  "This function only acts on matches between the bands and input ID\n"),
1135  AUTHORS("Richard Larsson"),
1136  OUT("abs_lines"),
1137  GOUT(),
1138  GOUT_TYPE(),
1139  GOUT_DESC(),
1140  IN("abs_lines"),
1141  GIN("option", "value", "ID"),
1142  GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1144  GIN_DESC("Method of line shape calculations",
1145  "Value of cutoff",
1146  "ID of one or more bands")));
1147 
1148  md_data_raw.push_back(
1149  create_mdrecord(NAME("abs_lines_per_speciesSetCutoffForMatch"),
1150  DESCRIPTION("See *abs_linesSetCutoff* for more options.\n"
1151  "\n"
1152  "This function only acts on matches between the bands and input ID\n"),
1153  AUTHORS("Richard Larsson"),
1154  OUT("abs_lines_per_species"),
1155  GOUT(),
1156  GOUT_TYPE(),
1157  GOUT_DESC(),
1158  IN("abs_lines_per_species"),
1159  GIN("option", "value", "ID"),
1160  GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1162  GIN_DESC("Method of line shape calculations",
1163  "Value of cutoff",
1164  "ID of one or more bands")));
1165 
1166  md_data_raw.push_back(
1167  create_mdrecord(NAME("abs_lines_per_speciesSetCutoffForSpecies"),
1168  DESCRIPTION("See *abs_linesSetCutoff* but for single species\n"),
1169  AUTHORS("Richard Larsson"),
1170  OUT("abs_lines_per_species"),
1171  GOUT(),
1172  GOUT_TYPE(),
1173  GOUT_DESC(),
1174  IN("abs_lines_per_species", "abs_species"),
1175  GIN("option", "value", "species_tag"),
1176  GIN_TYPE("String", "Numeric", "String"),
1178  GIN_DESC("Method of line shape calculations",
1179  "Value of cutoff",
1180  "The species tag from *abs_species* to change")));
1181 
1182  md_data_raw.push_back(
1183  create_mdrecord(NAME("abs_linesSetLinemixingLimit"),
1184  DESCRIPTION("Sets line mixing limit for all lines.\n"
1185  "\n"
1186  "If value is less than 0, no limit is applied and line mixing is active.\n"
1187  "Otherwise, line mixing is inactive if the pressure is below the limit.\n"),
1188  AUTHORS("Richard Larsson"),
1189  OUT("abs_lines"),
1190  GOUT(),
1191  GOUT_TYPE(),
1192  GOUT_DESC(),
1193  IN("abs_lines"),
1194  GIN("value"),
1195  GIN_TYPE("Numeric"),
1196  GIN_DEFAULT(NODEF),
1197  GIN_DESC("Value of limit")));
1198 
1199  md_data_raw.push_back(
1200  create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimit"),
1201  DESCRIPTION("See *abs_linesSetLinemixingLimit*\n"),
1202  AUTHORS("Richard Larsson"),
1203  OUT("abs_lines_per_species"),
1204  GOUT(),
1205  GOUT_TYPE(),
1206  GOUT_DESC(),
1207  IN("abs_lines_per_species"),
1208  GIN("value"),
1209  GIN_TYPE("Numeric"),
1210  GIN_DEFAULT(NODEF),
1211  GIN_DESC("Value of limit")));
1212 
1213  md_data_raw.push_back(
1214  create_mdrecord(NAME("abs_linesSetLinemixingLimitForMatch"),
1215  DESCRIPTION("See *abs_linesSetLinemixingLimit* for values\n"
1216  "\n"
1217  "This function only acts on matches between the bands and input ID\n"),
1218  AUTHORS("Richard Larsson"),
1219  OUT("abs_lines"),
1220  GOUT(),
1221  GOUT_TYPE(),
1222  GOUT_DESC(),
1223  IN("abs_lines"),
1224  GIN("value","ID"),
1225  GIN_TYPE("Numeric", "QuantumIdentifier"),
1227  GIN_DESC("Value of limit",
1228  "ID of one or more bands")));
1229 
1230  md_data_raw.push_back(
1231  create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimitForMatch"),
1232  DESCRIPTION("See *abs_linesSetLinemixingLimit* for values\n"
1233  "\n"
1234  "This function only acts on matches between the bands and input ID\n"),
1235  AUTHORS("Richard Larsson"),
1236  OUT("abs_lines_per_species"),
1237  GOUT(),
1238  GOUT_TYPE(),
1239  GOUT_DESC(),
1240  IN("abs_lines_per_species"),
1241  GIN("value","ID"),
1242  GIN_TYPE("Numeric", "QuantumIdentifier"),
1244  GIN_DESC("Value of limit",
1245  "ID of one or more bands")));
1246 
1247  md_data_raw.push_back(
1248  create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimitForSpecies"),
1249  DESCRIPTION("See *abs_linesSetLinemixingLimit* but for single species\n"),
1250  AUTHORS("Richard Larsson"),
1251  OUT("abs_lines_per_species"),
1252  GOUT(),
1253  GOUT_TYPE(),
1254  GOUT_DESC(),
1255  IN("abs_lines_per_species", "abs_species"),
1256  GIN("value", "species_tag"),
1257  GIN_TYPE("Numeric", "String"),
1259  GIN_DESC("Value of limit",
1260  "The species tag from *abs_species* to change")));
1261 
1262  md_data_raw.push_back(
1263  create_mdrecord(NAME("abs_linesSetT0"),
1264  DESCRIPTION("Sets reference temperature for all lines.\n"),
1265  AUTHORS("Richard Larsson"),
1266  OUT("abs_lines"),
1267  GOUT(),
1268  GOUT_TYPE(),
1269  GOUT_DESC(),
1270  IN("abs_lines"),
1271  GIN("value"),
1272  GIN_TYPE("Numeric"),
1273  GIN_DEFAULT(NODEF),
1274  GIN_DESC("Value of T0")));
1275 
1276  md_data_raw.push_back(
1277  create_mdrecord(NAME("abs_lines_per_speciesSetT0"),
1278  DESCRIPTION("See *abs_linesSetT0*\n"),
1279  AUTHORS("Richard Larsson"),
1280  OUT("abs_lines_per_species"),
1281  GOUT(),
1282  GOUT_TYPE(),
1283  GOUT_DESC(),
1284  IN("abs_lines_per_species"),
1285  GIN("value"),
1286  GIN_TYPE("Numeric"),
1287  GIN_DEFAULT(NODEF),
1288  GIN_DESC("Value of T0")));
1289 
1290  md_data_raw.push_back(
1291  create_mdrecord(NAME("abs_linesSetT0ForMatch"),
1292  DESCRIPTION("Sets reference temperature\n"
1293  "\n"
1294  "This function only acts on matches between the bands and input ID\n"),
1295  AUTHORS("Richard Larsson"),
1296  OUT("abs_lines"),
1297  GOUT(),
1298  GOUT_TYPE(),
1299  GOUT_DESC(),
1300  IN("abs_lines"),
1301  GIN("value", "ID"),
1302  GIN_TYPE("Numeric", "QuantumIdentifier"),
1304  GIN_DESC("Value of T0",
1305  "ID of one or more bands")));
1306 
1307  md_data_raw.push_back(
1308  create_mdrecord(NAME("abs_lines_per_speciesSetT0ForMatch"),
1309  DESCRIPTION("Sets reference temperature\n"
1310  "\n"
1311  "This function only acts on matches between the bands and input ID\n"),
1312  AUTHORS("Richard Larsson"),
1313  OUT("abs_lines_per_species"),
1314  GOUT(),
1315  GOUT_TYPE(),
1316  GOUT_DESC(),
1317  IN("abs_lines_per_species"),
1318  GIN("value", "ID"),
1319  GIN_TYPE("Numeric", "QuantumIdentifier"),
1321  GIN_DESC("Value of T0",
1322  "ID of one or more bands")));
1323 
1324  md_data_raw.push_back(
1325  create_mdrecord(NAME("abs_lines_per_speciesSetT0ForSpecies"),
1326  DESCRIPTION("See *abs_linesSetT0* but for single species\n"),
1327  AUTHORS("Richard Larsson"),
1328  OUT("abs_lines_per_species"),
1329  GOUT(),
1330  GOUT_TYPE(),
1331  GOUT_DESC(),
1332  IN("abs_lines_per_species", "abs_species"),
1333  GIN("value", "species_tag"),
1334  GIN_TYPE("Numeric", "String"),
1336  GIN_DESC("Value of T0",
1337  "The species tag from *abs_species* to change")));
1338 
1339  md_data_raw.push_back(
1340  create_mdrecord(NAME("abs_linesSetQuantumNumberForMatch"),
1341  DESCRIPTION("Sets a quantum number to a new value\n"
1342  "\n"
1343  "This function only acts on matches between the bands and input ID\n"),
1344  AUTHORS("Richard Larsson"),
1345  OUT("abs_lines"),
1346  GOUT(),
1347  GOUT_TYPE(),
1348  GOUT_DESC(),
1349  IN("abs_lines"),
1350  GIN("quantum_number", "value", "ID"),
1351  GIN_TYPE("String", "Rational", "QuantumIdentifier"),
1353  GIN_DESC("Quantum number key",
1354  "Value of quantum number",
1355  "ID of one or more bands")));
1356 
1357  md_data_raw.push_back(
1358  create_mdrecord(NAME("abs_lines_per_speciesSetQuantumNumberForMatch"),
1359  DESCRIPTION("See *abs_linesSetQuantumNumberForMatch*\n"),
1360  AUTHORS("Richard Larsson"),
1361  OUT("abs_lines_per_species"),
1362  GOUT(),
1363  GOUT_TYPE(),
1364  GOUT_DESC(),
1365  IN("abs_lines_per_species"),
1366  GIN("quantum_number", "value", "ID"),
1367  GIN_TYPE("String", "Rational", "QuantumIdentifier"),
1369  GIN_DESC("Quantum number key",
1370  "Value of quantum number",
1371  "ID of one or more bands")));
1372 
1373  md_data_raw.push_back(create_mdrecord(
1374  NAME("abs_linesChangeBaseParameterForMatchingLevel"),
1375  DESCRIPTION(
1376  "Change parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1377  "Only works for these parameters:\n"
1378  "parameter_name = \"Statistical Weight\"\n"
1379  "parameter_name = \"Zeeman Coefficient\"\n"),
1380  AUTHORS("Richard Larsson"),
1381  OUT("abs_lines"),
1382  GOUT(),
1383  GOUT_TYPE(),
1384  GOUT_DESC(),
1385  IN("abs_lines"),
1386  GIN("QI", "parameter_name", "change", "relative"),
1387  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1388  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1389  GIN_DESC("Information to match the level.",
1390  "Name of parameter to be replaced",
1391  "Value with which to change matching level's value",
1392  "Flag for relative change (0 is absolute change)")));
1393 
1394  md_data_raw.push_back(create_mdrecord(
1395  NAME("abs_linesChangeBaseParameterForMatchingLevels"),
1396  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1397  AUTHORS("Richard Larsson"),
1398  OUT("abs_lines"),
1399  GOUT(),
1400  GOUT_TYPE(),
1401  GOUT_DESC(),
1402  IN("abs_lines"),
1403  GIN("QI", "parameter_name", "change", "relative"),
1404  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1405  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1406  GIN_DESC("Information to match the level.",
1407  "Name of parameter to be replaced",
1408  "Value with which to change matching level's value",
1409  "Flag for relative change (0 is absolute change)")));
1410 
1411  md_data_raw.push_back(create_mdrecord(
1412  NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevel"),
1413  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1414  AUTHORS("Richard Larsson"),
1415  OUT("abs_lines_per_species"),
1416  GOUT(),
1417  GOUT_TYPE(),
1418  GOUT_DESC(),
1419  IN("abs_lines_per_species"),
1420  GIN("QI", "parameter_name", "change", "relative"),
1421  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1422  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1423  GIN_DESC("Information to match the level.",
1424  "Name of parameter to be replaced",
1425  "Value with which to change matching level's value",
1426  "Flag for relative change (0 is absolute change)")));
1427 
1428  md_data_raw.push_back(create_mdrecord(
1429  NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevels"),
1430  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1431  AUTHORS("Richard Larsson"),
1432  OUT("abs_lines_per_species"),
1433  GOUT(),
1434  GOUT_TYPE(),
1435  GOUT_DESC(),
1436  IN("abs_lines_per_species"),
1437  GIN("QI", "parameter_name", "change", "relative"),
1438  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1439  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1440  GIN_DESC("Information to match the level.",
1441  "Name of parameter to be replaced",
1442  "Value with which to change matching level's value",
1443  "Flag for relative change (0 is absolute change)")));
1444 
1445  md_data_raw.push_back(create_mdrecord(
1446  NAME("abs_linesSetBaseParameterForMatchingLevel"),
1447  DESCRIPTION(
1448  "Set parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1449  "Only works for these parameters:\n"
1450  "parameter_name = \"Statistical Weight\"\n"
1451  "parameter_name = \"Zeeman Coefficient\"\n"),
1452  AUTHORS("Richard Larsson"),
1453  OUT("abs_lines"),
1454  GOUT(),
1455  GOUT_TYPE(),
1456  GOUT_DESC(),
1457  IN("abs_lines"),
1458  GIN("QI", "parameter_name", "change"),
1459  GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1461  GIN_DESC("Information to match the level.",
1462  "Name of parameter to be replaced",
1463  "Value with which to set matching level's value")));
1464 
1465  md_data_raw.push_back(create_mdrecord(
1466  NAME("abs_linesSetBaseParameterForMatchingLevels"),
1467  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1468  AUTHORS("Richard Larsson"),
1469  OUT("abs_lines"),
1470  GOUT(),
1471  GOUT_TYPE(),
1472  GOUT_DESC(),
1473  IN("abs_lines"),
1474  GIN("QI", "parameter_name", "change"),
1475  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1477  GIN_DESC("Information to match the level.",
1478  "Name of parameter to be replaced",
1479  "Value with which to set matching level's value")));
1480 
1481  md_data_raw.push_back(create_mdrecord(
1482  NAME("abs_lines_per_speciesSetBaseParameterForMatchingLevel"),
1483  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1484  AUTHORS("Richard Larsson"),
1485  OUT("abs_lines_per_species"),
1486  GOUT(),
1487  GOUT_TYPE(),
1488  GOUT_DESC(),
1489  IN("abs_lines_per_species"),
1490  GIN("QI", "parameter_name", "change"),
1491  GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1493  GIN_DESC("Information to match the level.",
1494  "Name of parameter to be replaced",
1495  "Value with which to set matching level's value")));
1496 
1497  md_data_raw.push_back(create_mdrecord(
1498  NAME("abs_lines_per_speciesSetBaseParameterForMatchingLevels"),
1499  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1500  AUTHORS("Richard Larsson"),
1501  OUT("abs_lines_per_species"),
1502  GOUT(),
1503  GOUT_TYPE(),
1504  GOUT_DESC(),
1505  IN("abs_lines_per_species"),
1506  GIN("QI", "parameter_name", "change"),
1507  GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1509  GIN_DESC("Information to match the level.",
1510  "Name of parameter to be replaced",
1511  "Value with which to set matching level's value")));
1512 
1513  md_data_raw.push_back(create_mdrecord(
1514  NAME("abs_linesChangeBaseParameterForMatchingLines"),
1515  DESCRIPTION(
1516  "Change parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1517  "Only works for these parameters:\n"
1518  "parameter_name = \"Central Frequency\"\n"
1519  "parameter_name = \"Line Strength\"\n"
1520  "parameter_name = \"Lower State Energy\"\n"
1521  "parameter_name = \"Einstein Coefficient\"\n"
1522  "parameter_name = \"Lower Statistical Weight\"\n"
1523  "parameter_name = \"Upper Statistical Weight\"\n"
1524  "parameter_name = \"Lower Zeeman Coefficient\"\n"
1525  "parameter_name = \"Upper Zeeman Coefficient\"\n"
1526  "\n"
1527  "Note that loose_matching:=0 means only identical quantum identifiers are accepted,\n"
1528  "otherwise the numbers in QI must just be contained in the line identifier\n"),
1529  AUTHORS("Richard Larsson"),
1530  OUT("abs_lines"),
1531  GOUT(),
1532  GOUT_TYPE(),
1533  GOUT_DESC(),
1534  IN("abs_lines"),
1535  GIN("QI", "parameter_name", "change", "relative", "loose_matching"),
1536  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index"),
1537  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0"),
1538  GIN_DESC("Information to match the line.",
1539  "Name of parameter to be replaced",
1540  "Value with which to change matching line's value",
1541  "Flag for relative change (0 is absolute change)",
1542  "Flag for loose match (0 means only complete matches)")));
1543 
1544  md_data_raw.push_back(create_mdrecord(
1545  NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLines"),
1546  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines*\n"),
1547  AUTHORS("Richard Larsson"),
1548  OUT("abs_lines_per_species"),
1549  GOUT(),
1550  GOUT_TYPE(),
1551  GOUT_DESC(),
1552  IN("abs_lines_per_species"),
1553  GIN("QI", "parameter_name", "change", "relative", "loose_matching"),
1554  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index"),
1555  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0"),
1556  GIN_DESC("Information to match the line.",
1557  "Name of parameter to be replaced",
1558  "Value with which to change matching line's value",
1559  "Flag for relative change (0 is absolute change)",
1560  "Flag for loose match (0 means only complete matches)")));
1561 
1562  md_data_raw.push_back(create_mdrecord(
1563  NAME("abs_lines_per_speciesChangeBaseParameterForSpecies"),
1564  DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines* but for single species\n"),
1565  AUTHORS("Richard Larsson"),
1566  OUT("abs_lines_per_species"),
1567  GOUT(),
1568  GOUT_TYPE(),
1569  GOUT_DESC(),
1570  IN("abs_lines_per_species", "abs_species"),
1571  GIN("QI", "parameter_name", "change", "relative", "loose_matching", "species_tag"),
1572  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index", "String"),
1573  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0", NODEF),
1574  GIN_DESC("Information to match the line.",
1575  "Name of parameter to be replaced",
1576  "Value with which to change matching line's value",
1577  "Flag for relative change (0 is absolute change)",
1578  "Flag for loose match (0 means only complete matches)",
1579  "The species tag from *abs_species* to change")));
1580 
1581  md_data_raw.push_back(create_mdrecord(
1582  NAME("abs_linesSetBaseParameterForMatchingLines"),
1583  DESCRIPTION(
1584  "Set parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1585  "Only works for these parameters:\n"
1586  "parameter_name = \"Central Frequency\"\n"
1587  "parameter_name = \"Line Strength\"\n"
1588  "parameter_name = \"Lower State Energy\"\n"
1589  "parameter_name = \"Einstein Coefficient\"\n"
1590  "parameter_name = \"Lower Statistical Weight\"\n"
1591  "parameter_name = \"Upper Statistical Weight\"\n"
1592  "parameter_name = \"Lower Zeeman Coefficient\"\n"
1593  "parameter_name = \"Upper Zeeman Coefficient\"\n"
1594  "\n"
1595  "Note that loose_matching:=0 means only identical quantum identifiers are accepted,\n"
1596  "otherwise the numbers in QI must just be contained in the line identifier\n"),
1597  AUTHORS("Richard Larsson"),
1598  OUT("abs_lines"),
1599  GOUT(),
1600  GOUT_TYPE(),
1601  GOUT_DESC(),
1602  IN("abs_lines"),
1603  GIN("QI", "parameter_name", "change", "loose_matching"),
1604  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1605  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1606  GIN_DESC("Information to match the line.",
1607  "Name of parameter to be replaced",
1608  "Value with which to change matching line's value",
1609  "Flag for loose match (0 means only complete matches)")));
1610 
1611  md_data_raw.push_back(create_mdrecord(
1612  NAME("abs_lines_per_speciesSetBaseParameterForMatchingLines"),
1613  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLines*\n"),
1614  AUTHORS("Richard Larsson"),
1615  OUT("abs_lines_per_species"),
1616  GOUT(),
1617  GOUT_TYPE(),
1618  GOUT_DESC(),
1619  IN("abs_lines_per_species"),
1620  GIN("QI", "parameter_name", "change", "loose_matching"),
1621  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1622  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1623  GIN_DESC("Information to match the line.",
1624  "Name of parameter to be replaced",
1625  "Value with which to change matching line's value",
1626  "Flag for loose match (0 means only complete matches)")));
1627 
1628  md_data_raw.push_back(create_mdrecord(
1629  NAME("abs_lines_per_speciesSetBaseParameterForSpecies"),
1630  DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLines* but for single species\n"),
1631  AUTHORS("Richard Larsson"),
1632  OUT("abs_lines_per_species"),
1633  GOUT(),
1634  GOUT_TYPE(),
1635  GOUT_DESC(),
1636  IN("abs_lines_per_species", "abs_species"),
1637  GIN("QI", "parameter_name", "change", "loose_matching", "species_tag"),
1638  GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "String"),
1639  GIN_DEFAULT(NODEF, NODEF, NODEF, "0", NODEF),
1640  GIN_DESC("Information to match the line.",
1641  "Name of parameter to be replaced",
1642  "Value with which to change matching line's value",
1643  "Flag for loose match (0 means only complete matches)",
1644  "The species tag from *abs_species* to change")));
1645 
1646  md_data_raw.push_back(create_mdrecord(
1647  NAME("abs_linesSetLineShapeModelParameterForMatchingLines"),
1648  DESCRIPTION("Sets line shape model data parameter in matching lines.\n"
1649  "\n"
1650  "The matching is done so that QI must be in the line identifier\n"
1651  "\n"
1652  "Acceptable parameter(s) are:\n"
1653  "\t\"G0\"\n"
1654  "\t\"D0\"\n"
1655  "\t\"G2\"\n"
1656  "\t\"D2\"\n"
1657  "\t\"FVC\"\n"
1658  "\t\"ETA\"\n"
1659  "\t\"Y\"\n"
1660  "\t\"G\"\n"
1661  "\t\"DV\"\n"
1662  "\n"
1663  "Acceptable coefficient(s) are:\n"
1664  "\t\"X0\"\n"
1665  "\t\"X1\"\n"
1666  "\t\"X2\"\n"
1667  "\t\"X3\"\n"
1668  "\n"
1669  "Acceptable species are:\n"
1670  "\t\"AIR\" (so long as it is the broadening species list)\n"
1671  "\t\"SELF\" (so long as it is the broadening species list)\n"
1672  "\tAny species in the line broadening species\n"
1673  "\n"
1674  "Throws an error if it cannot find any targets to change\n"
1675  ),
1676  AUTHORS("Richard Larsson"),
1677  OUT("abs_lines"),
1678  GOUT(),
1679  GOUT_TYPE(),
1680  GOUT_DESC(),
1681  IN("abs_lines"),
1682  GIN("QI", "parameter", "coefficient", "species", "change"),
1683  GIN_TYPE("QuantumIdentifier",
1684  "String",
1685  "String",
1686  "String",
1687  "Numeric"),
1689  GIN_DESC("Information to match the line.",
1690  "Name of parameter to be replaced",
1691  "Coefficient of the parameter to be changed",
1692  "Species of parameter to be changed",
1693  "Sets the value found")));
1694 
1695  md_data_raw.push_back(create_mdrecord(
1696  NAME("abs_lines_per_speciesSetLineShapeModelParameterForMatchingLines"),
1697  DESCRIPTION("See *abs_linesSetLineShapeModelParameterForMatchingLines*\n"
1698  ),
1699  AUTHORS("Richard Larsson"),
1700  OUT("abs_lines_per_species"),
1701  GOUT(),
1702  GOUT_TYPE(),
1703  GOUT_DESC(),
1704  IN("abs_lines_per_species"),
1705  GIN("QI", "parameter", "coefficient", "species", "change"),
1706  GIN_TYPE("QuantumIdentifier",
1707  "String",
1708  "String",
1709  "String",
1710  "Numeric"),
1712  GIN_DESC("Information to match the line.",
1713  "Name of parameter to be replaced",
1714  "Coefficient of the parameter to be changed",
1715  "Species of parameter to be changed",
1716  "Sets the value found")));
1717 
1718  md_data_raw.push_back(create_mdrecord(
1719  NAME("abs_lines_per_speciesSetLineShapeModelParameterForSpecies"),
1720  DESCRIPTION("See *abs_linesSetLineShapeModelParameterForMatchingLines*\n"
1721  ),
1722  AUTHORS("Richard Larsson"),
1723  OUT("abs_lines_per_species"),
1724  GOUT(),
1725  GOUT_TYPE(),
1726  GOUT_DESC(),
1727  IN("abs_lines_per_species", "abs_species"),
1728  GIN("QI", "parameter", "coefficient", "species", "change", "species_tag"),
1729  GIN_TYPE("QuantumIdentifier",
1730  "String",
1731  "String",
1732  "String",
1733  "Numeric",
1734  "String"),
1736  GIN_DESC("Information to match the line.",
1737  "Name of parameter to be replaced",
1738  "Coefficient of the parameter to be changed",
1739  "Species of parameter to be changed",
1740  "Sets the value found",
1741  "The species tag from *abs_species* to change")));
1742 
1743  md_data_raw.push_back(create_mdrecord(
1744  NAME("abs_linesChangeLineShapeModelParameterForMatchingLines"),
1745  DESCRIPTION("Change line shape model data parameter in matching lines.\n"
1746  "\n"
1747  "The matching is done so that QI must be in the line identifier\n"
1748  "\n"
1749  "Acceptable parameter(s) are:\n"
1750  "\t\"G0\"\n"
1751  "\t\"D0\"\n"
1752  "\t\"G2\"\n"
1753  "\t\"D2\"\n"
1754  "\t\"FVC\"\n"
1755  "\t\"ETA\"\n"
1756  "\t\"Y\"\n"
1757  "\t\"G\"\n"
1758  "\t\"DV\"\n"
1759  "\n"
1760  "Acceptable coefficient(s) are:\n"
1761  "\t\"X0\"\n"
1762  "\t\"X1\"\n"
1763  "\t\"X2\"\n"
1764  "\t\"X3\"\n"
1765  "\n"
1766  "Acceptable species are:\n"
1767  "\t\"AIR\" (so long as it is the broadening species list)\n"
1768  "\t\"SELF\" (so long as it is the broadening species list)\n"
1769  "\tAny species in the line broadening species\n"
1770  "\n"
1771  "The line parameter will have its old value plus the change if\n"
1772  "relative is false, else it will have its old value times\n"
1773  "(1+change).\n"
1774  "\n"
1775  "Throws an error if it cannot find any targets to change\n"
1776  ),
1777  AUTHORS("Richard Larsson"),
1778  OUT("abs_lines"),
1779  GOUT(),
1780  GOUT_TYPE(),
1781  GOUT_DESC(),
1782  IN("abs_lines"),
1783  GIN("QI", "parameter", "coefficient", "species", "change", "relative"),
1784  GIN_TYPE("QuantumIdentifier",
1785  "String",
1786  "String",
1787  "String",
1788  "Numeric",
1789  "Index"),
1790  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "0"),
1791  GIN_DESC("Information to match the line.",
1792  "Name of parameter to be replaced",
1793  "Coefficient of the parameter to be changed",
1794  "Species of parameter to be changed",
1795  "Change in the value found",
1796  "Flag for relative change (0 is absolute change)")));
1797 
1798  md_data_raw.push_back(create_mdrecord(
1799  NAME("abs_lines_per_speciesChangeLineShapeModelParameterForMatchingLines"),
1800  DESCRIPTION("See *abs_linesChangeLineShapeModelParameterForMatchingLines*\n"
1801  ),
1802  AUTHORS("Richard Larsson"),
1803  OUT("abs_lines_per_species"),
1804  GOUT(),
1805  GOUT_TYPE(),
1806  GOUT_DESC(),
1807  IN("abs_lines_per_species"),
1808  GIN("QI", "parameter", "coefficient", "species", "change", "relative"),
1809  GIN_TYPE("QuantumIdentifier",
1810  "String",
1811  "String",
1812  "String",
1813  "Numeric",
1814  "Index"),
1815  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "0"),
1816  GIN_DESC("Information to match the line.",
1817  "Name of parameter to be replaced",
1818  "Coefficient of the parameter to be changed",
1819  "Species of parameter to be changed",
1820  "Change in the value found",
1821  "Flag for relative change (0 is absolute change)")));
1822 
1823  md_data_raw.push_back(create_mdrecord(
1824  NAME("abs_lines_per_speciesChangeLineShapeModelParameterForSpecies"),
1825  DESCRIPTION("See *abs_linesChangeLineShapeModelParameterForMatchingLines*\n"
1826  ),
1827  AUTHORS("Richard Larsson"),
1828  OUT("abs_lines_per_species"),
1829  GOUT(),
1830  GOUT_TYPE(),
1831  GOUT_DESC(),
1832  IN("abs_lines_per_species", "abs_species"),
1833  GIN("QI", "parameter", "coefficient", "species", "change", "relative", "species_tag"),
1834  GIN_TYPE("QuantumIdentifier",
1835  "String",
1836  "String",
1837  "String",
1838  "Numeric",
1839  "Index",
1840  "String"),
1842  GIN_DESC("Information to match the line.",
1843  "Name of parameter to be replaced",
1844  "Coefficient of the parameter to be changed",
1845  "Species of parameter to be changed",
1846  "Change in the value found",
1847  "Flag for relative change (0 is absolute change)",
1848  "The species tag from *abs_species* to change")));
1849 
1850  md_data_raw.push_back(create_mdrecord(
1851  NAME("abs_linesCompact"),
1852  DESCRIPTION("Removes lines that are unimportant because of their\n"
1853  "cutoff frequency range\n"),
1854  AUTHORS("Stefan Buehler", "Richard Larsson"),
1855  OUT("abs_lines"),
1856  GOUT(),
1857  GOUT_TYPE(),
1858  GOUT_DESC(),
1859  IN("abs_lines", "f_grid"),
1860  GIN(),
1861  GIN_TYPE(),
1862  GIN_DEFAULT(),
1863  GIN_DESC()));
1864 
1865  md_data_raw.push_back(create_mdrecord(
1866  NAME("abs_lines_per_speciesCompact"),
1867  DESCRIPTION("See *abs_linesCompact*\n"),
1868  AUTHORS("Stefan Buehler", "Richard Larsson"),
1869  OUT("abs_lines_per_species"),
1870  GOUT(),
1871  GOUT_TYPE(),
1872  GOUT_DESC(),
1873  IN("abs_lines_per_species", "f_grid"),
1874  GIN(),
1875  GIN_TYPE(),
1876  GIN_DEFAULT(),
1877  GIN_DESC()));
1878 
1879  md_data_raw.push_back(create_mdrecord(
1880  NAME("abs_lines_per_speciesCreateFromLines"),
1881  DESCRIPTION(
1882  "Split lines up into the different species.\n"
1883  "\n"
1884  "The order of the splitting will match the outer layer of *abs_species*\n"
1885  "There will be no respect for the internal layer of *abs_species*\n"),
1886  AUTHORS("Stefan Buehler"),
1887  OUT("abs_lines_per_species"),
1888  GOUT(),
1889  GOUT_TYPE(),
1890  GOUT_DESC(),
1891  IN("abs_lines", "abs_species"),
1892  GIN(),
1893  GIN_TYPE(),
1894  GIN_DEFAULT(),
1895  GIN_DESC()));
1896 
1897  md_data_raw.push_back(create_mdrecord(
1898  NAME("abs_lookupAdapt"),
1899  DESCRIPTION(
1900  "Adapts a gas absorption lookup table to the current calculation.\n"
1901  "\n"
1902  "The lookup table can contain more species and more frequencies than\n"
1903  "are needed for the current calculation. This method cuts down the\n"
1904  "table in memory, so that it contains just what is needed. Also, the\n"
1905  "species in the table are brought in the same order as the species in\n"
1906  "the current calculation.\n"
1907  "\n"
1908  "Of course, the method also performs quite a lot of checks on the\n"
1909  "table. If something is not ok, a runtime error is thrown.\n"
1910  "\n"
1911  "The method sets a flag *abs_lookup_is_adapted* to indicate that the\n"
1912  "table has been checked and that it is ok. Never set this by hand,\n"
1913  "always use this method to set it!\n"),
1914  AUTHORS("Stefan Buehler"),
1915  OUT("abs_lookup", "abs_lookup_is_adapted"),
1916  GOUT(),
1917  GOUT_TYPE(),
1918  GOUT_DESC(),
1919  IN("abs_lookup", "abs_species", "f_grid"),
1920  GIN(),
1921  GIN_TYPE(),
1922  GIN_DEFAULT(),
1923  GIN_DESC()));
1924 
1925  md_data_raw.push_back(create_mdrecord(
1926  NAME("abs_lookupCalc"),
1927  DESCRIPTION(
1928  "Creates a gas absorption lookup table.\n"
1929  "\n"
1930  "The lookup table stores absorption cross-sections as a function of\n"
1931  "pressure. Additionally, absorption can be stored as a function of\n"
1932  "temperature for temperature perturbations from a reference\n"
1933  "profile.\n"
1934  "\n"
1935  "Additionally, absorption can be stored as a function of water vapor\n"
1936  "VMR perturbations from a reference profile. The variable *abs_nls*\n"
1937  "specifies, for which species water vapor perturbations should be\n"
1938  "generated.\n"
1939  "\n"
1940  "Note, that the absorbing gas can be any gas, but the perturbing gas is\n"
1941  "always H2O.\n"),
1942  AUTHORS("Stefan Buehler"),
1943  OUT("abs_lookup", "abs_lookup_is_adapted"),
1944  GOUT(),
1945  GOUT_TYPE(),
1946  GOUT_DESC(),
1947  IN("abs_species",
1948  "abs_nls",
1949  "f_grid",
1950  "abs_p",
1951  "abs_vmrs",
1952  "abs_t",
1953  "abs_t_pert",
1954  "abs_nls_pert",
1955  "abs_xsec_agenda"),
1956  GIN(),
1957  GIN_TYPE(),
1958  GIN_DEFAULT(),
1959  GIN_DESC()));
1960 
1961  md_data_raw.push_back(create_mdrecord(
1962  NAME("abs_lookupInit"),
1963  DESCRIPTION(
1964  "Creates an empty gas absorption lookup table.\n"
1965  "\n"
1966  "This is mainly there to help developers. For example, you can write\n"
1967  "the empty table to an XML file, to see the file format.\n"),
1968  AUTHORS("Stefan Buehler"),
1969  OUT("abs_lookup"),
1970  GOUT(),
1971  GOUT_TYPE(),
1972  GOUT_DESC(),
1973  IN(),
1974  GIN(),
1975  GIN_TYPE(),
1976  GIN_DEFAULT(),
1977  GIN_DESC()));
1978 
1979  md_data_raw.push_back(create_mdrecord(
1980  NAME("abs_lookupSetup"),
1981  DESCRIPTION(
1982  "Set up input parameters for abs_lookupCalc.\n"
1983  "\n"
1984  "More information can be found in the documentation for method\n"
1985  "*abs_lookupSetupBatch*\n"
1986  "\n"
1987  "Max and min values of H2O and temperature are adjusted to allow for\n"
1988  "numerical perturbations in Jacobian calculation.\n"
1989  "\n"
1990  "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
1991  "are used to make sure that there are enough points in *abs_nls_pert*\n"
1992  "and *abs_t_pert* for the chosen interpolation order.\n"
1993  "\n"
1994  "Note: For homogeneous 1D cases, it can be advantageous to calculate\n"
1995  "*abs_lookup* from the 1D atmosphere, and to expand the atmosphere\n"
1996  "to 3D only after that. This particularly if nonlinear species\n"
1997  "(i.e., H2O) are involved."
1998  "\n"
1999  "See also:\n"
2000  " *abs_lookupSetupBatch*\n"),
2001  AUTHORS("Stefan Buehler"),
2002  OUT("abs_p",
2003  "abs_t",
2004  "abs_t_pert",
2005  "abs_vmrs",
2006  "abs_nls",
2007  "abs_nls_pert"),
2008  GOUT(),
2009  GOUT_TYPE(),
2010  GOUT_DESC(),
2011  IN("atmosphere_dim",
2012  "p_grid",
2013  // "lat_grid",
2014  // "lon_grid",
2015  "t_field",
2016  "vmr_field",
2017  "atmfields_checked",
2018  "abs_species",
2019  "abs_p_interp_order",
2020  "abs_t_interp_order",
2021  "abs_nls_interp_order"),
2022  GIN("p_step", "t_step", "h2o_step"),
2023  GIN_TYPE("Numeric", "Numeric", "Numeric"),
2024  GIN_DEFAULT("0.05", "100", "100"),
2025  GIN_DESC(/* p_step */
2026  "Maximum step in log10(p[Pa]). If the pressure grid is "
2027  "coarser than this, additional points are added until each "
2028  "log step is smaller than this.",
2029  /* t_step */
2030  "The temperature variation grid step in Kelvin, "
2031  "for a 2D or 3D atmosphere. For a 1D atmosphere this "
2032  "parameter is not used.",
2033  /* h2o_step */
2034  "The H2O variation grid step [fractional], if "
2035  "H2O variations are done (which is determined automatically, "
2036  "based on abs_species and the atmospheric dimension). For a "
2037  "1D atmosphere this parameter is not used.")));
2038 
2039  md_data_raw.push_back(create_mdrecord(
2040  NAME("abs_lookupSetupBatch"),
2041  DESCRIPTION(
2042  "Set up input parameters for abs_lookupCalc for batch calculations.\n"
2043  "\n"
2044  "This method performs a similar task as *abs_lookupSetup*, with the\n"
2045  "difference that the lookup table setup is not for a single\n"
2046  "atmospheric state, but for a whole batch of them, stored in\n"
2047  "*batch_atm_fields_compact*.\n"
2048  "\n"
2049  "The method checks *abs_species* to decide which species require\n"
2050  "nonlinear treatment in the lookup table.\n"
2051  "\n"
2052  "The method also checks which range of pressures, temperatures, and\n"
2053  "VMRs occurs, and sets *abs_p*, *abs_t*, *abs_t_pert*, and *abs_vmrs*\n"
2054  "accordingly.\n"
2055  "\n"
2056  "If nonlinear species are present, *abs_nls* and *abs_nls_pert* are also\n"
2057  "generated.\n"
2058  "\n"
2059  "Max and min values of H2O and temperature are adjusted to allow for\n"
2060  "numerical perturbations in Jacobian calculation.\n"
2061  "\n"
2062  "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
2063  "are used to make sure that there are enough points in *abs_nls_pert*\n"
2064  "and *abs_t_pert* for the chosen interpolation order.\n"
2065  "\n"
2066  "The method checks each given field using *atmfields_checkedCalc*.\n"
2067  "If a field does not pass the check, a run-time error is thrown.\n"
2068  "To prevent this, the parameter *robust* can be set to one: Invalid \n"
2069  "atmospheres are skipped, but the run continues. This matches the \n"
2070  "robust behaviour of *ybatchCalc*.\n"
2071  "\n"
2072  "See also:\n"
2073  " *abs_lookupSetup*\n"),
2074  AUTHORS("Stefan Buehler"),
2075  OUT("abs_p",
2076  "abs_t",
2077  "abs_t_pert",
2078  "abs_vmrs",
2079  "abs_nls",
2080  "abs_nls_pert"),
2081  GOUT(),
2082  GOUT_TYPE(),
2083  GOUT_DESC(),
2084  IN("abs_species",
2085  "batch_atm_fields_compact",
2086  "abs_p_interp_order",
2087  "abs_t_interp_order",
2088  "abs_nls_interp_order",
2089  "atmosphere_dim"),
2090  GIN("p_step",
2091  "t_step",
2092  "h2o_step",
2093  "extremes",
2094  "robust",
2095  "check_gridnames"),
2096  GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Index", "Index"),
2097  GIN_DEFAULT("0.05", "20", "100", "[]", "0", "0"),
2098  GIN_DESC(/* p_step */
2099  "Grid step in log10(p[Pa]) (base 10 logarithm).",
2100  /* t_step */
2101  "The temperature variation grid step in Kelvin. The true "
2102  "step can become finer than this, if required by the "
2103  "interpolation order.",
2104  /* h2o_step */
2105  "The H2O variation grid step [fractional], if H2O variations "
2106  "are done (which is determined automatically, based on "
2107  "abs_species and the atmospheric dimension). As for T, the true "
2108  "step can turn out finer if required by the interpolation order.",
2109  /* extremes */
2110  "You can give here explicit extreme values to add to "
2111  "abs_t_pert and abs_nls_pert. The order is [t_pert_min, "
2112  "t_pert_max, nls_pert_min, nls_pert_max].",
2113  /* robust */
2114  "A flag with value 1 or 0. If set to one, the batch\n"
2115  "setup will continue, even if individual fields are invalid.\n"
2116  "This is consistent with the behaviour of *ybatchCalc*.",
2117  /* check_gridnames */
2118  "A flag with value 1 or 0. If set to one, the gridnames of \n"
2119  " every *atm_fields_compact* are checked.")));
2120 
2121  md_data_raw.push_back(create_mdrecord(
2122  NAME("abs_lookupSetupWide"),
2123  DESCRIPTION(
2124  "Set up input parameters for abs_lookupCalc for a wide range of\n"
2125  "atmospheric conditions.\n"
2126  "\n"
2127  "This method can be used to set up parameters for a lookup table that\n"
2128  "really covers all reasonable atmospheric conditions.\n"
2129  "\n"
2130  "Reference profiles of T and H2O will be constant, so that the\n"
2131  "different dimensions in the lookup table are actually \"orthogonal\",\n"
2132  "unlike the traditional case where we have pressure dependent reference\n"
2133  "profiles. This makes the table numerically somewhat more robust then\n"
2134  "the traditional ones, and it makes it straightforward to calculate the\n"
2135  "accuracy for the different interpolations with abs_lookupTestAccuracy.\n"
2136  "\n"
2137  "You can give min an max values for the atmospheric conditions. The\n"
2138  "default values are chosen such that they cover the value range over\n"
2139  "the complete Chevallier91L data set, and a bit more. The statistics\n"
2140  "of the Chevallier91L data are:\n"
2141  "\n"
2142  "min(p) / max(p) [Pa]: 1 / 104960\n"
2143  "min(T) / max(T) [K]: 158.21 / 320.39\n"
2144  "min(H2O) / max(H2O) [VMR]: -5.52e-07 / 0.049\n"),
2145  AUTHORS("Stefan Buehler"),
2146  OUT("abs_p",
2147  "abs_t",
2148  "abs_t_pert",
2149  "abs_vmrs",
2150  "abs_nls",
2151  "abs_nls_pert"),
2152  GOUT(),
2153  GOUT_TYPE(),
2154  GOUT_DESC(),
2155  IN("abs_species",
2156  "abs_p_interp_order",
2157  "abs_t_interp_order",
2158  "abs_nls_interp_order"),
2159  GIN("p_min", "p_max", "p_step", "t_min", "t_max", "h2o_min", "h2o_max"),
2160  GIN_TYPE("Numeric",
2161  "Numeric",
2162  "Numeric",
2163  "Numeric",
2164  "Numeric",
2165  "Numeric",
2166  "Numeric"),
2167  GIN_DEFAULT("0.5", "110000", "0.05", "100", "400", "0", "0.05"),
2168  GIN_DESC("Pressure grid minimum [Pa].",
2169  "Pressure grid maximum [Pa].",
2170  "Pressure grid step in log10(p[Pa]) (base 10 logarithm).",
2171  "Temperature grid minimum [K].",
2172  "Temperature grid maximum [K].",
2173  "Humidity grid minimum [fractional].",
2174  "Humidity grid maximum [fractional].")));
2175 
2176  md_data_raw.push_back(create_mdrecord(
2177  NAME("abs_lookupTestAccuracy"),
2178  DESCRIPTION(
2179  "Test accuracy of absorption lookup table.\n"
2180  "\n"
2181  "Explicitly compare absorption from the lookup table with line-by-line\n"
2182  "calculations for strategically selected conditions (in-between the\n"
2183  "lookup table grid points).\n"
2184  "\n"
2185  "For error units see *abs_lookupTestAccMC*\n"
2186  "\n"
2187  "Produces no workspace output, only output to the output streams.\n"),
2188  AUTHORS("Stefan Buehler"),
2189  OUT(),
2190  GOUT(),
2191  GOUT_TYPE(),
2192  GOUT_DESC(),
2193  IN("abs_lookup",
2194  "abs_lookup_is_adapted",
2195  "abs_p_interp_order",
2196  "abs_t_interp_order",
2197  "abs_nls_interp_order",
2198  "abs_xsec_agenda"),
2199  GIN(),
2200  GIN_TYPE(),
2201  GIN_DEFAULT(),
2202  GIN_DESC()));
2203 
2204  md_data_raw.push_back(create_mdrecord(
2205  NAME("abs_lookupTestAccMC"),
2206  DESCRIPTION(
2207  "Test accuracy of absorption lookup table with Monte Carlo Algorithm.\n"
2208  "\n"
2209  "Explicitly compare absorption from the lookup table with line-by-line\n"
2210  "calculations for random conditions.\n"
2211  "\n"
2212  "The quantities returned are the mean value and standard deviation of\n"
2213  "the absolute value of the relative error in percent.\n"
2214  "The relative error itself is computed for a large number of cases\n"
2215  "(pressure, temperature, and H2O VMR combinations). In the frequency\n"
2216  "dimension the maximum value is taken for each case.\n"
2217  "\n"
2218  "Produces no workspace output, only output to the output streams.\n"),
2219  AUTHORS("Stefan Buehler"),
2220  OUT(),
2221  GOUT(),
2222  GOUT_TYPE(),
2223  GOUT_DESC(),
2224  IN("abs_lookup",
2225  "abs_lookup_is_adapted",
2226  "abs_p_interp_order",
2227  "abs_t_interp_order",
2228  "abs_nls_interp_order",
2229  "mc_seed",
2230  "abs_xsec_agenda"),
2231  GIN(),
2232  GIN_TYPE(),
2233  GIN_DEFAULT(),
2234  GIN_DESC()));
2235 
2236  md_data_raw.push_back(create_mdrecord(
2237  NAME("abs_nlteFromRaw"),
2238  DESCRIPTION("Sets NLTE values manually\n"
2239  "\n"
2240  "Touch\n"),
2241  AUTHORS("Richard Larsson"),
2242  OUT("abs_nlte"),
2243  GOUT(),
2244  GOUT_TYPE(),
2245  GOUT_DESC(),
2246  IN("nlte_level_identifiers",
2247  "nlte_vibrational_energies"),
2248  GIN("data"),
2249  GIN_TYPE("Matrix"),
2250  GIN_DEFAULT(NODEF),
2251  GIN_DESC("Vibrational data [nlevels, np]")));
2252 
2253  md_data_raw.push_back(create_mdrecord(
2254  NAME("abs_speciesAdd"),
2255  DESCRIPTION(
2256  "Adds species tag groups to the list of absorption species.\n"
2257  "\n"
2258  "This WSM is similar to *abs_speciesSet*, the only difference is that\n"
2259  "this method appends species to an existing list of absorption species instead\n"
2260  "of creating the whole list.\n"
2261  "\n"
2262  "See *abs_speciesSet* for details on how tags are defined and examples of\n"
2263  "how to input them in the control file.\n"),
2264  AUTHORS("Stefan Buehler"),
2265  OUT("abs_species",
2266  "propmat_clearsky_agenda_checked",
2267  "abs_xsec_agenda_checked"),
2268  GOUT(),
2269  GOUT_TYPE(),
2270  GOUT_DESC(),
2271  IN("abs_species"),
2272  GIN("species"),
2273  GIN_TYPE("ArrayOfString"),
2274  GIN_DEFAULT(NODEF),
2275  GIN_DESC("Specify one String for each tag group that you want to\n"
2276  "add. Inside the String, separate the tags by commas\n"
2277  "(plus optional blanks).\n")));
2278 
2279  md_data_raw.push_back(create_mdrecord(
2280  NAME("abs_speciesAdd2"),
2281  DESCRIPTION(
2282  "Adds a species tag group to the list of absorption species and\n"
2283  "jacobian quantities.\n"
2284  "\n"
2285  "The method is basically a combined call of *abs_speciesAdd* and\n"
2286  "*jacobianAddAbsSpecies*. In this way it is not needed to specify a\n"
2287  "tag group in two different places.\n"
2288  "\n"
2289  "Arguments exactly as for *jacobianAddAbsSpecies*. Note that this\n"
2290  "method only handles a single tag group, in contrast to\n"
2291  "*abs_speciesAdd*.\n"),
2292  AUTHORS("Patrick Eriksson"),
2293  OUT("abs_species",
2294  "jacobian_quantities",
2295  "jacobian_agenda",
2296  "propmat_clearsky_agenda_checked",
2297  "abs_xsec_agenda_checked"),
2298  GOUT(),
2299  GOUT_TYPE(),
2300  GOUT_DESC(),
2301  IN("abs_species", "atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
2302  GIN("gin1", "gin2", "gin3", "species", "unit"),
2303  GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
2304  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "vmr"),
2305  GIN_DESC("Pressure retrieval grid.",
2306  "Latitude retrieval grid.",
2307  "Longitude retreival grid.",
2308  "The species tag of the retrieval quantity.",
2309  "Retrieval unit. See above."),
2310  SETMETHOD(false),
2311  AGENDAMETHOD(false),
2312  USES_TEMPLATES(false),
2313  PASSWORKSPACE(true)));
2314 
2315  md_data_raw.push_back(create_mdrecord(
2316  NAME("abs_speciesDefineAllInScenario"),
2317  DESCRIPTION(
2318  "Define one tag group for each species known to ARTS and included in an\n"
2319  "atmospheric scenario.\n"
2320  "\n"
2321  "You can use this as an alternative to *abs_speciesSet* if you want to make an\n"
2322  "absorption calculation that is as complete as possible. The method\n"
2323  "goes through all defined species and tries to open the VMR file. If\n"
2324  "this works the tag is included, otherwise it is skipped.\n"),
2325  AUTHORS("Stefan Buehler"),
2326  OUT("abs_species",
2327  "propmat_clearsky_agenda_checked",
2328  "abs_xsec_agenda_checked"),
2329  GOUT(),
2330  GOUT_TYPE(),
2331  GOUT_DESC(),
2332  IN(),
2333  GIN("basename"),
2334  GIN_TYPE("String"),
2335  GIN_DEFAULT(NODEF),
2336  GIN_DESC(
2337  "The name and path of a particular atmospheric scenario.\n"
2338  "For example: /pool/lookup2/arts-data/atmosphere/fascod/tropical")));
2339 
2340  md_data_raw.push_back(create_mdrecord(
2341  NAME("abs_speciesDefineAll"),
2342  DESCRIPTION("Sets *abs_species*[i][0] to all species in ARTS\n"),
2343  AUTHORS("Richard Larsson"),
2344  OUT("abs_species",
2345  "propmat_clearsky_agenda_checked",
2346  "abs_xsec_agenda_checked"),
2347  GOUT(),
2348  GOUT_TYPE(),
2349  GOUT_DESC(),
2350  IN(),
2351  GIN(),
2352  GIN_TYPE(),
2353  GIN_DEFAULT(),
2354  GIN_DESC()));
2355 
2356  md_data_raw.push_back(
2357  create_mdrecord(NAME("abs_speciesInit"),
2358  DESCRIPTION("Sets *abs_species* to be empty.\n"),
2359  AUTHORS("Stefan Buehler"),
2360  OUT("abs_species"),
2361  GOUT(),
2362  GOUT_TYPE(),
2363  GOUT_DESC(),
2364  IN(),
2365  GIN(),
2366  GIN_TYPE(),
2367  GIN_DEFAULT(),
2368  GIN_DESC()));
2369 
2370  md_data_raw.push_back(create_mdrecord(
2371  NAME("abs_speciesSet"),
2372  DESCRIPTION(
2373  "Set up a list of absorption species tag groups.\n"
2374  "\n"
2375  "Workspace variables like *abs_species* contain several tag\n"
2376  "groups. Each tag group contains one or more tags. This method converts\n"
2377  "descriptions of tag groups given in the keyword to the ARTS internal\n"
2378  "representation (an *ArrayOfArrayOfSpeciesTag*). A tag group selects\n"
2379  "spectral features which belong to the same species.\n"
2380  "\n"
2381  "A tag is defined in terms of the name of the species, isotopologue, and a\n"
2382  "range of frequencies. Species are named after the standard chemical\n"
2383  "names, e.g., \"O3\". Isotopologues are given by the last digit of the atomic\n"
2384  "weight, i.g., \"O3-668\" for the asymmetric ozone molecule including an\n"
2385  "oxygen 18 atom. Groups of transitions are specified by giving a lower\n"
2386  "and upper limit of a frequency range, e.g., \"O3-666-500e9-501e9\".\n"
2387  "\n"
2388  "To turn on Zeeman calculation for a species, \"-Z\" may be appended\n"
2389  "to its name: \"O2-Z\" or \"O2-Z-66\"\n"
2390  "\n"
2391  "To turn on line mixing calculation for a species, \"-LM\" may be appended\n"
2392  "to its name (or after the Zeeman tag): \"O2-LM\" or \"O2-Z-LM-66\"\n"
2393  "\n"
2394  "The symbol \"*\" acts as a wild card. Furthermore, frequency range or\n"
2395  "frequency range and isotopologue may be omitted.\n"
2396  "\n"
2397  "Finally, instead of the isotopologue the special letter \"nl\" may be given,\n"
2398  "e.g., \"H2O-nl\". This means that no absorption at all is associated\n"
2399  "with this tag. (It is not quite clear if this feature is useful for\n"
2400  "anything right now.)\n"
2401  "\n"
2402  "Example:\n"
2403  "\n"
2404  " species = [ \"O3-666-500e9-501e9, O3-686\",\n"
2405  " \"O3\",\n"
2406  " \"H2O-PWR98\" ]\n"
2407  "\n"
2408  " The first tag group selects all O3-666 lines between 500 and\n"
2409  " 501 GHz plus all O3-686 lines. \n"
2410  "\n"
2411  " The second tag group selects all remaining O3 transitions.\n"
2412  "\n"
2413  " The third tag group selects H2O, with one of the complete\n"
2414  " absorption models (Rosenkranz 98). No spectrocopic line catalogue\n"
2415  " data will be used for that third tag group.\n"
2416  "\n"
2417  " Note that order of tag groups in the species list matters. In our\n"
2418  " example, changing the order of the first two tag group will give\n"
2419  " different results: as \"O3\" already selects all O3 transitions,\n"
2420  " no lines will remain to be selected by the\n"
2421  " \"O3-666-500e9-501e9, O3-686\" tag.\n"
2422  "\n"
2423  "For CIA species the tag consists of the two involved species and\n"
2424  "a dataset index. CIA species can be defined for multiple regions\n"
2425  "The dataset index determines which region to use from the corresponding\n"
2426  "CIARecord in *abs_cia_data*.\n"
2427  "\n"
2428  "Example\n"
2429  "\n"
2430  "species = [ \"N2-CIA-N2-0, N2-CIA-N2-1\" ]\n"
2431  "\n"
2432  "For Hitran cross section species the tag consists of the species and\n"
2433  "the tagtype HXSEC, e.g. CFC11-HXSEC. The data for the species must be\n"
2434  "available in the *hitran_xsec_data* variable."
2435  "\n"
2436  "*abs_xsec_agenda_checked* and *propmat_clearsky_agenda_checked*\n"
2437  "are set to be false.\n"),
2438  AUTHORS("Stefan Buehler"),
2439  OUT("abs_species",
2440  "abs_xsec_agenda_checked",
2441  "propmat_clearsky_agenda_checked"),
2442  GOUT(),
2443  GOUT_TYPE(),
2444  GOUT_DESC(),
2445  IN(),
2446  GIN("species"),
2447  GIN_TYPE("ArrayOfString"),
2448  GIN_DEFAULT(NODEF),
2449  GIN_DESC("Specify one String for each tag group that you want to\n"
2450  "create. Inside the String, separate the tags by commas\n"
2451  "(plus optional blanks).\n")));
2452 
2453  md_data_raw.push_back(create_mdrecord(
2454  NAME("abs_vecAddGas"),
2455  DESCRIPTION(
2456  "Add gas absorption to first element of absorption vector.\n"
2457  "\n"
2458  "The task of this method is to sum up the gas absorption of the\n"
2459  "different gas species and add the result to the first element of the\n"
2460  "absorption vector.\n"),
2461  AUTHORS("Stefan Buehler"),
2462  OUT("abs_vec"),
2463  GOUT(),
2464  GOUT_TYPE(),
2465  GOUT_DESC(),
2466  IN("abs_vec", "propmat_clearsky"),
2467  GIN(),
2468  GIN_TYPE(),
2469  GIN_DEFAULT(),
2470  GIN_DESC()));
2471 
2472  md_data_raw.push_back(create_mdrecord(
2473  NAME("abs_xsec_agenda_checkedCalc"),
2474  DESCRIPTION(
2475  "Checks if the *abs_xsec_agenda* contains all necessary\n"
2476  "methods to calculate all the species in *abs_species*.\n"
2477  "\n"
2478  "This method should be called just before the *abs_xsec_agenda*\n"
2479  "is used, e.g. *abs_lookupCalc*, *ybatchCalc*, *yCalc*\n"),
2480  AUTHORS("Oliver Lemke"),
2481  OUT("abs_xsec_agenda_checked"),
2482  GOUT(),
2483  GOUT_TYPE(),
2484  GOUT_DESC(),
2485  IN("abs_species", "abs_xsec_agenda"),
2486  GIN(),
2487  GIN_TYPE(),
2488  GIN_DEFAULT(),
2489  GIN_DESC()));
2490 
2491  md_data_raw.push_back(create_mdrecord(
2492  NAME("abs_xsec_per_speciesAddCIA"),
2493  DESCRIPTION(
2494  "Calculate absorption cross sections per tag group for HITRAN CIA continua.\n"
2495  "\n"
2496  "This interpolates the cross sections from *abs_cia_data*.\n"
2497  "\n"
2498  "The robust option is intended only for testing. Do not use for normal\n"
2499  "runs, since subsequent functions will not be able to deal with NAN values.\n"),
2500  AUTHORS("Stefan Buehler"),
2501  OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2502  GOUT(),
2503  GOUT_TYPE(),
2504  GOUT_DESC(),
2505  IN("abs_xsec_per_species",
2506  "dabs_xsec_per_species_dx",
2507  "abs_species",
2508  "jacobian_quantities",
2509  "abs_species_active",
2510  "f_grid",
2511  "abs_p",
2512  "abs_t",
2513  "abs_vmrs",
2514  "abs_cia_data"),
2515  GIN("T_extrapolfac", "robust"),
2516  GIN_TYPE("Numeric", "Index"),
2517  GIN_DEFAULT("0.5", "0"),
2518  GIN_DESC(
2519  "Temperature extrapolation factor (relative to grid spacing).",
2520  "Set to 1 to suppress runtime errors (and return NAN values instead).")));
2521 
2522  md_data_raw.push_back(create_mdrecord(
2523  NAME("abs_xsec_per_speciesAddHitranXsec"),
2524  DESCRIPTION(
2525  "Calculate absorption cross sections per tag group for HITRAN xsec species.\n"
2526  "\n"
2527  "This broadens the cross section data from *hitran_xsec_data* and\n"
2528  "interpolates it onto the current f_grid.\n"
2529  "\n"
2530  "apply_tfit turns of the temperature fit. It is only meant for testing\n"
2531  "and should alwasy be kept on for real calculations.\n"
2532  "\n"
2533  "This method depends on the FFTW-3 library.\n"),
2534  AUTHORS("Oliver Lemke"),
2535  OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2536  GOUT(),
2537  GOUT_TYPE(),
2538  GOUT_DESC(),
2539  IN("abs_xsec_per_species",
2540  "dabs_xsec_per_species_dx",
2541  "abs_species",
2542  "jacobian_quantities",
2543  "abs_species_active",
2544  "f_grid",
2545  "abs_p",
2546  "abs_t",
2547  "hitran_xsec_data"),
2548  GIN("apply_tfit", "force_p", "force_t"),
2549  GIN_TYPE("Index", "Numeric", "Numeric"),
2550  GIN_DEFAULT("1", "-1", "-1"),
2551  GIN_DESC("Apply temperature fit.",
2552  "Positive value forces constant pressure [Pa].",
2553  "Positive value forces constant temperature [K].")));
2554 
2555  md_data_raw.push_back(create_mdrecord(
2556  NAME("abs_xsec_per_speciesAddConts"),
2557  DESCRIPTION(
2558  "Calculate absorption cross sections per tag group for continua.\n"),
2559  AUTHORS("Stefan Buehler"),
2560  OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2561  GOUT(),
2562  GOUT_TYPE(),
2563  GOUT_DESC(),
2564  IN("abs_xsec_per_species",
2565  "dabs_xsec_per_species_dx",
2566  "abs_species",
2567  "jacobian_quantities",
2568  "abs_species_active",
2569  "f_grid",
2570  "abs_p",
2571  "abs_t",
2572  "abs_vmrs",
2573  "abs_cont_names",
2574  "abs_cont_parameters",
2575  "abs_cont_models"),
2576  GIN(),
2577  GIN_TYPE(),
2578  GIN_DEFAULT(),
2579  GIN_DESC()));
2580 
2581  md_data_raw.push_back(create_mdrecord(
2582  NAME("abs_xsec_per_speciesAddLines"),
2583  DESCRIPTION(
2584  "Calculates the line spectrum for both attenuation and phase\n"
2585  "for each tag group and adds it to abs_xsec_per_species.\n"),
2586  AUTHORS("Richard Larsson"),
2587  OUT("abs_xsec_per_species",
2588  "src_xsec_per_species",
2589  "dabs_xsec_per_species_dx",
2590  "dsrc_xsec_per_species_dx"),
2591  GOUT(),
2592  GOUT_TYPE(),
2593  GOUT_DESC(),
2594  IN("abs_xsec_per_species",
2595  "src_xsec_per_species",
2596  "dabs_xsec_per_species_dx",
2597  "dsrc_xsec_per_species_dx",
2598  "abs_species",
2599  "jacobian_quantities",
2600  "abs_species_active",
2601  "f_grid",
2602  "abs_p",
2603  "abs_t",
2604  "abs_nlte",
2605  "abs_vmrs",
2606  "abs_lines_per_species",
2607  "isotopologue_ratios",
2608  "partition_functions",
2609  "lbl_checked"),
2610  GIN(),
2611  GIN_TYPE(),
2612  GIN_DEFAULT(),
2613  GIN_DESC()));
2614 
2615  md_data_raw.push_back(create_mdrecord(
2616  NAME("abs_xsec_per_speciesAddPredefinedO2MPM2020"),
2617  DESCRIPTION("Reimplementation of published O2 absorption line cross-section algorithm\n"
2618  "\n"
2619  "Based on:\n"
2620  "\tDmitriy S. Makarov, Mikhail Yu. Tretyakov, Philip W. Rosenkranz, JQSRT 243, 2020,\n"
2621  "\tRevision of the 60-GHz atmospheric oxygen absorption band models for practical use,\n"
2622  "\thttps://doi.org/10.1016/j.jqsrt.2019.106798\n"
2623  "\n"
2624  "Note that this is only really applicable to Earth and at lower altitudes.\n"
2625  "The only two tested derivatives are for frequency and for temperature but\n"
2626  "other untested derivatives are available for all model parameters except a2\n"
2627  ),
2628  AUTHORS("Richard Larsson"),
2629  OUT("abs_xsec_per_species",
2630  "dabs_xsec_per_species_dx"),
2631  GOUT(),
2632  GOUT_TYPE(),
2633  GOUT_DESC(),
2634  IN("abs_xsec_per_species",
2635  "dabs_xsec_per_species_dx",
2636  "abs_species",
2637  "jacobian_quantities",
2638  "f_grid",
2639  "abs_p",
2640  "abs_t",
2641  "abs_vmrs"),
2642  GIN(),
2643  GIN_TYPE(),
2644  GIN_DEFAULT(),
2645  GIN_DESC()));
2646 
2647  md_data_raw.push_back(create_mdrecord(
2648  NAME("abs_xsec_per_speciesInit"),
2649  DESCRIPTION(
2650  "Initialize *abs_xsec_per_species*.\n"
2651  "\n"
2652  "The initialization is\n"
2653  "necessary, because methods *abs_xsec_per_speciesAddLines*\n"
2654  "and *abs_xsec_per_speciesAddConts* just add to *abs_xsec_per_species*.\n"
2655  "The size is determined from *abs_species*.\n"),
2656  AUTHORS("Stefan Buehler"),
2657  OUT("abs_xsec_per_species",
2658  "src_xsec_per_species",
2659  "dabs_xsec_per_species_dx",
2660  "dsrc_xsec_per_species_dx"),
2661  GOUT(),
2662  GOUT_TYPE(),
2663  GOUT_DESC(),
2664  IN("abs_species",
2665  "jacobian_quantities",
2666  "abs_species_active",
2667  "f_grid",
2668  "abs_p",
2669  "abs_xsec_agenda_checked",
2670  "nlte_do"),
2671  GIN(),
2672  GIN_TYPE(),
2673  GIN_DEFAULT(),
2674  GIN_DESC()));
2675 
2676  md_data_raw.push_back(create_mdrecord(
2677  NAME("AddZaAa"),
2678  DESCRIPTION(
2679  "Adds zenith and azimuth angles.\n"
2680  "\n"
2681  "Adds up line-of-sights (LOS). In short, *dlos* is added to *ref_los*,\n"
2682  "assuming that a unit changes in zenith and azimuth are equal where\n"
2683  "dlos=(0,0).\n"),
2684  AUTHORS("Patrick Eriksson"),
2685  OUT(),
2686  GOUT("new_los"),
2687  GOUT_TYPE("Matrix"),
2688  GOUT_DESC("End line-of-sights."),
2689  IN(),
2690  GIN("ref_los", "dlos"),
2691  GIN_TYPE("Vector", "Matrix"),
2693  GIN_DESC("Reference line-of-sight (a single LOS).",
2694  "Change in line-of-sight (can be multiple LOS).")));
2695 
2696  md_data_raw.push_back(create_mdrecord(
2697  NAME("AgendaAppend"),
2698  DESCRIPTION(
2699  "Append methods to an agenda.\n"
2700  "\n"
2701  "An agenda is used to store a list of methods that are meant to be\n"
2702  "executed sequentially.\n"
2703  "\n"
2704  "This method takes the methods given in the body (in the curly braces)\n"
2705  "and appends them to the agenda given by the output argument (in the round\n"
2706  "braces).\n"
2707  "\n"
2708  "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
2709  "check, whether the given methods use the right input WSVs and produce\n"
2710  "the right output WSVs.\n"),
2711  AUTHORS("Oliver Lemke"),
2712  OUT(),
2713  GOUT("out"),
2714  GOUT_TYPE("Agenda"),
2715  GOUT_DESC("Target agenda."),
2716  IN(),
2717  GIN("in"),
2718  GIN_TYPE("Agenda"),
2719  GIN_DEFAULT(NODEF),
2720  GIN_DESC("Source agenda."),
2721  SETMETHOD(false),
2722  AGENDAMETHOD(true),
2723  USES_TEMPLATES(false),
2724  PASSWORKSPACE(false),
2725  PASSWSVNAMES(true)));
2726 
2727  md_data_raw.push_back(create_mdrecord(NAME("AgendaExecute"),
2728  DESCRIPTION("Execute an agenda.\n"),
2729  AUTHORS("Oliver Lemke"),
2730  OUT(),
2731  GOUT(),
2732  GOUT_TYPE(),
2733  GOUT_DESC(),
2734  IN(),
2735  GIN("a"),
2736  GIN_TYPE("Agenda"),
2737  GIN_DEFAULT(NODEF),
2738  GIN_DESC("Agenda to be executed."),
2739  SETMETHOD(false),
2740  AGENDAMETHOD(false)));
2741 
2742  md_data_raw.push_back(create_mdrecord(
2743  NAME("AgendaExecuteExclusive"),
2744  DESCRIPTION(
2745  "Execute an agenda exclusively.\n"
2746  "\n"
2747  "Only one call to *AgendaExecuteExclusive* is executed at a time.\n"
2748  "Other calls to this function are blocked until the current one\n"
2749  "finishes. WARNING: Can cause deadlocks! Use with care.\n"),
2750  AUTHORS("Oliver Lemke"),
2751  OUT(),
2752  GOUT(),
2753  GOUT_TYPE(),
2754  GOUT_DESC(),
2755  IN(),
2756  GIN("a"),
2757  GIN_TYPE("Agenda"),
2758  GIN_DEFAULT(NODEF),
2759  GIN_DESC("Agenda to be executed."),
2760  SETMETHOD(false),
2761  AGENDAMETHOD(false)));
2762 
2763  md_data_raw.push_back(create_mdrecord(
2764  NAME("AgendaSet"),
2765  DESCRIPTION(
2766  "Set up an agenda.\n"
2767  "\n"
2768  "An agenda is used to store a list of methods that are meant to be\n"
2769  "executed sequentially.\n"
2770  "\n"
2771  "This method takes the methods given in the body (in the curly braces)\n"
2772  "and puts them in the agenda given by the output argument (in the round\n"
2773  "braces).\n"
2774  "\n"
2775  "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
2776  "check, whether the given methods use the right input WSVs and\n"
2777  "produce the right output WSVs.\n"),
2778  AUTHORS("Oliver Lemke"),
2779  OUT(),
2780  GOUT("out"),
2781  GOUT_TYPE("Agenda"),
2782  GOUT_DESC("The new agenda."),
2783  IN(),
2784  GIN(),
2785  GIN_TYPE(),
2786  GIN_DEFAULT(),
2787  GIN_DESC(),
2788  SETMETHOD(false),
2789  AGENDAMETHOD(true),
2790  USES_TEMPLATES(false),
2791  PASSWORKSPACE(false),
2792  PASSWSVNAMES(true)));
2793 
2794  md_data_raw.push_back(create_mdrecord(
2795  NAME("AngularGridsSetFluxCalc"),
2796  DESCRIPTION(
2797  "Sets the angular grids for the calculation of radiation fluxes\n"
2798  "(irradiance) per hemispheres and heating rates\n"
2799  "\n"
2800  "This method sets the angular grids for the radiation fluxes type\n"
2801  "calculations and calculates the integration weights *za_grid_weights*\n"
2802  "for the zenith angle integration. For down- und up-looking\n"
2803  "geometries it suffices to define *N_za_grid* and\n"
2804  "*N_aa_grid*. From *N_aa_grid* an equally spaced grid is\n"
2805  "created and stored in the WSV*aa_grid*.\n"
2806  "Depending on the desired *za_grid_type* *za_grid* will be\n"
2807  "equally spaced ('linear') or unequally ('linear_mu','double_gauss')\n"
2808  "Important, *N_za_grid* must be an even number because for the \n"
2809  "integration over each hemisphere *N_za_grid* / 2 zenith angles are needed.\n"
2810  "\n"
2811  "Possible zenith angle grid types are:\n"
2812  "double_gauss: The zenith grid and the integration weights are set according\n"
2813  " to a gauss-legendre integration for each hemispheres.\n"
2814  "linear: Equally space grid between 0 deg and 180 deg including the poles\n"
2815  "linear_mu: Similar to 'linear' but equally spaced for cos(180 deg) to cos(0 deg),\n"
2816  " which results a unequally spaced angular grid\n"
2817 
2818  ),
2819  AUTHORS("Manfred Brath"),
2820  OUT("za_grid", "aa_grid", "za_grid_weights"),
2821  GOUT(),
2822  GOUT_TYPE(),
2823  GOUT_DESC(),
2824  IN(),
2825  GIN("N_za_grid", "N_aa_grid", "za_grid_type"),
2826  GIN_TYPE("Index", "Index", "String"),
2827  GIN_DEFAULT("2", "1", "linear_mu"),
2828  GIN_DESC("Number of zenith angles",
2829  "Number of azimuth angles",
2830  "Zenith angle grid type")));
2831 
2832  md_data_raw.push_back(create_mdrecord(
2833  NAME("ArrayOfAgendaAppend"),
2834  DESCRIPTION("Set up an agenda and append it to the array of agendas.\n"
2835  "\n"
2836  "See *AgendaSet* for details.\n"),
2837  AUTHORS("Oliver Lemke"),
2838  OUT(),
2839  GOUT("out"),
2840  GOUT_TYPE("ArrayOfAgenda"),
2841  GOUT_DESC("The new agenda."),
2842  IN(),
2843  GIN(),
2844  GIN_TYPE(),
2845  GIN_DEFAULT(),
2846  GIN_DESC(),
2847  SETMETHOD(false),
2848  AGENDAMETHOD(true),
2849  USES_TEMPLATES(false),
2850  PASSWORKSPACE(false),
2851  PASSWSVNAMES(true)));
2852 
2853  md_data_raw.push_back(
2854  create_mdrecord(NAME("ArrayOfAgendaExecute"),
2855  DESCRIPTION("Execute an agenda from an ArrayOfAgenda.\n"),
2856  AUTHORS("Oliver Lemke"),
2857  OUT(),
2858  GOUT(),
2859  GOUT_TYPE(),
2860  GOUT_DESC(),
2861  IN("agenda_array_index"),
2862  GIN("agendas"),
2863  GIN_TYPE("ArrayOfAgenda"),
2864  GIN_DEFAULT(NODEF),
2865  GIN_DESC("Array of agendas."),
2866  SETMETHOD(false),
2867  AGENDAMETHOD(false)));
2868 
2869  md_data_raw.push_back(create_mdrecord(
2870  NAME("AntennaConstantGaussian1D"),
2871  DESCRIPTION(
2872  "Sets up a 1D gaussian antenna response and a matching\n"
2873  "*mblock_dlos_grid*.\n"
2874  "\n"
2875  "As *antenna_responseGaussian*, but also creates *mblock_dlos_grid*.\n"
2876  "For returned antenna response, see *antenna_responseGaussian*.\n"
2877  "\n"
2878  "The size of *mblock_dlos_grid* is determined by *n_za_grid*.\n"
2879  "The end points of the grid are set to be the same as for the\n"
2880  "antenna response. The spacing of the grid follows the magnitude of\n"
2881  "the response; the spacing is smaller where the response is high.\n"
2882  "More precisely, the grid points are determined by dividing\n"
2883  "the cumulative sum of the response in equal steps. This makes sense\n"
2884  "if the representation error of the radiance (as a function of\n"
2885  "zenith angle) increases linearly with the grid spacing.\n"
2886  "\n"
2887  "The WSV *antenna_dlos* is set to [0].\n"
2888  "\n"
2889  "The antenna repsonse is not normalised.\n"),
2890  AUTHORS("Patrick Eriksson"),
2891  OUT("antenna_dim",
2892  "mblock_dlos_grid",
2893  "antenna_response",
2894  "antenna_dlos"),
2895  GOUT(),
2896  GOUT_TYPE(),
2897  GOUT_DESC(),
2898  IN(),
2899  GIN("n_za_grid", "fwhm", "xwidth_si", "dx_si"),
2900  GIN_TYPE("Index", "Numeric", "Numeric", "Numeric"),
2901  GIN_DEFAULT(NODEF, NODEF, "3", "0.1"),
2902  GIN_DESC("Number of points to include in *mblock_dlos_grid*.",
2903  "Full width at half-maximum of antenna beam [deg].",
2904  "Half-width of response, in terms of std. dev.",
2905  "Grid spacing, in terms of std. dev.")));
2906 
2907  md_data_raw.push_back(create_mdrecord(
2908  NAME("AntennaMultiBeamsToPencilBeams"),
2909  DESCRIPTION(
2910  "Maps a multi-beam case to a matching pencil beam case.\n"
2911  "\n"
2912  "Cases with overlapping beams are most efficiently handled by\n"
2913  "letting *antenna_dlos* have several rows. That is, there are\n"
2914  "multiple beams for each measurement block. The drawback is that\n"
2915  "many variables must be adjusted if the corresponding pencil beam\n"
2916  "spectra shall be calculated. This method makes this adjustment.\n"
2917  "That is, if you have a control file for a multiple beam case and\n"
2918  "for some reason want to avoid the antenna weighting, you add this\n"
2919  "method before *sensor_responseInit*, and remove the call of\n"
2920  "*sensor_responseAntenna* and you will get the matching pencil beam\n"
2921  "spectra.\n"),
2922  AUTHORS("Patrick Eriksson"),
2923  OUT("sensor_pos",
2924  "sensor_los",
2925  "antenna_dlos",
2926  "antenna_dim",
2927  "mblock_dlos_grid"),
2928  GOUT(),
2929  GOUT_TYPE(),
2930  GOUT_DESC(),
2931  IN("sensor_pos",
2932  "sensor_los",
2933  "antenna_dlos",
2934  "antenna_dim",
2935  "mblock_dlos_grid",
2936  "atmosphere_dim"),
2937  GIN(),
2938  GIN_TYPE(),
2939  GIN_DEFAULT(),
2940  GIN_DESC()));
2941 
2942  md_data_raw.push_back(create_mdrecord(
2943  NAME("AntennaOff"),
2944  DESCRIPTION(
2945  "Sets some antenna related variables\n"
2946  "\n"
2947  "Use this method to set *antenna_dim* and *mblock_dlos_grid* to\n"
2948  "suitable values (1 and [0], respectively) for cases when a\n"
2949  "sensor is included, but the antenna pattern is neglected.\n"),
2950  AUTHORS("Patrick Eriksson"),
2951  OUT("antenna_dim", "mblock_dlos_grid"),
2952  GOUT(),
2953  GOUT_TYPE(),
2954  GOUT_DESC(),
2955  IN(),
2956  GIN(),
2957  GIN_TYPE(),
2958  GIN_DEFAULT(),
2959  GIN_DESC()));
2960 
2961  md_data_raw.push_back(create_mdrecord(
2962  NAME("antenna_responseGaussian"),
2963  DESCRIPTION(
2964  "Sets up a gaussian antenna response.\n"
2965  "\n"
2966  "The method assumes that the response is the same for all\n"
2967  "frequencies and polarisations, and that it can be modelled as\n"
2968  "gaussian.\n"
2969  "\n"
2970  "The grid generated is approximately\n"
2971  " si * [-xwidth_si:dx_si:xwidth_si]\n"
2972  "where si is the standard deviation corresponding to the FWHM.\n"
2973  "That is, width and spacing of the grid is specified in terms of\n"
2974  "number of standard deviations. If xwidth_si is set to 2, the\n"
2975  "response will cover about 95% the complete response. For\n"
2976  "xwidth_si=3, about 99% is covered. If xwidth_si/dx_si is not\n"
2977  "an integer, the end points of the grid are kept and the spacing\n"
2978  "of the grid is reduced (ie. spacing is equal or smaller *dx_si*).\n"
2979  "\n"
2980  "If the 2D option is selected (*do_2d*), a circular antenna is\n"
2981  "assumed and the response is any direction follows the 1D case.\n"
2982  "\n"
2983  "The antenna repsonse is not normalised.\n"),
2984  AUTHORS("Patrick Eriksson"),
2985  OUT("antenna_response"),
2986  GOUT(),
2987  GOUT_TYPE(),
2988  GOUT_DESC(),
2989  IN(),
2990  GIN("fwhm", "xwidth_si", "dx_si", "do_2d"),
2991  GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
2992  GIN_DEFAULT(NODEF, "3", "0.1", "0"),
2993  GIN_DESC("Full width at half-maximum",
2994  "Half-width of response, in terms of std. dev.",
2995  "Grid spacing, in terms of std. dev.",
2996  "Set to 1 to create a 2D antenna pattern.")));
2997 
2998  md_data_raw.push_back(create_mdrecord(
2999  NAME("antenna_responseVaryingGaussian"),
3000  DESCRIPTION(
3001  "Sets up gaussian antenna responses.\n"
3002  "\n"
3003  "Similar to *antenna_responseGaussian* but allows to set up\n"
3004  "responses that varies with frequency. That is, the method assumes\n"
3005  "that the response is the same for all polarisations, and that it\n"
3006  "can be modelled as a gaussian function varying with frequency.\n"
3007  "\n"
3008  "The full width at half maximum (FWHM in radians) is calculated as:\n"
3009  " fwhm = lambda / leff\n"
3010  "where lambda is the wavelength and *leff* is the effective size of\n"
3011  "the antenna. Normally, *leff* is smaller than the physical antenna\n"
3012  "size.\n"
3013  "\n"
3014  "Antenna responses are created for *nf* frequencies spanning the\n"
3015  "range [*fstart*,*fstop*], with a logarithmic spacing. That is, the\n"
3016  "frequency grid of the responses is taken from *VectorNLogSpace*.\n"
3017  "\n"
3018  "The responses have a common angular grid. The width, determined by\n"
3019  "*xwidth_si*, is set for the lowest frequency, while the spacing\n"
3020  "(*dx_si*) is set for the highest frequency. This ensures that both\n"
3021  "the width and spacing are equal or better than *xwidth_si* and\n"
3022  "*dx_si*, respectively, for all frequencies.\n"
3023  "\n"
3024  "If the 2D option is selected (*do_2d*), a circular antenna is\n"
3025  "assumed and the response is any direction follows the 1D case.\n"
3026  "\n"
3027  "The antenna repsonse is not normalised.\n"),
3028  AUTHORS("Patrick Eriksson"),
3029  OUT("antenna_response"),
3030  GOUT(),
3031  GOUT_TYPE(),
3032  GOUT_DESC(),
3033  IN(),
3034  GIN("leff", "xwidth_si", "dx_si", "nf", "fstart", "fstop", "do_2d"),
3035  GIN_TYPE("Numeric",
3036  "Numeric",
3037  "Numeric",
3038  "Index",
3039  "Numeric",
3040  "Numeric",
3041  "Index"),
3042  GIN_DEFAULT(NODEF, "3", "0.1", NODEF, NODEF, NODEF, "0"),
3043  GIN_DESC("Effective size of the antenna",
3044  "Half-width of response, in terms of std. dev.",
3045  "Grid spacing, in terms of std. dev.",
3046  "Number of points in frequency grid (must be >= 2)",
3047  "Start point of frequency grid",
3048  "End point of frequency grid",
3049  "Set to 1 to create a 2D antenna pattern.")));
3050 
3051  md_data_raw.push_back(create_mdrecord(
3052  NAME("Append"),
3053  DESCRIPTION(
3054  "Append one workspace variable to another.\n"
3055  "\n"
3056  "This method can append an array to another array of the same type,\n"
3057  "e.g. ArrayOfIndex to ArrayOfIndex. Or a single element to an array\n"
3058  "such as a Tensor3 to an ArrayOfTensor3.\n"
3059  "\n"
3060  "Appending two vectors or a numeric to a vector works as for array\n"
3061  "variables.\n"
3062  "\n"
3063  "Both another matrix or a vector can be appended to a matrix. In\n"
3064  "addition, for matrices, the 'append dimension' can be selected.\n"
3065  "The third argument, *dimension*, indicates how to append, where\n"
3066  "\"leading\" means to append row-wise, and \"trailing\" means\n"
3067  "column-wise.\n"
3068  "\n"
3069  "Other types (TensorX) are currently only implemented for\n"
3070  "appending to the leading dimension.\n"
3071  "\n"
3072  "This method is not implemented for all types, just for those that\n"
3073  "were thought or found to be useful. (See variable list below.).\n"),
3074  AUTHORS("Stefan Buehler, Oliver Lemke"),
3075  OUT(),
3076  GOUT("out"),
3077  GOUT_TYPE("Vector, Vector,"
3078  "Matrix, Matrix,"
3079  "Tensor3, Tensor3,"
3080  "Tensor4, Tensor4,"
3081  "String, " +
3082  ARRAY_GROUPS + ", " + ARRAY_GROUPS_WITH_BASETYPE),
3083  GOUT_DESC("The variable to append to."),
3084  IN(),
3085  GIN("in", "dimension"),
3086  GIN_TYPE("Numeric, Vector,"
3087  "Matrix, Vector,"
3088  "Matrix, Tensor3,"
3089  "Tensor3, Tensor4,"
3090  "String, " +
3091  ARRAY_GROUPS + "," + GROUPS_WITH_ARRAY_TYPE,
3092  "String"),
3093  GIN_DEFAULT(NODEF, "leading"),
3094  GIN_DESC(
3095  "The variable to append.",
3096  "Where to append. Could be either the \"leading\" or \"trailing\" dimension."),
3097  SETMETHOD(false),
3098  AGENDAMETHOD(false),
3099  USES_TEMPLATES(true),
3100  PASSWORKSPACE(false),
3101  PASSWSVNAMES(true)));
3102 
3103  md_data_raw.push_back(create_mdrecord(
3104  NAME("ArrayOfGriddedFieldGetNames"),
3105  DESCRIPTION("Get the names of all GriddedFields stored in an Array.\n"
3106  "\n"
3107  "See *GriddedFieldGetName*.\n"),
3108  AUTHORS("Lukas Kluft"),
3109  OUT(),
3110  GOUT("names"),
3111  GOUT_TYPE("ArrayOfString"),
3112  GOUT_DESC("Names of the GriddedFields in the ArrayOfGriddedField."),
3113  IN(),
3114  GIN("griddedfields"),
3115  GIN_TYPE("ArrayOfGriddedField1, ArrayOfGriddedField2,"
3116  "ArrayOfGriddedField3, ArrayOfGriddedField4"),
3117  GIN_DEFAULT(NODEF),
3118  GIN_DESC("Array of GriddedFields."),
3119  SETMETHOD(false),
3120  AGENDAMETHOD(false),
3121  USES_TEMPLATES(true)));
3122 
3123  md_data_raw.push_back(create_mdrecord(
3124  NAME("ArrayOfIndexLinSpace"),
3125  DESCRIPTION(
3126  "Initializes an ArrayOfIndex with linear spacing.\n"
3127  "\n"
3128  "The first element equals always the start value, and the spacing\n"
3129  "equals always the step value, but the last value can deviate from\n"
3130  "the stop value. *step* can be both positive and negative.\n"
3131  "\n"
3132  "The created array is [start, start+step, start+2*step, ...]\n "),
3133  AUTHORS("Oliver Lemke"),
3134  OUT(),
3135  GOUT("out"),
3136  GOUT_TYPE("ArrayOfIndex"),
3137  GOUT_DESC("Output array."),
3138  IN(),
3139  GIN("start", "stop", "step"),
3140  GIN_TYPE("Index", "Index", "Index"),
3142  GIN_DESC("Start value.",
3143  "Maximum/minimum value of the end value",
3144  "Spacing of the array.")));
3145 
3146  md_data_raw.push_back(create_mdrecord(
3147  NAME("ArrayOfIndexSet"),
3148  DESCRIPTION("Creates an ArrayOfIndex from the given list of numbers.\n"),
3149  AUTHORS("Oliver Lemke"),
3150  OUT(),
3151  GOUT("out"),
3152  GOUT_TYPE("ArrayOfIndex"),
3153  GOUT_DESC("Variable to initialize."),
3154  IN(),
3155  GIN("value"),
3156  GIN_TYPE("ArrayOfIndex"),
3157  GIN_DEFAULT(NODEF),
3158  GIN_DESC("Indexes for initializiation."),
3159  SETMETHOD(true)));
3160 
3161  md_data_raw.push_back(create_mdrecord(
3162  NAME("ArrayOfIndexSetConstant"),
3163  DESCRIPTION("Creates an ArrayOfIndex of length *nelem*, with all values\n"
3164  "identical.\n"),
3165  AUTHORS("Patrick Eriksson"),
3166  OUT(),
3167  GOUT("out"),
3168  GOUT_TYPE("ArrayOfIndex"),
3169  GOUT_DESC("Variable to initialize."),
3170  IN("nelem"),
3171  GIN("value"),
3172  GIN_TYPE("Index"),
3173  GIN_DEFAULT(NODEF),
3174  GIN_DESC("Array value.."),
3175  SETMETHOD(true)));
3176 
3177  md_data_raw.push_back(create_mdrecord(
3178  NAME("ArrayOfStringSet"),
3179  DESCRIPTION("Sets a String array according the given text.\n"
3180  "The format is text = [\"String1\",\"String2\",...]\n"),
3181  AUTHORS("Oliver Lemke"),
3182  OUT(),
3183  GOUT("out"),
3184  GOUT_TYPE("ArrayOfString"),
3185  GOUT_DESC("Variable to initialize."),
3186  IN(),
3187  GIN("value"),
3188  GIN_TYPE("ArrayOfString"),
3189  GIN_DEFAULT(NODEF),
3190  GIN_DESC("Strings for initialization."),
3191  SETMETHOD(true)));
3192 
3193  md_data_raw.push_back(create_mdrecord(
3194  NAME("Arts"),
3195  DESCRIPTION(
3196  "Runs the agenda that is specified inside the curly braces. ARTS\n"
3197  "controlfiles must define this method. It is executed automatically\n"
3198  "when ARTS is run on the controlfile and cannot be called by the user.\n"
3199  "This methods was used for Arts 1 controlfiles and is now obsolete.\n"
3200  "See *Arts2*\n"),
3201  AUTHORS("Stefan Buehler"),
3202  OUT(),
3203  GOUT(),
3204  GOUT_TYPE(),
3205  GOUT_DESC(),
3206  IN(),
3207  GIN(),
3208  GIN_TYPE(),
3209  GIN_DEFAULT(),
3210  GIN_DESC(),
3211  SETMETHOD(false),
3212  AGENDAMETHOD(true)));
3213 
3214  md_data_raw.push_back(create_mdrecord(
3215  NAME("Arts2"),
3216  DESCRIPTION(
3217  "Runs the agenda that is specified inside the curly braces. ARTS\n"
3218  "controlfiles must define this method. It is executed automatically\n"
3219  "when ARTS is run on the controlfile and cannot be called by the user.\n"),
3220  AUTHORS("Oliver Lemke"),
3221  OUT(),
3222  GOUT(),
3223  GOUT_TYPE(),
3224  GOUT_DESC(),
3225  IN(),
3226  GIN(),
3227  GIN_TYPE(),
3228  GIN_DEFAULT(),
3229  GIN_DESC(),
3230  SETMETHOD(false),
3231  AGENDAMETHOD(true)));
3232 
3233  md_data_raw.push_back(create_mdrecord(
3234  NAME("AtmFieldPerturb"),
3235  DESCRIPTION(
3236  "Adds a perturbation to an atmospheric field.\n"
3237  "\n"
3238  "The shape and position of the perturbation follow the retrieval grids.\n"
3239  "That is, the shape of the perturbation has a traingular shape, \n"
3240  "with breake points at the retrieval grid points. The position is\n"
3241  "given as an index. This index matches the column in the Jacobian\n"
3242  "for the selected grid position.\n"
3243  "\n"
3244  "If the retrieval grids fully match the atmospheric grids, you can\n"
3245  "use *AtmFieldPerturbAtmGrids*, that is faster. The description of\n"
3246  "that method can help to understand this method.\n"),
3247  AUTHORS("Patrick Eriksson"),
3248  OUT(),
3249  GOUT("perturbed_field"),
3250  GOUT_TYPE("Tensor3"),
3251  GOUT_DESC("Perturbed/modified field."),
3252  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3253  GIN("original_field",
3254  "p_ret_grid",
3255  "lat_ret_grid",
3256  "lon_ret_grid",
3257  "pert_index",
3258  "pert_size",
3259  "pert_mode"),
3260  GIN_TYPE("Tensor3",
3261  "Vector",
3262  "Vector",
3263  "Vector",
3264  "Index",
3265  "Numeric",
3266  "String"),
3267  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
3268  GIN_DESC("Original field, e.g. *t_field*.",
3269  "Pressure retrieval grid.",
3270  "Latitude retrieval grid.",
3271  "Longitude retrieval grid.",
3272  "Index of position where the perturbation shall be performed.",
3273  "Size of perturbation.",
3274  "Type of perturbation, "
3275  "absolute"
3276  " or "
3277  "relative"
3278  ".")));
3279 
3280  md_data_raw.push_back(create_mdrecord(
3281  NAME("AtmFieldPerturbAtmGrids"),
3282  DESCRIPTION(
3283  "As *AtmFieldPerturb*, but perturbation follows the atmospheric grids.\n"
3284  "\n"
3285  "The method effectively performs this\n"
3286  " perturbed_field = original_field\n"
3287  " perturbed_field(p_index,lat_index,lon_index) += pert_size\n"
3288  "if not *pert_mode* is set to "
3289  "relative"
3290  " when this is done\n"
3291  " perturbed_field = original_field\n"
3292  " perturbed_field(p_index,lat_index,lon_index) *= 1*pert_size\n"
3293  "where p_index etc. are derived from *pert_index*.\n"),
3294  AUTHORS("Patrick Eriksson"),
3295  OUT(),
3296  GOUT("perturbed_field"),
3297  GOUT_TYPE("Tensor3"),
3298  GOUT_DESC("Perturbed/modified field."),
3299  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3300  GIN("original_field", "pert_index", "pert_size", "pert_mode"),
3301  GIN_TYPE("Tensor3", "Index", "Numeric", "String"),
3302  GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
3303  GIN_DESC("Original field, e.g. *t_field*.",
3304  "Index of position where the perturbation shall be performed.",
3305  "Size of perturbation.",
3306  "Type of perturbation, "
3307  "ansolute"
3308  " or "
3309  "relative"
3310  ".")));
3311 
3312  md_data_raw.push_back(create_mdrecord(
3313  NAME("AtmFieldPRegrid"),
3314  DESCRIPTION(
3315  "Interpolates the input field along the pressure dimension from\n"
3316  "*p_grid_old* to to *p_grid_new*.\n"
3317  "\n"
3318  "Extrapolation is allowed within the common 0.5grid-step margin.\n"
3319  "in and out fields can be the same variable.\n"),
3320  AUTHORS("Jana Mendrok"),
3321  OUT(),
3322  GOUT("out"),
3323  GOUT_TYPE("Tensor3, Tensor4"),
3324  GOUT_DESC("Regridded atmospheric field."),
3325  IN(),
3326  GIN("in", "p_grid_new", "p_grid_old", "interp_order"),
3327  GIN_TYPE("Tensor3, Tensor4", "Vector", "Vector", "Index"),
3328  GIN_DEFAULT(NODEF, NODEF, NODEF, "1"),
3329  GIN_DESC("Input atmospheric field.",
3330  "Pressure grid to regrid to",
3331  "Pressure grid of input field",
3332  "Interpolation order.")));
3333 
3334  md_data_raw.push_back(create_mdrecord(
3335  NAME("AtmFieldsCalc"),
3336  DESCRIPTION(
3337  "Interpolation of raw atmospheric T, z, VMR, and NLTE T/r fields to\n"
3338  "calculation grids.\n"
3339  "\n"
3340  "An atmospheric scenario includes the following data for each\n"
3341  "position (pressure, latitude, longitude) in the atmosphere:\n"
3342  " 1. temperature field\n"
3343  " 2. the corresponding altitude field\n"
3344  " 3. vmr fields for the gaseous species\n"
3345  "This method interpolates the fields of raw data (*t_field_raw*,\n"
3346  "*z_field_raw*, *vmr_field_raw*) which can be stored on arbitrary\n"
3347  "grids to the calculation grids (*p_grid*, *lat_grid*, *lon_grid*).\n"
3348  "If *nlte_field_raw* is empty, it is assumed to be so because LTE is\n"
3349  "assumed by the user and *nlte_field* will be empty.\n"
3350  "\n"
3351  "Internally, *AtmFieldsCalc* applies *GriddedFieldPRegrid* and\n"
3352  "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
3353  "is allowed and applied. However, if *vmr_zeropadding*=1 then VMRs at\n"
3354  "*p_grid* levels exceeding the raw VMRs' pressure grid are set to 0\n"
3355  "(applying the *vmr_zeropadding* option of *GriddedFieldPRegrid*).\n"
3356  "\n"
3357  "Default is to just accept obtained VMRs. If you want to enforce\n"
3358  "that all VMR created are >= 0, set *vmr_nonegative* to 1. Negative\n"
3359  "values are then set 0. Beside being present in input data, negative\n"
3360  "VMR can be generated from the interpolation if *interp_order* is\n"
3361  "above 1.\n"),
3362  AUTHORS("Claudia Emde", "Stefan Buehler"),
3363  OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3364  GOUT(),
3365  GOUT_TYPE(),
3366  GOUT_DESC(),
3367  IN("p_grid",
3368  "lat_grid",
3369  "lon_grid",
3370  "t_field_raw",
3371  "z_field_raw",
3372  "vmr_field_raw",
3373  "nlte_field_raw",
3374  "nlte_level_identifiers",
3375  "nlte_vibrational_energies",
3376  "atmosphere_dim"),
3377  GIN("interp_order",
3378  "vmr_zeropadding",
3379  "vmr_nonegative",
3380  "nlte_when_negative"),
3381  GIN_TYPE("Index", "Index", "Index", "Index"),
3382  GIN_DEFAULT("1", "0", "0", "0"),
3383  GIN_DESC("Interpolation order (1=linear interpolation).",
3384  "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3385  "If set to 1, negative VMRs are set to 0.",
3386  "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3387 
3388  md_data_raw.push_back(create_mdrecord(
3389  NAME("AtmFieldsCalcExpand1D"),
3390  DESCRIPTION(
3391  "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
3392  "homogeneous atmospheric fields.\n"
3393  "\n"
3394  "The method works as *AtmFieldsCalc*, but accepts only raw 1D\n"
3395  "atmospheres. The raw atmosphere is interpolated to *p_grid* and\n"
3396  "the obtained values are applied for all latitudes, and also\n"
3397  "longitudes for 3D, to create a homogeneous atmosphere.\n"
3398  "\n"
3399  "The method deals only with the atmospheric fields, and to create\n"
3400  "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3401  "ellipsoid is set to be a sphere.\n"),
3402  AUTHORS("Patrick Eriksson", "Claudia Emde", "Stefan Buehler"),
3403  OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3404  GOUT(),
3405  GOUT_TYPE(),
3406  GOUT_DESC(),
3407  IN("p_grid",
3408  "lat_grid",
3409  "lon_grid",
3410  "t_field_raw",
3411  "z_field_raw",
3412  "vmr_field_raw",
3413  "nlte_field_raw",
3414  "nlte_level_identifiers",
3415  "nlte_vibrational_energies",
3416  "atmosphere_dim"),
3417  GIN("interp_order",
3418  "vmr_zeropadding",
3419  "vmr_nonegative",
3420  "nlte_when_negative"),
3421  GIN_TYPE("Index", "Index", "Index", "Index"),
3422  GIN_DEFAULT("1", "0", "0", "0"),
3423  GIN_DESC("Interpolation order (1=linear interpolation).",
3424  "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3425  "If set to 1, negative VMRs are set to 0.",
3426  "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3427 
3428  md_data_raw.push_back(create_mdrecord(
3429  NAME("AtmFieldsExpand1D"),
3430  DESCRIPTION(
3431  "Maps a 1D case to 2D or 3D homogeneous atmospheric fields.\n"
3432  "\n"
3433  "This method takes a 1D atmospheric case and converts it to the\n"
3434  "corresponding case for 2D or 3D. The atmospheric fields (t_field,\n"
3435  "z_field and vmr_field) must be 1D and match *p_grid*. The size of\n"
3436  "the new data is determined by *atmosphere_dim*, *lat_grid* and\n"
3437  "*lon_grid*. That is, these later variables have been changed since\n"
3438  "the original fields were created.\n"
3439  "\n"
3440  "The method deals only with the atmospheric fields, and to create\n"
3441  "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3442  "ellipsoid is set to be a sphere.\n"),
3443  AUTHORS("Patrick Eriksson"),
3444  OUT("t_field", "z_field", "vmr_field"),
3445  GOUT(),
3446  GOUT_TYPE(),
3447  GOUT_DESC(),
3448  IN("t_field",
3449  "z_field",
3450  "vmr_field",
3451  "p_grid",
3452  "lat_grid",
3453  "lon_grid",
3454  "atmosphere_dim"),
3455  GIN("chk_vmr_nan"),
3456  GIN_TYPE("Index"),
3457  GIN_DEFAULT("1"),
3458  GIN_DESC(
3459  "Flag to determine if a search for NaN shall be performed or not.")));
3460 
3461  md_data_raw.push_back(create_mdrecord(
3462  NAME("AtmFieldsExtract1D"),
3463  DESCRIPTION(
3464  "Converts 2D or 3D homogeneous atmospheric fields to a 1D case.\n"
3465  "\n"
3466  "The method extracts data for given latitude and longitude index\n"
3467  "to create a 1D atmosphere. *AtmosphereSet1D* is called to set\n"
3468  "output values of *atmosphere_dim*, *lat_grid* and *lon_grid*.\n"
3469  "Nothing is done if *atmosphere_dim* alöready is 1.\n"),
3470  AUTHORS("Patrick Eriksson"),
3471  OUT("atmosphere_dim",
3472  "lat_grid",
3473  "lon_grid",
3474  "t_field",
3475  "z_field",
3476  "vmr_field"),
3477  GOUT(),
3478  GOUT_TYPE(),
3479  GOUT_DESC(),
3480  IN("atmosphere_dim",
3481  "lat_grid",
3482  "lon_grid",
3483  "t_field",
3484  "z_field",
3485  "vmr_field"),
3486  GIN("ilat", "ilon"),
3487  GIN_TYPE("Index", "Index"),
3488  GIN_DEFAULT("0", "0"),
3489  GIN_DESC("Pick data having this latitude index (0-based).",
3490  "Pick data having this longitude index (0-based).")));
3491 
3492  md_data_raw.push_back(create_mdrecord(
3493  NAME("AtmFieldsRefinePgrid"),
3494  DESCRIPTION(
3495  "Refines the pressure grid and regrids the clearsky atmospheric\n"
3496  "fields accordingly.\n"
3497  "\n"
3498  "This method is, e.g., used for absorption lookup table testing. It\n"
3499  "can also be used to refine the *p_grid* and atmospheric fields from\n"
3500  "compact state atmospheres.\n"
3501  "\n"
3502  "It adds additional vertical grid points to the atmospheric fields, by\n"
3503  "interpolating them in the usual ARTS way (linear in log pressure).\n"
3504  "\n"
3505  "How fine the new grid will be is determined by the keyword parameter\n"
3506  "p_step. The definition of p_step, and the default interpolation\n"
3507  "behavior, is consistent with *abs_lookupSetup* and\n"
3508  "*abs_lookupSetupBatch* (new points are added between the original\n"
3509  "ones, so that the spacing is always below p_step.)\n"
3510  "\n"
3511  "Internally, *AtmFieldsRefinePgrid* applies *p_gridRefine* and\n"
3512  "*AtmFieldPRegrid* to the clearsky atmospheric fields (T, z, vmr).\n"
3513  "\n"
3514  "Atmospheric field related check WSV are reset to 0 (unchecked),\n"
3515  "i.e., the corresponding checkedCalc methods have to be performed\n"
3516  "(again) before *yCalc* or similar methods can be executed.\n"),
3517  AUTHORS("Stefan Buehler"),
3518  OUT("p_grid",
3519  "t_field",
3520  "z_field",
3521  "vmr_field",
3522  "atmfields_checked",
3523  "atmgeom_checked",
3524  "cloudbox_checked"),
3525  GOUT(),
3526  GOUT_TYPE(),
3527  GOUT_DESC(),
3528  IN("p_grid",
3529  "lat_grid",
3530  "lon_grid",
3531  "t_field",
3532  "z_field",
3533  "vmr_field",
3534  "atmosphere_dim"),
3535  GIN("p_step", "interp_order"),
3536  GIN_TYPE("Numeric", "Index"),
3537  GIN_DEFAULT(NODEF, "1"),
3538  GIN_DESC("Maximum step in log(p[Pa]) (natural logarithm, as always). If\n"
3539  "the pressure grid is coarser than this, additional points\n"
3540  "are added until each log step is smaller than this.\n",
3541  "Interpolation order.")));
3542 
3543  md_data_raw.push_back(create_mdrecord(
3544  NAME("AtmFieldsAndParticleBulkPropFieldFromCompact"),
3545  DESCRIPTION(
3546  "Extract pressure grid and atmospheric fields from\n"
3547  "*atm_fields_compact*.\n"
3548  "\n"
3549  "An atmospheric scenario includes the following data for each\n"
3550  "position (pressure, latitude, longitude) in the atmosphere:\n"
3551  " 1. temperature field\n"
3552  " 2. the corresponding altitude field\n"
3553  " 3. vmr fields for the gaseous species\n"
3554  " 4. scattering species fields\n"
3555  "\n"
3556  "This method splits up the data found in *atm_fields_compact* to\n"
3557  "p_grid, lat_grid, lon_grid, vmr_field, particle_bulkprop_field,\n"
3558  "and particle_bulkprop_names.\n"
3559  "See documentation of *atm_fields_compact* for a definition of the\n"
3560  "data.\n"
3561  "\n"
3562  "Compact states are characterized by having all atmospheric fields\n"
3563  "already given on identical grids. That is, no interpolation needs\n"
3564  "to be and is performed. Keyword *p_min* allows to remove atmospheric\n"
3565  "levels with pressures lower than the given value (default: no\n"
3566  "removal). This reduces computational burden and is useful when\n"
3567  "upper atmospheric contributions are negligible.\n"
3568  "\n"
3569  "Possible future extensions: Add a keyword parameter to refine the\n"
3570  "pressure grid if it is too coarse. Or a version that interpolates\n"
3571  "onto given grids, instead of using and returning the original grids.\n"),
3572  AUTHORS("Jana Mendrok, Manfred Brath"),
3573  OUT("p_grid",
3574  "lat_grid",
3575  "lon_grid",
3576  "t_field",
3577  "z_field",
3578  "vmr_field",
3579  "particle_bulkprop_field",
3580  "particle_bulkprop_names"),
3581  GOUT(),
3582  GOUT_TYPE(),
3583  GOUT_DESC(),
3584  IN("abs_species", "atm_fields_compact", "atmosphere_dim"),
3585  GIN("delim", "p_min", "check_gridnames"),
3586  GIN_TYPE("String", "Numeric", "Index"),
3587  GIN_DEFAULT("-", "0", "0"),
3588  GIN_DESC(/* delim */
3589  "Delimiter string of *scat_species* elements.",
3590  /* p_min */
3591  "Minimum-pressure level to consider (for TOA).",
3592  /* check_gridnames */
3593  "A flag with value 1 or 0. If set to one, the gridnames of \n"
3594  " the *atm_fields_compact* are checked.")));
3595 
3596  md_data_raw.push_back(create_mdrecord(
3597  NAME("atmfields_checkedCalc"),
3598  DESCRIPTION(
3599  "Checks consistency of (clear sky) atmospheric fields.\n"
3600  "\n"
3601  "The following WSVs are treated: *p_grid*, *lat_grid*, *lon_grid*,\n"
3602  "*t_field*, *vmr_field*, wind_u/v/w_field and mag_u/v/w_field.\n"
3603  "\n"
3604  "If any of the variables above is changed, then this method shall be\n"
3605  "called again (no automatic check that this is fulfilled!).\n"
3606  "\n"
3607  "The tests include that:\n"
3608  " 1. Atmospheric grids (p/lat/lon_grid) are OK with respect to\n"
3609  " *atmosphere_dim* (and vmr_field also regarding *abs_species*).\n"
3610  " 2. Atmospheric fields have sizes consistent with the atmospheric\n"
3611  " grids.\n"
3612  " 3. *abs_f_interp_order* is not zero if any wind is nonzero.\n"
3613  " 4. All values in *t_field* are > 0.\n"
3614  "\n"
3615  "Default is that values in *vmr_field* are demanded to be >= 0\n"
3616  "(ie. zero allowed, in contrast to *t_field*), but this\n"
3617  "requirement can be removed by the *negative_vmr_ok* argument.\n"
3618  "\n"
3619  "If any test fails, there is an error. Otherwise,\n"
3620  "*atmfields_checked* is set to 1.\n"
3621  "\n"
3622  "The cloudbox is covered by *cloudbox_checked*, *z_field* is\n"
3623  "part of the checks done around *atmgeom_checked*.\n"
3624  "\n"
3625  "If you choose to use *bad_partition_functions_ok* please note that\n"
3626  "this is done on your own risk and that it could introduce hard-to-\n"
3627  "track errors into your calculations. Do not use this for anything\n"
3628  "important.\n"),
3629  AUTHORS("Patrick Eriksson"),
3630  OUT("atmfields_checked"),
3631  GOUT(),
3632  GOUT_TYPE(),
3633  GOUT_DESC(),
3634  IN("atmosphere_dim",
3635  "p_grid",
3636  "lat_grid",
3637  "lon_grid",
3638  "abs_species",
3639  "t_field",
3640  "vmr_field",
3641  "wind_u_field",
3642  "wind_v_field",
3643  "wind_w_field",
3644  "mag_u_field",
3645  "mag_v_field",
3646  "mag_w_field",
3647  "partition_functions",
3648  "abs_f_interp_order"),
3649  GIN("negative_vmr_ok", "bad_partition_functions_ok"),
3650  GIN_TYPE("Index", "Index"),
3651  GIN_DEFAULT("0", "0"),
3652  GIN_DESC("Flag whether to accept vmr_field < 0.",
3653  "Flag whether to accept partition functions not covering"
3654  " *t_field* range.")));
3655 
3656  md_data_raw.push_back(create_mdrecord(
3657  NAME("atmgeom_checkedCalc"),
3658  DESCRIPTION(
3659  "Checks consistency of geometric considerations of the atmosphere.\n"
3660  "\n"
3661  "The following WSVs are checked: *z_field*, *refellipsoid*, *z_surface*,\n"
3662  "*lat_true* and *lon_true*. If any of the variables above is changed,\n"
3663  "then this method shall be called again (no automatic check that this is\n"
3664  "fulfilled!).\n"
3665  "\n"
3666  "The tests include that:\n"
3667  " 1. *refellipsoid* has correct size, and that eccentricity is\n"
3668  " set to zero if 1D atmosphere.\n"
3669  " 2. *z_field* and *z_surface* have sizes consistent with the\n"
3670  " atmospheric grids.\n"
3671  " 3. There is no gap between *z_surface* and *z_field*.\n"
3672  "\n"
3673  "*lat_true* and *lon_true* are allowed to be empty.\n"
3674  "\n"
3675  "If any test fails, there is an error. Otherwise, *atmgeom_checked*\n"
3676  "is set to 1.\n"
3677  "\n"
3678  "See further *atmgeom_checkedCalc*.\n"),
3679  AUTHORS("Patrick Eriksson"),
3680  OUT("atmgeom_checked"),
3681  GOUT(),
3682  GOUT_TYPE(),
3683  GOUT_DESC(),
3684  IN("atmosphere_dim",
3685  "p_grid",
3686  "lat_grid",
3687  "lon_grid",
3688  "z_field",
3689  "refellipsoid",
3690  "z_surface",
3691  "lat_true",
3692  "lon_true"),
3693  GIN(),
3694  GIN_TYPE(),
3695  GIN_DEFAULT(),
3696  GIN_DESC()));
3697 
3698  md_data_raw.push_back(create_mdrecord(
3699  NAME("AtmosphereSet1D"),
3700  DESCRIPTION(
3701  "Sets the atmospheric dimension to 1D.\n"
3702  "\n"
3703  "Sets *atmosphere_dim* to 1, and the latitude and longitude grids\n"
3704  "are set to be empty.\n"),
3705  AUTHORS("Patrick Eriksson"),
3706  OUT("atmosphere_dim", "lat_grid", "lon_grid"),
3707  GOUT(),
3708  GOUT_TYPE(),
3709  GOUT_DESC(),
3710  IN(),
3711  GIN(),
3712  GIN_TYPE(),
3713  GIN_DEFAULT(),
3714  GIN_DESC()));
3715 
3716  md_data_raw.push_back(create_mdrecord(
3717  NAME("AtmosphereSet2D"),
3718  DESCRIPTION(
3719  "Sets the atmospheric dimension to be 2D.\n"
3720  "\n"
3721  "Sets *atmosphere_dim* to 2 and the longitude grid to be empty.\n"),
3722  AUTHORS("Patrick Eriksson"),
3723  OUT("atmosphere_dim", "lon_grid"),
3724  GOUT(),
3725  GOUT_TYPE(),
3726  GOUT_DESC(),
3727  IN(),
3728  GIN(),
3729  GIN_TYPE(),
3730  GIN_DEFAULT(),
3731  GIN_DESC()));
3732 
3733  md_data_raw.push_back(create_mdrecord(
3734  NAME("AtmosphereSet3D"),
3735  DESCRIPTION(
3736  "Sets the atmospheric dimension to 3D.\n"
3737  "\n"
3738  "Sets *atmosphere_dim* to 3, and *lat_true* and *lon_true* are\n"
3739  "set to be empty.\n"),
3740  AUTHORS("Patrick Eriksson"),
3741  OUT("atmosphere_dim", "lat_true", "lon_true"),
3742  GOUT(),
3743  GOUT_TYPE(),
3744  GOUT_DESC(),
3745  IN(),
3746  GIN(),
3747  GIN_TYPE(),
3748  GIN_DEFAULT(),
3749  GIN_DESC()));
3750 
3751  md_data_raw.push_back(create_mdrecord(
3752  NAME("AtmRawRead"),
3753  DESCRIPTION(
3754  "Reads atmospheric data from a scenario.\n"
3755  "\n"
3756  "An atmospheric scenario includes the following data for each\n"
3757  "position (pressure, latitude, longitude) in the atmosphere:\n"
3758  " 1. temperature field\n"
3759  " 2. the corresponding altitude field\n"
3760  " 3. vmr fields for the absorption species\n"
3761  "The vmr fields read are governed by the species given in\n"
3762  "*abs_species*. Beside gaseous species, these can also contain\n"
3763  "purely absorbing particulate matter. In the latter case the\n"
3764  "profiles are supposed to provide the mass content (unit kg/m3) for\n"
3765  "clouds and precipitation rate (unit kg/m2/s) for precipitation\n"
3766  "instead of the vmr.\n"
3767  "\n"
3768  "The data is stored in different files. This methods reads all\n"
3769  "files and creates the variables *t_field_raw*, *z_field_raw* and\n"
3770  "*vmr_field_raw*. *nlte_field_raw* is set to empty.\n"
3771  "\n"
3772  "Files in a scenarios should be named matching the pattern of:\n"
3773  "basename.speciesname.xml\n (for temperature and altitude the\n"
3774  "expected 'speciesname' are 't' and'z', respectivly)."
3775  "\n"
3776  "The files can be anywhere, but they must all be in the same\n"
3777  "directory, selected by 'basename'. The files are chosen by the\n"
3778  "species name. If you have more than one tag group for the same\n"
3779  "species, the same profile will be used.\n"),
3780  AUTHORS("Claudia Emde"),
3781  OUT("t_field_raw",
3782  "z_field_raw",
3783  "vmr_field_raw",
3784  "nlte_field_raw",
3785  "nlte_level_identifiers",
3786  "nlte_vibrational_energies"),
3787  GOUT(),
3788  GOUT_TYPE(),
3789  GOUT_DESC(),
3790  IN("abs_species"),
3791  GIN("basename"),
3792  GIN_TYPE("String"),
3793  GIN_DEFAULT(NODEF),
3794  GIN_DESC("Name of scenario, probably including the full path. For "
3795  "example: \"/smiles_local/arts-data/atmosphere/fascod/"
3796  "tropical\"")));
3797 
3798  md_data_raw.push_back(create_mdrecord(
3799  NAME("AtmWithNLTERawRead"),
3800  DESCRIPTION(
3801  "Reads atmospheric data from a scenario.\n"
3802  "\n"
3803  "An atmospheric scenario includes the following data for each\n"
3804  "position (pressure, latitude, longitude) in the atmosphere:\n"
3805  " 1. temperature field\n"
3806  " 2. the corresponding altitude field\n"
3807  " 3. vmr fields for the gaseous species\n"
3808  " 4. Non-LTE temperature fields and matching identifiers\n"
3809  "The data is stored in different files. This method reads all\n"
3810  "files and creates the variables *t_field_raw*, *z_field_raw*,\n"
3811  "*vmr_field_raw*, *nlte_field_raw*, and *nlte_level_identifiers*.\n"
3812  "\n"
3813  "Files in a scenarios should be named matching the pattern of:\n"
3814  "tropical.H2O.xml\n"
3815  "\n"
3816  "The files can be anywhere, but they must be all in the same\n"
3817  "directory, selected by 'basename'. The files are chosen by the\n"
3818  "species name. If you have more than one tag group for the same\n"
3819  "species, the same profile will be used.\n"),
3820  AUTHORS("Claudia Emde", "Richard Larsson"),
3821  OUT("t_field_raw",
3822  "z_field_raw",
3823  "vmr_field_raw",
3824  "nlte_field_raw",
3825  "nlte_level_identifiers",
3826  "nlte_vibrational_energies"),
3827  GOUT(),
3828  GOUT_TYPE(),
3829  GOUT_DESC(),
3830  IN("abs_species"),
3831  GIN("basename", "expect_vibrational_energies"),
3832  GIN_TYPE("String", "Index"),
3833  GIN_DEFAULT(NODEF, "0"),
3834  GIN_DESC("Name of scenario, probably including the full path. For "
3835  "example: \"/smiles_local/arts-data/atmosphere/fascod/"
3836  "tropical\"",
3837  "Should ev.xml be read?")));
3838 
3839  md_data_raw.push_back(create_mdrecord(
3840  NAME("atm_fields_compactAddConstant"),
3841  DESCRIPTION(
3842  "Adds a constant field to atm_fields_compact.\n"
3843  "\n"
3844  "This is handy, e.g., for nitrogen or oxygen. The constant value can\n"
3845  "be appended or prepended as an additional field to the already\n"
3846  "existing collection of fields. All dimensions (pressure, latitude,\n"
3847  "longitude) are filled up, so this works for 1D, 2D, or 3D\n"
3848  "atmospheres.\n"
3849  "\n"
3850  "The passed *name* of the field has to be in accordance with the\n"
3851  "tagging structure described for *atm_fields_compact*.\n"
3852  "\n"
3853  "A list of condensibles can be optionally specified if the VMR of\n"
3854  "the added species is assuming dry air. The VMR of the added species\n"
3855  "is then scaled down by the sum of the condensibles' VMR:\n"
3856  "VMR * (1 - VMR_sum_of_condensibles).\n"
3857  "For Earth this should be set to [\"abs_species-H2O\"]\n"),
3858  AUTHORS("Stefan Buehler, Oliver Lemke"),
3859  OUT("atm_fields_compact"),
3860  GOUT(),
3861  GOUT_TYPE(),
3862  GOUT_DESC(),
3863  IN("atm_fields_compact"),
3864  GIN("name", "value", "prepend", "condensibles"),
3865  GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
3866  GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
3867  GIN_DESC(
3868  "Name of additional atmospheric field, with constant value.",
3869  "Constant value of additional field.",
3870  "0 = Append to the end, 1 = insert at the beginning.",
3871  "List of condensibles used to scale down the VMR of the added species.")));
3872 
3873  md_data_raw.push_back(create_mdrecord(
3874  NAME("atm_fields_compactAddSpecies"),
3875  DESCRIPTION(
3876  "Adds a field to atm_fields_compact, with interpolation.\n"
3877  "\n"
3878  "This method appends or prepends a *GriddedField3* to *atm_fields_compact*.\n"
3879  "The *GriddedField3* is interpolated upon the grid of\n"
3880  "*atm_fields_compact*. A typical use case for this method may be to\n"
3881  "add a climatology of some gas when this gas is needed for radiative\n"
3882  "transfer calculations, but not yet present in *atm_fields_compact*.\n"
3883  "One case where this happens is when using the Chevalier91L dataset\n"
3884  "for infrared simulations.\n"
3885  "\n"
3886  "The grids in *atm_fields_compact* must fully encompass the grids in\n"
3887  "the *GriddedField3* to be added, for interpolation to succeed. If\n"
3888  "this is not the case, a RuntimeError is thrown.\n"
3889  "\n"
3890  "The passed *name* of the field has to be in accordance with the\n"
3891  "tagging structure described for *atm_fields_compact*.\n"),
3892  AUTHORS("Gerrit Holl"),
3893  OUT("atm_fields_compact"),
3894  GOUT(),
3895  GOUT_TYPE(),
3896  GOUT_DESC(),
3897  IN("atm_fields_compact"),
3898  GIN("name", "value", "prepend"),
3899  GIN_TYPE("String", "GriddedField3", "Index"),
3900  GIN_DEFAULT(NODEF, NODEF, "0"),
3901  GIN_DESC("Name of additional atmospheric field.",
3902  "Value of additional atmospheric field.",
3903  "0 = Append to the end, 1 = insert at the beginning.")));
3904 
3905  md_data_raw.push_back(create_mdrecord(
3906  NAME("atm_fields_compactCleanup"),
3907  DESCRIPTION(
3908  "Removes unrealistically small or erroneous data from\n"
3909  "*atm_fields_compact* (or other GriddedField4 data)\n"
3910  "\n"
3911  "This WSM checks if the data in *atm_fields_compact* contains\n"
3912  "values smaller than the given *threshold*. In this case, these\n"
3913  "values will be set to zero.\n"
3914  "\n"
3915  "The method should be applied if *atm_fields_compact* contains\n"
3916  "unrealistically small or erroneous data (NWP/GCM model data\n"
3917  "occassionally contains negative values, which are numerical\n"
3918  "artefacts rather than physical values.)\n"),
3919  AUTHORS("Jana Mendrok"),
3920  OUT("atm_fields_compact"),
3921  GOUT(),
3922  GOUT_TYPE(),
3923  GOUT_DESC(),
3924  IN("atm_fields_compact"),
3925  GIN("threshold"),
3926  GIN_TYPE("Numeric"),
3927  GIN_DEFAULT(NODEF),
3928  GIN_DESC(
3929  "Threshold below which *atm_fields_compact* values are set to zero.")));
3930 
3931  md_data_raw.push_back(create_mdrecord(
3932  NAME("atm_fields_compactCreateFromField"),
3933  DESCRIPTION(
3934  "Initiates *atm_fields_compact* from a field.\n"
3935  "\n"
3936  "*atm_fields_compact* will have the same size and grids as the GriddedField3,\n"
3937  "but with one dimension as length 1.\n"),
3938  AUTHORS("Richard Larsson"),
3939  OUT("atm_fields_compact"),
3940  GOUT(),
3941  GOUT_TYPE(),
3942  GOUT_DESC(),
3943  IN(),
3944  GIN("name", "field"),
3945  GIN_TYPE("String", "GriddedField3"),
3947  GIN_DESC("Name atmospheric field.", "The atmospheric field.")));
3948 
3949  md_data_raw.push_back(create_mdrecord(
3950  NAME("atm_fields_compactFromMatrix"),
3951  DESCRIPTION(
3952  "Sets *atm_fields_compact* from 1D fields given in form of a matrix.\n"
3953  "\n"
3954  "For batch calculations it is handy to store atmospheric\n"
3955  "profiles in an array of matrix. We take such a matrix, and create\n"
3956  "*atm_fields_compact* from it.\n"
3957  "\n"
3958  "The matrix must contain one row for each pressure level.\n"
3959  "\n"
3960  "Not all fields contained in the matrix must be selected into\n"
3961  "*atm_fields_compact*, but the selection must at least contain\n"
3962  "fields of pressure, temperature, altitude and one absorption\n"
3963  "species.\n"
3964  "The matrix can contain some additional fields which are not\n"
3965  "directly used by ARTS for calculations but can be required for\n"
3966  "further processing, e.g. wind speed and direction. These fields do\n"
3967  "not need to be transfered into the *atm_fields_compact* variable.\n"
3968  "\n"
3969  "Selection of fields into *atm_fields_compact* works by providing a\n"
3970  "field name tag in *field_names* for the selected fields, while\n"
3971  "unselected fields are tagged by 'ignore'. Order of tags in\n"
3972  "*field_names* is strictly taken as corresponding to column order in\n"
3973  "the matrix.\n"
3974  "The pressure fields are by convention the first column of the\n"
3975  "matrix, hence must not be tagged. That is, there must be given one\n"
3976  "field name tag less than matrix columns.\n"
3977  "\n"
3978  "For detailed tagging conventions see *atm_fields_compact*.\n"
3979  "\n"
3980  "Works only for *atmosphere_dim==1.*\n"),
3981  AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
3982  OUT("atm_fields_compact"),
3983  GOUT(),
3984  GOUT_TYPE(),
3985  GOUT_DESC(),
3986  IN("atmosphere_dim"),
3987  GIN("gin1", "field_names"),
3988  GIN_TYPE("Matrix", "ArrayOfString"),
3990  GIN_DESC("One atmosphere matrix from batch input ArrayOfMatrix.",
3991  "Order/names of atmospheric fields.")));
3992 
3993  md_data_raw.push_back(create_mdrecord(
3994  NAME("backend_channel_responseFlat"),
3995  DESCRIPTION(
3996  "Sets up a rectangular channel response.\n"
3997  "\n"
3998  "The response of the backend channels is hee assumed to be constant\n"
3999  "inside the resolution width, and zero outside.\n"
4000  "\n"
4001  "The method assumes that all channels have the same response.\n"),
4002  AUTHORS("Patrick Eriksson"),
4003  OUT("backend_channel_response"),
4004  GOUT(),
4005  GOUT_TYPE(),
4006  GOUT_DESC(),
4007  IN(),
4008  GIN("resolution"),
4009  GIN_TYPE("Numeric"),
4010  GIN_DEFAULT(NODEF),
4011  GIN_DESC("The spectrometer resolution.")));
4012 
4013  md_data_raw.push_back(create_mdrecord(
4014  NAME("backend_channel_responseGaussian"),
4015  DESCRIPTION(
4016  "Sets up a gaussian backend channel response.\n"
4017  "\n"
4018  "The method assumes that all channels can be modelled as gaussian.\n"
4019  "\n"
4020  "If *fwhm* has only one element, all channels are assumed to be equal.\n"
4021  "If *fwhm* has multiple elements, *xwidth_si* and *dx_si* must have one\n"
4022  "element or the same number of elements as *fwhm*. If one element is given,\n"
4023  "this value will be used for all channels.\n"
4024  "\n"
4025  "The grid generated can be written as\n"
4026  " si * [-xwidth_si:dx_si:xwidth_si]\n"
4027  "where si is the standard deviation corresponding to the FWHM.\n"
4028  "That is, width and spacing of the grid is specified in terms of\n"
4029  "number of standard deviations. If xwidth_si is set to 2, the\n"
4030  "response will cover about 95% the complete response. For\n"
4031  "xwidth_si=3, about 99% is covered. If xwidth_si/dx_si is not\n"
4032  "an integer, the end points of the grid are kept and the spacing\n"
4033  "if the grid is adjusted in the downward direction (ie. spacing is.\n"
4034  "is max *dx_si*).\n"),
4035  AUTHORS("Patrick Eriksson, Oliver Lemke"),
4036  OUT("backend_channel_response"),
4037  GOUT(),
4038  GOUT_TYPE(),
4039  GOUT_DESC(),
4040  IN(),
4041  GIN("fwhm", "xwidth_si", "dx_si"),
4042  GIN_TYPE("Vector", "Vector", "Vector"),
4043  GIN_DEFAULT(NODEF, "[3]", "[0.1]"),
4044  GIN_DESC("Full width at half-maximum",
4045  "Half-width of response, in terms of std. dev.",
4046  "Grid spacing, in terms of std. dev.")));
4047 
4048  md_data_raw.push_back(create_mdrecord(
4049  NAME("batch_atm_fields_compactAddConstant"),
4050  DESCRIPTION("Adds a constant field to batch_atm_fields_compact.\n"
4051  "\n"
4052  "Applies *atm_fields_compactAddConstant* to each batch.\n"
4053  "The format is equal to that WSM.\n"),
4054  AUTHORS("Gerrit Holl"),
4055  OUT("batch_atm_fields_compact"),
4056  GOUT(),
4057  GOUT_TYPE(),
4058  GOUT_DESC(),
4059  IN("batch_atm_fields_compact"),
4060  GIN("name", "value", "prepend", "condensibles"),
4061  GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
4062  GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
4063  GIN_DESC(
4064  "Name of additional atmospheric field, with constant value.",
4065  "Constant value of additional field.",
4066  "0 = Append to the end, 1 = insert at the beginning.",
4067  "List of condensibles used to scale down the VMR of the added species.")));
4068 
4069  md_data_raw.push_back(create_mdrecord(
4070  NAME("batch_atm_fields_compactAddSpecies"),
4071  DESCRIPTION(
4072  "Adds a field to *batch_atm_fields_compact*, with interpolation.\n"
4073  "\n"
4074  "This method appends or prepends a *GriddedField3* to each *atm_fields_compact*.\n"
4075  "in *batch_atm_fields_compact*. For details, see *atm_fields_compactAddSpecies*.\n"),
4076  AUTHORS("Gerrit Holl"),
4077  OUT("batch_atm_fields_compact"),
4078  GOUT(),
4079  GOUT_TYPE(),
4080  GOUT_DESC(),
4081  IN("batch_atm_fields_compact"),
4082  GIN("name", "value", "prepend"),
4083  GIN_TYPE("String", "GriddedField3", "Index"),
4084  GIN_DEFAULT(NODEF, NODEF, "0"),
4085  GIN_DESC(
4086  "Name of additional atmospheric field. Use, e.g., vmr_ch4 for methane VMR",
4087  "Value of additional atmospheric field.",
4088  "0 = Append to the end, 1 = insert at the beginning.")));
4089 
4090  md_data_raw.push_back(create_mdrecord(
4091  NAME("batch_atm_fields_compactCleanup"),
4092  DESCRIPTION(
4093  "Removes unrealistically small or erroneous data from each data field\n"
4094  "of *batch_atm_fields_compact* (or other AerrayOfGriddedField4 data)\n"
4095  "\n"
4096  "This WSM checks if the data in *batch_atm_fields_compact* contains\n"
4097  "values smaller than the given *threshold*. In this case, these\n"
4098  "values will be set to zero.\n"
4099  "\n"
4100  "The method should be applied if *batch_atm_fields_compact* contains\n"
4101  "unrealistically small or erroneous data (NWP/GCM model data\n"
4102  "occassionally contains negative values, which are numerical\n"
4103  "artefacts rather than physical values.)\n"),
4104  AUTHORS("Jana Mendrok"),
4105  OUT("batch_atm_fields_compact"),
4106  GOUT(),
4107  GOUT_TYPE(),
4108  GOUT_DESC(),
4109  IN("batch_atm_fields_compact"),
4110  GIN("threshold"),
4111  GIN_TYPE("Numeric"),
4112  GIN_DEFAULT(NODEF),
4113  GIN_DESC(
4114  "Threshold below which *atm_fields_compact* values are set to zero.")));
4115 
4116  md_data_raw.push_back(create_mdrecord(
4117  NAME("batch_atm_fields_compactFromArrayOfMatrix"),
4118  DESCRIPTION(
4119  "Expand batch of 1D atmospheric state matrices to batch_atm_fields_compact.\n"
4120  "\n"
4121  "This is used to handle 1D batch cases, e.g. from NWP/GCM model like\n"
4122  "the Chevallier91L data set, stored in a matrix (it is preferred,\n"
4123  "though, to immediatedly store the model fields as\n"
4124  "*ArrayOfGriddedField4* and use *ReadXML* to load them directly into\n"
4125  "*batch_atm_fields_compact*).\n"
4126  "\n"
4127  "Works only for *atmosphere_dim==1.*\n"
4128  "\n"
4129  "See *atm_fields_compactFromMatrix* for basic documentation.\n"
4130  "\n"
4131  "See *batch_atm_fields_compactAddConstant* and\n"
4132  "batch_atm_fields_compactAddSpecies* for adding additional fields.\n"),
4133  AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4134  OUT("batch_atm_fields_compact"),
4135  GOUT(),
4136  GOUT_TYPE(),
4137  GOUT_DESC(),
4138  IN("atmosphere_dim"),
4139  GIN("atmospheres_fields", "field_names"),
4140  GIN_TYPE("ArrayOfMatrix", "ArrayOfString"),
4142  GIN_DESC("Batch of atmospheres stored in one array of matrix",
4143  "Order/names of atmospheric fields.")));
4144 
4145  md_data_raw.push_back(create_mdrecord(
4146  NAME("CIAInfo"),
4147  DESCRIPTION(
4148  "Display information about the given CIA tags.\n"
4149  "The CIA tags shown are in the same format as needed by *abs_speciesSet*.\n"),
4150  AUTHORS("Oliver Lemke"),
4151  OUT(),
4152  GOUT(),
4153  GOUT_TYPE(),
4154  GOUT_DESC(),
4155  IN(),
4156  GIN("catalogpath", "cia_tags"),
4157  GIN_TYPE("String", "ArrayOfString"),
4159  GIN_DESC("Path to the CIA catalog directory.",
4160  "Array of CIA tags to view, e.g. [ \"N2-N2\", \"H2-H2\" ]")));
4161 
4162  md_data_raw.push_back(create_mdrecord(
4163  NAME("CIARecordReadFromFile"),
4164  DESCRIPTION("Reads CIARecord from Hitran-style file.\n"),
4165  AUTHORS("Richard Larsson"),
4166  OUT(),
4167  GOUT("cia_record"),
4168  GOUT_TYPE("CIARecord"),
4169  GOUT_DESC("CIARecord type variable for input and output."),
4170  IN(),
4171  GIN("species_tag", "filename"),
4172  GIN_TYPE("String", "String"),
4174  GIN_DESC("SpeciesTag string to associate with this CIARecord. See "
4175  "*abs_speciesSet* for correct format.",
4176  "Filename of HITRAN CIA data file.")));
4177 
4178  md_data_raw.push_back(create_mdrecord(
4179  NAME("cloudboxOff"),
4180  DESCRIPTION(
4181  "Deactivates the cloud box.\n"
4182  "\n"
4183  "Use this method if no scattering calculations shall be performed.\n"
4184  "\n"
4185  "The function sets *cloudbox_on* to 0, *cloudbox_limits*,\n"
4186  "*pnd_field*, *scat_data*, *scat_data_raw*, *iy_cloudbox_agenda*\n"
4187  "and *particle_masses* to be empty and sizes *dpnd_field_dx* to be\n"
4188  "consitent with *jacobian_quantities*.\n"),
4189  AUTHORS("Patrick Eriksson"),
4190  OUT("cloudbox_on",
4191  "ppath_inside_cloudbox_do",
4192  "cloudbox_limits",
4193  "iy_cloudbox_agenda",
4194  "pnd_field",
4195  "dpnd_field_dx",
4196  "scat_species",
4197  "scat_data",
4198  "scat_data_raw",
4199  "scat_data_checked",
4200  "particle_masses"),
4201  GOUT(),
4202  GOUT_TYPE(),
4203  GOUT_DESC(),
4204  IN("jacobian_quantities"),
4205  GIN(),
4206  GIN_TYPE(),
4207  GIN_DEFAULT(),
4208  GIN_DESC()));
4209 
4210  md_data_raw.push_back(create_mdrecord(
4211  NAME("cloudboxSetAutomatically"),
4212  DESCRIPTION(
4213  "Sets the cloud box to encompass the cloud given by the entries\n"
4214  "in *particle_field*.\n"
4215  "\n"
4216  "This WSM handles one *Tensor4* type *particle_field* at a time. It can\n"
4217  "be used to determine the cloudbox from *particle_bulkprop_field*,\n"
4218  "but also from the various scat_species_XXX_field (or even from a\n"
4219  "read-in *pnd_field*). For the latter, the WSM needs to be called\n"
4220  "once per each scat_species_XXX_field, with previously determined\n"
4221  "*cloudbox_limits* provided through *cloudbox_limits_old*.\n"
4222  "\n"
4223  "The function must be called before executing any WSM that applies\n"
4224  "*cloudbox_limits*.\n"
4225  "\n"
4226  "The function iterates over all 3D fields in *particle_field* (which\n"
4227  "might correspond to the different scattering species as in\n"
4228  "scat_species_XXX_field or to different particle bulk properties as\n"
4229  "in *particle_bulkprop_field*). Each field is searched for the first\n"
4230  "and last pressure index, where the value is unequal to zero. This\n"
4231  "index is then copied to *cloudbox_limits*.\n"
4232  "If *particle_field* is empty, the cloudbox is switched off\n"
4233  "(*cloudbox_on*=0).\n"
4234  "\n"
4235  "Additionaly the lower cloudbox_limit is altered by *cloudbox_margin*.\n"
4236  "The margin is given as a height difference in meters and transformed\n"
4237  "into a pressure (via isothermal barometric height formula). This\n"
4238  "alteration is to ensure covering photons that leave the cloud, but\n"
4239  "reenter through a limb path.\n"
4240  "If *cloudbox_margin* is set to -1 (default), the cloudbox will extend\n"
4241  "to the surface. Hence, the lower cloudbox_limit is set to 0 (index\n"
4242  "of first pressure level).\n"
4243  "*cloudbox_margin* will be applied on each call of the WSM. Hence,\n"
4244  "if called successively, e.g. for several scat_species_XXX_field,\n"
4245  "and *cloudbox_margin* is not -1, it is suggested to apply the\n"
4246  "desired *cloudbox_margin* only for the last WSM call, while for the\n"
4247  "others set *cloudbox_margin* to 0.\n"
4248  "\n"
4249  "Works only for *atmosphere_dim==1.*\n"),
4250  AUTHORS("Jana Mendrok, Daniel Kreyling"),
4251  OUT("cloudbox_on", "cloudbox_limits"),
4252  GOUT(),
4253  GOUT_TYPE(),
4254  GOUT_DESC(),
4255  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4256  GIN("particle_field", "cloudbox_limits_old", "cloudbox_margin"),
4257  GIN_TYPE("Tensor4", "ArrayOfIndex", "Numeric"),
4258  GIN_DEFAULT(NODEF, "[-1]", "-1"),
4259  GIN_DESC("A collection of particle property fields (e.g."
4260  " *particle_bulkprop_field*,"
4261  " *scat_species_mass_density_field*).",
4262  "Preset cloudbox limits, e.g. resulting from a previous run"
4263  " of *cloudboxSetAutomatically*.",
4264  "Minimum distance [m] between lowest 'cloudy' level and"
4265  " cloudbox lower limit. If set to *-1* (default), the"
4266  " cloudbox lower limit is fixed to 0, i.e., corresponds to"
4267  " the lowest atmospheric level (or the surface).")));
4268 
4269  md_data_raw.push_back(
4270  create_mdrecord(NAME("cloudboxSetFullAtm"),
4271  DESCRIPTION("Sets the cloudbox to cover the full atmosphere.\n"),
4272  AUTHORS("Claudia Emde, Jana Mendrok"),
4273  OUT("cloudbox_on", "cloudbox_limits"),
4274  GOUT(),
4275  GOUT_TYPE(),
4276  GOUT_DESC(),
4277  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4278  GIN(),
4279  GIN_TYPE(),
4280  GIN_DEFAULT(),
4281  GIN_DESC()));
4282 
4283  md_data_raw.push_back(create_mdrecord(
4284  NAME("cloudboxSetManually"),
4285  DESCRIPTION(
4286  "Sets the cloud box to encompass the given positions.\n"
4287  "\n"
4288  "The function sets *cloudbox_on* to 1 and sets *cloudbox_limits*\n"
4289  "following the given pressure, latitude and longitude positions.\n"
4290  "The index limits in *cloudbox_limits* are selected to give the\n"
4291  "smallest possible cloud box that encompass the given points.\n"
4292  "\n"
4293  "The points must be given in the same order as used in\n"
4294  "*cloudbox_limits*. That means that the first keyword argument\n"
4295  "shall be a higher pressure than argument two, while the latitude\n"
4296  "and longitude points are given in increasing order. Positions\n"
4297  "given for dimensions not used by the selected atmospheric\n"
4298  "dimensionality are ignored.\n"
4299  "\n"
4300  "The given pressure points can be outside the range of *p_grid*.\n"
4301  "The pressure limit is then set to the end point of *p_grid*.\n"
4302  "The given latitude and longitude points must be inside the range\n"
4303  "of the corresponding grid. In addition, the latitude and longitude\n"
4304  "points cannot be inside the outermost grid ranges as the latitude\n"
4305  "and longitude limits in *cloudbox_limits* are not allowed to be\n"
4306  "grid end points.\n"),
4307  AUTHORS("Patrick Eriksson"),
4308  OUT("cloudbox_on", "cloudbox_limits"),
4309  GOUT(),
4310  GOUT_TYPE(),
4311  GOUT_DESC(),
4312  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4313  GIN("p1", "p2", "lat1", "lat2", "lon1", "lon2"),
4314  GIN_TYPE(
4315  "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4317  GIN_DESC("Upper pressure point.",
4318  "Lower pressure point.",
4319  "Lower latitude point.",
4320  "Upper latitude point.",
4321  "Lower longitude point.",
4322  "Upper longitude point.")));
4323 
4324  md_data_raw.push_back(create_mdrecord(
4325  NAME("cloudboxSetManuallyAltitude"),
4326  DESCRIPTION(
4327  "Sets the cloud box to encompass the given positions.\n"
4328  "\n"
4329  "As *cloudboxSetManually* but uses altitudes instead of pressure.\n"
4330  "The given altitude points can be outside the range of *z_field*.\n"
4331  "The altitude limit is then set to the end point of *p_grid*.\n"),
4332  AUTHORS("Claudia Emde"),
4333  OUT("cloudbox_on", "cloudbox_limits"),
4334  GOUT(),
4335  GOUT_TYPE(),
4336  GOUT_DESC(),
4337  IN("atmosphere_dim", "z_field", "lat_grid", "lon_grid"),
4338  GIN("z1", "z2", "lat1", "lat2", "lon1", "lon2"),
4339  GIN_TYPE(
4340  "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4342  GIN_DESC("Lower altitude point.",
4343  "Upper altitude point.",
4344  "Lower latitude point.",
4345  "Upper latitude point.",
4346  "Lower longitude point.",
4347  "Upper longitude point.")));
4348 
4349  md_data_raw.push_back(create_mdrecord(
4350  NAME("cloudbox_checkedCalc"),
4351  DESCRIPTION(
4352  "Checks consistency and validity of the cloudbox governing variables.\n"
4353  "\n"
4354  "The following WSVs are treated: *cloudbox_on*, *cloudbox_limits*,\n"
4355  "*pnd_field*, *scat_data*, *scat_species*, *abs_species*, *particle_masses*\n"
4356  "*particle_bulkprop_field*, *particle_bulkprop_names* and wind_u/v/w_field.\n"
4357  "\n"
4358  "If any of these variables is changed, then this method shall be\n"
4359  "called again (no automatic check that this is fulfilled!).\n"
4360  "\n"
4361  "The main checks are if the cloudbox limits are OK with respect to\n"
4362  "the atmospheric dimensionality and the limits of the atmosphere,\n"
4363  "and that the scattering element variables *pnd_field* and\n"
4364  "*scat_data* match in size.\n"
4365  "\n"
4366  "Further checks on *scat_data* are performed in *scat_data_checkedCalc*\n"
4367  "\n"
4368  "*scat_species* and *particle_masses* must either be empty or have a\n"
4369  "size that matches the other data. If non-empty, some check of these\n"
4370  "variables are performed.\n"
4371  "\n"
4372  "If any test fails, there is an error. Otherwise, *cloudbox_checked*\n"
4373  "is set to 1.\n"),
4374  AUTHORS("Patrick Eriksson, Jana Mendrok"),
4375  OUT("cloudbox_checked"),
4376  GOUT(),
4377  GOUT_TYPE(),
4378  GOUT_DESC(),
4379  IN("atmfields_checked",
4380  "atmosphere_dim",
4381  "p_grid",
4382  "lat_grid",
4383  "lon_grid",
4384  "z_field",
4385  "z_surface",
4386  "wind_u_field",
4387  "wind_v_field",
4388  "wind_w_field",
4389  "cloudbox_on",
4390  "cloudbox_limits",
4391  "pnd_field",
4392  "dpnd_field_dx",
4393  "jacobian_quantities",
4394  "scat_data",
4395  "scat_species",
4396  "particle_masses",
4397  "abs_species"),
4398  GIN("negative_pnd_ok"),
4399  GIN_TYPE("Index"),
4400  GIN_DEFAULT("0"),
4401  GIN_DESC("Flag whether to accept pnd_field < 0.")));
4402 
4403  md_data_raw.push_back(create_mdrecord(
4404  NAME("cloudbox_field_monoIterate"),
4405  DESCRIPTION(
4406  "Iterative solution of the VRTE (DOIT method).\n"
4407  "\n"
4408  "A solution for the RTE with scattering is found using the\n"
4409  "DOIT method:\n"
4410  " 1. Calculate scattering integral using *doit_scat_field_agenda*.\n"
4411  " 2. Calculate RT with fixed scattered field using\n"
4412  " *doit_rte_agenda*.\n"
4413  " 3. Convergence test using *doit_conv_test_agenda*.\n"
4414  "\n"
4415  "Note: The atmospheric dimensionality *atmosphere_dim* can be\n"
4416  " either 1 or 3. To these dimensions the method adapts\n"
4417  " automatically. 2D scattering calculations are not\n"
4418  " supported.\n"),
4419  AUTHORS("Claudia Emde, Jakob Doerr"),
4420  OUT("cloudbox_field_mono"),
4421  GOUT(),
4422  GOUT_TYPE(),
4423  GOUT_DESC(),
4424  IN("cloudbox_field_mono",
4425  "doit_scat_field_agenda",
4426  "doit_rte_agenda",
4427  "doit_conv_test_agenda"),
4428  GIN("accelerated"),
4429  GIN_TYPE("Index"),
4430  GIN_DEFAULT("0"),
4431  GIN_DESC(
4432  "Index wether to accelerate only the intensity (1) or the whole Stokes Vector (4)")));
4433 
4434  md_data_raw.push_back(create_mdrecord(
4435  NAME("cloudbox_fieldCrop"),
4436  DESCRIPTION(
4437  "Extracts a part of an existing *cloudbox_field*.\n"
4438  "\n"
4439  "The cropping is defined by defining new cloudbox limits. Note that\n"
4440  "*new_limit0* is an index with respect to *p_grid*, etc.\n"
4441  "\n"
4442  "The following must be valid:\n"
4443  " new_limit0 >= cloudbox_limits[0]\n"
4444  " new_limit1 <= cloudbox_limits[1]\n"
4445  " new_limit2 >= cloudbox_limits[2]\n"
4446  " new_limit3 <= cloudbox_limits[3]\n"
4447  " new_limit4 >= cloudbox_limits[4]\n"
4448  " new_limit5 <= cloudbox_limits[5]\n"
4449  "\n"
4450  "Indexes for dimensions not used are ignored.\n"),
4451  AUTHORS("Patrick Eriksson"),
4452  OUT("cloudbox_field", "cloudbox_limits"),
4453  GOUT(),
4454  GOUT_TYPE(),
4455  GOUT_DESC(),
4456  IN("atmosphere_dim", "cloudbox_on", "cloudbox_limits", "cloudbox_field"),
4457  GIN("new_limit0",
4458  "new_limit1",
4459  "new_limit2",
4460  "new_limit3",
4461  "new_limit4",
4462  "new_limit5"),
4463  GIN_TYPE("Index", "Index", "Index", "Index", "Index", "Index"),
4464  GIN_DEFAULT("0", "0", "0", "0", "0", "0"),
4465  GIN_DESC("New value for cloudbox_limits[0].",
4466  "New value for cloudbox_limits[1].",
4467  "New value for cloudbox_limits[2].",
4468  "New value for cloudbox_limits[3].",
4469  "New value for cloudbox_limits[4].",
4470  "New value for cloudbox_limits[5].")));
4471 
4472  md_data_raw.push_back(create_mdrecord(
4473  NAME("cloudbox_fieldSetFromPrecalc"),
4474  DESCRIPTION(
4475  "Sets the initial cloudbox intensity field *cloudbox_field* from a\n"
4476  "precalculated field.\n"
4477  "\n"
4478  "This method sets the (monochromatic) first guess radiation field\n"
4479  "inside the cloudbox from a precalculated *cloudbox_field_precalc*,\n"
4480  "e.g., from the solution of a similar atmospheric scenario. The\n"
4481  "dimensions of *cloudbox_field_precalc* have to be consistent with\n"
4482  "the DOIT setup in terms of frequencies, pressure levels inside the\n"
4483  "cloudbox, polar angles used as well as the stokes dimension.\n"
4484  "Incoming field on the cloudbox boundaries is adapted to the actual\n"
4485  "clearsky incoming field as, e.g., calculated by *DoitGetIncoming*.\n"),
4486  AUTHORS("Jana Mendrok"),
4487  OUT("cloudbox_field"),
4488  GOUT(),
4489  GOUT_TYPE(),
4490  GOUT_DESC(),
4491  IN("cloudbox_field",
4492  "za_grid",
4493  "f_grid",
4494  "atmosphere_dim",
4495  "stokes_dim",
4496  "cloudbox_limits",
4497  "doit_is_initialized"),
4498  GIN("cloudbox_field_precalc"),
4499  GIN_TYPE("Tensor7"),
4500  GIN_DEFAULT(NODEF),
4501  GIN_DESC("Precalculated radiation field (of type *cloudbox_field*)")));
4502 
4503  md_data_raw.push_back(create_mdrecord(
4504  NAME("cloudbox_fieldSetClearsky"),
4505  DESCRIPTION(
4506  "Interpolate clearsky field on all gridpoints in cloudbox.\n"
4507  "\n"
4508  "This method uses a linear 1D/3D interpolation scheme to obtain the\n"
4509  "radiation field on all grid points inside the cloud box from the\n"
4510  "clear sky field on the cloudbox boundary. This radiation field\n"
4511  "is taken as the first guess radiation field in the DOIT module.\n"
4512  "\n"
4513  "Set the *all_frequencies* to 1 if the clearsky field shall be used\n"
4514  "as initial field for all frequencies. Set it to 0 if the clear sky\n"
4515  "field shall be used only for the first frequency in *f_grid*. For\n"
4516  "later frequencies, *cloudbox_field* of the previous frequency is then\n"
4517  "used.\n"),
4518  AUTHORS("Sreerekha T.R. and Claudia Emde"),
4519  OUT("cloudbox_field"),
4520  GOUT(),
4521  GOUT_TYPE(),
4522  GOUT_DESC(),
4523  IN("cloudbox_field",
4524  "p_grid",
4525  "lat_grid",
4526  "lon_grid",
4527  "cloudbox_limits",
4528  "atmosphere_dim",
4529  "cloudbox_on",
4530  "doit_is_initialized"),
4531  GIN("all_frequencies"),
4532  GIN_TYPE("Index"),
4533  GIN_DEFAULT("1"),
4534  GIN_DESC("See above.")));
4535 
4536  md_data_raw.push_back(create_mdrecord(
4537  NAME("cloudbox_field_monoSetConst"),
4538  DESCRIPTION(
4539  "This method sets the initial field inside the cloudbox to a\n"
4540  "constant value. The method works only for monochromatic\n"
4541  "calculations (number of elements in f_grid=1).\n"
4542  "\n"
4543  "The user can specify a value for each Stokes dimension in the\n"
4544  "control file by *value*.\n"),
4545  AUTHORS("Claudia Emde"),
4546  OUT("cloudbox_field_mono"),
4547  GOUT(),
4548  GOUT_TYPE(),
4549  GOUT_DESC(),
4550  IN("cloudbox_field_mono",
4551  "p_grid",
4552  "lat_grid",
4553  "lon_grid",
4554  "cloudbox_limits",
4555  "atmosphere_dim",
4556  "stokes_dim"),
4557  GIN("value"),
4558  GIN_TYPE("Vector"),
4559  GIN_DEFAULT(NODEF),
4560  GIN_DESC("A vector containing 4 elements with the value of the "
4561  "initial field for each Stokes dimension.")));
4562 
4563  md_data_raw.push_back(create_mdrecord(
4564  NAME("cloudbox_fieldSetConst"),
4565  DESCRIPTION(
4566  "This method sets the initial field inside the cloudbox to a\n"
4567  "constant value.\n"
4568  "\n"
4569  "The user has to specify a value for each Stokes dimension in the\n"
4570  "control file by *value*.\n"),
4571  AUTHORS("Claudia Emde"),
4572  OUT("cloudbox_field"),
4573  GOUT(),
4574  GOUT_TYPE(),
4575  GOUT_DESC(),
4576  IN("cloudbox_field",
4577  "p_grid",
4578  "lat_grid",
4579  "lon_grid",
4580  "cloudbox_limits",
4581  "atmosphere_dim",
4582  "stokes_dim"),
4583  GIN("value"),
4584  GIN_TYPE("Vector"),
4585  GIN_DEFAULT(NODEF),
4586  GIN_DESC("A vector containing *stokes_dim* elements with the value of"
4587  " the initial field for each Stokes dimension.")));
4588 
4589  md_data_raw.push_back(create_mdrecord(
4590  NAME("cloudbox_fieldSetConstPerFreq"),
4591  DESCRIPTION(
4592  "This method sets the initial field inside the cloudbox to a\n"
4593  "constant value per frequency slice.\n"
4594  "\n"
4595  "The user has specify a value for each frequency and Stokes\n"
4596  "dimension in the control file by *value*.\n"),
4597  AUTHORS("Jana Mendrok"),
4598  OUT("cloudbox_field"),
4599  GOUT(),
4600  GOUT_TYPE(),
4601  GOUT_DESC(),
4602  IN("cloudbox_field",
4603  "p_grid",
4604  "lat_grid",
4605  "lon_grid",
4606  "cloudbox_limits",
4607  "atmosphere_dim",
4608  "stokes_dim"),
4609  GIN("value"),
4610  GIN_TYPE("Matrix"),
4611  GIN_DEFAULT(NODEF),
4612  GIN_DESC("A matrix containing *stokes_dim* elements per frequency"
4613  " (row) with the value of the initial field for each"
4614  " frequency and Stokes dimension.")));
4615 
4616  md_data_raw.push_back(create_mdrecord(
4617  NAME("cloudbox_fieldUpdate1D"),
4618  DESCRIPTION(
4619  "RT calculation in cloudbox with fixed scattering integral (1D).\n"
4620  "\n"
4621  "Updates the radiation field (DOIT method). The method loops\n"
4622  "through the cloudbox to update the radiation field for all\n"
4623  "positions and directions in the 1D cloudbox.\n"
4624  "\n"
4625  "Note: This method is very inefficient, because the number of\n"
4626  "iterations scales with the number of cloudbox pressure levels.\n"
4627  "It is recommended to use *cloudbox_fieldUpdateSeq1D*.\n"),
4628  AUTHORS("Claudia Emde"),
4629  OUT("cloudbox_field_mono"),
4630  GOUT(),
4631  GOUT_TYPE(),
4632  GOUT_DESC(),
4633  IN("cloudbox_field_mono",
4634  "doit_scat_field",
4635  "cloudbox_limits",
4636  "propmat_clearsky_agenda",
4637  "vmr_field",
4638  "spt_calc_agenda",
4639  "za_grid",
4640  "pnd_field",
4641  "ppath_step_agenda",
4642  "ppath_lmax",
4643  "ppath_lraytrace",
4644  "p_grid",
4645  "z_field",
4646  "refellipsoid",
4647  "t_field",
4648  "f_grid",
4649  "f_index",
4650  "surface_rtprop_agenda",
4651  "doit_za_interp"),
4652  GIN(),
4653  GIN_TYPE(),
4654  GIN_DEFAULT(),
4655  GIN_DESC()));
4656 
4657  md_data_raw.push_back(create_mdrecord(
4658  NAME("cloudbox_fieldUpdateSeq1D"),
4659  DESCRIPTION(
4660  "RT calculation in cloudbox with fixed scattering integral.\n"
4661  "\n"
4662  "Updates radiation field (*cloudbox_field*) in DOIT module.\n"
4663  "This method loops through the cloudbox to update the\n"
4664  "radiation field for all positions and directions in the 1D\n"
4665  "cloudbox. The method applies the sequential update. For more\n"
4666  "information refer to AUG.\n"),
4667  AUTHORS("Claudia Emde"),
4668  OUT("cloudbox_field_mono", "doit_scat_field"),
4669  GOUT(),
4670  GOUT_TYPE(),
4671  GOUT_DESC(),
4672  IN("cloudbox_field_mono",
4673  "doit_scat_field",
4674  "cloudbox_limits",
4675  "propmat_clearsky_agenda",
4676  "vmr_field",
4677  "spt_calc_agenda",
4678  "za_grid",
4679  "aa_grid",
4680  "pnd_field",
4681  "ppath_step_agenda",
4682  "ppath_lmax",
4683  "ppath_lraytrace",
4684  "p_grid",
4685  "z_field",
4686  "refellipsoid",
4687  "t_field",
4688  "f_grid",
4689  "f_index",
4690  "surface_rtprop_agenda",
4691  "doit_za_interp"),
4692  GIN("normalize", "norm_error_threshold", "norm_debug"),
4693  GIN_TYPE("Index", "Numeric", "Index"),
4694  GIN_DEFAULT("1", "1.0", "0"),
4695  GIN_DESC(
4696  "Apply normalization to scattered field.",
4697  "Error threshold for scattered field correction factor.",
4698  "Debugging flag. Set to 1 to output normalization factor to out0.")));
4699 
4700  md_data_raw.push_back(create_mdrecord(
4701  NAME("cloudbox_fieldUpdateSeq1DPP"),
4702  DESCRIPTION(
4703  "RT calculation in cloudbox with fixed scattering integral.\n"
4704  "\n "
4705  "Update radiation field (*cloudbox_field*) in DOIT module.\n"
4706  "This method loops through the cloudbox to update the\n"
4707  "radiation field for all\n"
4708  "positions and directions in the 1D cloudbox. The method applies\n"
4709  "the sequential update and the plane parallel approximation.\n"
4710  "This method is only slightly faster than\n"
4711  "*cloudbox_fieldUpdateSeq1D* and it is less accurate. It can not\n"
4712  "be used for limb simulations.\n"),
4713  AUTHORS("Sreerekha T.R."),
4714  OUT("cloudbox_field_mono", "za_index"),
4715  GOUT(),
4716  GOUT_TYPE(),
4717  GOUT_DESC(),
4718  IN("cloudbox_field_mono",
4719  "doit_scat_field",
4720  "cloudbox_limits",
4721  "propmat_clearsky_agenda",
4722  "vmr_field",
4723  "spt_calc_agenda",
4724  "za_grid",
4725  "pnd_field",
4726  "p_grid",
4727  "z_field",
4728  "t_field",
4729  "f_grid",
4730  "f_index"),
4731  GIN(),
4732  GIN_TYPE(),
4733  GIN_DEFAULT(),
4734  GIN_DESC()));
4735 
4736  md_data_raw.push_back(create_mdrecord(
4737  NAME("cloudbox_fieldUpdateSeq3D"),
4738  DESCRIPTION(
4739  "RT calculation in cloudbox with fixed scattering integral.\n"
4740  "\n"
4741  "Update radiation field (*cloudbox_field*) in DOIT module.\n"
4742  "This method loops through the cloudbox to update the\n"
4743  "radiation field for all positions and directions in the 3D\n"
4744  "cloudbox. The method applies the sequential update. For more\n"
4745  "information please refer to AUG.\n"
4746  "Surface reflections are not yet implemented in 3D scattering\n"
4747  "calculations.\n"),
4748  AUTHORS("Claudia Emde"),
4749  OUT("cloudbox_field_mono"),
4750  GOUT(),
4751  GOUT_TYPE(),
4752  GOUT_DESC(),
4753  IN("cloudbox_field_mono",
4754  "doit_scat_field",
4755  "cloudbox_limits",
4756  "propmat_clearsky_agenda",
4757  "vmr_field",
4758  "spt_calc_agenda",
4759  "za_grid",
4760  "aa_grid",
4761  "pnd_field",
4762  "ppath_step_agenda",
4763  "ppath_lmax",
4764  "ppath_lraytrace",
4765  "p_grid",
4766  "lat_grid",
4767  "lon_grid",
4768  "z_field",
4769  "refellipsoid",
4770  "t_field",
4771  "f_grid",
4772  "f_index",
4773  "doit_za_interp"),
4774  GIN(),
4775  GIN_TYPE(),
4776  GIN_DEFAULT(),
4777  GIN_DESC()));
4778 
4779  md_data_raw.push_back(create_mdrecord(
4780  NAME("cloudbox_field_monoOptimizeReverse"),
4781  DESCRIPTION(
4782  "Interpolate *cloudbox_field_mono* back to the original p_grid.\n"
4783  "For detailed description, see *OptimizeDoitPressureGrid*. \n"),
4784  AUTHORS("Jakob Doerr"),
4785  OUT("cloudbox_field_mono"),
4786  GOUT(),
4787  GOUT_TYPE(),
4788  GOUT_DESC(),
4789  IN("cloudbox_field_mono", "p_grid_orig", "p_grid", "cloudbox_limits"),
4790  GIN(),
4791  GIN_TYPE(),
4792  GIN_DEFAULT(),
4793  GIN_DESC()));
4794 
4795  md_data_raw.push_back(create_mdrecord(
4796  NAME("Compare"),
4797  DESCRIPTION(
4798  "Checks the consistency between two variables.\n"
4799  "\n"
4800  "The two variables are checked to not deviate outside the specified\n"
4801  "value (*maxabsdiff*). An error is issued if this is not fulfilled.\n"
4802  "\n"
4803  "The main application of this method is to be part of the test\n"
4804  "control files, and then used to check that a calculated value\n"
4805  "is consistent with an old, reference, value.\n"),
4806  AUTHORS("Oliver Lemke"),
4807  OUT(),
4808  GOUT(),
4809  GOUT_TYPE(),
4810  GOUT_DESC(),
4811  IN(),
4812  GIN("var1", "var2", "maxabsdiff", "error_message"),
4813  GIN_TYPE( // INPUT 1
4814  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor7,"
4815  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor7, GriddedField3,"
4816  "Sparse, SingleScatteringData",
4817  // INPUT 2
4818  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor7,"
4819  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor7, GriddedField3,"
4820  "Sparse, SingleScatteringData",
4821  // OTHER INPUT
4822  "Numeric",
4823  "String"),
4824  GIN_DEFAULT(NODEF, NODEF, "", ""),
4825  GIN_DESC("A first variable",
4826  "A second variable",
4827  "Threshold for maximum absolute difference.",
4828  "Additional error message."),
4829  SETMETHOD(false),
4830  AGENDAMETHOD(false),
4831  USES_TEMPLATES(false),
4832  PASSWORKSPACE(false),
4833  PASSWSVNAMES(true)));
4834 
4835  md_data_raw.push_back(create_mdrecord(
4836  NAME("CompareRelative"),
4837  DESCRIPTION(
4838  "Checks the consistency between two variables by their relative values.\n"
4839  "\n"
4840  "The two variables are checked to not deviate outside the specified\n"
4841  "relative value (*maxabsreldiff*). An error is issued if this is not\n"
4842  "fulfilled.\n"
4843  "\n"
4844  "The main application of this method is to be part of the test\n"
4845  "control files, and then used to check that a calculated value\n"
4846  "is consistent with an old, reference, value.\n"
4847  "\n"
4848  "If either value is 0.0, the relative error is considered as 0\n"
4849  "for easier use. This really means infinite differences, though\n"
4850  "allowing zero-crossings is useful for plenty of tests. So Be Aware!\n"
4851  "\n"
4852  "If both *var1* and *var2* are non-zero, the difference is evaluated\n"
4853  "as: abs(var1/var2-1)\n"
4854  "That is, *var2* is taken as the reference value.\n"),
4855  AUTHORS("Oliver Lemke", "Richard Larsson"),
4856  OUT(),
4857  GOUT(),
4858  GOUT_TYPE(),
4859  GOUT_DESC(),
4860  IN(),
4861  GIN("var1", "var2", "maxabsreldiff", "error_message"),
4862  GIN_TYPE(
4863  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
4864  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor3, ArrayOfTensor4,"
4865  "ArrayOfTensor6, ArrayOfTensor7, ArrayOfArrayOfVector,"
4866  "ArrayOfArrayOfMatrix, ArrayOfArrayOfTensor3, ArrayOfArrayOfTensor6,"
4867  "ArrayOfPropagationMatrix, ArrayOfArrayOfPropagationMatrix,"
4868  "ArrayOfStokesVector, ArrayOfArrayOfStokesVector,EnergyLevelMap,",
4869  "Numeric, Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
4870  "ArrayOfVector, ArrayOfMatrix, ArrayOfTensor3, ArrayOfTensor4,"
4871  "ArrayOfTensor6, ArrayOfTensor7, ArrayOfArrayOfVector,"
4872  "ArrayOfArrayOfMatrix, ArrayOfArrayOfTensor3, ArrayOfArrayOfTensor6,"
4873  "ArrayOfPropagationMatrix, ArrayOfArrayOfPropagationMatrix,"
4874  "ArrayOfStokesVector, ArrayOfArrayOfStokesVector,EnergyLevelMap,",
4875  "Numeric",
4876  "String"),
4877  GIN_DEFAULT(NODEF, NODEF, NODEF, ""),
4878  GIN_DESC("A first variable",
4879  "A second variable",
4880  "Threshold for maximum relative difference.",
4881  "Additional error message."),
4882  SETMETHOD(false),
4883  AGENDAMETHOD(false),
4884  USES_TEMPLATES(false),
4885  PASSWORKSPACE(false),
4886  PASSWSVNAMES(true)));
4887 
4888  md_data_raw.push_back(create_mdrecord(
4889  NAME("complex_refr_indexConstant"),
4890  DESCRIPTION(
4891  "Set complex refractive index to a constant value.\n"
4892  "\n"
4893  "Frequency and temperature grids are set to have length 1 (and\n"
4894  "set to the value 0).\n"),
4895  AUTHORS("Oliver Lemke"),
4896  OUT("complex_refr_index"),
4897  GOUT(),
4898  GOUT_TYPE(),
4899  GOUT_DESC(),
4900  IN(),
4901  GIN("refr_index_real", "refr_index_imag"),
4902  GIN_TYPE("Numeric", "Numeric"),
4904  GIN_DESC("Real part of refractive index",
4905  "Imag part of refractive index")));
4906 
4907  md_data_raw.push_back(create_mdrecord(
4908  NAME("complex_refr_indexIceMatzler06"),
4909  DESCRIPTION(
4910  "Refractive index of ice following Matzler06 parameterization.\n"
4911  "\n"
4912  "Calculates temperature dependent complex refractive index of\n"
4913  "hexagonal ice at microwave and sub-mm frequencies (10MHz-3Tz).\n"
4914  "\n"
4915  "This parametrization is also applied by the microwave and\n"
4916  "submm-wave part of the Warren08 model.\n"
4917  "\n"
4918  "References:\n"
4919  "Matzler, C., 2006: Thermal Microwave Radiation: Application for\n"
4920  "Remote Sensing, Microwave dielectric properties of ice, pp. 455-462,\n"
4921  "Inst. Eng. Technol., Stevenage, U. K.\n"
4922  "Warren, S. G., and R. E. Brandt, 2008: Optical constants of ice\n"
4923  "from the ultraviolet to the microwave: A revised compilation,\n"
4924  "J. Geophys. Res., 113, D14220, doi:10.1029/2007JD009744.\n"),
4925  AUTHORS("Jana Mendrok"),
4926  OUT("complex_refr_index"),
4927  GOUT(),
4928  GOUT_TYPE(),
4929  GOUT_DESC(),
4930  IN(),
4931  GIN("data_f_grid", "data_T_grid"),
4932  GIN_TYPE("Vector", "Vector"),
4934  GIN_DESC("Frequency grid for refractive index calculation",
4935  "Temperature grid for refractive index calculation")));
4936 
4937  md_data_raw.push_back(create_mdrecord(
4938  NAME("complex_refr_indexIceWarren84"),
4939  DESCRIPTION(
4940  "Refractive index of ice following Warren84 parameterization.\n"
4941  "\n"
4942  "Calculates complex refractive index of Ice 1H for wavelengths\n"
4943  "between 45 nm and 8.6 m.\n"
4944  "For wavelengths above 167 microns, temperature dependence is\n"
4945  "included for temperatures between 213 and 272K.\n"
4946  "Mainly intended for applications in Earth ice\n"
4947  "clouds and snow, not other planets or interstellar space;\n"
4948  "the temperature dependence or crystalline form of ice may be\n"
4949  "incorrect for these latter applications.\n"
4950  "\n"
4951  "Authors of Fortran function:\n"
4952  "Stephen Warren, Univ. of Washington (1983)\n"
4953  "Bo-Cai Gao, JCESS, Univ. of Maryland (1995)\n"
4954  "Warren Wiscombe, NASA Goddard (1995)\n"
4955  "\n"
4956  "References:\n"
4957  "Warren, S., 1984: Optical Constants of Ice from the Ultraviolet\n"
4958  "to the Microwave, Appl. Opt. 23, 1206-1225\n"
4959  "\n"
4960  "Kou, L., D. Labrie, and P. Chylek, 1994: Refractive indices\n"
4961  "of water and ice in the 0.65- to 2.5-micron spectral range,\n"
4962  "Appl. Opt. 32, 3531-3540\n"
4963  "\n"
4964  "Perovich, D., and J. Govoni, 1991: Absorption Coefficients\n"
4965  "of Ice from 250 to 400 nm, Geophys. Res. Lett. 18, 1233-1235\n"),
4966  AUTHORS("Oliver Lemke"),
4967  OUT("complex_refr_index"),
4968  GOUT(),
4969  GOUT_TYPE(),
4970  GOUT_DESC(),
4971  IN(),
4972  GIN("data_f_grid", "data_T_grid"),
4973  GIN_TYPE("Vector", "Vector"),
4975  GIN_DESC("Frequency grid for refractive index calculation",
4976  "Temperature grid for refractive index calculation")));
4977 
4978  md_data_raw.push_back(create_mdrecord(
4979  NAME("complex_refr_indexWaterLiebe93"),
4980  DESCRIPTION(
4981  "Complex refractive index of liquid water according to Liebe 1993.\n"
4982  "\n"
4983  "The method treats liquid water without salt. Thus, not valid below\n"
4984  "10 GHz. Upper frequency limit not known, here set to 1000 GHz.\n"
4985  "Model parameters taken from Atmlab function epswater93 (by\n"
4986  "C. Maetzler), which refer to Liebe 1993 without closer\n"
4987  "specifications.\n"
4988  "\n"
4989  "Temperatures must be between -40 and 100 degrees Celsius. The\n"
4990  "accuracy of the parametrization below 0 C is not known by us.\n"),
4991  AUTHORS("Patrick Eriksson", "Oliver Lemke"),
4992  OUT("complex_refr_index"),
4993  GOUT(),
4994  GOUT_TYPE(),
4995  GOUT_DESC(),
4996  IN(),
4997  GIN("data_f_grid", "data_T_grid"),
4998  GIN_TYPE("Vector", "Vector"),
5000  GIN_DESC("Frequency grid for refractive index calculation",
5001  "Temperature grid for refractive index calculation")));
5002 
5003  md_data_raw.push_back(create_mdrecord(
5004  NAME("Copy"),
5005  DESCRIPTION(
5006  "Copy a workspace variable.\n"
5007  "\n"
5008  "This method can copy any workspace variable\n"
5009  "to another workspace variable of the same group. (E.g., a Matrix to\n"
5010  "another Matrix.)\n"
5011  "\n"
5012  "As always, output comes first in the argument list!\n"
5013  "\n"
5014  "Usage example:\n"
5015  "\n"
5016  "Copy(f_grid, p_grid)\n"
5017  "\n"
5018  "Will copy the content of *p_grid* to *f_grid*. The size of *f_grid*\n"
5019  "is adjusted automatically (the normal behaviour for workspace\n"
5020  "methods).\n"),
5021  AUTHORS("Stefan Buehler"),
5022  OUT(),
5023  GOUT("out"),
5024  GOUT_TYPE("Any"),
5025  GOUT_DESC("Destination variable."),
5026  IN(),
5027  GIN("in"),
5028  GIN_TYPE("Any"),
5029  GIN_DEFAULT(NODEF),
5030  GIN_DESC("Source variable."),
5031  SETMETHOD(false),
5032  AGENDAMETHOD(false),
5033  USES_TEMPLATES(true),
5034  PASSWORKSPACE(false),
5035  PASSWSVNAMES(true)));
5036 
5037  md_data_raw.push_back(create_mdrecord(
5038  NAME("covmat1D"),
5039  DESCRIPTION(
5040  "Create 1D covariance matrix.\n"
5041  "\n"
5042  "Creates a 1D covariance matrix for two retrieval quantities on given \n"
5043  " grids from a given functional form. Elements of the covariance matrix\n"
5044  "are computed as\n"
5045  " S_{i,j} = sigma_i * sigma_j * f(d_{i,j} / l_{i,j}) \n"
5046  " where d_{i,j} is the distance between the two grid points and l_{i,j}\n"
5047  " the mean of the correlation lengths of the grid points.\n"
5048  "\n"
5049  " If a cutoff value co is given elements with absolute value less than this \n"
5050  " are set to zero.\n"
5051  "\n"
5052  "The following functional forms are available:\n"
5053  " \"exp\": f(x) = exp(-x) \n"
5054  " \"lin\": f(x) = 1.0 - x, for x > 1.0, 0.0 otherwise \n"
5055  " \"gauss\": f(x) = exp(-x^2) \n"),
5056  AUTHORS("Simon Pfreundschuh"),
5057  OUT(),
5058  GOUT("out"),
5059  GOUT_TYPE("Matrix, Sparse"),
5060  GOUT_DESC("The matrix in which to store the covariance matrix."),
5061  IN(),
5062  GIN("grid_1",
5063  "grid_2",
5064  "sigma_1",
5065  "sigma_2",
5066  "cls_1",
5067  "cls_2",
5068  "co",
5069  "fname"),
5070  GIN_TYPE("Vector",
5071  "Vector",
5072  "Vector",
5073  "Vector",
5074  "Vector",
5075  "Vector",
5076  "Numeric",
5077  "String"),
5078  GIN_DEFAULT(NODEF, "[]", NODEF, "[]", NODEF, "[]", "0.0", NODEF),
5079  GIN_DESC("The retrieval grid for the first retrieval quantity.",
5080  "The retrieval grid for the second retrieval quantity."
5081  " (If empty taken as grid_1)",
5082  "The variances of the first retrieval quantity.",
5083  "The variances of the second retrieval quantity."
5084  "(If empty taken as sigma_1)",
5085  "The correlations lengths of the first retrieval quantity.",
5086  "The correlations lengths of the second retrieval quantity."
5087  "(If empty taken as cls_1)",
5088  "The cutoff value for covariance matrix elements.",
5089  "The name of the functional form to use."),
5090  PASSWORKSPACE(false),
5091  SETMETHOD(false),
5092  USES_TEMPLATES(true)));
5093 
5094  md_data_raw.push_back(create_mdrecord(
5095  NAME("covmat1DMarkov"),
5096  DESCRIPTION(
5097  "Create Markov Process Covariance Matrix.\n"
5098  "\n"
5099  "Create a markov process covariance matrix for a retrieval quantity on \n"
5100  " evenly spaced 1D grid. The correlation between two grid points i,j is \n"
5101  " is computed as \n"
5102  " cov(i,j) = sigma[i] * sigma[j] * exp(- d(i,j) / lc)\n"
5103  " where d(i,j) = abs(grid[i] - grid[j]).\n"
5104  "\n"
5105  "This function also sets covmat_inv_block to the analytically computed inverse\n"
5106  "of the covariance matrix of the markov provess, which is tri-diagonal. Note\n"
5107  "that this requires the retrieval grid to be evenly spaced.\n"),
5108  AUTHORS("Simon Pfreundschuh"),
5109  OUT(),
5110  GOUT("out", "out_inverse"),
5111  GOUT_TYPE("Matrix, Sparse", "Matrix, Sparse"),
5112  GOUT_DESC(
5113  "The matrix in which to store the covariance matrix.",
5114  "The matrix in which to store the inverse of the covariance matrix."),
5115  IN(),
5116  GIN("grid", "sigma", "lc", "co"),
5117  GIN_TYPE("Vector", "Vector", "Numeric", "Numeric"),
5118  GIN_DEFAULT(NODEF, NODEF, NODEF, "0.0"),
5119  GIN_DESC("The retrieval grid.",
5120  "The vairance for each grid point.",
5121  "The correlation length of the Markov process.",
5122  "The cutoff value below which elements will be set to 0.0"),
5123  PASSWORKSPACE(false),
5124  SETMETHOD(false),
5125  USES_TEMPLATES(true)));
5126 
5127  md_data_raw.push_back(create_mdrecord(
5128  NAME("covmatDiagonal"),
5129  DESCRIPTION(
5130  "Sets the matrix in covmat_block to a diagonal matrix with the variances\n"
5131  "provided in *vars* as diagonal elements."
5132  "\n"
5133  "Also sets covmat_block_inv to the inverse of the block so that the\n"
5134  "computation of the inverse is avoided.\n"),
5135  AUTHORS("Simon Pfreundschuh"),
5136  OUT(),
5137  GOUT("out", "out_inverse"),
5138  GOUT_TYPE("Matrix, Sparse", "Matrix, Sparse"),
5139  GOUT_DESC(
5140  "The matrix in which to store the covariance matrix.",
5141  "The matrix in which to store the inverse of the covariance matrix."),
5142  IN(),
5143  GIN("vars"),
5144  GIN_TYPE("Vector"),
5145  GIN_DEFAULT(NODEF),
5146  GIN_DESC("Variances to be used as diagonal elements of covmat_block."),
5147  PASSWORKSPACE(false),
5148  SETMETHOD(false),
5149  USES_TEMPLATES(true)));
5150 
5151  md_data_raw.push_back(create_mdrecord(
5152  NAME("covmat_seAddBlock"),
5153  DESCRIPTION(
5154  "Add a block to the measurement covariance matrix *covmat_se*\n"
5155  "\n"
5156  "This functions adds a given dense or sparse matrix as block to the covariance\n"
5157  "matrix *covmat_sx*. The position of the block can be given by the generic\n"
5158  "arguments *i* and *j*. Note that diagonal blocks must be added in order starting from\n"
5159  " in the top left corner. If an off-diagonal block is added it must have corresponding\n"
5160  " existing blocks on the diagonal and these must be consistent with the dimensions\n"
5161  " of the block. If *i* and *j* are not provided, the blok will be added\n"
5162  "at the first free spot on the diagonal.\n"),
5163  AUTHORS("Simon Pfreundschuh"),
5164  OUT("covmat_se"),
5165  GOUT(),
5166  GOUT_TYPE(),
5167  GOUT_DESC(),
5168  IN("covmat_se"),
5169  GIN("block", "i", "j"),
5170  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5171  GIN_DEFAULT(NODEF, "-1", "-1"),
5172  GIN_DESC("The block to add to the covariance matrix",
5173  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5174  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5175  PASSWORKSPACE(false),
5176  SETMETHOD(false),
5177  USES_TEMPLATES(true)));
5178 
5179  md_data_raw.push_back(create_mdrecord(
5180  NAME("covmat_seAddInverseBlock"),
5181  DESCRIPTION(
5182  "Add the inverse of a block to covariance matrix *covmat_se*\n"
5183  "\n"
5184  "This functions adds a given matrix as the inverse of a block in the covariance\n"
5185  "matrix *covmat_se*. The purpose of this function is to allow the user to\n"
5186  "to use a precomputed inverse for this block in the covariance matrix, that may\n"
5187  "for example have been obtained analytically.\n"
5188  "\n"
5189  "This function requires the corresponding non-inverse block to already be present in *covmat_se*"
5190  "\n"
5191  "\n Note that for this to work this retrieval quantity must be independent from\n"
5192  "other retrieval quantities that do not have an inverse. Otherwise the inverse\n"
5193  "will be ignored and recomputed numerically.\n"
5194  "\n"
5195  "For the rest, the same requirements as for *covmat_seAddBlock* apply.\n"),
5196  AUTHORS("Simon Pfreundschuh"),
5197  OUT("covmat_se"),
5198  GOUT(),
5199  GOUT_TYPE(),
5200  GOUT_DESC(),
5201  IN("covmat_se"),
5202  GIN("block", "i", "j"),
5203  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5204  GIN_DEFAULT(NODEF, "-1", "-1"),
5205  GIN_DESC("The inverse block to add to the covariance matrix",
5206  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5207  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5208  PASSWORKSPACE(false),
5209  SETMETHOD(false),
5210  USES_TEMPLATES(true)));
5211 
5212  md_data_raw.push_back(create_mdrecord(
5213  NAME("covmat_seSet"),
5214  DESCRIPTION(
5215  "Set covmat_se to a given matrix.\n"
5216  "\n"
5217  "This sets the measurement covariance matrix *covmat_se* to\n"
5218  "the matrix given by the generic input *covmat*. The covariance\n"
5219  "matrix can be of type CovarianceMatrix, Matrix or Sparse.\n"),
5220  AUTHORS("Simon Pfreundschuh"),
5221  OUT("covmat_se"),
5222  GOUT(),
5223  GOUT_TYPE(),
5224  GOUT_DESC(),
5225  IN(),
5226  GIN("covmat"),
5227  GIN_TYPE("CovarianceMatrix, Matrix, Sparse"),
5228  GIN_DEFAULT(NODEF),
5229  GIN_DESC("The matrix to set as the covariance matrix."),
5230  PASSWORKSPACE(false),
5231  SETMETHOD(false),
5232  USES_TEMPLATES(true)));
5233 
5234  md_data_raw.push_back(create_mdrecord(
5235  NAME("covmat_sxSet"),
5236  DESCRIPTION(
5237  "Set covmat_sx to a given matrix.\n"
5238  "\n"
5239  "This sets the measurement covariance matrix *covmat_sx* to\n"
5240  "the matrix given by the generic input *covmat*. The covariance\n"
5241  "matrix can be of type CovarianceMatrix, Matrix or Sparse.\n"),
5242  AUTHORS("Simon Pfreundschuh"),
5243  OUT("covmat_sx"),
5244  GOUT(),
5245  GOUT_TYPE(),
5246  GOUT_DESC(),
5247  IN(),
5248  GIN("covmat"),
5249  GIN_TYPE("CovarianceMatrix, Matrix, Sparse"),
5250  GIN_DEFAULT(NODEF),
5251  GIN_DESC("The matrix to set as the covariance matrix."),
5252  PASSWORKSPACE(false),
5253  SETMETHOD(false),
5254  USES_TEMPLATES(true)));
5255 
5256  md_data_raw.push_back(create_mdrecord(
5257  NAME("covmat_sxAddBlock"),
5258  DESCRIPTION(
5259  "Add a block to the a priori covariance matrix *covmat_sx*\n"
5260  "\n"
5261  "This functions adds a given matrix as a block in the covariance\n"
5262  "matrix *covmat_sx*. The position of the block can be given by the generic\n"
5263  "arguments *i* and *j*, which should give the index of the retrieval quantity in\n"
5264  "*jacobian_quantities*, which is given just by the order the quantities have been\n"
5265  "added to the retrieval.\n"
5266  "\n"
5267  "If arguments *i* and *j* are omitted, the block will be added as diagonal block\n"
5268  "for the last added retrieval quantity.\n"
5269  "\n"
5270  "If provided, the index *i* must be less than or equal to *j*. Also the provided\n"
5271  "block must be consistent with the corresponding retrieval quantities.\n"),
5272  AUTHORS("Simon Pfreundschuh"),
5273  OUT("covmat_sx"),
5274  GOUT(),
5275  GOUT_TYPE(),
5276  GOUT_DESC(),
5277  IN("covmat_sx", "jacobian_quantities"),
5278  GIN("block", "i", "j"),
5279  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5280  GIN_DEFAULT(NODEF, "-1", "-1"),
5281  GIN_DESC("The block to add to the covariance matrix",
5282  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5283  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5284  PASSWORKSPACE(false),
5285  SETMETHOD(false),
5286  USES_TEMPLATES(true)));
5287 
5288  md_data_raw.push_back(create_mdrecord(
5289  NAME("covmat_sxAddInverseBlock"),
5290  DESCRIPTION(
5291  "Add the inverse of a block in covariance matrix *covmat_sx*\n"
5292  "\n"
5293  "This functions adds a given matrix as the inverse of a block in the covariance\n"
5294  "matrix *covmat_sx*. The purpose of this function is to allow the user to\n"
5295  "to use a precomputed inverse for this block in the covariance matrix, the may\n"
5296  "for example by obtained analytically.\n"
5297  "\n"
5298  "This function requires the non-inverse block to already be present in *covmat_sx*"
5299  "\n"
5300  "\n Note that for this to work this retrieval quantity must be independent from\n"
5301  "other retrieval quantities that do not have an inverse. Otherwise the inverse\n"
5302  "will be ignored and recomputed numerically.\n"
5303  "\n"
5304  "For the rest, the same requirements as for *covmat_sxAddBlock* apply.\n"),
5305  AUTHORS("Simon Pfreundschuh"),
5306  OUT("covmat_sx"),
5307  GOUT(),
5308  GOUT_TYPE(),
5309  GOUT_DESC(),
5310  IN("covmat_sx", "jacobian_quantities"),
5311  GIN("block", "i", "j"),
5312  GIN_TYPE("Matrix, Sparse", "Index", "Index"),
5313  GIN_DEFAULT(NODEF, "-1", "-1"),
5314  GIN_DESC("The inverse block to add to the covariance matrix",
5315  "Index of a retrieval quantity. Must satisfy *i* <= *j*.",
5316  "Index of a retrieval quantity. Must satisfy *i* <= *j*."),
5317  PASSWORKSPACE(false),
5318  SETMETHOD(false),
5319  USES_TEMPLATES(true)));
5320 
5321  md_data_raw.push_back(create_mdrecord(
5322  NAME("covmat_sxExtractSqrtDiagonal"),
5323  DESCRIPTION(
5324  "Extract the square root of the diagonal of the state space covariance matrix."
5325  "\n"
5326  "This function extracts the diagonal of the state space covariance matrix\n"
5327  "*covmat_sx* and computes its square root. The resulting vector can then\n"
5328  "be used as *x_norm* argument for the OEM method to avoid scaling problems.\n"),
5329  AUTHORS("Simon Pfreundschuh"),
5330  OUT(),
5331  GOUT("x_norm"),
5332  GOUT_TYPE("Vector"),
5333  GOUT_DESC("The vector containing the square root of the diagonal elements"
5334  " of *covmat_sx*"),
5335  IN("covmat_sx"),
5336  GIN(),
5337  GIN_TYPE(),
5338  GIN_DEFAULT(),
5339  GIN_DESC(),
5340  PASSWORKSPACE(false),
5341  SETMETHOD(false)));
5342 
5343  md_data_raw.push_back(create_mdrecord(
5344  NAME("Delete"),
5345  DESCRIPTION(
5346  "Deletes a workspace variable.\n"
5347  "\n"
5348  "The variable is marked as uninitialized and its memory freed.\n"
5349  "It is not removed from the workspace though, therefore you\n"
5350  "don't need to/can't call Create for this variable again.\n"),
5351  AUTHORS("Oliver Lemke"),
5352  OUT(),
5353  GOUT(),
5354  GOUT_TYPE(),
5355  GOUT_DESC(),
5356  IN(),
5357  GIN("v"),
5358  GIN_TYPE("Any"),
5359  GIN_DEFAULT(NODEF),
5360  GIN_DESC("Variable to be deleted."),
5361  SETMETHOD(false),
5362  AGENDAMETHOD(false),
5363  USES_TEMPLATES(true),
5364  PASSWORKSPACE(true),
5365  PASSWSVNAMES(true)));
5366 
5367  md_data_raw.push_back(create_mdrecord(
5368  NAME("diameter_maxFromDiameter_volume_equ"),
5369  DESCRIPTION(
5370  "Calculates maximum and area equivalent diameters from volume\n"
5371  "equivalent diameter.\n"
5372  "\n"
5373  "This is primarily a help function for using the T-matrix method\n"
5374  "and only a few particle shapes are handled. "
5375  "\n"
5376  "For shapes handled and further comments on the input arguments, see\n"
5377  "*scat_data_singleTmatrix*.\n"
5378  "\n"
5379  "Area equivalent diameter is the equivalent sphere diameter\n"
5380  "corresponding to the \"maximum axial area\". This is the largest\n"
5381  "cross-sectional area of the particle, observed either along the\n"
5382  "particle's main axis or in the perpendicular direction. That is,\n"
5383  "for a cylinder having diameter d and thickness h, this area is\n"
5384  "either (pi*d^2)/4 or (h*d).\n"),
5385  AUTHORS("Johan Strandgren", "Patrick Eriksson"),
5386  OUT(),
5387  GOUT("diameter_max", "diameter_area_equ"),
5388  GOUT_TYPE("Numeric", "Numeric"),
5389  GOUT_DESC(
5390  "Maximum dimension of the particle.",
5391  "Maximum axial area equivalent diameter of the particle, see above."),
5392  IN(),
5393  GIN("shape", "diameter_volume_equ", "aspect_ratio"),
5394  GIN_TYPE("String", "Numeric", "Numeric"),
5396  GIN_DESC("Particle shape.",
5397  "Particle equivalent volume diameter.",
5398  "Particle aspect ratio.")));
5399 
5400  md_data_raw.push_back(create_mdrecord(
5401  NAME("diameter_volume_equFromDiameter_max"),
5402  DESCRIPTION(
5403  "Converts from maximum to volume equivalent diameter.\n"
5404  "\n"
5405  "This is primarily a help function for using the T-matrix part\n"
5406  "and only a few particle shapes are handled. "
5407  "\n"
5408  "For shapes handled and further comments on the input arguments,\n"
5409  "see *scat_data_singleTmatrix*.\n"
5410  "\n"
5411  "Also the volume is provided. It is simply sqrt(pi*dveq^3/6).\n"),
5412  AUTHORS("Johan Strandgren", "Patrick Eriksson"),
5413  OUT(),
5414  GOUT("diameter_volume_equ", "volume"),
5415  GOUT_TYPE("Numeric", "Numeric"),
5416  GOUT_DESC("Particle volume equivalent diameter.",
5417  "Volume of the particle."),
5418  IN(),
5419  GIN("shape", "diameter_max", "aspect_ratio"),
5420  GIN_TYPE("String", "Numeric", "Numeric"),
5422  GIN_DESC("Particle shape.",
5423  "Maximum dimension of the particle.",
5424  "Particle aspect ratio.")));
5425 
5426  md_data_raw.push_back(create_mdrecord(
5427  NAME("DiagonalMatrix"),
5428  DESCRIPTION(
5429  "Create a diagonal matrix from a vector."
5430  "\n"
5431  "This creates a dense or sparse diagonal matrix with the elements of the given vector\n"
5432  " on the diagonal.\n"),
5433  AUTHORS("Simon Pfreundschuh"),
5434  OUT(),
5435  GOUT("out"),
5436  GOUT_TYPE("Matrix, Sparse"),
5437  GOUT_DESC("The diagonal matrix"),
5438  IN(),
5439  GIN("v"),
5440  GIN_TYPE("Vector"),
5441  GIN_DEFAULT(NODEF),
5442  GIN_DESC("The vector containing the diagonal elements.")));
5443 
5444  md_data_raw.push_back(create_mdrecord(
5445  NAME("DiffZaAa"),
5446  DESCRIPTION(
5447  "Derives the difference betwenn zenith and azimuth angles.\n"
5448  "\n"
5449  "Determines the difference between a set of angles (*other_los*)\n"
5450  "and a reference direction (*ref_los*). This method reverses the\n"
5451  "addition made by *AddZaAa*.\n"),
5452  AUTHORS("Patrick Eriksson"),
5453  OUT(),
5454  GOUT("dlos"),
5455  GOUT_TYPE("Matrix"),
5456  GOUT_DESC("Derived differences in line-of-sight."),
5457  IN(),
5458  GIN("ref_los", "other_los"),
5459  GIN_TYPE("Vector", "Matrix"),
5461  GIN_DESC("Reference line-of-sight (a single LOS).",
5462  "Other line-of-sights (can be multiple LOS).")));
5463 
5464  md_data_raw.push_back(create_mdrecord(
5465  NAME("DisortCalc"),
5466  DESCRIPTION(
5467  "Interface to the DISORT scattering solver (by Stamnes et al.).\n"
5468  "\n"
5469  "DISCLAIMER: There is a couple of known issues with the current\n"
5470  "implementation (see below). Use this WSM with care and only if\n"
5471  "these limitations/requirements are fulfilled. Results might be\n"
5472  "erroneous otherwise.\n"
5473  "\n"
5474  "DISORT provides the radiation field (*cloudbox_field*) from a scalar\n"
5475  "1D scattering solution assuming a plane-parallel atmosphere (flat\n"
5476  "Earth). Only totally randomly oriented particles are allowed.\n"
5477  "Refraction is not taken into account. Only Lambertian surface\n"
5478  "reflection is handled.\n"
5479  "\n"
5480  "*nstreams* is the number of polar angles taken into account\n"
5481  "internally in the scattering solution, *za_grid* is the\n"
5482  "polar angle grid on which *cloudbox_field* is provided.\n"
5483  "*nstreams* determines the angular resolution, hence the accuracy,\n"
5484  "of the scattering solution. The more anisotropic the bulk scattering\n"
5485  "matrix, the more streams are required. The computational burden\n"
5486  "increases approximately linearly with *nstreams*. The default value\n"
5487  "(8) is sufficient for most microwave scattering calculations. It is\n"
5488  "likely insufficient for IR calculations involving ice clouds,\n"
5489  "though.\n"
5490  "\n"
5491  "Further, *za_grid* determines the resolution of the output\n"
5492  "radiation field. The size of *za_grid* has no practical\n"
5493  "impact on computation time in the case of Disort and higher\n"
5494  "resolution generally improves the interpolation results, hence\n"
5495  "larger *za_grid* are recommended. To ensure sufficient\n"
5496  "interpolation accuracy, we require a (hardcoded) minimum size of 38.\n"
5497  "\n"
5498  "Different sphericity levels are emulated here by embedding DISORT\n"
5499  "in different ways and using different output. The available options\n"
5500  "(from low to high sphericity level) are:\n"
5501  "- Cloudbox extends over whole atmosphere (e.g. by setting cloudbox\n"
5502  " from *cloudboxSetFullAtm*).\n"
5503  "- Cloudbox extends over a limited part of the atmosphere only (e.g.\n"
5504  " by setting cloudbox from *cloudboxSetAutomatically* or\n"
5505  " *cloudboxSetManually*). Internally, DISORT is run over the whole\n"
5506  " atmosphere, but only the radiation field within the cloudbox is\n"
5507  " passed on and used further in ARTS (e.g. by *yCalc*).\n"
5508  "\n"
5509  "Known issues of ARTS implementation:\n"
5510  "- Surface altitude is not an interface parameter. Surface is\n"
5511  " implicitly assumed to be at the lowest atmospheric level.\n"
5512  "- Scattering angle grids of all scattering elements have to be\n"
5513  " identical (except if *pfct_method* is 'interpolate').\n"
5514  "\n"
5515  "Keyword *pfct_method* allows to chose the method to extract phase\n"
5516  "function. 'interpolate' considers temperature dependence. Others\n"
5517  "neglect it by chosing one specific temperature grid point from the\n"
5518  "single scattering data: 'low' choses the lowest T-point, 'high' the\n"
5519  "highest T-point, and 'median' the median T-point. As different\n"
5520  "scattering elements can have different temperature grids, the actual\n"
5521  "temperature value used can differ between the scattering elements.\n"
5522  "Currently, other methods than 'interpolate' require all scattering\n"
5523  "elements to be given on identical scattering angle grids.\n"
5524  "Note that this keyword solely affects the phase function;\n"
5525  "extinction/absorption/scattering cross sections are always\n"
5526  "interpolated to the actual temperature.\n"),
5527  AUTHORS("Claudia Emde, Jana Mendrok"),
5528  OUT("cloudbox_field"),
5529  GOUT(),
5530  GOUT_TYPE(),
5531  GOUT_DESC(),
5532  IN("atmfields_checked",
5533  "atmgeom_checked",
5534  "scat_data_checked",
5535  "cloudbox_checked",
5536  "cloudbox_on",
5537  "cloudbox_limits",
5538  "propmat_clearsky_agenda",
5539  "atmosphere_dim",
5540  "pnd_field",
5541  "t_field",
5542  "z_field",
5543  "vmr_field",
5544  "p_grid",
5545  "scat_data",
5546  "f_grid",
5547  "za_grid",
5548  "stokes_dim",
5549  "z_surface",
5550  "surface_skin_t",
5551  "surface_scalar_reflectivity"),
5552  GIN("nstreams", "pfct_method", "Npfct", "quiet"),
5553  GIN_TYPE("Index", "String", "Index", "Index"),
5554  GIN_DEFAULT("8", "median", "181", "0"),
5555  GIN_DESC("Number of polar angle directions (streams) in DISORT "
5556  "solution (must be an even number).",
5557  "Flag which method to apply to derive phase function.",
5558  "Number of angular grid points to calculate bulk phase"
5559  " function on (and derive Legendre polnomials from). If <0,"
5560  " the finest za_grid from scat_data will be used.",
5561  "Silence C Disort warnings.")));
5562 
5563  md_data_raw.push_back(create_mdrecord(
5564  NAME("DisortCalcWithARTSSurface"),
5565  DESCRIPTION(
5566  "DISORT with surface.\n"
5567  ),
5568  AUTHORS("Claudia Emde, Jana Mendrok"),
5569  OUT("cloudbox_field"),
5570  GOUT(),
5571  GOUT_TYPE(),
5572  GOUT_DESC(),
5573  IN("atmfields_checked",
5574  "atmgeom_checked",
5575  "scat_data_checked",
5576  "cloudbox_checked",
5577  "cloudbox_on",
5578  "cloudbox_limits",
5579  "propmat_clearsky_agenda",
5580  "surface_rtprop_agenda",
5581  "atmosphere_dim",
5582  "pnd_field",
5583  "t_field",
5584  "z_field",
5585  "vmr_field",
5586  "p_grid",
5587  "scat_data",
5588  "f_grid",
5589  "za_grid",
5590  "stokes_dim"),
5591  GIN("nstreams", "pfct_method", "Npfct", "quiet"),
5592  GIN_TYPE("Index", "String", "Index", "Index"),
5593  GIN_DEFAULT("8", "median", "181", "0"),
5594  GIN_DESC("Number of polar angle directions (streams) in DISORT "
5595  "solution (must be an even number).",
5596  "Flag which method to apply to derive phase function.",
5597  "Number of angular grid points to calculate bulk phase"
5598  " function on (and derive Legendre polnomials from). If <0,"
5599  " the finest za_grid from scat_data will be used.",
5600  "Silence C Disort warnings.")));
5601 
5602  md_data_raw.push_back(create_mdrecord(
5603  NAME("DisortCalcClearsky"),
5604  DESCRIPTION(
5605  "Interface to DISORT for running clear-sky cases.\n"
5606  "\n"
5607  "The method runs DISORT with *pnd_field* set to zero.\n"
5608  "\n"
5609  "Note that this version returns *spectral_radiance_field*, i.e.\n"
5610  "the solution for the full atmosphere. The standard *DisortCalc*\n"
5611  "only returns the field inside the cloudbox.\n"),
5612  AUTHORS("Patrick Eriksson"),
5613  OUT("spectral_radiance_field"),
5614  GOUT(),
5615  GOUT_TYPE(),
5616  GOUT_DESC(),
5617  IN("atmfields_checked",
5618  "atmgeom_checked",
5619  "propmat_clearsky_agenda",
5620  "atmosphere_dim",
5621  "t_field",
5622  "z_field",
5623  "vmr_field",
5624  "p_grid",
5625  "f_grid",
5626  "za_grid",
5627  "stokes_dim",
5628  "z_surface",
5629  "surface_skin_t",
5630  "surface_scalar_reflectivity"),
5631  GIN("nstreams", "quiet"),
5632  GIN_TYPE("Index", "Index"),
5633  GIN_DEFAULT("8", "0"),
5634  GIN_DESC("Number of polar angle directions (streams) in DISORT "
5635  "solution (must be an even number).",
5636  "Silence C Disort warnings.")));
5637 
5638  md_data_raw.push_back(create_mdrecord(
5639  NAME("DOBatchCalc"),
5640  DESCRIPTION(
5641  "Performs batch calculations for radiation fields.\n"
5642  "\n"
5643  "We perform *ybatch_n* jobs, starting at index *ybatch_start*. (Zero\n"
5644  "based indexing, as usual.) The output arrays will have\n"
5645  "ybatch_n elements. Indices in the output array start\n"
5646  "with zero, independent of *ybatch_start*.\n"
5647  "\n"
5648  "WARNING, MEMORY INTENSIVE!!!: Since the outputs of this methods can\n"
5649  "be very large, make sure you only pass back output you need.\n"
5650  "Estimate the size of your output by looking at the dimensions\n"
5651  "beforehand. If you only want to pass back some fields, make sure to\n"
5652  "empty the others at the end of your *dobatch_calc_agenda*. E.g.:\n"
5653  "Tensor7SetConstant(cloudbox_field, 0, 0, 0, 0, 0, 0, 0, 0.)\n"
5654  "\n"
5655  "The method performs the following:\n"
5656  " 1. Sets *ybatch_index* = *ybatch_start*.\n"
5657  " 2. Performs a-d until\n"
5658  " *ybatch_index* = *ybatch_start* + *ybatch_n*.\n"
5659  " a. Executes *dobatch_calc_agenda*.\n"
5660  " b. If *ybatch_index* = *ybatch_start*, resizes the output\n"
5661  " arrays based on *ybatch_n*.\n"
5662  " c. Copies calculated fields to *ybatch_index* - *ybatch_start*\n"
5663  " of output arrays.\n"
5664  " d. Adds 1 to *ybatch_index*.\n"
5665  "\n"
5666  "Beside the *dobatch_calc_agenda*, the WSVs *ybatch_start*\n"
5667  "and *ybatch_n* must be set before calling this method.\n"
5668  "\n"
5669  "The input variable *ybatch_start* is set to a default of zero in\n"
5670  "*general.arts*.\n"),
5671  AUTHORS("Oliver Lemke"),
5672  OUT("dobatch_cloudbox_field",
5673  "dobatch_radiance_field",
5674  "dobatch_irradiance_field",
5675  "dobatch_spectral_irradiance_field"),
5676  GOUT(),
5677  GOUT_TYPE(),
5678  GOUT_DESC(),
5679  IN("ybatch_start", "ybatch_n", "dobatch_calc_agenda"),
5680  GIN("robust"),
5681  GIN_TYPE("Index"),
5682  GIN_DEFAULT("0"),
5683  GIN_DESC("A flag with value 1 or 0. If set to one, the batch\n"
5684  "calculation will continue, even if individual jobs fail. In\n"
5685  "that case, a warning message is written to screen and file\n"
5686  "(out1 output stream), and the output array entry for the\n"
5687  "failed job in the output fields is left empty.")));
5688 
5689  md_data_raw.push_back(create_mdrecord(
5690  NAME("DOAngularGridsSet"),
5691  DESCRIPTION(
5692  "Sets the angular grids for Discrete Ordinate type scattering\n"
5693  "calculations.\n"
5694  "\n"
5695  "This method sets the angular grids for the Discrete Ordinate type\n"
5696  "scattering calculations (DOIT, DISORT). For down- und up-looking\n"
5697  "geometries it suffices to define *N_za_grid* (both solvers) and\n"
5698  "*N_aa_grid* (DOIT). From these numbers equally spaced grids are\n"
5699  "created and stored in the WSVs *za_grid* and *aa_grid*.\n"
5700  "\n"
5701  "For limb simulations it is important to use an optimized zenith\n"
5702  "angle grid with a very fine resolution around the horizon\n"
5703  "(za=90 degrees). Such a grid can be generated using\n"
5704  "*doit_za_grid_optCalc*. To be applied, the name of the file holding\n"
5705  "the optimized angle grid has to be given (*za_grid_opt_file*).\n"
5706  "\n"
5707  "When an optimized grid is present, the equidistant grid is used for\n"
5708  "the calculation of the scattering integrals, while the optimized\n"
5709  "grid is applied for the integration of the radiative transfer\n"
5710  "equation. Otherwise the equidistant grid is used throughout. For\n"
5711  "down-looking cases using the equidistant grid typically suffices\n"
5712  "and speeds up the calculations.\n"),
5713  AUTHORS("Claudia Emde"),
5714  OUT("doit_za_grid_size", "aa_grid", "za_grid"),
5715  GOUT(),
5716  GOUT_TYPE(),
5717  GOUT_DESC(),
5718  IN(),
5719  GIN("N_za_grid", "N_aa_grid", "za_grid_opt_file"),
5720  GIN_TYPE("Index", "Index", "String"),
5721  GIN_DEFAULT(NODEF, "1", ""),
5722  GIN_DESC("Number of grid points in zenith angle grid. "
5723  "Recommended value is 19.",
5724  "Number of grid points in azimuth angle grid. "
5725  "Recommended value is 37.",
5726  "Name of special grid for RT part.")));
5727 
5728  md_data_raw.push_back(create_mdrecord(
5729  NAME("DoitCalc"),
5730  DESCRIPTION(
5731  "Main DOIT method.\n"
5732  "\n"
5733  "This method executes *doit_mono_agenda* for each frequency\n"
5734  "in *f_grid*. The output is the radiation field inside the cloudbox\n"
5735  "(*cloudbox_field*).\n"),
5736  AUTHORS("Claudia Emde"),
5737  OUT("cloudbox_field"),
5738  GOUT(),
5739  GOUT_TYPE(),
5740  GOUT_DESC(),
5741  IN("cloudbox_field",
5742  "atmfields_checked",
5743  "atmgeom_checked",
5744  "cloudbox_checked",
5745  "scat_data_checked",
5746  "cloudbox_on",
5747  "f_grid",
5748  "doit_mono_agenda",
5749  "doit_is_initialized"),
5750  GIN(),
5751  GIN_TYPE(),
5752  GIN_DEFAULT(),
5753  GIN_DESC()));
5754 
5755  md_data_raw.push_back(create_mdrecord(
5756  NAME("DoitGetIncoming"),
5757  DESCRIPTION(
5758  "Calculates incoming radiation field of the cloudbox by repeated\n"
5759  "radiative transfer calculations.\n"
5760  "\n"
5761  "The method performs monochromatic pencil beam calculations for\n"
5762  "all grid positions on the cloudbox boundary, and all directions\n"
5763  "given by scattering angle grids (*scat_za/aa_grid*). Found radiances\n"
5764  "are stored in *cloudbox_field* which can be used as boundary\n"
5765  "conditions when scattering inside the cloud box is solved by the\n"
5766  "*DoitCalc* method.\n"
5767  "\n"
5768  "Note that *cloudbox_field* will always hold intensity in terms of\n"
5769  "radiances, regardless of the setting of *iy_unit* (unit conversion\n"
5770  "is done within *yCalc* or *iyCalc*, which will provide their output\n"
5771  "in terms of the specified *iy_unit*; no explicit unit conversion by\n"
5772  "the user necessary.).\n"),
5773  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
5774  OUT("cloudbox_field"),
5775  GOUT(),
5776  GOUT_TYPE(),
5777  GOUT_DESC(),
5778  IN("cloudbox_field",
5779  "atmfields_checked",
5780  "atmgeom_checked",
5781  "cloudbox_checked",
5782  "doit_is_initialized",
5783  "iy_main_agenda",
5784  "atmosphere_dim",
5785  "lat_grid",
5786  "lon_grid",
5787  "z_field",
5788  "nlte_field",
5789  "cloudbox_on",
5790  "cloudbox_limits",
5791  "f_grid",
5792  "stokes_dim",
5793  "za_grid",
5794  "aa_grid"),
5795  GIN("rigorous", "maxratio"),
5796  GIN_TYPE("Index", "Numeric"),
5797  GIN_DEFAULT("1", "100"),
5798  GIN_DESC(
5799  "Fail if incoming field is not safely interpolable.",
5800  "Maximum allowed ratio of two radiances regarded as interpolable.")));
5801 
5802  md_data_raw.push_back(create_mdrecord(
5803  NAME("DoitGetIncoming1DAtm"),
5804  DESCRIPTION(
5805  "As *DoitGetIncoming* but assumes clear sky part to be 1D."
5806  "\n"
5807  "The incoming field is calculated only for one position and azimuth\n"
5808  "angle for each cloud box boundary, and obtained values are used\n"
5809  "for all other postions and azimuth angles. This works if a 3D\n"
5810  "cloud box is put into an 1D background atmosphere.\n"
5811  "\n"
5812  "This method can only be used for 3D cases.\n"),
5813  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
5814  OUT("cloudbox_field", "cloudbox_on"),
5815  GOUT(),
5816  GOUT_TYPE(),
5817  GOUT_DESC(),
5818  IN("cloudbox_field",
5819  "atmfields_checked",
5820  "atmgeom_checked",
5821  "cloudbox_checked",
5822  "doit_is_initialized",
5823  "iy_main_agenda",
5824  "atmosphere_dim",
5825  "lat_grid",
5826  "lon_grid",
5827  "z_field",
5828  "nlte_field",
5829  "cloudbox_on",
5830  "cloudbox_limits",
5831  "f_grid",
5832  "stokes_dim",
5833  "za_grid",
5834  "aa_grid"),
5835  GIN(),
5836  GIN_TYPE(),
5837  GIN_DEFAULT(),
5838  GIN_DESC()));
5839 
5840  md_data_raw.push_back(create_mdrecord(
5841  NAME("DoitInit"),
5842  DESCRIPTION(
5843  "Initialises variables for DOIT scattering calculations.\n"
5844  "\n"
5845  "Note that multi-dimensional output variables (Tensors, specifically)\n"
5846  "are NaN-initialized. That is, this methods needs to be called\n"
5847  "BEFORE other WSMs that provide input to *DoitCalc*, e.g. before\n"
5848  "*DoitGetIncoming*.\n"),
5849  AUTHORS("Claudia Emde"),
5850  OUT("doit_scat_field", "cloudbox_field", "doit_is_initialized"),
5851  GOUT(),
5852  GOUT_TYPE(),
5853  GOUT_DESC(),
5854  IN("stokes_dim",
5855  "atmosphere_dim",
5856  "f_grid",
5857  "za_grid",
5858  "aa_grid",
5859  "doit_za_grid_size",
5860  "cloudbox_on",
5861  "cloudbox_limits"),
5862  GIN(),
5863  GIN_TYPE(),
5864  GIN_DEFAULT(),
5865  GIN_DESC()));
5866 
5867  md_data_raw.push_back(create_mdrecord(
5868  NAME("DoitScatteringDataPrepare"),
5869  DESCRIPTION(
5870  "Prepares single scattering data for a DOIT scattering calculation.\n"
5871  "\n"
5872  "First the scattering data is interpolated in frequency using\n"
5873  "*scat_data_monoCalc*. Then the phase matrix data is\n"
5874  "transformed or interpolated from the raw data to the laboratory frame\n"
5875  "for all possible combinations of the angles contained in the angular\n"
5876  "grids which are set in *DOAngularGridsSet*. The resulting phase\n"
5877  "matrices are stored in *pha_mat_sptDOITOpt*.\n"),
5878  AUTHORS("Claudia Emde"),
5879  OUT("pha_mat_sptDOITOpt", "scat_data_mono", "pha_mat_doit", "aa_grid"),
5880  GOUT(),
5881  GOUT_TYPE(),
5882  GOUT_DESC(),
5883  IN("doit_za_grid_size",
5884  "aa_grid",
5885  "scat_data",
5886  "scat_data_checked",
5887  "f_index",
5888  "atmosphere_dim",
5889  "stokes_dim",
5890  "t_field",
5891  "cloudbox_limits",
5892  "pnd_field",
5893  "pha_mat_spt_agenda"),
5894  GIN(),
5895  GIN_TYPE(),
5896  GIN_DEFAULT(),
5897  GIN_DESC()));
5898 
5899  md_data_raw.push_back(create_mdrecord(
5900  NAME("DoitWriteIterationFields"),
5901  DESCRIPTION(
5902  "Writes DOIT iteration fields.\n"
5903  "\n"
5904  "This method writes intermediate iteration fields to xml-files. The\n"
5905  "method can be used as a part of *doit_conv_test_agenda*.\n"
5906  "\n"
5907  "The iterations to be stored are specified by *iterations*, e.g.:\n"
5908  " iterations = [3, 6, 9]\n"
5909  "In this case the 3rd, 6th and 9th iterations are stored.\n"
5910  "If a number is larger than the total number of iterations, this\n"
5911  "number is ignored. If all iterations should be stored set\n"
5912  " iterations = [-1]\n"
5913  "\n"
5914  "The frequencies to be stored are specified by *frequencies* in the\n"
5915  "same way as the iterations. The frequency index corresponds to the\n"
5916  "order of frequencies in *f_grid*.\n"
5917  "\n"
5918  "The output files are named doit_iteration_fX_iY.xml with X being the\n"
5919  "frequency index and iY the iteration counter.\n"),
5920  AUTHORS("Claudia Emde"),
5921  OUT(),
5922  GOUT(),
5923  GOUT_TYPE(),
5924  GOUT_DESC(),
5925  IN("doit_iteration_counter", "cloudbox_field_mono", "f_index"),
5926  GIN("iterations", "frequencies"),
5927  GIN_TYPE("ArrayOfIndex", "ArrayOfIndex"),
5928  GIN_DEFAULT("[-1]", "[-1]"),
5929  GIN_DESC("Selection of iterations to store.",
5930  "Selection of frequencies to store.")));
5931 
5932  md_data_raw.push_back(create_mdrecord(
5933  NAME("doit_conv_flagAbs"),
5934  DESCRIPTION(
5935  "DOIT convergence test (maximum absolute difference).\n"
5936  "\n"
5937  "The function calculates the absolute differences for two successive\n"
5938  "iteration fields. It picks out the maximum values for each Stokes\n"
5939  "component separately. The convergence test is fullfilled under the\n"
5940  "following conditions:\n"
5941  " |I(m+1) - I(m)| < epsilon_1 Intensity.\n"
5942  " |Q(m+1) - Q(m)| < epsilon_2 The other Stokes components.\n"
5943  " |U(m+1) - U(m)| < epsilon_3 \n"
5944  " |V(m+1) - V(m)| < epsilon_4 \n"
5945  "These conditions have to be valid for all positions in the\n"
5946  "cloudbox and for all directions.\n"),
5947  AUTHORS("Claudia Emde"),
5948  OUT("doit_conv_flag", "doit_iteration_counter", "cloudbox_field_mono"),
5949  GOUT(),
5950  GOUT_TYPE(),
5951  GOUT_DESC(),
5952  IN("doit_conv_flag",
5953  "doit_iteration_counter",
5954  "cloudbox_field_mono",
5955  "cloudbox_field_mono_old"),
5956  GIN("epsilon", "max_iterations", "nonconv_return_nan"),
5957  GIN_TYPE("Vector", "Index", "Index"),
5958  GIN_DEFAULT(NODEF, "100", "0"),
5959  GIN_DESC("Limits for convergence. A vector with length matching "
5960  "*stokes_dim* with unit [W / (m^2 Hz sr)].",
5961  "Maximum number of iterations allowed to reach convergence"
5962  "limit.",
5963  "Flag whether to accept result at max_iterations (0=default)"
5964  "or whether to return NaNs in case of non-convergence at"
5965  "max_iterations")));
5966 
5967  md_data_raw.push_back(create_mdrecord(
5968  NAME("doit_conv_flagAbsBT"),
5969  DESCRIPTION(
5970  "DOIT convergence test (maximum absolute difference in Rayleigh Jeans "
5971  "BT)\n"
5972  "\n"
5973  "As *doit_conv_flagAbs* but convergence limits are specified in\n"
5974  "Rayleigh-Jeans brighntess temperatures.\n"),
5975  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
5976  OUT("doit_conv_flag", "doit_iteration_counter", "cloudbox_field_mono"),
5977  GOUT(),
5978  GOUT_TYPE(),
5979  GOUT_DESC(),
5980  IN("doit_conv_flag",
5981  "doit_iteration_counter",
5982  "cloudbox_field_mono",
5983  "cloudbox_field_mono_old",
5984  "f_grid",
5985  "f_index"),
5986  GIN("epsilon", "max_iterations", "nonconv_return_nan"),
5987  GIN_TYPE("Vector", "Index", "Index"),
5988  GIN_DEFAULT(NODEF, "100", "0"),
5989  GIN_DESC("Limits for convergence. A vector with length matching "
5990  "*stokes_dim* with unit [K].",
5991  "Maximum number of iterations allowed to reach convergence"
5992  "limit.",
5993  "Flag whether to accept result at max_iterations (0=default)"
5994  "or whether to return NaNs in case of non-convergence at"
5995  "max_iterations")));
5996 
5997  md_data_raw.push_back(create_mdrecord(
5998  NAME("doit_conv_flagLsq"),
5999  DESCRIPTION(
6000  "DOIT convergence test (least squares).\n"
6001  "\n"
6002  "As *doit_conv_flagAbsBT* but applies a least squares convergence\n"
6003  "test between two successive iteration fields.\n"
6004  "\n"
6005  "Warning: This method is not recommended because this kind of\n"
6006  "convergence test is not sufficiently strict, so that the\n"
6007  "DOIT result might be wrong.\n"),
6008  AUTHORS("Claudia Emde"),
6009  OUT("doit_conv_flag", "doit_iteration_counter", "cloudbox_field_mono"),
6010  GOUT(),
6011  GOUT_TYPE(),
6012  GOUT_DESC(),
6013  IN("doit_conv_flag",
6014  "doit_iteration_counter",
6015  "cloudbox_field_mono",
6016  "cloudbox_field_mono_old",
6017  "f_grid",
6018  "f_index"),
6019  GIN("epsilon", "max_iterations", "nonconv_return_nan"),
6020  GIN_TYPE("Vector", "Index", "Index"),
6021  GIN_DEFAULT(NODEF, "100", "0"),
6022  GIN_DESC("Limits for convergence. A vector with length matching "
6023  "*stokes_dim* with unit [K].",
6024  "Maximum number of iterations allowed to reach convergence"
6025  "limit.",
6026  "Flag whether to accept result at max_iterations (0=default)"
6027  "or whether to return NaNs in case of non-convergence at"
6028  "max_iterations")));
6029 
6030  md_data_raw.push_back(create_mdrecord(
6031  NAME("OptimizeDoitPressureGrid"),
6032  DESCRIPTION(
6033  "Optimization of the pressure grid for RT calculation.\n"
6034  "The methods consists of three parts:\n"
6035  "1) Calculate the single scattering albedo and the scattering optical"
6036  "thickness from the scattering and absorption species. \n"
6037  "2) Enhance z_field according to the two thresholds sgl_alb_max and tau_scat_max."
6038  "If the resulting cloudbox size is bigger than cloudbox_size_max, this step is \n"
6039  "repeated with a higher threshold of tau_scat_max. \n"
6040  "3) Interpolate all variables used in doit_mono_agenda to the new z_field \n"
6041  "This method should be called inside\n"
6042  "*doit_mono_agenda*, right before *cloudbox_field_monoIterate*. It can \n"
6043  "only be used if *ScatSpeciesMerge* has been called and if it is\n"
6044  "called, *cloudbox_field_monoOptimizeReverse* has to be\n"
6045  "called right after *cloudbox_field_monoIterate* to interpolate\n"
6046  "*cloudbox_field_mono* back to the original size.\n"
6047  "Optimization currently only works with *stokes_dim* = 1 .\n"),
6048  AUTHORS("Jakob Doerr"),
6049  OUT("p_grid",
6050  "pnd_field",
6051  "t_field",
6052  "scat_data_mono",
6053  "z_field",
6054  "cloudbox_limits",
6055  "cloudbox_field_mono",
6056  "pha_mat_doit",
6057  "vmr_field",
6058  "p_grid_orig"),
6059  GOUT(),
6060  GOUT_TYPE(),
6061  GOUT_DESC(),
6062  IN("p_grid",
6063  "pnd_field",
6064  "t_field",
6065  "scat_data_mono",
6066  "z_field",
6067  "cloudbox_limits",
6068  "cloudbox_field_mono",
6069  "pha_mat_doit",
6070  "vmr_field",
6071  "f_grid",
6072  "f_index",
6073  "propmat_clearsky_agenda"),
6074  GIN("tau_scat_max", "sgl_alb_max", "cloudbox_size_max"),
6075  GIN_TYPE("Numeric", "Numeric", "Index"),
6076  GIN_DEFAULT("0.1", "0.9", "200"),
6077  GIN_DESC("Maximum scattering optical thickness",
6078  "Maximum single scattering albedo",
6079  "Maximum cloudbox size")));
6080 
6081  md_data_raw.push_back(create_mdrecord(
6082  NAME("doit_scat_fieldCalc"),
6083  DESCRIPTION(
6084  "Calculates the scattering integral field in the DOIT module.\n"
6085  "\n"
6086  "The scattering integral field is generated by integrating\n"
6087  "the product of phase matrix and Stokes vector over all incident\n"
6088  "angles. For more information please refer to AUG.\n"),
6089  AUTHORS("Sreerekha T.R.", "Claudia Emde"),
6090  OUT("doit_scat_field"),
6091  GOUT(),
6092  GOUT_TYPE(),
6093  GOUT_DESC(),
6094  IN("doit_scat_field",
6095  "pha_mat_spt_agenda",
6096  "cloudbox_field_mono",
6097  "pnd_field",
6098  "t_field",
6099  "atmosphere_dim",
6100  "cloudbox_limits",
6101  "za_grid",
6102  "aa_grid",
6103  "doit_za_grid_size",
6104  "pha_mat_doit"),
6105  GIN(),
6106  GIN_TYPE(),
6107  GIN_DEFAULT(),
6108  GIN_DESC()));
6109 
6110  md_data_raw.push_back(create_mdrecord(
6111  NAME("doit_scat_fieldCalcLimb"),
6112  DESCRIPTION(
6113  "Calculates the scattering integral field in the DOIT module (limb).\n"
6114  "\n"
6115  "The scattering integral field is the field generated by integrating\n"
6116  "the product of phase matrix and the Stokes vector over all incident\n"
6117  "angles.\n"
6118  "\n"
6119  "For limb simulations it makes sense to use different\n"
6120  "zenith angle grids for the scattering integral part and the RT part,\n"
6121  "because the latter part requires a much finer resolution near\n"
6122  "90 degrees. Taking an optimized grid for the RT part and an equidistant\n"
6123  "grid for the scattering integral part saves very much CPU time.\n"
6124  "This method uses the equidistant za_grid defined in\n"
6125  "*DOAngularGridsSet* and it should always be used for limb\n"
6126  "simulations.\n"
6127  "\n"
6128  "For more information please refer to AUG.\n"),
6129  AUTHORS("Claudia Emde"),
6130  OUT("doit_scat_field"),
6131  GOUT(),
6132  GOUT_TYPE(),
6133  GOUT_DESC(),
6134  IN("doit_scat_field",
6135  "pha_mat_spt_agenda",
6136  "cloudbox_field_mono",
6137  "pnd_field",
6138  "t_field",
6139  "atmosphere_dim",
6140  "cloudbox_limits",
6141  "za_grid",
6142  "aa_grid",
6143  "doit_za_grid_size",
6144  "doit_za_interp",
6145  "pha_mat_doit"),
6146  GIN(),
6147  GIN_TYPE(),
6148  GIN_DEFAULT(),
6149  GIN_DESC()));
6150 
6151  md_data_raw.push_back(create_mdrecord(
6152  NAME("doit_za_grid_optCalc"),
6153  DESCRIPTION(
6154  "Zenith angle grid optimization for scattering calculation.\n"
6155  "\n"
6156  "This method optimizes the zenith angle grid. As input it requires\n"
6157  "a radiation field (*cloudbox_field*) which is calculated on a very\n"
6158  "fine zenith angle grid (*za_grid*). Based on this field\n"
6159  "zenith angle grid points are selected, such that the maximum\n"
6160  "difference between the radiation field represented on the very\n"
6161  "fine zenith angle grid and the radiation field represented on the\n"
6162  "optimized grid (*doit_za_grid_opt*) is less than the accuracy\n"
6163  "(*acc*). Between the grid points the radiation field is interpolated\n"
6164  "linearly or polynomially depending on *doit_za_interp*.\n"
6165  "\n"
6166  "Note: The method works only for a 1D atmosphere and for one\n"
6167  "frequency.\n"),
6168  AUTHORS("Claudia Emde"),
6169  OUT("doit_za_grid_opt"),
6170  GOUT(),
6171  GOUT_TYPE(),
6172  GOUT_DESC(),
6173  IN("cloudbox_field_mono", "za_grid", "doit_za_interp"),
6174  GIN("acc"),
6175  GIN_TYPE("Numeric"),
6176  GIN_DEFAULT(NODEF),
6177  GIN_DESC("Accuracy to achieve [%].")));
6178 
6179  md_data_raw.push_back(create_mdrecord(
6180  NAME("doit_za_interpSet"),
6181  DESCRIPTION(
6182  "Define interpolation method for zenith angle dimension.\n"
6183  "\n"
6184  "You can use this method to choose the interpolation method for\n"
6185  "interpolations in the zenith angle dimension.\n"),
6186  AUTHORS("Claudia Emde"),
6187  OUT("doit_za_interp"),
6188  GOUT(),
6189  GOUT_TYPE(),
6190  GOUT_DESC(),
6191  IN("atmosphere_dim"),
6192  GIN("interp_method"),
6193  GIN_TYPE("String"),
6194  GIN_DEFAULT("linear"),
6195  GIN_DESC("Interpolation method (\"linear\" or \"polynomial\").")));
6196 
6197  md_data_raw.push_back(create_mdrecord(
6198  NAME("Duration"),
6199  DESCRIPTION("Sets the seconds between two times.\n"),
6200  AUTHORS("Richard Larsson"),
6201  OUT(),
6202  GOUT("duration"),
6203  GOUT_TYPE("Numeric"),
6204  GOUT_DESC("Time in seconds between *start* and *end*"),
6205  IN(),
6206  GIN("start", "end"),
6207  GIN_TYPE("Time", "Time"),
6209  GIN_DESC("Start time", "End time")));
6210 
6211  md_data_raw.push_back(create_mdrecord(
6212  NAME("EnergyLevelMapSet"),
6213  DESCRIPTION("Sets an EnergyLevelMap\n"),
6214  AUTHORS("Richard Larsson"),
6215  OUT(),
6216  GOUT("x"),
6217  GOUT_TYPE("EnergyLevelMap"),
6218  GOUT_DESC("out"),
6219  IN(),
6220  GIN("y"),
6221  GIN_TYPE("EnergyLevelMap"),
6222  GIN_DEFAULT(NODEF),
6223  GIN_DESC("in")));
6224 
6225  md_data_raw.push_back(create_mdrecord(
6226  NAME("Error"),
6227  DESCRIPTION(
6228  "Issues an error and exits ARTS.\n"
6229  "\n"
6230  "This method can be placed in agendas that must be specified, but\n"
6231  "are expected not to be used for the particular case. An inclusion\n"
6232  "in *surface_rtprop_agenda* could look like:\n "
6233  "Error{\"Surface interceptions of propagation path not expected.\"}\n"
6234  "\n"
6235  "Ignore and other dummy method calls must still be included.\n"),
6236  AUTHORS("Patrick Eriksson"),
6237  OUT(),
6238  GOUT(),
6239  GOUT_TYPE(),
6240  GOUT_DESC(),
6241  IN(),
6242  GIN("msg"),
6243  GIN_TYPE("String"),
6244  GIN_DEFAULT(NODEF),
6245  GIN_DESC("String describing the error.")));
6246 
6247  md_data_raw.push_back(create_mdrecord(
6248  NAME("Exit"),
6249  DESCRIPTION(
6250  "Stops the execution and exits ARTS.\n"
6251  "\n"
6252  "This method is handy if you want to debug one of your control\n"
6253  "files. You can insert it anywhere in the control file. When\n"
6254  "it is reached, it will terminate the program.\n"),
6255  AUTHORS("Patrick Eriksson"),
6256  OUT(),
6257  GOUT(),
6258  GOUT_TYPE(),
6259  GOUT_DESC(),
6260  IN(),
6261  GIN(),
6262  GIN_TYPE(),
6263  GIN_DEFAULT(),
6264  GIN_DESC()));
6265 
6266  md_data_raw.push_back(create_mdrecord(
6267  NAME("Extract"),
6268  DESCRIPTION(
6269  "Extracts an element from an array.\n"
6270  "\n"
6271  "Copies the element with the given Index from the input\n"
6272  "variable to the output variable.\n"
6273  "\n"
6274  "For a Tensor3 as an input, it copies the page with the given\n"
6275  "Index from the input Tensor3 variable to the output Matrix.\n"
6276  "\n"
6277  "In other words, the selection is always done on the first dimension.\n"),
6278  AUTHORS("Oliver Lemke"),
6279  OUT(),
6280  GOUT("needle"),
6281  GOUT_TYPE("Index, ArrayOfIndex, Numeric, Vector,"
6282  "Matrix, Matrix,"
6283  "Tensor3, Tensor4, Tensor4,"
6284  "GriddedField3, ArrayOfGriddedField3,"
6285  "GriddedField4, String,"
6286  "SingleScatteringData, ArrayOfSingleScatteringData,"
6287  "TelsemAtlas,"
6288  "QuantumIdentifier"),
6289  GOUT_DESC("Extracted element."),
6290  IN(),
6291  GIN("haystack", "index"),
6292  GIN_TYPE("ArrayOfIndex, ArrayOfArrayOfIndex, Vector, ArrayOfVector,"
6293  "ArrayOfMatrix, Tensor3,"
6294  "Tensor4, ArrayOfTensor4, Tensor5,"
6295  "ArrayOfGriddedField3, ArrayOfArrayOfGriddedField3,"
6296  "ArrayOfGriddedField4, ArrayOfString,"
6297  "ArrayOfSingleScatteringData,"
6298  "ArrayOfArrayOfSingleScatteringData,"
6299  "ArrayOfTelsemAtlas,"
6300  "ArrayOfQuantumIdentifier",
6301  "Index"),
6303  GIN_DESC("Variable to extract from.",
6304  "Position of the element which should be extracted."),
6305  SETMETHOD(false),
6306  AGENDAMETHOD(false),
6307  USES_TEMPLATES(true)));
6308 
6309  md_data_raw.push_back(create_mdrecord(
6310  NAME("ExtractFromMetaSingleScatSpecies"),
6311  DESCRIPTION(
6312  "Extract (numeric) parameters from scat_meta of a single scattering\n"
6313  "species.\n"
6314  "\n"
6315  "...\n"),
6316  AUTHORS("Jana Mendrok"),
6317  OUT(),
6318  GOUT("meta_param"),
6319  GOUT_TYPE("Vector"),
6320  GOUT_DESC("The extracted meta parameter values."),
6321  IN("scat_meta"),
6322  GIN("meta_name", "scat_species_index"),
6323  GIN_TYPE("String", "Index"),
6325  GIN_DESC("Name of the meta parameter to extract.",
6326  "Array index of scattering species from which to extract.")));
6327 
6328  md_data_raw.push_back(create_mdrecord(
6329  NAME("ext_matAddGas"),
6330  DESCRIPTION(
6331  "Add gas absorption to all diagonal elements of extinction matrix.\n"
6332  "\n"
6333  "The task of this method is to sum up the gas absorption of the\n"
6334  "different gas species and add the result to the extinction matrix.\n"),
6335  AUTHORS("Stefan Buehler"),
6336  OUT("ext_mat"),
6337  GOUT(),
6338  GOUT_TYPE(),
6339  GOUT_DESC(),
6340  IN("ext_mat", "propmat_clearsky"),
6341  GIN(),
6342  GIN_TYPE(),
6343  GIN_DEFAULT(),
6344  GIN_DESC()));
6345 
6346  md_data_raw.push_back(create_mdrecord(
6347  NAME("FastemStandAlone"),
6348  DESCRIPTION(
6349  "Stand-alone usage of FASTEM.\n"
6350  "\n"
6351  "FASTEM is a parameterisation of the emissivity of water surfaces\n"
6352  "including the impact of waves, salinity and non-specular effects.\n"
6353  "This is more or less direct interface to FASTEM, but slightly\n"
6354  "adopted to fit with ARTS. The unit of frequency and salinity\n"
6355  "differ, and this version is \"vectorised\" in frequency.\n"
6356  "\n"
6357  "The output is four emissivity and reflectivity values for each\n"
6358  "frequency. These values are defined in Eq. 13 of \"An Improved\n"
6359  "Fast Microwave Water Emissivity Model\" by Liu, Weng and English,\n"
6360  "I3TRGS, 2011. Note that emissivity and reflectivity do not add up\n"
6361  "to 1, which is the way FASTEM compensates for non-specular effects.\n"
6362  "\n"
6363  "There is an error if any frequency is above 250 GHz, or if the skin\n"
6364  "temperature is below 260 K. If the skin temperature is below 270 K,\n"
6365  "it is adjusted to 270 K.\n"
6366  "\n"
6367  "FASTEM returns unphysical values for propagation close to the\n"
6368  "horizon, here emissivity and reflectivity can be outside [0,1].\n"
6369  "If either emissivity or reflectivity is below/above 0/1, it is\n"
6370  "set to 0/1, and the other value is set to 1/0. That is, e+r=1\n"
6371  "is enforced. These problems start about 15 degrees from the horizon.\n"),
6372  AUTHORS("Oliver Lemke, Patrick Eriksson"),
6373  OUT(),
6374  GOUT("emissivity", "reflectivity"),
6375  GOUT_TYPE("Matrix", "Matrix"),
6376  GOUT_DESC("Emission values. One row for each frequency. See above.",
6377  "Reflectivity values. One row for each frequency. See above."),
6378  IN("f_grid", "surface_skin_t"),
6379  GIN("za",
6380  "salinity",
6381  "wind_speed",
6382  "rel_aa",
6383  "transmittance",
6384  "fastem_version"),
6385  GIN_TYPE("Numeric", "Numeric", "Numeric", "Numeric", "Vector", "Index"),
6386  GIN_DEFAULT(NODEF, "0.035", NODEF, NODEF, NODEF, "6"),
6387  GIN_DESC("Zenith angle of line-of-sigh, 90 to 180 deg.",
6388  "Salinity, 0-1. That is, 3% is given as 0.03.",
6389  "Wind speed.",
6390  "Azimuth angle between wind direction and line-of-sight. "
6391  "This angle is measured clockwise from north, i.e. E=90deg.",
6392  "The transmission of the atmosphere, along the propagation "
6393  "path of the downwelling radiation. One value per frequency.",
6394  "The version of FASTEM to use.")));
6395 
6396  md_data_raw.push_back(create_mdrecord(
6397  NAME("FieldFromGriddedField"),
6398  DESCRIPTION("Extract the data from a GriddedField.\n"
6399  "\n"
6400  "A check is performed that the grids from the\n"
6401  "GriddedField match *p_grid*, *lat_grid* and *lon_grid*.\n"),
6402  AUTHORS("Oliver Lemke"),
6403  OUT(),
6404  GOUT("out"),
6405  GOUT_TYPE("Matrix, Tensor3, Tensor4, Tensor4"),
6406  GOUT_DESC("Extracted field."),
6407  IN("p_grid", "lat_grid", "lon_grid"),
6408  GIN("in"),
6409  GIN_TYPE(
6410  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6411  GIN_DEFAULT(NODEF),
6412  GIN_DESC("Raw input gridded field.")));
6413 
6414  md_data_raw.push_back(create_mdrecord(
6415  NAME("FlagOff"),
6416  DESCRIPTION("Sets an index variable that acts as an on/off flag to 0.\n"),
6417  AUTHORS("Patrick Eriksson"),
6418  OUT(),
6419  GOUT("flag"),
6420  GOUT_TYPE("Index"),
6421  GOUT_DESC("Variable to set to 0."),
6422  IN(),
6423  GIN(),
6424  GIN_TYPE(),
6425  GIN_DEFAULT(),
6426  GIN_DESC()));
6427 
6428  md_data_raw.push_back(create_mdrecord(
6429  NAME("FlagOn"),
6430  DESCRIPTION("Sets an index variable that acts as an on/off flag to 1.\n"),
6431  AUTHORS("Patrick Eriksson"),
6432  OUT(),
6433  GOUT("flag"),
6434  GOUT_TYPE("Index"),
6435  GOUT_DESC("Variable to set to 1."),
6436  IN(),
6437  GIN(),
6438  GIN_TYPE(),
6439  GIN_DEFAULT(),
6440  GIN_DESC()));
6441 
6442  md_data_raw.push_back(create_mdrecord(
6443  NAME("Flatten"),
6444  DESCRIPTION("Flattens an ArrayOfArray<T> to Array<T> or an Array\n"
6445  "of matpack-types to a larger dimension matpack (if dimensions agree)\n"
6446  "\n"
6447  "The intended transformation for arrays is (sub-arrays can have different sizes):\n"
6448  " {{a, b, c}, {d, e}} -> {a, b, c, d, e}\n"
6449  "\n"
6450  "The intended transformation for arrays to matpack types is (sub-types must have same size):\n"
6451  " {{a, b, c}, {d, e, f}} -> {a, b, c, d, e, f}\n"),
6452  AUTHORS("Richard Larsson"),
6453  OUT(),
6454  GOUT("out"),
6455  GOUT_TYPE("ArrayOfTime,ArrayOfVector,Matrix,Tensor3,Tensor4,Tensor5,Tensor6,Tensor7"),
6456  GOUT_DESC("Flatter array/matpack-type"),
6457  IN(),
6458  GIN("in"),
6459  GIN_TYPE("ArrayOfArrayOfTime,ArrayOfArrayOfVector,ArrayOfVector,ArrayOfMatrix,ArrayOfTensor3,ArrayOfTensor4,ArrayOfTensor5,ArrayOfTensor6"),
6460  GIN_DEFAULT(NODEF),
6461  GIN_DESC("An array")));
6462 
6463  md_data_raw.push_back(create_mdrecord(
6464  NAME("ForLoop"),
6465  DESCRIPTION(
6466  "A simple for-loop.\n"
6467  "\n"
6468  "This method is handy when you quickly want to test out a calculation\n"
6469  "with a set of different settings.\n"
6470  "\n"
6471  "It does a for-loop from start to stop in steps of step (who would\n"
6472  "have guessed that). For each iteration, the agenda *forloop_agenda* is\n"
6473  "executed. Inside the agenda, the variable *forloop_index* is available\n"
6474  "as index counter.\n"
6475  "\n"
6476  "There are no other inputs to *forloop_agenda*, and also no outputs. That\n"
6477  "means, if you want to get any results out of this loop, you have to\n"
6478  "save it to files (for example with *WriteXMLIndexed*), since\n"
6479  "variables used inside the agenda will only be local.\n"
6480  "\n"
6481  "Note that this kind of for loop is not parallel.\n"
6482  "\n"
6483  "The method is intended for simple testing, not as a replacement of\n"
6484  "*ybatchCalc*. However, it is compatible with *ybatchCalc*, in the sense\n"
6485  "that *ybatchCalc* may occur inside *forloop_agenda*.\n"),
6486  AUTHORS("Stefan Buehler"),
6487  OUT(),
6488  GOUT(),
6489  GOUT_TYPE(),
6490  GOUT_DESC(),
6491  IN("forloop_agenda"),
6492  GIN("start", "stop", "step"),
6493  GIN_TYPE("Index", "Index", "Index"),
6495  GIN_DESC("Start value.", "End value.", "Step size.")));
6496 
6497  md_data_raw.push_back(create_mdrecord(
6498  NAME("FrequencyFromWavelength"),
6499  DESCRIPTION(
6500  "Convert from wavelength [m] to frequency [Hz].\n"
6501  "\n"
6502  "This is a generic method. It can take a single wavelength value or a wavelength vector as input.\n"),
6503  AUTHORS("Claudia Emde"),
6504  OUT(),
6505  GOUT("frequency"),
6506  GOUT_TYPE("Numeric, Vector"),
6507  GOUT_DESC("frequency [Hz]"),
6508  IN(),
6509  GIN("wavelength"),
6510  GIN_TYPE("Numeric, Vector"),
6511  GIN_DEFAULT(NODEF),
6512  GIN_DESC("wavelength [m]")));
6513 
6514  md_data_raw.push_back(create_mdrecord(
6515  NAME("FrequencyFromCGSAngularWavenumber"),
6516  DESCRIPTION(
6517  "Convert from angular wavenumber [cm^-1] to frequency [Hz].\n"
6518  "\n"
6519  "This converts angular wavenumber (2*PI/wavelength) into frequency.\n"),
6520  AUTHORS("Richard Larsson"),
6521  OUT(),
6522  GOUT("frequency"),
6523  GOUT_TYPE("Numeric, Vector"),
6524  GOUT_DESC("frequency [Hz]"),
6525  IN(),
6526  GIN("angular_wavenumber"),
6527  GIN_TYPE("Numeric, Vector"),
6528  GIN_DEFAULT(NODEF),
6529  GIN_DESC("angular wavenumber [cm^-1]")));
6530 
6531  md_data_raw.push_back(create_mdrecord(
6532  NAME("FrequencyFromCGSKayserWavenumber"),
6533  DESCRIPTION(
6534  "Convert from Kayser wavenumber [cm^-1] to frequency [Hz].\n"
6535  "\n"
6536  "This converts Kayser wavenumber (1/wavelength) into frequency.\n"),
6537  AUTHORS("Richard Larsson"),
6538  OUT(),
6539  GOUT("frequency"),
6540  GOUT_TYPE("Numeric, Vector"),
6541  GOUT_DESC("frequency [Hz]"),
6542  IN(),
6543  GIN("kayser_wavenumber"),
6544  GIN_TYPE("Numeric, Vector"),
6545  GIN_DEFAULT(NODEF),
6546  GIN_DESC("Kayser wavenumber [cm^-1]")));
6547 
6548  md_data_raw.push_back(create_mdrecord(
6549  NAME("f_gridFromAbsorptionLines"),
6550  DESCRIPTION("Sets *f_grid* to a grid relative to *abs_lines_per_species*\n"
6551  "\n"
6552  "Each line will have *abs_lines_per_species* will have a grid\n"
6553  "of *num_freqs* grid points in [f0+*delta_f_low*, f0+*delta_f_upp*],\n"
6554  "where f0 is the line center.\n"
6555  "\n"
6556  "Before leaving the function, *f_grid* is sorted.\n"
6557  "\n"
6558  "Note that this method could generate significantly large *f_grid*\n"
6559  "if used carelessly\n"),
6560  AUTHORS("Richard Larsson"),
6561  OUT("f_grid"),
6562  GOUT(),
6563  GOUT_TYPE(),
6564  GOUT_DESC(),
6565  IN("abs_lines_per_species"),
6566  GIN("delta_f_low", "delta_f_upp", "num_freqs"),
6567  GIN_TYPE("Numeric", "Numeric", "Index"),
6568  GIN_DEFAULT("-5e6", "5e6", NODEF),
6569  GIN_DESC("Lower range of delta f",
6570  "Upper range of delta f",
6571  "Number of frequencies")));
6572 
6573  md_data_raw.push_back(create_mdrecord(
6574  NAME("f_gridFromGasAbsLookup"),
6575  DESCRIPTION(
6576  "Sets *f_grid* to the frequency grid of *abs_lookup*.\n"
6577  "\n"
6578  "Must be called between importing/creating raw absorption table and\n"
6579  "call of *abs_lookupAdapt*.\n"),
6580  AUTHORS("Stefan Buehler"),
6581  OUT("f_grid"),
6582  GOUT(),
6583  GOUT_TYPE(),
6584  GOUT_DESC(),
6585  IN("abs_lookup"),
6586  GIN(),
6587  GIN_TYPE(),
6588  GIN_DEFAULT(),
6589  GIN_DESC()));
6590 
6591  md_data_raw.push_back(create_mdrecord(
6592  NAME("f_gridFromSensorAMSU"),
6593  DESCRIPTION(
6594  "Automatically calculate f_grid to match the sensor.\n"
6595  "\n"
6596  "This method is handy if you are simulating an AMSU-type instrument,\n"
6597  "consisting of a few discrete channels. The case that channels touch,\n"
6598  "as for MHS, is handled correctly. But the case that channels overlap\n"
6599  "is not (yet) handled and results in an error message.\n"
6600  "\n"
6601  "The method calculates *f_grid* to match the instrument, as given by\n"
6602  "the local oscillator frequencies *lo_multi*, the backend\n"
6603  "frequencies *f_backend_multi*, and the backend channel\n"
6604  "responses *backend_channel_response_multi*.\n"
6605  "\n"
6606  "You have to specify the desired spacing in the keyword *spacing*,\n"
6607  "which has a default value of 100 MHz. (The actual value is 0.1e9,\n"
6608  "since our unit is Hz.)\n"
6609  "\n"
6610  "The produced grid will not have exactly the requested spacing, but\n"
6611  "will not be coarser than requested. The algorithm starts with the band\n"
6612  "edges, then adds additional points until the spacing is at least as\n"
6613  "fine as requested.\n"
6614  "\n"
6615  "There is a similar method for HIRS-type instruments,\n"
6616  "see *f_gridFromSensorHIRS*.\n"),
6617  AUTHORS("Stefan Buehler, Mathias Milz"),
6618  OUT("f_grid"),
6619  GOUT(),
6620  GOUT_TYPE(),
6621  GOUT_DESC(),
6622  IN("lo_multi", "f_backend_multi", "backend_channel_response_multi"),
6623  GIN("spacing"),
6624  GIN_TYPE("Numeric"),
6625  GIN_DEFAULT(".1e9"),
6626  GIN_DESC("Desired grid spacing in Hz.")));
6627 
6628  md_data_raw.push_back(create_mdrecord(
6629  NAME("f_gridFromSensorAMSUgeneric"),
6630  DESCRIPTION(
6631  "Automatcially calculate f_grid to match the sensor. \n"
6632  "This function is based on 'f_gridFromSensorAMSU' \n"
6633  "\n"
6634  "The method calculates *f_grid* to match the instrument, as given by\n"
6635  "the backend frequencies *f_backend*, and the backend channel\n"
6636  "responses *backend_channel_response*.\n"
6637  "\n"
6638  "You have to specify the desired spacing in the keyword *spacing*,\n"
6639  "which has a default value of 100 MHz. (The actual value is 0.1e9,\n"
6640  "since our unit is Hz.)"
6641  "\n"
6642  "The produced grid will not have exactly the requested spacing, but\n"
6643  "it will not be coarser than requested. The algorithm starts with the band\n"
6644  "edges, then adds additional points until the spacing is at least as\n"
6645  "fine as requested.\n"),
6646  AUTHORS("Oscar Isoz"),
6647  OUT("f_grid"),
6648  GOUT(),
6649  GOUT_TYPE(),
6650  GOUT_DESC(),
6651  IN("f_backend_multi", "backend_channel_response_multi"),
6652  GIN("spacing", "verbosityVect"),
6653  GIN_TYPE("Numeric", "Vector"),
6654  GIN_DEFAULT(".1e9", "[]"),
6655  GIN_DESC("Desired grid spacing in Hz.", "Bandwidth adjusted spacing")));
6656 
6657  md_data_raw.push_back(create_mdrecord(
6658  NAME("f_gridFromSensorHIRS"),
6659  DESCRIPTION(
6660  "Automatically calculate f_grid to match the sensor.\n"
6661  "\n"
6662  "This method is handy if you are simulating a HIRS-type instrument,\n"
6663  "consisting of a few discrete channels.\n"
6664  "\n"
6665  "It calculates f_grid to match the instrument, as given by the nominal\n"
6666  "band frequencies *f_backend* and the spectral channel response\n"
6667  "functions given by *backend_channel_response*.\n"
6668  "\n"
6669  "You have to specify the desired spacing in the keyword *spacing*, which\n"
6670  "has a default value of 5e8 Hz.\n"
6671  "\n"
6672  "The produced grid will not have exactly the requested spacing, but\n"
6673  "will not be coarser than requested. The algorithm starts with the band\n"
6674  "edges, then adds additional points until the spacing is at least as\n"
6675  "fine as requested.\n"
6676  "\n"
6677  "There is a similar method for AMSU-type instruments, see\n"
6678  "*f_gridFromSensorAMSU*.\n"),
6679  AUTHORS("Stefan Buehler"),
6680  OUT("f_grid"),
6681  GOUT(),
6682  GOUT_TYPE(),
6683  GOUT_DESC(),
6684  IN("f_backend", "backend_channel_response"),
6685  GIN("spacing"),
6686  GIN_TYPE("Numeric"),
6687  GIN_DEFAULT("5e8"),
6688  GIN_DESC("Desired grid spacing in Hz.")));
6689 
6690  md_data_raw.push_back(create_mdrecord(
6691  NAME("f_gridMetMM"),
6692  DESCRIPTION(
6693  "Sets *f_grid* and associated variables match MetMM settings.\n"
6694  "\n"
6695  "The method calculates *f_grid* to match the specifications of a\n"
6696  "*met_mm_backend* table and method arguments.\n"
6697  "\n"
6698  "You have to specify the desired spacing using the keyword *freq_spacing*.\n"
6699  "You can pass a *Vector* with one element to apply the same spacing to all\n"
6700  "channels or pass a spacing value for each channel separately.\n"
6701  "\n"
6702  "Optionally, *freq_number* can be set to specify the mininum number of\n"
6703  "frequencies per passband for each channel. The frequencies are placed\n"
6704  "equally spaced in each passband. The minimum spacing resulting from\n"
6705  "*freq_number* and *freq_spacing* will be used for the calculation. To\n"
6706  "explicitly use *freq_spacing* for a channel, *freq_number* can be set\n"
6707  "to -1 for this channel.\n"
6708  "\n"
6709  "The number of elements in *freq_number* can either be the number of\n"
6710  "channels or 1. If only one element is given, this number is used for\n"
6711  "all channels. If *freq_number* is 1 and *freq_spacing* is wider than\n"
6712  "the bandwidth of the channel, one frequency is placed in the middle of\n"
6713  "each passband.\n"
6714  "\n"
6715  "Frequencies that would be closer than *freq_merge_threshold* in the\n"
6716  "generated *f_grid* are merged together. This value should be left at\n"
6717  "the default value. This is only meant to compensate for numerical\n"
6718  "inaccuracies in the frequency calculation to merge frequency that are\n"
6719  "supposed to be identical.\n"),
6720  AUTHORS("Oliver Lemke", "Patrick Eriksson"),
6721  OUT("f_grid",
6722  "f_backend",
6723  "channel2fgrid_indexes",
6724  "channel2fgrid_weights"),
6725  GOUT(),
6726  GOUT_TYPE(),
6727  GOUT_DESC(),
6728  IN("met_mm_backend"),
6729  GIN("freq_spacing", "freq_number", "freq_merge_threshold"),
6730  GIN_TYPE("Vector", "ArrayOfIndex", "Numeric"),
6731  GIN_DEFAULT("[.1e9]", "[-1]", "1"),
6732  GIN_DESC("Desired grid spacing in Hz.",
6733  "Number of frequencies per passband for each channel.",
6734  "Merge frequencies that are closer than this value in Hz.")));
6735 
6736  md_data_raw.push_back(create_mdrecord(
6737  NAME("g0Earth"),
6738  DESCRIPTION(
6739  "Gravity at zero altitude on Earth.\n"
6740  "\n"
6741  "Sets *g0* for the given latitude using a standard parameterisation.\n"),
6742  AUTHORS("Patrick Eriksson"),
6743  OUT("g0"),
6744  GOUT(),
6745  GOUT_TYPE(),
6746  GOUT_DESC(),
6747  IN("lat"),
6748  GIN(),
6749  GIN_TYPE(),
6750  GIN_DEFAULT(),
6751  GIN_DESC()));
6752 
6753  md_data_raw.push_back(create_mdrecord(NAME("g0Io"),
6754  DESCRIPTION("Gravity at zero altitude on Io.\n"
6755  "\n"
6756  "Numeric from Wikipedia.\n"),
6757  AUTHORS("Richard Larsson"),
6758  OUT("g0"),
6759  GOUT(),
6760  GOUT_TYPE(),
6761  GOUT_DESC(),
6762  IN(),
6763  GIN(),
6764  GIN_TYPE(),
6765  GIN_DEFAULT(),
6766  GIN_DESC()));
6767 
6768  md_data_raw.push_back(create_mdrecord(
6769  NAME("g0Jupiter"),
6770  DESCRIPTION(
6771  "Gravity at zero altitude on Jupiter.\n"
6772  "\n"
6773  "Sets *g0* to mean equatorial gravity on Jupiter. Value provided by\n"
6774  "MPS under ESA-planetary study (TN1).\n"),
6775  AUTHORS("Jana Mendrok"),
6776  OUT("g0"),
6777  GOUT(),
6778  GOUT_TYPE(),
6779  GOUT_DESC(),
6780  IN(),
6781  GIN(),
6782  GIN_TYPE(),
6783  GIN_DEFAULT(),
6784  GIN_DESC()));
6785 
6786  md_data_raw.push_back(create_mdrecord(
6787  NAME("g0Mars"),
6788  DESCRIPTION(
6789  "Gravity at zero altitude on Mars.\n"
6790  "\n"
6791  "Sets *g0* to mean equatorial gravity on Mars. Value provided by\n"
6792  "MPS under ESA-planetary study (TN1).\n"),
6793  AUTHORS("Jana Mendrok"),
6794  OUT("g0"),
6795  GOUT(),
6796  GOUT_TYPE(),
6797  GOUT_DESC(),
6798  IN(),
6799  GIN(),
6800  GIN_TYPE(),
6801  GIN_DEFAULT(),
6802  GIN_DESC()));
6803 
6804  md_data_raw.push_back(create_mdrecord(
6805  NAME("g0Venus"),
6806  DESCRIPTION(
6807  "Gravity at zero altitude on Venus.\n"
6808  "\n"
6809  "Sets *g0* to mean equatorial gravity on Venus. Value from Ahrens\n"
6810  "(1995), provided by MPS under ESA-planetary study (TN1).\n"),
6811  AUTHORS("Jana Mendrok"),
6812  OUT("g0"),
6813  GOUT(),
6814  GOUT_TYPE(),
6815  GOUT_DESC(),
6816  IN(),
6817  GIN(),
6818  GIN_TYPE(),
6819  GIN_DEFAULT(),
6820  GIN_DESC()));
6821 
6822  md_data_raw.push_back(create_mdrecord(
6823  NAME("geo_posEndOfPpath"),
6824  DESCRIPTION("Sets geo-position based on *ppath*.\n"
6825  "\n"
6826  "The geo-position is set to the position of the last point\n"
6827  "of the present propagation path. This will be the surface,\n"
6828  "top-of-the atmosphere or cloudbox position, depending of\n"
6829  "observation geometry and if the cloudbox is active.\n"),
6830  AUTHORS("Patrick Eriksson"),
6831  OUT("geo_pos"),
6832  GOUT(),
6833  GOUT_TYPE(),
6834  GOUT_DESC(),
6835  IN("ppath"),
6836  GIN(),
6837  GIN_TYPE(),
6838  GIN_DEFAULT(),
6839  GIN_DESC()));
6840 
6841  md_data_raw.push_back(create_mdrecord(
6842  NAME("geo_posLowestAltitudeOfPpath"),
6843  DESCRIPTION(
6844  "Sets geo-position based on *ppath*.\n"
6845  "\n"
6846  "The geo-position is set to the position of the last point\n"
6847  "of the present propagation path having the lowest altitude.\n"),
6848  AUTHORS("Patrick Eriksson"),
6849  OUT("geo_pos"),
6850  GOUT(),
6851  GOUT_TYPE(),
6852  GOUT_DESC(),
6853  IN("ppath"),
6854  GIN(),
6855  GIN_TYPE(),
6856  GIN_DEFAULT(),
6857  GIN_DESC()));
6858 
6859  md_data_raw.push_back(create_mdrecord(
6860  NAME("geo_posWherePpathPassesZref"),
6861  DESCRIPTION(
6862  "Sets geo-position based on *ppath*.\n"
6863  "\n"
6864  "The geo-position is set to the position where the propagation\n"
6865  "path passes the reference altitude. If this altitude is passes\n"
6866  "more than once, the passing closest to the sensor is selected.\n"
6867  "If the reference altitude is not passed at all, *geo_pos* is\n"
6868  "set to NaN.\n"),
6869  AUTHORS("Patrick Eriksson"),
6870  OUT("geo_pos"),
6871  GOUT(),
6872  GOUT_TYPE(),
6873  GOUT_DESC(),
6874  IN("ppath"),
6875  GIN("z_ref"),
6876  GIN_TYPE("Numeric"),
6877  GIN_DEFAULT(NODEF),
6878  GIN_DESC("Reference altitude.")));
6879 
6880  md_data_raw.push_back(create_mdrecord(
6881  NAME("GetEnvironmentVariable"),
6882  DESCRIPTION(
6883  "Copy the contents of an environment variable to an ARTS String or Index.\n"),
6884  AUTHORS("Oliver Lemke"),
6885  OUT(),
6886  GOUT("out"),
6887  GOUT_TYPE("String, Index"),
6888  GOUT_DESC("Contents of environment variable."),
6889  IN(),
6890  GIN("in"),
6891  GIN_TYPE("String"),
6892  GIN_DEFAULT(NODEF),
6893  GIN_DESC("Name of environment variable.")));
6894 
6895  md_data_raw.push_back(
6896  create_mdrecord(NAME("GetNumberOfThreads"),
6897  DESCRIPTION("Returns the number of threads used by ARTS.\n"),
6898  AUTHORS("Oliver Lemke"),
6899  OUT(),
6900  GOUT("nthreads"),
6901  GOUT_TYPE("Index"),
6902  GOUT_DESC("Number of threads."),
6903  IN(),
6904  GIN(),
6905  GIN_TYPE(),
6906  GIN_DEFAULT(),
6907  GIN_DESC()));
6908 
6909  md_data_raw.push_back(
6910  create_mdrecord(NAME("GriddedFieldGetName"),
6911  DESCRIPTION("Get the name of a GriddedField.\n"
6912  "\n"
6913  "See *ArrayOfGriddedFieldGetNames*.\n"),
6914  AUTHORS("Lukas Kluft"),
6915  OUT(),
6916  GOUT("name"),
6917  GOUT_TYPE("String"),
6918  GOUT_DESC("Name of the GriddedField."),
6919  IN(),
6920  GIN("griddedfield"),
6921  GIN_TYPE("GriddedField1, GriddedField2, GriddedField3, "
6922  "GriddedField4, GriddedField5, GriddedField6 "),
6923  GIN_DEFAULT(NODEF),
6924  GIN_DESC("GriddedField."),
6925  SETMETHOD(false),
6926  AGENDAMETHOD(false),
6927  USES_TEMPLATES(true)));
6928 
6929  md_data_raw.push_back(create_mdrecord(
6930  NAME("GriddedFieldLatLonExpand"),
6931  DESCRIPTION(
6932  "Expands the latitude and longitude grid of the GriddedField to\n"
6933  "[-90, 90] and [0,360], respectively. Expansion is only done in\n"
6934  "the dimension(s), where the grid size is 1.\n"
6935  "The values from the input data will be duplicated to accomodate\n"
6936  "for the larger size of the output field.\n"
6937  "gfield_raw_out and gfield_raw_in can be the same variable.\n"),
6938  AUTHORS("Oliver Lemke"),
6939  OUT(),
6940  GOUT("out"),
6941  GOUT_TYPE(
6942  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6943  GOUT_DESC("Expanded gridded field."),
6944  IN(),
6945  GIN("in"),
6946  GIN_TYPE(
6947  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6948  GIN_DEFAULT(NODEF),
6949  GIN_DESC("Raw input gridded field.")));
6950 
6951  md_data_raw.push_back(create_mdrecord(
6952  NAME("GriddedFieldLatLonRegrid"),
6953  DESCRIPTION(
6954  "Interpolates the input field along the latitude and longitude dimensions\n"
6955  "to *lat_true* and *lon_true*.\n"
6956  "\n"
6957  "If the input longitude grid is outside of *lon_true* it will be shifted\n"
6958  "left or right by 360. If it covers 360 degrees, a cyclic interpolation\n"
6959  "will be performed.\n"
6960  "in and out fields can be the same variable.\n"),
6961  AUTHORS("Oliver Lemke"),
6962  OUT(),
6963  GOUT("out"),
6964  GOUT_TYPE(
6965  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6966  GOUT_DESC("Regridded gridded field."),
6967  IN("lat_true", "lon_true"),
6968  GIN("in", "interp_order"),
6969  GIN_TYPE(
6970  "GriddedField2, GriddedField3, GriddedField4, ArrayOfGriddedField3",
6971  "Index"),
6972  GIN_DEFAULT(NODEF, "1"),
6973  GIN_DESC("Raw input gridded field.", "Interpolation order.")));
6974 
6975  md_data_raw.push_back(create_mdrecord(
6976  NAME("GriddedFieldPRegrid"),
6977  DESCRIPTION(
6978  "Interpolates the input field along the pressure dimension to *p_grid*.\n"
6979  "\n"
6980  "If zero-padding is applied (zeropadding=1), pressures that are\n"
6981  "outside the *p_grid* are set to 0. This is thought, e.g., for VMR\n"
6982  "fields that outside the given pressure can safely be assumed to be\n"
6983  "zero.\n"
6984  "Note: Using zeropadding for altitude and temperature fields is\n"
6985  "strongly discouraged (it will work here, though, but likely trigger\n"
6986  "errors later on).\n"
6987  "Extrapolation is allowed within the common 0.5grid-step margin,\n"
6988  "but is overruled by zeropadding.\n"
6989  "in and out fields can be the same variable.\n"),
6990  AUTHORS("Oliver Lemke"),
6991  OUT(),
6992  GOUT("out"),
6993  GOUT_TYPE("GriddedField3, GriddedField4, ArrayOfGriddedField3"),
6994  GOUT_DESC("Regridded gridded field."),
6995  IN("p_grid"),
6996  GIN("in", "interp_order", "zeropadding"),
6997  GIN_TYPE("GriddedField3, GriddedField4, ArrayOfGriddedField3",
6998  "Index",
6999  "Index"),
7000  GIN_DEFAULT(NODEF, "1", "0"),
7001  GIN_DESC("Raw input gridded field.",
7002  "Interpolation order.",
7003  "Apply zero-padding.")));
7004 
7005  md_data_raw.push_back(create_mdrecord(
7006  NAME("GriddedFieldZToPRegrid"),
7007  DESCRIPTION(
7008  "Interpolates the input field along the vertical dimension to *p_grid*.\n"
7009  "\n"
7010  "This is done from z_field, and thus requires the atmosphere to be set \n"
7011  "beforehand.\n"
7012  "\n"
7013  "The latitude and longitude grid of the input field must match *lat_grid*\n"
7014  "and *lon_grid* for the method to work.\n"
7015  "\n"
7016  "BETA mode.\n"),
7017  AUTHORS("Richard Larsson"),
7018  OUT(),
7019  GOUT("out"),
7020  GOUT_TYPE("GriddedField3"),
7021  GOUT_DESC("Regridded output; Pressure-gridded field."),
7022  IN("p_grid", "lat_grid", "lon_grid", "z_field"),
7023  GIN("in", "interp_order", "zeropadding"),
7024  GIN_TYPE("GriddedField3", "Index", "Index"),
7025  GIN_DEFAULT(NODEF, "1", "0"),
7026  GIN_DESC("Raw input; Altitude-gridded field.",
7027  "Interpolation order.",
7028  "Apply zero-padding.")));
7029  md_data_raw.push_back(create_mdrecord(
7030  NAME("heating_ratesFromIrradiance"),
7031  DESCRIPTION(
7032  "Calculates heating rates. It assumes that the heating rates\n"
7033  "depend only on the vertical derivation of the net flux.\n"
7034  "The net flux is the sum of the irradiance field in upward \n"
7035  " direction and the irradiance field in downward direction\n"),
7036  AUTHORS("Manfred Brath"),
7037  OUT("heating_rates"),
7038  GOUT(),
7039  GOUT_TYPE(),
7040  GOUT_DESC(),
7041  IN("p_grid", "irradiance_field", "specific_heat_capacity", "g0"),
7042  GIN(),
7043  GIN_TYPE(),
7044  GIN_DEFAULT(),
7045  GIN_DESC()));
7046 
7047  md_data_raw.push_back(create_mdrecord(
7048  NAME("Ignore"),
7049  DESCRIPTION(
7050  "Ignore a workspace variable.\n"
7051  "\n"
7052  "This method is handy for use in agendas in order to suppress warnings\n"
7053  "about unused input workspace variables. What it does is: Nothing!\n"
7054  "In other words, it just ignores the variable it is called on.\n"
7055  "\n"
7056  "This method can ignore any workspace variable you want.\n"
7057  "\n"
7058  "Usage example:\n"
7059  "\n"
7060  "AgendaSet(els_agenda){\n"
7061  " Ignore(ls_sigma)\n"
7062  " elsLorentz\n"
7063  "}\n"
7064  "\n"
7065  "Without Ignore you would get an error message, because 'els_agenda' is\n"
7066  "supposed to use the Doppler width 'ls_sigma', but the Lorentz lineshape\n"
7067  "'elsLorentz' does not need it.\n"),
7068  AUTHORS("Stefan Buehler"),
7069  OUT(),
7070  GOUT(),
7071  GOUT_TYPE(),
7072  GOUT_DESC(),
7073  IN(),
7074  GIN("in"),
7075  GIN_TYPE("Any"),
7076  GIN_DEFAULT(NODEF),
7077  GIN_DESC("Variable to be ignored."),
7078  SETMETHOD(false),
7079  AGENDAMETHOD(false),
7080  USES_TEMPLATES(true)));
7081 
7082  md_data_raw.push_back(create_mdrecord(
7083  NAME("INCLUDE"),
7084  DESCRIPTION(
7085  "Includes the contents of another controlfile.\n"
7086  "\n"
7087  "The INCLUDE statement inserts the contents of the controlfile\n"
7088  "with the given name into the current controlfile.\n"
7089  "If the filename is given without path information, ARTS will\n"
7090  "first search for the file in all directories specified with the\n"
7091  "-I (see arts -h) commandline option and then in directories given\n"
7092  "in the environment variable ARTS_INCLUDE_PATH. In the environment\n"
7093  "variable multiple paths have to be separated by colons.\n"
7094  "\n"
7095  "Note that INCLUDE is not a workspace method and thus the\n"
7096  "syntax is different:\n"
7097  "\n"
7098  "Arts {\n"
7099  " INCLUDE \"general.arts\"\n"
7100  "}\n"
7101  "\n"
7102  "Includes can also be nested. In the example above general.arts\n"
7103  "can contain further includes which will then be treated\n"
7104  "the same way.\n"
7105  "\n"
7106  "The idea behind this mechanism is that you can write common settings\n"
7107  "for a bunch of calculations into one file. Then, you can create\n"
7108  "several controlfiles which include the basic settings and tweak them\n"
7109  "for different cases. When you decide to make changes to your setup\n"
7110  "that should apply to all calculations, you only have to make a\n"
7111  "single change in the include file instead of modifying all your\n"
7112  "controlfiles.\n"),
7113  AUTHORS("Oliver Lemke"),
7114  OUT(),
7115  GOUT(),
7116  GOUT_TYPE(),
7117  GOUT_DESC(),
7118  IN(),
7119  GIN(),
7120  GIN_TYPE(),
7121  GIN_DEFAULT(),
7122  GIN_DESC()));
7123 
7124  md_data_raw.push_back(create_mdrecord(
7125  NAME("IndexAdd"),
7126  DESCRIPTION(
7127  "Adds a index and a value (out = in+value).\n"
7128  "\n"
7129  "The result can either be stored in the same or another index.\n"
7130  "(in and out can be the same variable, but not out and value)\n"),
7131  AUTHORS("Patrick Eriksson, Oliver Lemke"),
7132  OUT(),
7133  GOUT("out"),
7134  GOUT_TYPE("Index"),
7135  GOUT_DESC("Output numeric."),
7136  IN(),
7137  GIN("in", "value"),
7138  GIN_TYPE("Index", "Index"),
7140  GIN_DESC("Input Index.", "Value to add.")));
7141 
7142  md_data_raw.push_back(create_mdrecord(
7143  NAME("IndexNumberOfAtmosphericPoints"),
7144  DESCRIPTION(
7145  "Counts number of points in the atmosphere.\n"
7146  "\n"
7147  "For a 3D atmosphere the method sets *n* to:\n"
7148  " p_grid.nelem()*lat_grid.nelem()*lon_grid.nelem()\n"
7149  "For 1D and 2D the same calculation is done, but ignoring dimensions\n"
7150  "not active.\n"),
7151  AUTHORS("Patrick Eriksson"),
7152  OUT(),
7153  GOUT("n"),
7154  GOUT_TYPE("Index"),
7155  GOUT_DESC("Variable to set with number of points."),
7156  IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
7157  GIN(),
7158  GIN_TYPE(),
7159  GIN_DEFAULT(),
7160  GIN_DESC()));
7161 
7162  md_data_raw.push_back(create_mdrecord(
7163  NAME("IndexSet"),
7164  DESCRIPTION("Sets an index workspace variable to the given value.\n"),
7165  AUTHORS("Patrick Eriksson"),
7166  OUT(),
7167  GOUT("out"),
7168  GOUT_TYPE("Index"),
7169  GOUT_DESC("Variable to initialize."),
7170  IN(),
7171  GIN("value"),
7172  GIN_TYPE("Index"),
7173  GIN_DEFAULT(NODEF),
7174  GIN_DESC("Value."),
7175  SETMETHOD(true)));
7176 
7177  md_data_raw.push_back(create_mdrecord(
7178  NAME("IndexSetToLast"),
7179  DESCRIPTION(
7180  "Set an Index to point towards last position of array-type variables.\n"
7181  "\n"
7182  "This method works as nelemGet, but gives the index number of the last\n"
7183  "element (which equals nelem-1).\n"),
7184  AUTHORS("Patrick Eriksson", "Oliver Lemke"),
7185  OUT("nelem"),
7186  GOUT(),
7187  GOUT_TYPE(),
7188  GOUT_DESC(),
7189  IN(),
7190  GIN("v"),
7191  GIN_TYPE(ARRAY_GROUPS + ", Vector"),
7192  GIN_DEFAULT(NODEF),
7193  GIN_DESC("The method is defined for these groups."),
7194  SETMETHOD(false),
7195  AGENDAMETHOD(false),
7196  USES_TEMPLATES(true)));
7197 
7198  md_data_raw.push_back(
7199  create_mdrecord(NAME("IndexStepDown"),
7200  DESCRIPTION("Performas: out = in - 1\n"
7201  "\n"
7202  "Input and output can be same variable.\n"),
7203  AUTHORS("Patrick Eriksson"),
7204  OUT(),
7205  GOUT("out"),
7206  GOUT_TYPE("Index"),
7207  GOUT_DESC("Output index variable."),
7208  IN(),
7209  GIN("in"),
7210  GIN_TYPE("Index"),
7211  GIN_DEFAULT(NODEF),
7212  GIN_DESC("Input index variable.")));
7213 
7214  md_data_raw.push_back(
7215  create_mdrecord(NAME("IndexStepUp"),
7216  DESCRIPTION("Performas: out = in + 1\n"
7217  "\n"
7218  "Input and output can be same variable.\n"),
7219  AUTHORS("Patrick Eriksson"),
7220  OUT(),
7221  GOUT("out"),
7222  GOUT_TYPE("Index"),
7223  GOUT_DESC("Output index variable."),
7224  IN(),
7225  GIN("in"),
7226  GIN_TYPE("Index"),
7227  GIN_DEFAULT(NODEF),
7228  GIN_DESC("Input index variable.")));
7229 
7230  md_data_raw.push_back(create_mdrecord(
7231  NAME("InterpAtmFieldToPosition"),
7232  DESCRIPTION("Point interpolation of atmospheric fields.\n"
7233  "\n"
7234  "The default way to specify the position is by *rtp_pos*.\n"
7235  "\n"
7236  "Linear interpolation is applied.\n"),
7237  AUTHORS("Patrick Eriksson"),
7238  OUT(),
7239  GOUT("out"),
7240  GOUT_TYPE("Numeric"),
7241  GOUT_DESC("Value obtained by the interpolation."),
7242  IN("atmosphere_dim",
7243  "p_grid",
7244  "lat_grid",
7245  "lon_grid",
7246  "z_field",
7247  "rtp_pos"),
7248  GIN("field"),
7249  GIN_TYPE("Tensor3"),
7250  GIN_DEFAULT(NODEF),
7251  GIN_DESC("Field to interpolate.")));
7252 
7253  md_data_raw.push_back(create_mdrecord(
7254  NAME("InterpGriddedField2ToPosition"),
7255  DESCRIPTION(
7256  "Latitude and longitude interpolation of a GriddedField2.\n"
7257  "\n"
7258  "The default way to specify the position is by *rtp_pos*.\n"
7259  "\n"
7260  "The interpolation is done for the latitude and longitude in\n"
7261  "*rtp_pos*. The altitude in *rtp_pos* is completely ignored.\n"
7262  "Linear interpolation is applied.\n"
7263  "\n"
7264  "The input field (*gfield2*) is expected to have latitude and\n"
7265  "longitude as first and second dimension.\n"),
7266  AUTHORS("Patrick Eriksson"),
7267  OUT(),
7268  GOUT("out"),
7269  GOUT_TYPE("Numeric"),
7270  GOUT_DESC("Value obtained by interpolation."),
7271  IN("atmosphere_dim", "lat_grid", "lat_true", "lon_true", "rtp_pos"),
7272  GIN("gfield2"),
7273  GIN_TYPE("GriddedField2"),
7274  GIN_DEFAULT(NODEF),
7275  GIN_DESC("Gridded field to interpolate.")));
7276 
7277  md_data_raw.push_back(create_mdrecord(
7278  NAME("InterpSurfaceFieldToPosition"),
7279  DESCRIPTION(
7280  "Point interpolation of surface fields.\n"
7281  "\n"
7282  "The default way to specify the position is by *rtp_pos*.\n"
7283  "\n"
7284  "Linear interpolation is applied.\n"
7285  "\n"
7286  "The interpolation is done for the latitude and longitude in\n"
7287  "*rtp_pos*, while the altitude in *rtp_pos* is not part of the\n"
7288  "calculations. However, it is checked that the altitude of *rtp_pos*\n"
7289  "is inside the range covered by *z_surface* with a 1 m margin, to\n"
7290  "give a warning when the specified position is not consistent with\n"
7291  "the surface altitudes.\n"),
7292  AUTHORS("Patrick Eriksson"),
7293  OUT(),
7294  GOUT("out"),
7295  GOUT_TYPE("Numeric"),
7296  GOUT_DESC("Value obtained by interpolation."),
7297  IN("atmosphere_dim", "lat_grid", "lon_grid", "rtp_pos", "z_surface"),
7298  GIN("field"),
7299  GIN_TYPE("Matrix"),
7300  GIN_DEFAULT(NODEF),
7301  GIN_DESC("Field to interpolate.")));
7302 
7303  md_data_raw.push_back(create_mdrecord(
7304  NAME("irradiance_fieldFromRadiance"),
7305  DESCRIPTION(
7306  "Calculate the irradiance also known as flux density from the *radiance_field* .\n"
7307  "by integrating over the angular grids according to the grids set\n"
7308  "by *AngularGridsSetFluxCalc* \n"
7309  "See *AngularGridsSetFluxCalc to set \n"
7310  "*za_grid, aa_grid, and za_grid_weights*\n"),
7311  AUTHORS("Manfred Brath"),
7312  OUT("irradiance_field"),
7313  GOUT(),
7314  GOUT_TYPE(),
7315  GOUT_DESC(),
7316  IN("radiance_field", "za_grid", "aa_grid", "za_grid_weights"),
7317  GIN(),
7318  GIN_TYPE(),
7319  GIN_DEFAULT(),
7320  GIN_DESC()));
7321 
7322  md_data_raw.push_back(create_mdrecord(
7323  NAME("isotopologue_ratiosInitFromBuiltin"),
7324  DESCRIPTION(
7325  "Initialize isotopologue ratios with default values from built-in\n"
7326  "species data.\n"),
7327  AUTHORS("Oliver Lemke"),
7328  OUT("isotopologue_ratios"),
7329  GOUT(),
7330  GOUT_TYPE(),
7331  GOUT_DESC(),
7332  IN(),
7333  GIN(),
7334  GIN_TYPE(),
7335  GIN_DEFAULT(),
7336  GIN_DESC()));
7337 
7338  md_data_raw.push_back(create_mdrecord(
7339  NAME("iyActiveSingleScat"),
7340  DESCRIPTION(
7341  "Simulation of radar/lidar, restricted to single scattering.\n"
7342  "\n"
7343  "The WSM treats e.g. radar measurements of cloud and precipitation,\n"
7344  "on the condition that multiple scattering can be ignored. Beside\n"
7345  "the direct backsacttering, the two-way attenuation by gases and\n"
7346  "particles is considered. Surface scattering is ignored.\n"
7347  "\n"
7348  "The method could potentially be used for lidars, but multiple\n"
7349  "scattering poses here a must stronger constrain for the range of\n"
7350  "applications.\n"
7351  "\n"
7352  "The method can be used with *iyCalc*, but not with *yCalc*. In the\n"
7353  "later case, use instead *yActive*.\n"
7354  "\n"
7355  "The method returns the backscattering for each point of *ppath*.\n"
7356  "Several frequencies can be treated in parallel. The size of *iy*\n"
7357  "is [ nf*np, stokes_dim ], where nf is the length of *f_grid* and\n"
7358  "np is the number of path points. The data are stored in blocks\n"
7359  "of [ np, stokes_dim ]. That is, all the results for the first\n"
7360  "frequency occupy the np first rows of *iy* etc.\n"
7361  "\n"
7362  "The polarisation state of the transmitted pulse is taken from\n"
7363  "*iy_transmitter_agenda*. If the radar transmits several polarisations\n"
7364  "at the same frequency, you need to handle this by using two frequencies\n"
7365  "in *f_grid*, but these can be almost identical.\n"
7366  "\n"
7367  "This method does not consider *iy_unit*. Unit changes are insted applied\n"
7368  "in *yActive. The output of this method matches the option \"1\".\n"
7369  "\n"
7370  "Transmission is handled in a slightly simplified manner for efficiency\n"
7371  "reasons. First of all, the transmission matrix is assumed to be the same\n"
7372  "in both directions between the sensor and the point of back-scattering.\n"
7373  "This should in general be true, but exceptions could exist. The extinction\n"
7374  "due to particles can also be scaled, which could be of interest when e.g.\n"
7375  "characterising inversions.\n"
7376  "\n"
7377  "Further, for Jacobian calculations the default is to assume that the\n"
7378  "transmission is unaffected by the retrieval quantities. This is done\n"
7379  "to save computational time, and should be a valid approximation for the\n"
7380  "single-scattering conditions. Set *trans_in_jacobian* to 1 to obtain\n"
7381  "the more accurate Jacobian.\n"
7382  "\n"
7383  "Some auxiliary radiative transfer quantities can be obtained. Auxiliary\n"
7384  "quantities are selected by *iy_aux_vars* and returned by *iy_aux*.\n"
7385  "Valid choices for auxiliary data are:\n"
7386  " \"Radiative background\": Index value flagging the radiative\n"
7387  " background. The following coding is used: 0=space, 1=surface\n"
7388  " and 2=cloudbox.\n"
7389  " \"Backscattering\": The unattenuated backscattering. That is, as\n"
7390  " *iy* but with no attenuated applied. Here all columns are filled.\n"
7391  " \"Optical depth\": Scalar, total and two-way, optical depth between\n"
7392  " sensor and each point of the propagation path. Calculated based on\n"
7393  " the (1,1)-element of the transmission matrix (1-based indexing),\n"
7394  " i.e. only fully valid for scalar RT.\n"
7395  " \"Particle extinction\": As \"Optical depth\", but only with particle\n"
7396  " attenuation included. That is, gas absorption is ignored.\n"
7397  "If nothing else is stated, only the first column of *iy_aux* is filled,\n"
7398  "i.e. the column matching Stokes element I, while remaing columns are\n"
7399  "are filled with zeros.\n"),
7400  AUTHORS("Patrick Eriksson"),
7401  OUT("iy",
7402  "iy_aux",
7403  "diy_dx",
7404  "ppvar_p",
7405  "ppvar_t",
7406  "ppvar_nlte",
7407  "ppvar_vmr",
7408  "ppvar_wind",
7409  "ppvar_mag",
7410  "ppvar_pnd",
7411  "ppvar_f",
7412  "ppvar_trans_cumulat"),
7413  GOUT(),
7414  GOUT_TYPE(),
7415  GOUT_DESC(),
7416  IN("diy_dx",
7417  "stokes_dim",
7418  "f_grid",
7419  "atmosphere_dim",
7420  "p_grid",
7421  "t_field",
7422  "nlte_field",
7423  "vmr_field",
7424  "abs_species",
7425  "wind_u_field",
7426  "wind_v_field",
7427  "wind_w_field",
7428  "mag_u_field",
7429  "mag_v_field",
7430  "mag_w_field",
7431  "cloudbox_on",
7432  "cloudbox_limits",
7433  "pnd_field",
7434  "dpnd_field_dx",
7435  "scat_species",
7436  "scat_data",
7437  "scat_data_checked",
7438  "iy_aux_vars",
7439  "jacobian_do",
7440  "jacobian_quantities",
7441  "ppath",
7442  "propmat_clearsky_agenda",
7443  "water_p_eq_agenda",
7444  "iy_transmitter_agenda",
7445  "iy_agenda_call1",
7446  "iy_transmission",
7447  "rte_alonglos_v"),
7448  GIN("trans_in_jacobian", "pext_scaling", "t_interp_order"),
7449  GIN_TYPE("Index", "Numeric", "Index"),
7450  GIN_DEFAULT("0", "1", "1"),
7451  GIN_DESC("Flag determining if change in transmission is considered"
7452  " in calculation of the Jacobian or not.",
7453  "Particle extinction is scaled with this value. A value"
7454  " inside [0,2]. Set it to 0 if you want to remove particle"
7455  " extinction totally.",
7456  "Interpolation order of temperature for scattering data (so"
7457  " far only applied in phase matrix, not in extinction and"
7458  " absorption.")));
7459 
7460  md_data_raw.push_back(create_mdrecord(
7461  NAME("iyActiveSingleScat2"),
7462  DESCRIPTION("TESTING\n"),
7463  AUTHORS("Patrick Eriksson", "Richard Larsson"),
7464  OUT("iy",
7465  "iy_aux",
7466  "diy_dx",
7467  "ppvar_p",
7468  "ppvar_t",
7469  "ppvar_nlte",
7470  "ppvar_vmr",
7471  "ppvar_wind",
7472  "ppvar_mag",
7473  "ppvar_pnd",
7474  "ppvar_f",
7475  "ppvar_trans_cumulat"),
7476  GOUT(),
7477  GOUT_TYPE(),
7478  GOUT_DESC(),
7479  IN("diy_dx",
7480  "stokes_dim",
7481  "f_grid",
7482  "atmosphere_dim",
7483  "p_grid",
7484  "t_field",
7485  "nlte_field",
7486  "vmr_field",
7487  "abs_species",
7488  "wind_u_field",
7489  "wind_v_field",
7490  "wind_w_field",
7491  "mag_u_field",
7492  "mag_v_field",
7493  "mag_w_field",
7494  "cloudbox_on",
7495  "cloudbox_limits",
7496  "pnd_field",
7497  "dpnd_field_dx",
7498  "scat_species",
7499  "scat_data",
7500  "scat_data_checked",
7501  "iy_aux_vars",
7502  "jacobian_do",
7503  "jacobian_quantities",
7504  "ppath",
7505  "propmat_clearsky_agenda",
7506  "water_p_eq_agenda",
7507  "iy_transmitter_agenda",
7508  "iy_agenda_call1",
7509  "iy_transmission",
7510  "rte_alonglos_v"),
7511  GIN("trans_in_jacobian", "pext_scaling", "t_interp_order"),
7512  GIN_TYPE("Index", "Numeric", "Index"),
7513  GIN_DEFAULT("0", "1", "1"),
7514  GIN_DESC("Flag determining if change in transmission is considered"
7515  " in calculation of the Jacobian or not.",
7516  "Particle extinction is scaled with this value. A value"
7517  " inside [0,2]. Set it to 0 if you want to remove particle"
7518  " extinction totally.",
7519  "Interpolation order of temperature for scattering data (so"
7520  " far only applied in phase matrix, not in extinction and"
7521  " absorption.")));
7522 
7523  md_data_raw.push_back(create_mdrecord(
7524  NAME("iyApplyUnit"),
7525  DESCRIPTION(
7526  "Conversion of *iy* to other spectral units.\n"
7527  "\n"
7528  "The method allows a change of unit, as a post-processing step,\n"
7529  "ignoring the n2-law of radiance.\n"
7530  "\n"
7531  "The conversion made inside *iyEmissionStandard* is mimiced,\n"
7532  "see that method for constraints and selection of output units.\n"
7533  "Restricted to that the n2-law can be ignored. This assumption\n"
7534  "is valid if the sensor is placed in space, or if the refractive\n"
7535  "index only deviates slightly from unity.\n"
7536  "\n"
7537  "It is stressed that there is no automatic check that the method is\n"
7538  "applied correctly, it is up to the user to ensure that the input\n"
7539  "data are suitable for the conversion.\n"
7540  "\n"
7541  "Beside *iy*, these auxilary quantities are modified:\n"
7542  " \"iy\", \"Error\" and \"Error (uncorrelated)\"\n"
7543  "\n"
7544  "Please note that *diy_dx* is not handled.\n"),
7545  AUTHORS("Patrick Eriksson"),
7546  OUT("iy", "iy_aux"),
7547  GOUT(),
7548  GOUT_TYPE(),
7549  GOUT_DESC(),
7550  IN("iy", "iy_aux", "stokes_dim", "f_grid", "iy_aux_vars", "iy_unit"),
7551  GIN(),
7552  GIN_TYPE(),
7553  GIN_DEFAULT(),
7554  GIN_DESC()));
7555 
7556  md_data_raw.push_back(
7558 
7559  (NAME("iyCalc"),
7560  DESCRIPTION(
7561  "A single monochromatic pencil beam calculation.\n"
7562  "\n"
7563  "Performs monochromatic radiative transfer calculations for the\n"
7564  "specified position (*rte_pos*) and line-of-sight (*rte_pos*).\n"
7565  "See *iy* and associated variables for format of output.\n"
7566  "\n"
7567  "Please note that Jacobian type calculations not are supported.\n"
7568  "For this use *yCalc*.\n"
7569  "\n"
7570  "No sensor characteristics are applied. These are most easily\n"
7571  "incorporated by using *yCalc*\n"),
7572  AUTHORS("Patrick Eriksson"),
7573  OUT("iy", "iy_aux", "ppath"),
7574  GOUT(),
7575  GOUT_TYPE(),
7576  GOUT_DESC(),
7577  IN("atmgeom_checked",
7578  "atmfields_checked",
7579  "iy_aux_vars",
7580  "iy_id",
7581  "cloudbox_on",
7582  "cloudbox_checked",
7583  "scat_data_checked",
7584  "f_grid",
7585  "nlte_field",
7586  "rte_pos",
7587  "rte_los",
7588  "rte_pos2",
7589  "iy_unit",
7590  "iy_main_agenda"),
7591  GIN(),
7592  GIN_TYPE(),
7593  GIN_DEFAULT(),
7594  GIN_DESC()));
7595 
7596  md_data_raw.push_back(create_mdrecord(
7597  NAME("iyEmissionStandard"),
7598  DESCRIPTION(
7599  "Standard method for radiative transfer calculations with emission.\n"
7600  "\n"
7601  "Designed to be part of *iy_main_agenda*. That is, only valid\n"
7602  "outside the cloudbox (no scattering). For details se the user guide.\n"
7603  "\n"
7604  "The possible choices for *iy_unit* are\n"
7605  " \"1\" : No conversion, i.e. [W/(m^2 Hz sr)] (radiance per\n"
7606  " frequency unit).\n"
7607  " \"RJBT\" : Conversion to Rayleigh-Jean brightness\n"
7608  " temperature.\n"
7609  " \"PlanckBT\" : Conversion to Planck brightness temperature.\n"
7610  " \"W/(m^2 m sr)\" : Conversion to [W/(m^2 m sr)] (radiance per\n"
7611  " wavelength unit).\n"
7612  " \"W/(m^2 m-1 sr)\": Conversion to [W/(m^2 m-1 sr)] (radiance per\n"
7613  " wavenumber unit).\n"
7614  "Expressions applied and considerations for the unit conversion of\n"
7615  "radiances are discussed in Sec. 5.7 of the ARTS-2.0 article.\n"
7616  "\n"
7617  "*iy_unit* is only applied if *iy_agenda_call1* is 1. This means that\n"
7618  "no unit ocnversion is applied for internal iterative calls.\n"
7619  "\n"
7620  "Some auxiliary radiative transfer quantities can be obtained. Auxiliary\n"
7621  "quantities are selected by *iy_aux_vars* and returned by *iy_aux*.\n"
7622  "Valid choices for auxiliary data are:\n"
7623  " \"Radiative background\": Index value flagging the radiative\n"
7624  " background. The following coding is used: 0=space, 1=surface\n"
7625  " and 2=cloudbox.\n"
7626  " \"Optical depth\": Scalar optical depth between the observation point\n"
7627  " and the end of the present propagation path. Calculated based on\n"
7628  " the (1,1)-element of the transmission matrix (1-based indexing),\n"
7629  " i.e. only fully valid for scalar RT.\n"
7630  "If nothing else is stated, only the first column of *iy_aux* is filled,\n"
7631  "i.e. the column matching Stokes element I, while remaing columns are\n"
7632  "are filled with zeros.\n"),
7633  AUTHORS("Patrick Eriksson", "Richard Larsson", "Oliver Lemke"),
7634  OUT("iy",
7635  "iy_aux",
7636  "diy_dx",
7637  "ppvar_p",
7638  "ppvar_t",
7639  "ppvar_nlte",
7640  "ppvar_vmr",
7641  "ppvar_wind",
7642  "ppvar_mag",
7643  "ppvar_f",
7644  "ppvar_iy",
7645  "ppvar_trans_cumulat",
7646  "ppvar_trans_partial"),
7647  GOUT(),
7648  GOUT_TYPE(),
7649  GOUT_DESC(),
7650  IN("diy_dx",
7651  "iy_id",
7652  "stokes_dim",
7653  "f_grid",
7654  "atmosphere_dim",
7655  "p_grid",
7656  "t_field",
7657  "nlte_field",
7658  "vmr_field",
7659  "abs_species",
7660  "wind_u_field",
7661  "wind_v_field",
7662  "wind_w_field",
7663  "mag_u_field",
7664  "mag_v_field",
7665  "mag_w_field",
7666  "cloudbox_on",
7667  "iy_unit",
7668  "iy_aux_vars",
7669  "jacobian_do",
7670  "jacobian_quantities",
7671  "ppath",
7672  "rte_pos2",
7673  "propmat_clearsky_agenda",
7674  "water_p_eq_agenda",
7675  "iy_main_agenda",
7676  "iy_space_agenda",
7677  "iy_surface_agenda",
7678  "iy_cloudbox_agenda",
7679  "iy_agenda_call1",
7680  "iy_transmission",
7681  "rte_alonglos_v",
7682  "surface_props_data"),
7683  GIN(),
7684  GIN_TYPE(),
7685  GIN_DEFAULT(),
7686  GIN_DESC()));
7687 
7688  md_data_raw.push_back(create_mdrecord(
7689  NAME("iyEmissionStandardSequential"),
7690  DESCRIPTION(
7691  "DEPRECATED! Should go away soon\n"
7692  "Sequential version of *iyEmissionStandard*\n"
7693  "\n"
7694  "For documentation see *iyEmissionStandard*.\n"),
7695  AUTHORS("Patrick Eriksson", "Richard Larsson"),
7696  OUT("iy",
7697  "iy_aux",
7698  "diy_dx",
7699  "ppvar_p",
7700  "ppvar_t",
7701  "ppvar_nlte",
7702  "ppvar_vmr",
7703  "ppvar_wind",
7704  "ppvar_mag",
7705  "ppvar_f",
7706  "ppvar_iy",
7707  "ppvar_trans_cumulat",
7708  "ppvar_trans_partial"),
7709  GOUT(),
7710  GOUT_TYPE(),
7711  GOUT_DESC(),
7712  IN("diy_dx",
7713  "iy_id",
7714  "stokes_dim",
7715  "f_grid",
7716  "atmosphere_dim",
7717  "p_grid",
7718  "t_field",
7719  "nlte_field",
7720  "vmr_field",
7721  "abs_species",
7722  "wind_u_field",
7723  "wind_v_field",
7724  "wind_w_field",
7725  "mag_u_field",
7726  "mag_v_field",
7727  "mag_w_field",
7728  "cloudbox_on",
7729  "iy_unit",
7730  "iy_aux_vars",
7731  "jacobian_do",
7732  "jacobian_quantities",
7733  "ppath",
7734  "rte_pos2",
7735  "propmat_clearsky_agenda",
7736  "water_p_eq_agenda",
7737  "iy_main_agenda",
7738  "iy_space_agenda",
7739  "iy_surface_agenda",
7740  "iy_cloudbox_agenda",
7741  "iy_agenda_call1",
7742  "iy_transmission",
7743  "rte_alonglos_v",
7744  "surface_props_data"),
7745  GIN(),
7746  GIN_TYPE(),
7747  GIN_DEFAULT(),
7748  GIN_DESC()));
7749  /*
7750  md_data_raw.push_back
7751  ( create_mdrecord
7752  ( NAME( "iyFOS" ),
7753  DESCRIPTION
7754  (
7755  "Method in development. Don't use without contacting Patrick.\n"
7756  "\n"
7757  "Regarding radiance unit, works exactly as *iyEmissionStandard*.\n"
7758  "\n"
7759  "The *fos_n* argument determines the maximum scattering order that\n"
7760  "will be considered. For example, 1 corresponds to that only single\n"
7761  "scattering is considered. The value 0 is accepted and results\n"
7762  "in calculations of clear-sky type. In the later case, particle\n"
7763  "absorption/emission is considered if cloudbox is active. If\n"
7764  "cloudbox is not active,clear-sky results are returned for all\n"
7765  "values of *fos_n*.\n"
7766  "\n"
7767  "The following auxiliary data can be obtained:\n"
7768  " \"Pressure\": The pressure along the propagation path.\n"
7769  " Size: [1,1,1,np].\n"
7770  " \"Temperature\": The temperature along the propagation path.\n"
7771  " Size: [1,1,1,np].\n"
7772  " \"VMR, species X\": VMR of the species with index X (zero based).\n"
7773  " For example, adding the string \"VMR, species 0\" extracts the\n"
7774  " VMR of the first species. Size: [1,1,1,np].\n"
7775  " \"Absorption, summed\": The total absorption matrix along the\n"
7776  " path. Size: [nf,ns,ns,np].\n"
7777  " \"Absorption, species X\": The absorption matrix along the path\n"
7778  " for an individual species (X works as for VMR).\n"
7779  " Size: [nf,ns,ns,np].\n"
7780  " \"PND, type X\": The particle number density for scattering element\n"
7781  " type X (ie. corresponds to book X in pnd_field).\n"
7782  " Size: [1,1,1,np].\n"
7783  " \"Mass content, X\": The mass content for scattering element X.\n"
7784  " This corresponds to column X in *particle_masses* (zero-\n"
7785  " based indexing). Size: [1,1,1,np].\n"
7786  "* \"Radiative background\": Index value flagging the radiative\n"
7787  " background. The following coding is used: 0=space and\n"
7788  " and 1=surface. Size: [nf,1,1,1].\n"
7789  " \"iy\": The radiance at each point along the path (*iy_unit* is.\n"
7790  " considered). Size: [nf,ns,1,np].\n"
7791  "* \"Optical depth\": The scalar optical depth between the\n"
7792  " observation point and the end of the primary propagation path\n"
7793  " (ie. the optical depth to the surface or space.). Calculated\n"
7794  " in a pure scalar manner, and not dependent on direction.\n"
7795  " Size: [nf,1,1,1].\n"
7796  "where\n"
7797  " nf: Number of frequencies.\n"
7798  " ns: Number of Stokes elements.\n"
7799  " np: Number of propagation path points.\n"
7800  "\n"
7801  "The auxiliary data are returned in *iy_aux* with quantities\n"
7802  "selected by *iy_aux_vars*. Most variables require that the method\n"
7803  "is called directly or by *iyCalc*. For calculations using *yCalc*,\n"
7804  "the selection is restricted to the variables marked with *.\n"
7805  ),
7806  AUTHORS( "Patrick Eriksson" ),
7807  OUT( "iy", "iy_aux", "ppath", "diy_dx" ),
7808  GOUT(),
7809  GOUT_TYPE(),
7810  GOUT_DESC(),
7811  IN( "diy_dx", "stokes_dim", "f_grid", "atmosphere_dim",
7812  "p_grid", "z_field", "t_field", "vmr_field", "abs_species",
7813  "wind_u_field", "wind_v_field", "wind_w_field", "mag_u_field",
7814  "mag_v_field", "mag_w_field", "cloudbox_on", "cloudbox_limits",
7815  "pnd_field", "scat_data",
7816  "particle_masses", "iy_unit", "iy_aux_vars", "jacobian_do",
7817  "ppath_agenda",
7818  "propmat_clearsky_agenda", "iy_main_agenda", "iy_space_agenda",
7819  "iy_surface_agenda", "iy_agenda_call1", "iy_transmission",
7820  "rte_pos", "rte_los", "rte_pos2", "rte_alonglos_v",
7821  "ppath_lmax", "ppath_lraytrace",
7822  "fos_scatint_angles", "fos_iyin_za_angles"
7823  ),
7824  GIN( "fos_za_interporder", "fos_n" ),
7825  GIN_TYPE( "Index", "Index" ),
7826  GIN_DEFAULT( "1", "1" ),
7827  GIN_DESC( "Polynomial order for zenith angle interpolation.",
7828  "Max scattering order to consider." )
7829  ));
7830  */
7831 
7832  md_data_raw.push_back(create_mdrecord(
7833  NAME("iyHybrid"),
7834  DESCRIPTION("So far just for testing.\n"),
7835  AUTHORS("Patrick Eriksson", "Jana Mendrok", "Richard Larsson"),
7836  OUT("iy",
7837  "iy_aux",
7838  "diy_dx",
7839  "ppvar_p",
7840  "ppvar_t",
7841  "ppvar_nlte",
7842  "ppvar_vmr",
7843  "ppvar_wind",
7844  "ppvar_mag",
7845  "ppvar_pnd",
7846  "ppvar_f",
7847  "ppvar_iy",
7848  "ppvar_trans_cumulat"),
7849  GOUT(),
7850  GOUT_TYPE(),
7851  GOUT_DESC(),
7852  IN("diy_dx",
7853  "iy_id",
7854  "stokes_dim",
7855  "f_grid",
7856  "atmosphere_dim",
7857  "p_grid",
7858  "t_field",
7859  "nlte_field",
7860  "vmr_field",
7861  "abs_species",
7862  "wind_u_field",
7863  "wind_v_field",
7864  "wind_w_field",
7865  "mag_u_field",
7866  "mag_v_field",
7867  "mag_w_field",
7868  "cloudbox_on",
7869  "cloudbox_limits",
7870  "pnd_field",
7871  "dpnd_field_dx",
7872  "scat_species",
7873  "scat_data",
7874  "iy_unit",
7875  "iy_aux_vars",
7876  "jacobian_do",
7877  "jacobian_quantities",
7878  "propmat_clearsky_agenda",
7879  "water_p_eq_agenda",
7880  "iy_main_agenda",
7881  "iy_space_agenda",
7882  "iy_surface_agenda",
7883  "iy_cloudbox_agenda",
7884  "iy_agenda_call1",
7885  "iy_transmission",
7886  "ppath",
7887  "rte_pos2",
7888  "rte_alonglos_v",
7889  "surface_props_data",
7890  "cloudbox_field",
7891  "za_grid"),
7892  GIN("Naa_grid", "t_interp_order"),
7893  GIN_TYPE("Index", "Index"),
7894  GIN_DEFAULT("19", "1"),
7895  GIN_DESC("Number of azimuth angles to consider in scattering source term"
7896  " integral.",
7897  "Interpolation order of temperature for scattering data (so"
7898  " far only applied in phase matrix, not in extinction and"
7899  " absorption.")));
7900 
7901  md_data_raw.push_back(create_mdrecord(
7902  NAME("iyHybrid2"),
7903  DESCRIPTION("So far just for even more testing.\n"),
7904  AUTHORS("Patrick Eriksson", "Jana Mendrok", "Richard Larsson"),
7905  OUT("iy",
7906  "iy_aux",
7907  "diy_dx",
7908  "ppvar_p",
7909  "ppvar_t",
7910  "ppvar_nlte",
7911  "ppvar_vmr",
7912  "ppvar_wind",
7913  "ppvar_mag",
7914  "ppvar_pnd",
7915  "ppvar_f",
7916  "ppvar_iy",
7917  "ppvar_trans_cumulat"),
7918  GOUT(),
7919  GOUT_TYPE(),
7920  GOUT_DESC(),
7921  IN("diy_dx",
7922  "iy_id",
7923  "stokes_dim",
7924  "f_grid",
7925  "atmosphere_dim",
7926  "p_grid",
7927  "t_field",
7928  "nlte_field",
7929  "vmr_field",
7930  "abs_species",
7931  "wind_u_field",
7932  "wind_v_field",
7933  "wind_w_field",
7934  "mag_u_field",
7935  "mag_v_field",
7936  "mag_w_field",
7937  "cloudbox_on",
7938  "cloudbox_limits",
7939  "pnd_field",
7940  "dpnd_field_dx",
7941  "scat_species",
7942  "scat_data",
7943  "iy_unit",
7944  "iy_aux_vars",
7945  "jacobian_do",
7946  "jacobian_quantities",
7947  "propmat_clearsky_agenda",
7948  "water_p_eq_agenda",
7949  "iy_main_agenda",
7950  "iy_space_agenda",
7951  "iy_surface_agenda",
7952  "iy_cloudbox_agenda",
7953  "iy_agenda_call1",
7954  "iy_transmission",
7955  "ppath",
7956  "rte_pos2",
7957  "rte_alonglos_v",
7958  "surface_props_data",
7959  "cloudbox_field",
7960  "za_grid"),
7961  GIN("Naa_grid", "t_interp_order"),
7962  GIN_TYPE("Index", "Index"),
7963  GIN_DEFAULT("19", "1"),
7964  GIN_DESC("Number of azimuth angles to consider in scattering source term"
7965  " integral.",
7966  "Interpolation order of temperature for scattering data (so"
7967  " far only applied in phase matrix, not in extinction and"
7968  " absorption.")));
7969 
7970  md_data_raw.push_back(create_mdrecord(
7971  NAME("iyIndependentBeamApproximation"),
7972  DESCRIPTION("In development ....\n"
7973  "\n"
7974  "Describe how *atm_fields_compact* is filled.\n"),
7975  AUTHORS("Patrick Eriksson"),
7976  OUT("iy", "iy_aux", "ppath", "diy_dx", "atm_fields_compact"),
7977  GOUT(),
7978  GOUT_TYPE(),
7979  GOUT_DESC(),
7980  IN("diy_dx",
7981  "iy_id",
7982  "f_grid",
7983  "atmosphere_dim",
7984  "p_grid",
7985  "lat_grid",
7986  "lon_grid",
7987  "lat_true",
7988  "lon_true",
7989  "t_field",
7990  "z_field",
7991  "vmr_field",
7992  "nlte_field",
7993  "wind_u_field",
7994  "wind_v_field",
7995  "wind_w_field",
7996  "mag_u_field",
7997  "mag_v_field",
7998  "mag_w_field",
7999  "cloudbox_on",
8000  "cloudbox_limits",
8001  "pnd_field",
8002  "particle_masses",
8003  "ppath_agenda",
8004  "ppath_lmax",
8005  "ppath_lraytrace",
8006  "iy_agenda_call1",
8007  "iy_unit",
8008  "iy_transmission",
8009  "rte_pos",
8010  "rte_los",
8011  "rte_pos2",
8012  "jacobian_do",
8013  "iy_aux_vars",
8014  "iy_independent_beam_approx_agenda"),
8015  GIN("return_atm1d", "skip_vmr", "skip_pnd", "return_masses"),
8016  GIN_TYPE("Index", "Index", "Index", "Index"),
8017  GIN_DEFAULT("0", "0", "0", "0"),
8018  GIN_DESC(
8019  "Flag to trigger that *atm_fields_compact* is filled. ",
8020  "Flag to not include vmr data in *atm_fields_compact*.",
8021  "Flag to not include pnd data in *atm_fields_compact*.",
8022  "Flag to include particle category masses in *atm_fields_compact*."
8023  "Conversion is done by *particle_masses*.")));
8024 
8025  md_data_raw.push_back(create_mdrecord(
8026  NAME("iyInterpCloudboxField"),
8027  DESCRIPTION(
8028  "Interpolates the intensity field of the cloud box.\n"
8029  "\n"
8030  "Determines the intensity field at the position and direction\n"
8031  "specified by *rte_pos* and *rte_los*. The position can be both\n"
8032  "inside the cloud box or at its edge.\n"
8033  "\n"
8034  "The interpolation in the spatial dimensions is linear.\n"
8035  "\n"
8036  "For the zenith angle dimensions several options for controlling\n"
8037  "the interpolation are at hand. Default is linear interpolation.\n"
8038  "Higher order polynomial interpolation is activated by setting\n"
8039  "*za_interp_order* to a value > 1. Default is to perform the\n"
8040  "interpolation separately for [0,90[ and ]90,180]. To handle\n"
8041  "90 degree or use the full range ([0,180]) as basis for the\n"
8042  "interpolation, set *za_restrict* to 0. You can select to use\n"
8043  "cos(za) as the independent variable (instead of za) by setting\n"
8044  "*cos_za_interp* to 1.\n"
8045  "\n"
8046  "For the azimuth dimension the interpolation order can be\n"
8047  "selected, in the same manner as for zenith.\n"),
8048  AUTHORS("Claudia Emde", "Patrick Eriksson", "Jana Mendrok"),
8049  OUT("iy"),
8050  GOUT(),
8051  GOUT_TYPE(),
8052  GOUT_DESC(),
8053  IN("cloudbox_field",
8054  "rtp_pos",
8055  "rtp_los",
8056  "jacobian_do",
8057  "cloudbox_on",
8058  "cloudbox_limits",
8059  "atmosphere_dim",
8060  "p_grid",
8061  "lat_grid",
8062  "lon_grid",
8063  "z_field",
8064  "z_surface",
8065  "stokes_dim",
8066  "za_grid",
8067  "aa_grid",
8068  "f_grid"),
8069  GIN("za_interp_order",
8070  "za_restrict",
8071  "cos_za_interp",
8072  "za_extpolfac",
8073  "aa_interp_order"),
8074  GIN_TYPE("Index", "Index", "Index", "Numeric", "Index"),
8075  GIN_DEFAULT("1", "1", "0", "0.5", "1"),
8076  GIN_DESC("Zenith angle interpolation order.",
8077  "Flag whether to restric zenith angle interpolation to one "
8078  "hemisphere.",
8079  "Flag whether to do zenith angle interpolation in cosine space.",
8080  "Maximum allowed extrapolation range in zenith angle.",
8081  "Azimuth angle interpolation order.")));
8082 
8083  md_data_raw.push_back(create_mdrecord(
8084  NAME("iyLoopFrequencies"),
8085  DESCRIPTION(
8086  "Radiative transfer calculations one frequency at the time.\n"
8087  "\n"
8088  "The method loops the frequencies in *f_grid* and calls\n"
8089  "*iy_loop_freqs_agenda* for each individual value. This method is\n"
8090  "placed in *iy_main_agenda*, and the actual radiative transfer\n"
8091  " method is put in *iy_loop_freqs_agenda*.\n"
8092  "\n"
8093  "A common justification for using the method should be to consider\n"
8094  "dispersion. By using this method it is ensured that the propagation\n"
8095  "path for each individual frequency is calculated.\n"),
8096  AUTHORS("Patrick Eriksson"),
8097  OUT("iy", "iy_aux", "ppath", "diy_dx"),
8098  GOUT(),
8099  GOUT_TYPE(),
8100  GOUT_DESC(),
8101  IN("iy_aux_vars",
8102  "iy_agenda_call1",
8103  "iy_transmission",
8104  "rte_pos",
8105  "rte_los",
8106  "rte_pos2",
8107  "stokes_dim",
8108  "f_grid",
8109  "iy_loop_freqs_agenda"),
8110  GIN(),
8111  GIN_TYPE(),
8112  GIN_DEFAULT(),
8113  GIN_DESC()));
8114 
8115  md_data_raw.push_back(create_mdrecord(
8116  NAME("iyMC"),
8117  DESCRIPTION(
8118  "Interface to Monte Carlo part for *iy_main_agenda*.\n"
8119  "\n"
8120  "Basically an interface to *MCGeneral* for doing monochromatic\n"
8121  "pencil beam calculations. This functions allows Monte Carlo (MC)\n"
8122  "calculations for sets of frequencies and sensor pos/los in a single\n"
8123  "run. Sensor responses can be included in the standard manner\n"
8124  "(through *yCalc*).\n"
8125  "\n"
8126  "This function does not apply the MC approach when it comes\n"
8127  "to sensor properties. These properties are not considered when\n"
8128  "tracking photons, which is done in *MCGeneral* (but then only for\n"
8129  "the antenna pattern).\n"
8130  "\n"
8131  "Output unit options (*iy_unit*) exactly as for *MCGeneral*.\n"
8132  "\n"
8133  "The MC calculation errors are all assumed be uncorrelated and each\n"
8134  "have a normal distribution. These properties are of relevance when\n"
8135  "weighting the errors with the sensor repsonse matrix. The seed is\n"
8136  "reset for each call of *MCGeneral* to obtain uncorrelated errors.\n"
8137  "\n"
8138  "MC control arguments (mc_std_err, mc_max_time, mc_min_iter, mc_max_iter\n"
8139  "mc_taustep_limit) as for *MCGeneral*. The arguments are applied\n"
8140  "for each monochromatic pencil beam calculation individually.\n"
8141  "As for *MCGeneral*, the value of *mc_error* shall be adopted to\n"
8142  "*iy_unit*.\n"
8143  "\n"
8144  "The following auxiliary data can be obtained:\n"
8145  " \"Error (uncorrelated)\": Calculation error. Size: [nf,ns,1,1].\n"
8146  " (The later part of the text string is required. It is used as\n"
8147  " a flag to yCalc for how to apply the sensor data.)\n"
8148  "where\n"
8149  " nf: Number of frequencies.\n"
8150  " ns: Number of Stokes elements.\n"),
8151  AUTHORS("Patrick Eriksson"),
8152  OUT("iy", "iy_aux", "diy_dx"),
8153  GOUT(),
8154  GOUT_TYPE(),
8155  GOUT_DESC(),
8156  IN("iy_agenda_call1",
8157  "iy_transmission",
8158  "rte_pos",
8159  "rte_los",
8160  "iy_aux_vars",
8161  "jacobian_do",
8162  "atmosphere_dim",
8163  "p_grid",
8164  "lat_grid",
8165  "lon_grid",
8166  "z_field",
8167  "t_field",
8168  "vmr_field",
8169  "refellipsoid",
8170  "z_surface",
8171  "cloudbox_on",
8172  "cloudbox_limits",
8173  "stokes_dim",
8174  "f_grid",
8175  "scat_data",
8176  "iy_space_agenda",
8177  "surface_rtprop_agenda",
8178  "propmat_clearsky_agenda",
8179  "ppath_step_agenda",
8180  "ppath_lmax",
8181  "ppath_lraytrace",
8182  "pnd_field",
8183  "iy_unit",
8184  "mc_std_err",
8185  "mc_max_time",
8186  "mc_max_iter",
8187  "mc_min_iter",
8188  "mc_taustep_limit"),
8189  GIN("t_interp_order"),
8190  GIN_TYPE("Index"),
8191  GIN_DEFAULT("1"),
8192  GIN_DESC("Interpolation order of temperature for scattering data (so"
8193  " far only applied in phase matrix, not in extinction and"
8194  " absorption.")));
8195 
8196  /*
8197  md_data_raw.push_back
8198  ( create_mdrecord
8199  ( NAME( "iyRadioLink" ),
8200  DESCRIPTION
8201  (
8202  "Radiative transfer for (active) radio links.\n"
8203  "\n"
8204  "The method assumes that *ppath_agenda* is set up to return the\n"
8205  "propagation path between the transmitter and the receiver. The\n"
8206  "position of the transmitter is given as *rte_pos*, and the\n"
8207  "\"sensor\" is taken as the receiver.\n"
8208  "\n"
8209  "The primary output (*y*) is the received signal, where the signal\n"
8210  "transmitted is taken from *iy_transmitter_agenda*. That is, *y*\n"
8211  "is a Stokes vector for each frequency considered. Several other\n"
8212  "possible measurements quantities, such as the bending angle, can\n"
8213  "be obtained as the auxiliary data (see lost below).\n"
8214  "\n"
8215  "If it is found that no link can be obtained due to intersection of\n"
8216  "the ground, all data are set to zero. If no link could be\n"
8217  "determined for other reasons (due to critical refraction or\n"
8218  "numerical problems), all data are set to NaN.\n"
8219  "\n"
8220  "This method is just intended for approximative calculations for\n"
8221  "cases corresponding to relatively simple ray tracing. A detailed,\n"
8222  "and more exact, treatment of several effects require more advanced\n"
8223  "calculation approaches. Here a simple geometrical optics approach\n"
8224  "is followed. See the user guide for details.\n"
8225  "\n"
8226  "Defocusing is a special consideration for radio links. Two\n"
8227  "algorithms are at hand for estimating defocusing, simply denoted\n"
8228  "as method 1 and 2:\n"
8229  " 1: This algorithm is of general character. Defocusing is estimated\n"
8230  " by making two path calculations with slightly shifted zenith\n"
8231  " angles.\n"
8232  " 2: This method is restricted to satellite-to-satellite links, and\n"
8233  " using a standard expression for such links, based on the\n"
8234  " vertical gradient of the bending angle.\n"
8235  "Both methods are described more in detail in the user guide.\n"
8236  "The argument *defocus_shift* is used by both methods.\n"
8237  "\n"
8238  "The following auxiliary data can be obtained:\n"
8239  " \"Pressure\": The pressure along the propagation path.\n"
8240  " Size: [1,1,1,np].\n"
8241  " \"Temperature\": The temperature along the propagation path.\n"
8242  " Size: [1,1,1,np].\n"
8243  " \"VMR, species X\": VMR of the species with index X (zero based).\n"
8244  " For example, adding the string \"VMR, species 0\" extracts the\n"
8245  " VMR of the first species. Size: [1,1,1,np].\n"
8246  " \"Absorption, summed\": The total absorption matrix along the\n"
8247  " path. Size: [nf,ns,ns,np].\n"
8248  " \"Absorption, species X\": The absorption matrix along the path\n"
8249  " for an individual species (X works as for VMR).\n"
8250  " Size: [nf,ns,ns,np].\n"
8251  " \"Particle extinction, summed\": The total extinction matrix over\n"
8252  " all scattering elements along the path. Size: [nf,ns,ns,np].\n"
8253  " \"PND, type X\": The particle number density for scattering element\n"
8254  " type X (ie. corresponds to book X in pnd_field).\n"
8255  " Size: [1,1,1,np].\n"
8256  " \"Mass content, X\": The mass content for scattering element X.\n"
8257  " This corresponds to column X in *particle_masses* (zero-\n"
8258  " based indexing). Size: [1,1,1,np].\n"
8259  "* \"Impact parameter\": As normally defined for GNRSS radio\n"
8260  " occultations (this equals the propagation path constant,\n"
8261  " r*n*sin(theta)). Size: [1,1,1,1].\n"
8262  "* \"Free space loss\": The total loss due to the inverse square\n"
8263  " law. Size: [1,1,1,1].\n"
8264  " \"Free space attenuation\": The local attenuation due to the\n"
8265  " inverse square law. Size: [1,1,1,np].\n"
8266  "* \"Atmospheric loss\": Total atmospheric attenuation, reported as\n"
8267  " the transmission. Size: [nf,1,1,1].\n"
8268  "* \"Defocusing loss\": The total loss between the transmitter and\n"
8269  " receiver due to defocusing. Given as a transmission.\n"
8270  " Size: [1,1,1,1].\n"
8271  "* \"Faraday rotation\": Total rotation [deg] along the path, for\n"
8272  " each frequency. Size: [nf,1,1,1].\n"
8273  "* \"Faraday speed\": The rotation per length unit [deg/m], at each\n"
8274  " path point and each frequency. Size: [nf,1,1,np].\n"
8275  "* \"Extra path delay\": The time delay of the signal [s], compared\n"
8276  " to the case of propagation through vacuum. Size: [1,1,1,1].\n"
8277  "* \"Bending angle\": As normally defined for GNRSS radio\n"
8278  " occultations, in [deg]. Size: [1,1,1,1].\n"
8279  "where\n"
8280  " nf: Number of frequencies.\n"
8281  " ns: Number of Stokes elements.\n"
8282  " np: Number of propagation path points.\n"
8283  "\n"
8284  "The auxiliary data are returned in *iy_aux* with quantities\n"
8285  "selected by *iy_aux_vars*. Most variables require that the method\n"
8286  "is called directly or by *iyCalc*. For calculations using *yCalc*,\n"
8287  "the selection is restricted to the variables marked with *.\n"
8288  ),
8289  AUTHORS( "Patrick Eriksson" ),
8290  OUT( "iy", "iy_aux", "ppath", "diy_dx" ),
8291  GOUT(),
8292  GOUT_TYPE(),
8293  GOUT_DESC(),
8294  IN( "stokes_dim", "f_grid", "atmosphere_dim",
8295  "p_grid", "lat_grid", "lon_grid",
8296  "z_field", "t_field", "vmr_field", "abs_species",
8297  "wind_u_field", "wind_v_field", "wind_w_field", "mag_u_field",
8298  "mag_v_field", "mag_w_field",
8299  "refellipsoid", "z_surface", "cloudbox_on", "cloudbox_limits",
8300  "pnd_field", "scat_data",
8301  "particle_masses", "iy_aux_vars", "jacobian_do",
8302  "ppath_agenda", "ppath_step_agenda",
8303  "propmat_clearsky_agenda", "iy_transmitter_agenda",
8304  "iy_agenda_call1", "iy_transmission", "rte_pos", "rte_los",
8305  "rte_pos2", "rte_alonglos_v", "ppath_lmax", "ppath_lraytrace" ),
8306  GIN( "defocus_method", "defocus_shift" ),
8307  GIN_TYPE( "Index", "Numeric" ),
8308  GIN_DEFAULT( "1", "3e-3" ),
8309  GIN_DESC( "Selection of defocusing calculation method. See above.",
8310  "Angular shift to apply in defocusing estimates." )
8311  ));
8312  */
8313 
8314  md_data_raw.push_back(create_mdrecord(
8315  NAME("iyReplaceFromAux"),
8316  DESCRIPTION(
8317  "Change of main output variable.\n"
8318  "\n"
8319  "With this method you can replace the content of *iy* with one of\n"
8320  "the auxiliary variables. The selected variable (by *aux_var*) must\n"
8321  "be part of *iy_aux_vars*. The corresponding data from *iy_aux* are\n"
8322  "copied to form a new *iy* (*iy_aux* is left unchanged). Elements of\n"
8323  "*iy* correponding to Stokes elements not covered by the auxiliary\n"
8324  "variable are just set to zero.\n"
8325  "\n"
8326  "Jacobian variables are not handled.\n"),
8327  AUTHORS("Patrick Eriksson"),
8328  OUT("iy"),
8329  GOUT(),
8330  GOUT_TYPE(),
8331  GOUT_DESC(),
8332  IN("iy", "iy_aux", "iy_aux_vars", "jacobian_do"),
8333  GIN("aux_var"),
8334  GIN_TYPE("String"),
8335  GIN_DEFAULT(NODEF),
8336  GIN_DESC("Auxiliary variable to insert as *iy*.")));
8337 
8338  md_data_raw.push_back(create_mdrecord(
8339  NAME("iySurfaceCallAgendaX"),
8340  DESCRIPTION(
8341  "Switch between the elements of *iy_surface_agenda_array*.\n"
8342  "\n"
8343  "This method simply calls the agenda matching *surface_type* and\n"
8344  "returns the results. That is, the agenda in *iy_surface_agenda_array*\n"
8345  "with index *surface_type* (0-based) is called.\n"),
8346  AUTHORS("Patrick Eriksson"),
8347  OUT("iy", "diy_dx"),
8348  GOUT(),
8349  GOUT_TYPE(),
8350  GOUT_DESC(),
8351  IN("diy_dx",
8352  "iy_unit",
8353  "iy_transmission",
8354  "iy_id",
8355  "cloudbox_on",
8356  "jacobian_do",
8357  "f_grid",
8358  "iy_main_agenda",
8359  "rtp_pos",
8360  "rtp_los",
8361  "rte_pos2",
8362  "iy_surface_agenda_array",
8363  "surface_type",
8364  "surface_type_aux"),
8365  GIN(),
8366  GIN_TYPE(),
8367  GIN_DEFAULT(),
8368  GIN_DESC()));
8369 
8370  md_data_raw.push_back(create_mdrecord(
8371  NAME("iySurfaceFastem"),
8372  DESCRIPTION(
8373  "Usage of FASTEM for emissivity and reflectivity of water surfaces.\n"
8374  "\n"
8375  "This method allows usage of the FASTEM model inside\n"
8376  "*iy_surface_agenda*. The aim is to use FASTEM in the exact same\n"
8377  "way as done in RTTOV. For example, the transmittance for down-\n"
8378  "welling radiation is considered. RTTOV os just 1D. Here 2D and 3D\n"
8379  "are handled as the 1D case, the down-welling radiation is just\n"
8380  "calculated for the directuon matching specular reflection.\n"
8381  "\n"
8382  "The wind direction is given as the azimuth angle, counted\n"
8383  "clockwise from north (i.e. an easterly wind is at 90 deg).\n"
8384  "This matches the general definition of azimuth inside ARTS.\n"
8385  "For 1D and 2D, the wind direction must be adjusted to match the\n"
8386  "fact that the line-of-sight is locked to be at 0 deg (180 for 2D\n"
8387  "in the case of a negative zenith angle). For 3D, the true wind\n"
8388  "direction shall be used.\n"
8389  "\n"
8390  "FASTEM is called by *FastemStandAlone*. See that WSM for further\n"
8391  "comments on variables and limitations.\n"),
8392  AUTHORS("Patrick Eriksson"),
8393  OUT("iy", "diy_dx"),
8394  GOUT(),
8395  GOUT_TYPE(),
8396  GOUT_DESC(),
8397  IN("diy_dx",
8398  "iy_transmission",
8399  "iy_id",
8400  "jacobian_do",
8401  "atmosphere_dim",
8402  "nlte_field",
8403  "cloudbox_on",
8404  "stokes_dim",
8405  "f_grid",
8406  "rtp_pos",
8407  "rtp_los",
8408  "rte_pos2",
8409  "iy_unit",
8410  "iy_main_agenda",
8411  "surface_skin_t"),
8412  GIN("salinity", "wind_speed", "wind_direction", "fastem_version"),
8413  GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
8414  GIN_DEFAULT("0.035", NODEF, "0", "6"),
8415  GIN_DESC("Salinity, 0-1. That is, 3% is given as 0.03.",
8416  "Wind speed.",
8417  "Wind direction. See further above.",
8418  "The version of FASTEM to use.")));
8419 
8420  md_data_raw.push_back(create_mdrecord(
8421  NAME("iySurfaceRtpropAgenda"),
8422  DESCRIPTION(
8423  "Interface to *surface_rtprop_agenda* for *iy_surface_agenda*.\n"
8424  "\n"
8425  "This method is designed to be part of *iy_surface_agenda*. It\n"
8426  "determines the radiative properties of the surface by\n"
8427  "*surface_rtprop_agenda* and calculates the downwelling radiation\n"
8428  "by *iy_main_agenda*, and sums up the terms as described in AUG.\n"
8429  "That is, this WSM uses the output from *surface_rtprop_agenda*\n"
8430  "in a straightforward fashion.\n"),
8431  AUTHORS("Patrick Eriksson"),
8432  OUT("iy", "diy_dx"),
8433  GOUT(),
8434  GOUT_TYPE(),
8435  GOUT_DESC(),
8436  IN("diy_dx",
8437  "iy_transmission",
8438  "iy_id",
8439  "jacobian_do",
8440  "atmosphere_dim",
8441  "nlte_field",
8442  "cloudbox_on",
8443  "stokes_dim",
8444  "f_grid",
8445  "rtp_pos",
8446  "rtp_los",
8447  "rte_pos2",
8448  "iy_unit",
8449  "iy_main_agenda",
8450  "surface_rtprop_agenda"),
8451  GIN(),
8452  GIN_TYPE(),
8453  GIN_DEFAULT(),
8454  GIN_DESC()));
8455 
8456  md_data_raw.push_back(create_mdrecord(
8457  NAME("iySurfaceRtpropCalc"),
8458  DESCRIPTION(
8459  "Applies *surface_los*, *surface_rmatrix* and *surface_emission*.\n"
8460  "\n"
8461  "This method is designed to be part of *iy_surface_agenda* and\n"
8462  "should be mandatory when using methods describing the surface\n"
8463  "radiative transfer properties by *surface_los*, *surface_rmatrix*\n"
8464  "and *surface_emission*. The task of this method is to apply these\n"
8465  "three WSVs to obtain the upwelling radiation from the surface.\n"
8466  "This upwelling radiation is the sum of surface emission and\n"
8467  "reflected downwelling radiation. The later part is calculated\n"
8468  "by calling *iy_main_agenda*. See further AUG.\n"),
8469  AUTHORS("Patrick Eriksson"),
8470  OUT("iy", "diy_dx"),
8471  GOUT(),
8472  GOUT_TYPE(),
8473  GOUT_DESC(),
8474  IN("diy_dx",
8475  "surface_los",
8476  "surface_rmatrix",
8477  "surface_emission",
8478  "dsurface_names",
8479  "dsurface_rmatrix_dx",
8480  "dsurface_emission_dx",
8481  "iy_transmission",
8482  "iy_id",
8483  "jacobian_do",
8484  "jacobian_quantities",
8485  "atmosphere_dim",
8486  "nlte_field",
8487  "cloudbox_on",
8488  "stokes_dim",
8489  "f_grid",
8490  "rtp_pos",
8491  "rtp_los",
8492  "rte_pos2",
8493  "iy_unit",
8494  "iy_main_agenda"),
8495  GIN(),
8496  GIN_TYPE(),
8497  GIN_DEFAULT(),
8498  GIN_DESC()));
8499 
8500  md_data_raw.push_back(create_mdrecord(
8501  NAME("iyTransmissionStandard"),
8502  DESCRIPTION(
8503  "Standard method for handling transmission measurements.\n"
8504  "\n"
8505  "Designed to be part of *iy_main_agenda*. Treatment of the cloudbox\n"
8506  "is incorporated (that is, no need to define *iy_cloudbox_agenda*).\n"
8507  "\n"
8508  "The transmitter is assumed to be placed at the end of provided *ppath*.\n"
8509  "The transmitted signal is taken from *iy_transmitter_agenda*. This\n"
8510  "signal is propagated along the path, considering attenuation alone.\n"
8511  "That is, the result of the method (*iy*) is the output of\n"
8512  "*iy_transmitter_agenda* multiplied with the transmission along the\n"
8513  "propagation path.\n"
8514  "\n"
8515  "As mentioned, the given *ppath* determines the position of the\n"
8516  "transmitter. For clear-sky and no modification of *ppath*, this\n"
8517  "means that the transitter will either be found at the surface or\n"
8518  "at the top-of-the-atmosphere. If you want to maintain this even with\n"
8519  "an active cloudbox, calculate *ppath* as\n"
8520  " ppathCalc( cloudbox_on=0 )\n"
8521  "Without setting cloudbox_on=0, the transmitter will end up inside or\n"
8522  "at the boundary of the cloudbox.\n"
8523  "\n"
8524  "Some auxiliary radiative transfer quantities can be obtained. Auxiliary\n"
8525  "quantities are selected by *iy_aux_vars* and returned by *iy_aux*.\n"
8526  "Valid choices for auxiliary data are:\n"
8527  " \"Radiative background\": Index value flagging the radiative\n"
8528  " background. The following coding is used: 0=space, 1=surface\n"
8529  " and 2=cloudbox. The value is added to each column.\n"
8530  " \"Optical depth\": Scalar optical depth between the observation point\n"
8531  " and the end of the present propagation path. Calculated based on\n"
8532  " the (1,1)-element of the transmission matrix (1-based indexing),\n"
8533  " i.e. only fully valid for scalar RT. The value is added to each\n"
8534  " column.\n"),
8535  AUTHORS("Patrick Eriksson", "Richard Larsson"),
8536  OUT("iy",
8537  "iy_aux",
8538  "diy_dx",
8539  "ppvar_p",
8540  "ppvar_t",
8541  "ppvar_nlte",
8542  "ppvar_vmr",
8543  "ppvar_wind",
8544  "ppvar_mag",
8545  "ppvar_pnd",
8546  "ppvar_f",
8547  "ppvar_iy",
8548  "ppvar_trans_cumulat"),
8549  GOUT(),
8550  GOUT_TYPE(),
8551  GOUT_DESC(),
8552  IN("diy_dx",
8553  "stokes_dim",
8554  "f_grid",
8555  "atmosphere_dim",
8556  "p_grid",
8557  "t_field",
8558  "nlte_field",
8559  "vmr_field",
8560  "abs_species",
8561  "wind_u_field",
8562  "wind_v_field",
8563  "wind_w_field",
8564  "mag_u_field",
8565  "mag_v_field",
8566  "mag_w_field",
8567  "cloudbox_on",
8568  "cloudbox_limits",
8569  "pnd_field",
8570  "dpnd_field_dx",
8571  "scat_species",
8572  "scat_data",
8573  "iy_aux_vars",
8574  "jacobian_do",
8575  "jacobian_quantities",
8576  "ppath",
8577  "propmat_clearsky_agenda",
8578  "water_p_eq_agenda",
8579  "iy_transmitter_agenda",
8580  "iy_agenda_call1",
8581  "iy_transmission",
8582  "rte_alonglos_v"),
8583  GIN(),
8584  GIN_TYPE(),
8585  GIN_DEFAULT(),
8586  GIN_DESC()));
8587 
8588  md_data_raw.push_back(create_mdrecord(
8589  NAME("iy_transmitterMultiplePol"),
8590  DESCRIPTION(
8591  "Transmitted signal having multiple polarisations.\n"
8592  "\n"
8593  "The method is intended to be part of *iy_transmitter_agenda*. It\n"
8594  "sets *iy* to describe the transmitted signal/pulses. The polarisation\n"
8595  "state is taken from *instrument_pol*, where *instrument_pol* must\n"
8596  "contain an element for each frequency in *f_grid*. The transmitted\n"
8597  "signal/pulses are set to be of unit magnitude, such as [1,1,0,0].\n"),
8598  AUTHORS("Patrick Eriksson"),
8599  OUT("iy"),
8600  GOUT(),
8601  GOUT_TYPE(),
8602  GOUT_DESC(),
8603  IN("stokes_dim", "f_grid", "instrument_pol"),
8604  GIN(),
8605  GIN_TYPE(),
8606  GIN_DEFAULT(),
8607  GIN_DESC()));
8608 
8609  md_data_raw.push_back(create_mdrecord(
8610  NAME("iy_transmitterSinglePol"),
8611  DESCRIPTION(
8612  "Transmitted signal having a single polarisations.\n"
8613  "\n"
8614  "The method is intended to be part of *iy_transmitter_agenda*. It\n"
8615  "sets *iy* to describe the transmitted pulses/signal. The polarisation\n"
8616  "state is taken from *instrument_pol*, where *instrument_pol* must contain\n"
8617  "a single value. This polarisation state is applied for all\n"
8618  "frequencies. The transmitted pulses/signals are set to be of unit\n"
8619  "magnitude, such as [1,1,0,0].\n"),
8620  AUTHORS("Patrick Eriksson"),
8621  OUT("iy"),
8622  GOUT(),
8623  GOUT_TYPE(),
8624  GOUT_DESC(),
8625  IN("stokes_dim", "f_grid", "instrument_pol"),
8626  GIN(),
8627  GIN_TYPE(),
8628  GIN_DEFAULT(),
8629  GIN_DESC()));
8630 
8631  md_data_raw.push_back(create_mdrecord(
8632  NAME("jacobianAddAbsSpecies"),
8633  DESCRIPTION(
8634  "Includes an absorption species in the Jacobian.\n"
8635  "\n"
8636  "For 1D or 2D calculations the latitude and/or longitude grid of\n"
8637  "the retrieval field should set to have zero length.\n"
8638  "\n"
8639  "These retrieval units are at hand for all gas species:\n"
8640  " \"vmr\" : Volume mixing ratio.\n"
8641  " \"nd\" : Number density.\n"
8642  " \"rel\" : Relative unit (e.g. 1.1 means 10% more of the gas).\n"
8643  "\n"
8644  "For water vapour, also these units are at hand:\n"
8645  " \"rh\" : Relative humidity.\n"
8646  " \"q\" : Specific humidity.\n"
8647  "\n"
8648  "Note that *for_species_tag* is used to indicate if species tag VMR,\n"
8649  "rather than atmospheric gas VMR is calculated. Set it to 0 and we\n"
8650  "calculate the atmospheric gas VMR, but this only works for \"analytical\".\n"
8651  "\n"
8652  "Note that the Jacobian is set to zero where volume mixing ratio equals zero.\n"
8653  "\n"
8654  "The number of elements added to the state vector (*x*) is:\n"
8655  " n_g1 * n_g2 * n_g3\n"
8656  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
8657  "respectively. Here empty vectors should be considered to have a length 1.\n"
8658  "The elements are sorted with pressure as innermost loop, followed by\n"
8659  "latitude and longitude as outermost loop.\n"),
8660  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
8661  OUT("jacobian_quantities", "jacobian_agenda"),
8662  GOUT(),
8663  GOUT_TYPE(),
8664  GOUT_DESC(),
8665  IN("jacobian_quantities",
8666  "jacobian_agenda",
8667  "atmosphere_dim",
8668  "p_grid",
8669  "lat_grid",
8670  "lon_grid"),
8671  GIN("g1", "g2", "g3", "species", "unit", "for_species_tag"),
8672  GIN_TYPE("Vector", "Vector", "Vector", "String", "String", "Index"),
8673  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "vmr", "1"),
8674  GIN_DESC("Pressure retrieval grid.",
8675  "Latitude retrieval grid.",
8676  "Longitude retreival grid.",
8677  "The species tag of the retrieval quantity.",
8678  "Retrieval unit. See above.",
8679  "Index-bool for acting on species tags or species."),
8680  SETMETHOD(false),
8681  AGENDAMETHOD(false),
8682  USES_TEMPLATES(false),
8683  PASSWORKSPACE(true)));
8684 
8685  md_data_raw.push_back(create_mdrecord(
8686  NAME("jacobianAddBasicCatalogParameter"),
8687  DESCRIPTION(
8688  "Includes a basic catalog parameter in the Jacobian. These are constant\n"
8689  "over all layers and so only a single vector output is returned.\n"
8690  "\n"
8691  "The only basic catalog parameters currently supported are:\n"
8692  " \"Line Strength\"\n"
8693  " \"Line Center\"\n"
8694  "\n"
8695  "The *catalog_identity* should be able to identify one or many\n"
8696  "lines in the catalog used for calculating the spectral absorption.\n"
8697  "Note that partial matching for energy levels are allowed but not\n"
8698  "recommended, as it is somewhat nonsensical to add multiple parameters\n"
8699  "\n"
8700  "Also note *jacobianAddShapeCatalogParameter* as this allows addition\n"
8701  "of shape parameters, e.g., pressure broadening coefficients\n"
8702  "\n"
8703  "Each call to this function adds just a single value to *x*.\n"
8704  "\n"
8705  "Example given the catalog_identity=\"O2-66 TR UP v1 0 J 1 LO v1 0 J 0\",\n"
8706  "only the O2 ground-level 119 GHz line can be accessed and only its\n"
8707  "catalog_parameter will be accessed. However, the more lenient\n"
8708  "catalog_identity=\"O2-66 TR UP J 1 LO J 0\" may be used, but then the\n"
8709  "118 GHz line belonging to v1=1 branch will be added to the same *x*.\n"),
8710  AUTHORS("Richard Larsson"),
8711  OUT("jacobian_quantities", "jacobian_agenda"),
8712  GOUT(),
8713  GOUT_TYPE(),
8714  GOUT_DESC(),
8715  IN("jacobian_quantities", "jacobian_agenda"),
8716  GIN("catalog_identity", "catalog_parameter"),
8717  GIN_TYPE("QuantumIdentifier", "String"),
8719  GIN_DESC("The catalog line matching information.",
8720  "The catalog parameter of the retrieval quantity.")));
8721 
8722  md_data_raw.push_back(create_mdrecord(
8723  NAME("jacobianAddBasicCatalogParameters"),
8724  DESCRIPTION(
8725  "See *jacobianAddBasicCatalogParameter*.\n"
8726  "\n"
8727  "This adds a multiple of parameters for first each catalog_identity in\n"
8728  "catalog_identities and then for each catalog_parameter in catalog_parameters\n"
8729  "by looping calls to *jacobianAddBasicCatalogParameter* over these input\n"),
8730  AUTHORS("Richard Larsson"),
8731  OUT("jacobian_quantities", "jacobian_agenda"),
8732  GOUT(),
8733  GOUT_TYPE(),
8734  GOUT_DESC(),
8735  IN("jacobian_quantities", "jacobian_agenda"),
8736  GIN("catalog_identities", "catalog_parameters"),
8737  GIN_TYPE("ArrayOfQuantumIdentifier", "ArrayOfString"),
8739  GIN_DESC("The catalog line matching information.",
8740  "The catalog parameter of the retrieval quantity.")));
8741 
8742  md_data_raw.push_back(create_mdrecord(
8743  NAME("jacobianAddFreqShift"),
8744  DESCRIPTION(
8745  "Includes a frequency fit of shift type in the Jacobian.\n"
8746  "\n"
8747  "Retrieval of deviations between nominal and actual backend\n"
8748  "frequencies can be included by this method. The assumption here is\n"
8749  "that the deviation is a constant off-set, a shift, common for all\n"
8750  "frequencies (and not varying between measurement blocks).\n"
8751  "\n"
8752  "This method adds one element to the state vector (*x*).\n"),
8753  AUTHORS("Patrick Eriksson"),
8754  OUT("jacobian_quantities", "jacobian_agenda"),
8755  GOUT(),
8756  GOUT_TYPE(),
8757  GOUT_DESC(),
8758  IN("jacobian_quantities", "jacobian_agenda", "f_grid"),
8759  GIN("df"),
8760  GIN_TYPE("Numeric"),
8761  GIN_DEFAULT("100e3"),
8762  GIN_DESC("Size of perturbation to apply.")));
8763 
8764  md_data_raw.push_back(create_mdrecord(
8765  NAME("jacobianAddFreqStretch"),
8766  DESCRIPTION(
8767  "Includes a frequency fit of stretch type in the Jacobian.\n"
8768  "\n"
8769  "Retrieval of deviations between nominal and actual backend\n"
8770  "frequencies can be included by this method. The assumption here is\n"
8771  "that the deviation varies linearly over the frequency range\n"
8772  "(following ARTS basis function for polynomial order 1).\n"
8773  "\n"
8774  "This method adds one element to the state vector (*x*).\n"),
8775  AUTHORS("Patrick Eriksson"),
8776  OUT("jacobian_quantities", "jacobian_agenda"),
8777  GOUT(),
8778  GOUT_TYPE(),
8779  GOUT_DESC(),
8780  IN("jacobian_quantities", "jacobian_agenda", "f_grid"),
8781  GIN("df"),
8782  GIN_TYPE("Numeric"),
8783  GIN_DEFAULT("100e3"),
8784  GIN_DESC("Size of perturbation to apply.")));
8785 
8786  md_data_raw.push_back(create_mdrecord(
8787  NAME("jacobianAddShapeCatalogParameter"),
8788  DESCRIPTION(
8789  "Adds a line shape parameter to the Jacobian calculations. These\n"
8790  "are constant over all levels so only a single *x*-value is added\n"
8791  "\n"
8792  "Line function parameter assume the derivatives\n"
8793  "of internal pressure broadening and line mixing\n"
8794  "functionality follows a simply f(T, T0, X0, X1, X2)\n"
8795  "format. The shape of the function f() is determined by\n"
8796  "input catalog; please see the ARTS documentation for more\n"
8797  "details\n"
8798  "\n"
8799  "The input are as follows:\n"
8800  " line_identity: Identifier of preferably a single line\n"
8801  " species: A SpeciesTag, e.g., \"O2\" or \"H2O\" for common species.\n"
8802  " Note that \"SELF\" and \"AIR\" tags are used for shape parameters\n"
8803  " affected by self and air-broadening, respectively.\n"
8804  " variable: A variable supported by the line, these can be\n"
8805  " \"G0\": Speed-independent pressure broadening\n"
8806  " \"G2\": Speed-dependent pressure broadening\n"
8807  " \"D0\": Speed-independent pressure shift\n"
8808  " \"D2\": Speed-dependent pressure shift\n"
8809  " \"FVC\": Frequency of velocity changing collisions\n"
8810  " \"ETA\": partial correlation between velocity and\n"
8811  " rotational state changes due to collisions\n"
8812  " \"Y\": First order line-mixing parameter\n"
8813  " \"G\": Second order line-mixing parameter for strength\n"
8814  " \"DV\": Second order line-mixing parameter for shifting\n"
8815  " coefficient: A coefficient in the model to compute the above parameters.\n"
8816  "\n"
8817  "Note that we cannot test if the line in question supports the variable and\n"
8818  "coefficient at the level of this function, so many errors will only be reported\n"
8819  "at a later stage\n"
8820  "\n"
8821  "For other spectroscopic parameters, see *jacobianAddBasicCatalogParameter*.\n"
8822  "Also see said function for an example of how to set the QuantumIdentifier\n"),
8823  AUTHORS("Richard Larsson"),
8824  OUT("jacobian_quantities", "jacobian_agenda"),
8825  GOUT(),
8826  GOUT_TYPE(),
8827  GOUT_DESC(),
8828  IN("jacobian_quantities", "jacobian_agenda"),
8829  GIN("line_identity", "species", "variable", "coefficient"),
8830  GIN_TYPE("QuantumIdentifier", "String", "String", "String"),
8832  GIN_DESC("Line identifier",
8833  "Species of interest",
8834  "Variable of interest",
8835  "Coefficient of interest")));
8836 
8837  md_data_raw.push_back(create_mdrecord(
8838  NAME("jacobianAddShapeCatalogParameters"),
8839  DESCRIPTION(
8840  "See *jacobianAddShapeCatalogParameter* for information on\n"
8841  "the GIN parameters\n"
8842  "\n"
8843  "This function accepts the same input but for lists of data.\n"
8844  "The function loops over each input list\n"
8845  "individually and appends the information to *jacobian_quantities*.\n"
8846  "\n"
8847  "Special \"ALL\" for 1 length *variables* and *coefficients* are\n"
8848  "allowed to compute all variables/coefficients in the order described\n"
8849  "in the description of *jacobianAddShapeCatalogParameter*\n"
8850  "\n"
8851  "For example, if *line_identities* have length 5, *species* length 4,\n"
8852  "*variables* length 3, and *coefficients* length 2, there will be\n"
8853  "5*4x3x2 = 120 new additions to *jacobian_quantities* in the order:\n"
8854  "\t[{line_identities[0], species[0], variables[0] coefficients[0]}]\n"
8855  "\t[{line_identities[0], species[0], variables[0] coefficients[1]}]\n"
8856  "\t[{line_identities[0], species[0], variables[1] coefficients[0]}]\n"
8857  "\t[{line_identities[0], species[0], variables[1] coefficients[1]}]\n"
8858  "\t[{line_identities[0], species[0], variables[2] coefficients[0]}]\n"
8859  "\t[{line_identities[0], species[0], variables[2] coefficients[1]}]\n"
8860  "\t[{line_identities[0], species[1], variables[0] coefficients[0]}]\n"
8861  "\t...\n"
8862  "\t[{line_identities[4], species[3], variables[1] coefficients[1]}]\n"
8863  "\t[{line_identities[4], species[3], variables[2] coefficients[0]}]\n"
8864  "\t[{line_identities[4], species[3], variables[2] coefficients[1]}]\n"
8865  "or in words: lines first, then species, then variables, then coefficients\n"),
8866  AUTHORS("Richard Larsson"),
8867  OUT("jacobian_quantities", "jacobian_agenda"),
8868  GOUT(),
8869  GOUT_TYPE(),
8870  GOUT_DESC(),
8871  IN("jacobian_quantities", "jacobian_agenda"),
8872  GIN("line_identities", "species", "variables", "coefficients"),
8873  GIN_TYPE("ArrayOfQuantumIdentifier",
8874  "ArrayOfString",
8875  "ArrayOfString",
8876  "ArrayOfString"),
8878  GIN_DESC("List of line identifiers",
8879  "List of species of interest",
8880  "List of variables of interest",
8881  "List of coefficients of interest")));
8882 
8883  md_data_raw.push_back(create_mdrecord(
8884  NAME("jacobianAddMagField"),
8885  DESCRIPTION(
8886  "Includes one magnetic field component in the Jacobian.\n"
8887  "\n"
8888  "The method follows the pattern of other Jacobian methods. The\n"
8889  "calculations can only be performed by analytic expressions.\n"
8890  "\n"
8891  "The magnetic field components are retrieved separately, and,\n"
8892  "hence, the argument *component* can be \"u\", \"v\", \"w\",\n"
8893  "and \"strength\".\n"
8894  "\n"
8895  "The number of elements added to the state vector (*x*) is:\n"
8896  " n_g1 * n_g2 * n_g3\n"
8897  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
8898  "respectively. Here empty vectors should be considered to have a length 1.\n"
8899  "The elements are sorted with pressure as innermost loop, followed by\n"
8900  "latitude and longitude as outermost loop.\n"
8901  "\n"
8902  "The dB-parameter is only used for Faraday rotation\n"),
8903  AUTHORS("Patrick Eriksson", "Richard Larsson"),
8904  OUT("jacobian_quantities", "jacobian_agenda"),
8905  GOUT(),
8906  GOUT_TYPE(),
8907  GOUT_DESC(),
8908  IN("jacobian_quantities",
8909  "jacobian_agenda",
8910  "atmosphere_dim",
8911  "p_grid",
8912  "lat_grid",
8913  "lon_grid"),
8914  GIN("g1", "g2", "g3", "component", "dB"),
8915  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
8916  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "1.0e-7"),
8917  GIN_DESC("Pressure retrieval grid.",
8918  "Latitude retrieval grid.",
8919  "Longitude retreival grid.",
8920  "Magnetic field component to retrieve",
8921  "Magnetic field perturbation")));
8922 
8923  md_data_raw.push_back(create_mdrecord(
8924  NAME("jacobianAddNLTE"),
8925  DESCRIPTION(
8926  "Experimental NLTE Jacobian.\n"
8927  "\n"
8928  "Intention: Adds the nlte_field level distribution per atmospheric grid\n"
8929  "to the Jacobian.\n"
8930  "\n"
8931  "The number of elements added to the state vector (*x*) is:\n"
8932  " n_g1 * n_g2 * n_g3\n"
8933  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
8934  "respectively. Here empty vectors should be considered to have a length 1.\n"
8935  "The elements are sorted with pressure as innermost loop, followed by\n"
8936  "latitude and longitude as outermost loop.\n"
8937  "\n"
8938  "The QuantumIdentifier should identify a single energy level, such as:\n"
8939  "\"H2O-161 EN J 1 Ka 0 Kc 1\", for one of the lower levels in the chains\n"
8940  "of transitions of water. Note that using this method directly is not\n"
8941  "best practice, as the quantum identifiers of the levels have to be known\n"
8942  "at an early stage in NLTE calculations, and will usually populate the\n"
8943  "*nlte_level_identifiers* variable, meaning it is better to use *jacobianAddNLTE*\n"
8944  "directly than to individually call this function\n"),
8945  AUTHORS("Richard Larsson"),
8946  OUT("jacobian_quantities", "jacobian_agenda"),
8947  GOUT(),
8948  GOUT_TYPE(),
8949  GOUT_DESC(),
8950  IN("jacobian_quantities",
8951  "jacobian_agenda",
8952  "atmosphere_dim",
8953  "p_grid",
8954  "lat_grid",
8955  "lon_grid"),
8956  GIN("g1", "g2", "g3", "energy_level_identity", "dx"),
8957  GIN_TYPE("Vector", "Vector", "Vector", "QuantumIdentifier", "Numeric"),
8958  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "1.0e-3"),
8959  GIN_DESC("Pressure retrieval grid.",
8960  "Latitude retrieval grid.",
8961  "Longitude retreival grid.",
8962  "Identifier to the eneregy level",
8963  "Perturbation of value if required by method")));
8964 
8965  md_data_raw.push_back(create_mdrecord(
8966  NAME("jacobianAddNLTEs"),
8967  DESCRIPTION(
8968  "Experimental NLTE Jacobian. Same as *jacobianAddNLTE* but for\n"
8969  "many levels\n"
8970  "\n"
8971  "Adds energy_level_identities.nelem() times as many arguments to *x*\n"
8972  "as *jacobianAddNLTE*, ordered as energy_level_identities describes\n"
8973  "\n"
8974  "This method is preferred to *jacobianAddNLTE*, since *energy_level_identities*\n"
8975  "is conveniently almost always the same as *nlte_level_identifiers*\n"),
8976  AUTHORS("Richard Larsson"),
8977  OUT("jacobian_quantities", "jacobian_agenda"),
8978  GOUT(),
8979  GOUT_TYPE(),
8980  GOUT_DESC(),
8981  IN("jacobian_quantities",
8982  "jacobian_agenda",
8983  "atmosphere_dim",
8984  "p_grid",
8985  "lat_grid",
8986  "lon_grid"),
8987  GIN("g1", "g2", "g3", "energy_level_identities", "dx"),
8988  GIN_TYPE(
8989  "Vector", "Vector", "Vector", "ArrayOfQuantumIdentifier", "Numeric"),
8990  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "1.0e-3"),
8991  GIN_DESC("Pressure retrieval grid.",
8992  "Latitude retrieval grid.",
8993  "Longitude retreival grid.",
8994  "Identifiers to the eneregy level",
8995  "Perturbation of value if required by method")));
8996 
8997  md_data_raw.push_back(create_mdrecord(
8998  NAME("jacobianAddPointingZa"),
8999  DESCRIPTION(
9000  "Adds sensor pointing zenith angle off-set jacobian.\n"
9001  "\n"
9002  "Retrieval of deviations between nominal and actual zenith angle of\n"
9003  "the sensor can be included by this method. The weighing functions\n"
9004  "can be calculated in several ways:\n"
9005  " calcmode = \"recalc\": Recalculation of pencil beam spectra,\n"
9006  " shifted with *dza* from nominal values. A single-sided\n"
9007  " perturbation is applied (towards higher zenith angles).\n"
9008  " calcmode = \"interp\": Inter/extrapolation of existing pencil\n"
9009  " beam spectra. For this option, allow some extra margins for\n"
9010  " zenith angle grids, to avoid artifacts when extrapolating\n"
9011  " the data (to shifted zenith angles). The average of a\n"
9012  " negative and a positive shift is taken."
9013  "\n"
9014  "The interp option is recommended. It should in general be both\n"
9015  "faster and more accurate (due to the double sided disturbance).\n"
9016  "In addition, it is less sensitive to the choice of dza (as long\n"
9017  "as a small value is applied).\n"
9018  "\n"
9019  "The pointing off-set can be modelled to be time varying. The time\n"
9020  "variation is then described by a polynomial (with standard base\n"
9021  "functions). For example, a polynomial order of 0 means that the\n"
9022  "off-set is constant in time. If the off-set is totally uncorrelated\n"
9023  "between the spectra, set the order to -1.\n"
9024  "\n"
9025  "The number of elements added to the state vector (*x*) is\n"
9026  " if poly_order < 0 : length of *sensor_time*\n"
9027  " otherwise : poly_order+1\n"
9028  "In the first case, the order in *x* matches *sensor_time*. In the second\n"
9029  "case, the coefficient for polynomial order 0 comes first etc.\n"),
9030  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
9031  OUT("jacobian_quantities", "jacobian_agenda"),
9032  GOUT(),
9033  GOUT_TYPE(),
9034  GOUT_DESC(),
9035  IN("jacobian_quantities", "jacobian_agenda", "sensor_pos", "sensor_time"),
9036  GIN("poly_order", "calcmode", "dza"),
9037  GIN_TYPE("Index", "String", "Numeric"),
9038  GIN_DEFAULT("0", "recalc", "0.01"),
9039  GIN_DESC("Order of polynomial to describe the time variation of "
9040  "pointing off-sets.",
9041  "Calculation method. See above",
9042  "Size of perturbation to apply (when applicable).")));
9043 
9044  md_data_raw.push_back(create_mdrecord(
9045  NAME("jacobianAddPolyfit"),
9046  DESCRIPTION(
9047  "Includes polynomial baseline fit in the Jacobian.\n"
9048  "\n"
9049  "This method deals with retrieval of disturbances of the spectra\n"
9050  "that can be described by an additive term, a baseline off-set.\n"
9051  "\n"
9052  "The baseline off-set is here modelled as a polynomial. The\n"
9053  "polynomial spans the complete frequency range spanned by\n"
9054  "*sensor_response_f_grid* and the method should only of interest for\n"
9055  "cases with no frequency gap in the spectra. The default assumption\n"
9056  "is that the off-set differs between all spectra, but it can also be\n"
9057  "assumed that the off-set is common for all e.g. line-of-sights.\n"
9058  "\n"
9059  "If the simulation/retrieval deals with a single spectrum, the number\n"
9060  "of elements added to the state vector (*x*) is poly_order+1. The\n"
9061  "coefficient for polynomial order 0 comes first etc. The same is true\n"
9062  "if *no_pol_variation*, *no_los_variation* and *no_mblock_variation*\n"
9063  "all are set to 1, even if several spectra are involved. Otherwise the"
9064  "number of elements added to *x* depends on the number of spectra and\n"
9065  "the settings of *no_pol_variation*, *no_los_variation* and \n"
9066  "*no_mblock_variation*. The coefficients of the different polynomial\n"
9067  "orders are treated as separate retrieval quantities. That is, the\n"
9068  "the elements associated with polynomial order 0 are grouped and form\n"
9069  "together a retrieval quantity. The coefficients for higher polynomial\n"
9070  "orders are treated in the same way.\n"),
9071  AUTHORS("Patrick Eriksson"),
9072  OUT("jacobian_quantities", "jacobian_agenda"),
9073  GOUT(),
9074  GOUT_TYPE(),
9075  GOUT_DESC(),
9076  IN("jacobian_quantities",
9077  "jacobian_agenda",
9078  "sensor_response_pol_grid",
9079  "sensor_response_dlos_grid",
9080  "sensor_pos"),
9081  GIN("poly_order",
9082  "no_pol_variation",
9083  "no_los_variation",
9084  "no_mblock_variation"),
9085  GIN_TYPE("Index", "Index", "Index", "Index"),
9086  GIN_DEFAULT(NODEF, "0", "0", "0"),
9087  GIN_DESC("Polynomial order to use for the fit.",
9088  "Set to 1 if the baseline off-set is the same for all "
9089  "Stokes components.",
9090  "Set to 1 if the baseline off-set is the same for all "
9091  "line-of-sights (inside each measurement block).",
9092  "Set to 1 if the baseline off-set is the same for all "
9093  "measurement blocks.")));
9094 
9095  md_data_raw.push_back(create_mdrecord(
9096  NAME("jacobianAddScatSpecies"),
9097  DESCRIPTION(
9098  "Includes a scattering species in the Jacobian.\n"
9099  "\n"
9100  "For 1D or 2D calculations the latitude and/or longitude grid of\n"
9101  "the retrieval field should set to have zero length.\n"
9102  "\n"
9103  "The number of elements added to the state vector (*x*) is:\n"
9104  " n_g1 * n_g2 * n_g3\n"
9105  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9106  "respectively. Here empty vectors should be considered to have a length 1.\n"
9107  "The elements are sorted with pressure as innermost loop, followed by\n"
9108  "latitude and longitude as outermost loop.\n"),
9109  AUTHORS("Patrick Eriksson"),
9110  OUT("jacobian_quantities", "jacobian_agenda"),
9111  GOUT(),
9112  GOUT_TYPE(),
9113  GOUT_DESC(),
9114  IN("jacobian_quantities",
9115  "jacobian_agenda",
9116  "atmosphere_dim",
9117  "p_grid",
9118  "lat_grid",
9119  "lon_grid"),
9120  GIN("g1", "g2", "g3", "species", "quantity"),
9121  GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
9123  GIN_DESC(
9124  "Pressure retrieval grid.",
9125  "Latitude retrieval grid.",
9126  "Longitude retreival grid.",
9127  "Name of scattering species, must match one element in *scat_species*.",
9128  "Retrieval quantity, e.g. \"IWC\"."),
9129  SETMETHOD(false),
9130  AGENDAMETHOD(false),
9131  USES_TEMPLATES(false),
9132  PASSWORKSPACE(true)));
9133 
9134  md_data_raw.push_back(create_mdrecord(
9135  NAME("jacobianAddSinefit"),
9136  DESCRIPTION(
9137  "Includes sinusoidal baseline fit in the Jacobian.\n"
9138  "\n"
9139  "Works as *jacobianAddPolyfit*, beside that a series of sine and\n"
9140  "cosine terms are used for the baseline fit.\n"
9141  "\n"
9142  "For each value in *period_lengths one sine and one cosine term are\n"
9143  "included (in mentioned order). By these two terms the amplitude and\n"
9144  "\"phase\" for each period length can be determined. The sine and\n"
9145  "cosine terms have value 0 and 1, respectively, for first frequency.\n"
9146  "\n"
9147  "If the simulation/retrieval deals with a single spectrum, the number\n"
9148  "of elements added to the state vector (*x*) is 2*nperiods, where\n"
9149  "nperiods is the length of *period_lengths*. The same is true\n"
9150  "if *no_pol_variation*, *no_los_variation* and *no_mblock_variation*\n"
9151  "all are set to 1, even if several spectra are involved. Otherwise the"
9152  "number of elements added to *x* depends on the number of spectra and\n"
9153  "the settings of *no_pol_variation*, *no_los_variation* and \n"
9154  "*no_mblock_variation*. The sine and cosine terms for each period\n"
9155  "length are treated as a separate retrieval quantities. That is, the\n"
9156  "the elements associated with the first period length are grouped and\n"
9157  "form together a retrieval quantity, etc. Inside each retrieval quantity\n"
9158  "the pairs of sine and cosine terms are kept together, in given order.\n"),
9159  AUTHORS("Patrick Eriksson"),
9160  OUT("jacobian_quantities", "jacobian_agenda"),
9161  GOUT(),
9162  GOUT_TYPE(),
9163  GOUT_DESC(),
9164  IN("jacobian_quantities",
9165  "jacobian_agenda",
9166  "sensor_response_pol_grid",
9167  "sensor_response_dlos_grid",
9168  "sensor_pos"),
9169  GIN("period_lengths",
9170  "no_pol_variation",
9171  "no_los_variation",
9172  "no_mblock_variation"),
9173  GIN_TYPE("Vector", "Index", "Index", "Index"),
9174  GIN_DEFAULT(NODEF, "0", "0", "0"),
9175  GIN_DESC("Period lengths of the fit.",
9176  "Set to 1 if the baseline off-set is the same for all "
9177  "Stokes components.",
9178  "Set to 1 if the baseline off-set is the same for all "
9179  "line-of-sights (inside each measurement block).",
9180  "Set to 1 if the baseline off-set is the same for all "
9181  "measurement blocks.")));
9182 
9183  md_data_raw.push_back(create_mdrecord(
9184  NAME("jacobianAddSpecialSpecies"),
9185  DESCRIPTION(
9186  "Includes a special absorption species in the Jacobian.\n"
9187  "\n"
9188  "Similar to *jacobianAddAbsSpecies* but only for number densities.\n"
9189  "\n"
9190  "Species allowed are:\n"
9191  " \"electrons\"\n"
9192  " \"particulates\"\n"
9193  "\n"
9194  "Note that the average of all particulates are used to scale its\n"
9195  "*jacobian*, so this method works best when only one type of\n"
9196  "particulate is being used, i.e., when *scat_data* has only one\n"
9197  "scattering species.\n"
9198  "\n"
9199  "The number of elements added to the state vector (*x*) is:\n"
9200  " n_g1 * n_g2 * n_g3\n"
9201  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9202  "respectively. Here empty vectors should be considered to have a length 1.\n"
9203  "The elements are sorted with pressure as innermost loop, followed by\n"
9204  "latitude and longitude as outermost loop.\n"),
9205  AUTHORS("Richard Larsson"),
9206  OUT("jacobian_quantities", "jacobian_agenda"),
9207  GOUT(),
9208  GOUT_TYPE(),
9209  GOUT_DESC(),
9210  IN("jacobian_quantities",
9211  "jacobian_agenda",
9212  "atmosphere_dim",
9213  "p_grid",
9214  "lat_grid",
9215  "lon_grid"),
9216  GIN("g1", "g2", "g3", "species"),
9217  GIN_TYPE("Vector", "Vector", "Vector", "String"),
9219  GIN_DESC("Pressure retrieval grid.",
9220  "Latitude retrieval grid.",
9221  "Longitude retreival grid.",
9222  "The species of the retrieval quantity."),
9223  SETMETHOD(false),
9224  AGENDAMETHOD(false),
9225  USES_TEMPLATES(false),
9226  PASSWORKSPACE(true)));
9227 
9228  md_data_raw.push_back(create_mdrecord(
9229  NAME("jacobianAddSurfaceQuantity"),
9230  DESCRIPTION(
9231  "Includes a surface quantity in the Jacobian.\n"
9232  "\n"
9233  "The quantity is specified by the GIN-variable *quantity*. The name\n"
9234  "of the quantity must match the name used in *surface_props_names*.\n"
9235  "\n"
9236  "For 1D or 2D calculations the latitude and/or longitude grid of\n"
9237  "the retrieval field should set to have zero length.\n"
9238  "\n"
9239  "The number of elements added to the state vector (*x*) is:\n"
9240  " n_g1 * n_g2\n"
9241  "where n_g1 and n_g2 are the length of GIN *g1* and *g2*, respectively.\n"
9242  "Here empty vectors should be considered to have a length 1.\n"
9243  "The elements are sorted with latitude as innermost loop and longitude\n"
9244  "as outermost loop.\n"),
9245  AUTHORS("Patrick Eriksson"),
9246  OUT("jacobian_quantities", "jacobian_agenda"),
9247  GOUT(),
9248  GOUT_TYPE(),
9249  GOUT_DESC(),
9250  IN("jacobian_quantities",
9251  "jacobian_agenda",
9252  "atmosphere_dim",
9253  "lat_grid",
9254  "lon_grid"),
9255  GIN("g1", "g2", "quantity"),
9256  GIN_TYPE("Vector", "Vector", "String"),
9258  GIN_DESC("Latitude retrieval grid.",
9259  "Longitude retreival grid.",
9260  "Retrieval quantity, e.g. \"Wind speed\"."),
9261  SETMETHOD(false),
9262  AGENDAMETHOD(false),
9263  USES_TEMPLATES(false),
9264  PASSWORKSPACE(true)));
9265 
9266  md_data_raw.push_back(create_mdrecord(
9267  NAME("jacobianAddTemperature"),
9268  DESCRIPTION(
9269  "Includes atmospheric temperatures in the Jacobian.\n"
9270  "\n"
9271  "The calculations are performed by (semi-)analytical expressions.\n"
9272  "Hydrostatic equilibrium (HSE) can be included.\n"
9273  "\n"
9274  "The analytical calculation approach neglects so far refraction\n"
9275  "totally, but considers the local effect of HSE.\n"
9276  "The later should be accaptable for observations around zenith and\n"
9277  "nadir. There is no warning if the method is applied incorrectly, \n"
9278  "with respect to these issues. Note that the argument *hse* of this\n"
9279  "WSM only refers to the Jacobian calculation, if the model and/or\n"
9280  "retrieved atmosphere actually fulfils HSE or not is governed in\n"
9281  "other manners.\n"
9282  "\n"
9283  "The calculations (both options) assume that gas species are defined\n"
9284  "in VMR (a change in temperature then changes the number density). \n"
9285  "This has the consequence that retrieval of temperatures and number\n"
9286  "density can not be mixed. Neither any warning here!\n"
9287  "\n"
9288  "The number of elements added to the state vector (*x*) is:\n"
9289  " n_g1 * n_g2 * n_g3\n"
9290  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9291  "respectively. Here empty vectors should be considered to have a length 1.\n"
9292  "The elements are sorted with pressure as innermost loop, followed by\n"
9293  "latitude and longitude as outermost loop.\n"),
9294  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
9295  OUT("jacobian_quantities", "jacobian_agenda"),
9296  GOUT(),
9297  GOUT_TYPE(),
9298  GOUT_DESC(),
9299  IN("jacobian_quantities",
9300  "jacobian_agenda",
9301  "atmosphere_dim",
9302  "p_grid",
9303  "lat_grid",
9304  "lon_grid"),
9305  GIN("g1", "g2", "g3", "hse"),
9306  GIN_TYPE("Vector", "Vector", "Vector", "String"),
9307  GIN_DEFAULT(NODEF, NODEF, NODEF, "on"),
9308  GIN_DESC("Pressure retrieval grid.",
9309  "Latitude retrieval grid.",
9310  "Longitude retreival grid.",
9311  "Flag to assume HSE or not (\"on\" or \"off\").")));
9312 
9313  md_data_raw.push_back(create_mdrecord(
9314  NAME("jacobianAddWind"),
9315  DESCRIPTION(
9316  "Includes one atmospheric wind component in the Jacobian.\n"
9317  "\n"
9318  "The method follows the pattern of other Jacobian methods. The\n"
9319  "calculations can only be performed by analytic expressions.\n"
9320  "Some lower level function depends on frequency perturbations,\n"
9321  "however, so therefore a frequency perturbation df is required\n"
9322  "and as a consequence *abs_f_interp_order* must be > 0.\n"
9323  "\n"
9324  "The wind field components are retrieved separately, and,\n"
9325  "hence, the argument *component* can be \"u\", \"v\" or \"w\" \n"
9326  "for vector components, or just \"strength\" for total wind speed.\n"
9327  "\n"
9328  "The number of elements added to the state vector (*x*) is:\n"
9329  " n_g1 * n_g2 * n_g3\n"
9330  "where n_g1, n_g2 and n_g3 are the length of GIN *g1*, *g2* and *g3*,\n"
9331  "respectively. Here empty vectors should be considered to have a length 1.\n"
9332  "The elements are sorted with pressure as innermost loop, followed by\n"
9333  "latitude and longitude as outermost loop.\n"),
9334  AUTHORS("Patrick Eriksson"),
9335  OUT("jacobian_quantities", "jacobian_agenda"),
9336  GOUT(),
9337  GOUT_TYPE(),
9338  GOUT_DESC(),
9339  IN("jacobian_quantities",
9340  "jacobian_agenda",
9341  "atmosphere_dim",
9342  "p_grid",
9343  "lat_grid",
9344  "lon_grid"),
9345  GIN("g1", "g2", "g3", "component", "dfrequency"),
9346  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
9347  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "0.1"),
9348  GIN_DESC("Pressure retrieval grid.",
9349  "Latitude retrieval grid.",
9350  "Longitude retrieval grid.",
9351  "Wind component to retrieve",
9352  "This is the frequency perturbation")));
9353 
9354  md_data_raw.push_back(create_mdrecord(
9355  NAME("jacobianAdjustAndTransform"),
9356  DESCRIPTION(
9357  "Applies adjustments and transformations on *jacobian*.\n"
9358  "\n"
9359  "The method handles two tasks:\n"
9360  "1. The retrieval transformations set by the user can not be applied\n"
9361  "onthe Jacobian inside *yCalc*. Transformations are instead applied\n"
9362  "by calling this method.\n"
9363  "2. It applies required adjustments of the Jacoboan. So far there is\n"
9364  "only one possible adjustment. If any absorption species uses the \"rel\"\n"
9365  "unit, an adjustment is needed for later iterations of the inversion.\n"
9366  "\n"
9367  "If no tranformations are selected and the \"rel\" option is not used at\n"
9368  "all, there is no need to call this method(, but you can still include it\n"
9369  "without causing any error, the calculations will just be a bit slower).\n"
9370  "Otherwise, this method should be called, typically as part of\n"
9371  "*inversion_iterate_agenda*.\n"
9372  "\n"
9373  "The method accepts if *jacobian* is empty, and then does, nothing.\n"),
9374  AUTHORS("Patrick Eriksson"),
9375  OUT("jacobian"),
9376  GOUT(),
9377  GOUT_TYPE(),
9378  GOUT_DESC(),
9379  IN("jacobian", "jacobian_quantities", "x"),
9380  GIN(),
9381  GIN_TYPE(),
9382  GIN_DEFAULT(),
9383  GIN_DESC()));
9384 
9385  md_data_raw.push_back(create_mdrecord(
9386  NAME("jacobianCalcDoNothing"),
9387  DESCRIPTION(
9388  "This function doesn't do anything. It just exists to satisfy\n"
9389  "the input and output requirement of the *jacobian_agenda*.\n"
9390  "\n"
9391  "This method is added to *jacobian_agenda* by *jacobianAddAbsSpecies*\n"
9392  "and some similar methods, and it should normally not be called by\n"
9393  "the user.\n"),
9394  AUTHORS("Oliver Lemke"),
9395  OUT("jacobian"),
9396  GOUT(),
9397  GOUT_TYPE(),
9398  GOUT_DESC(),
9399  IN("jacobian", "mblock_index", "iyb", "yb"),
9400  GIN(),
9401  GIN_TYPE(),
9402  GIN_DEFAULT(),
9403  GIN_DESC()));
9404 
9405  md_data_raw.push_back(create_mdrecord(
9406  NAME("jacobianCalcFreqShift"),
9407  DESCRIPTION(
9408  "Calculates frequency shift jacobians by interpolation\n"
9409  "of *iyb*.\n"
9410  "\n"
9411  "This function is added to *jacobian_agenda* by jacobianAddFreqShift\n"
9412  "and should normally not be called by the user.\n"),
9413  AUTHORS("Patrick Eriksson"),
9414  OUT("jacobian"),
9415  GOUT(),
9416  GOUT_TYPE(),
9417  GOUT_DESC(),
9418  IN("jacobian",
9419  "mblock_index",
9420  "iyb",
9421  "yb",
9422  "stokes_dim",
9423  "f_grid",
9424  "mblock_dlos_grid",
9425  "sensor_response",
9426  "jacobian_quantities"),
9427  GIN(),
9428  GIN_TYPE(),
9429  GIN_DEFAULT(),
9430  GIN_DESC()));
9431 
9432  md_data_raw.push_back(create_mdrecord(
9433  NAME("jacobianCalcFreqStretch"),
9434  DESCRIPTION(
9435  "Calculates frequency stretch jacobians by interpolation\n"
9436  "of *iyb*.\n"
9437  "\n"
9438  "This function is added to *jacobian_agenda* by jacobianAddFreqStretch\n"
9439  "and should normally not be called by the user.\n"),
9440  AUTHORS("Patrick Eriksson"),
9441  OUT("jacobian"),
9442  GOUT(),
9443  GOUT_TYPE(),
9444  GOUT_DESC(),
9445  IN("jacobian",
9446  "mblock_index",
9447  "iyb",
9448  "yb",
9449  "stokes_dim",
9450  "f_grid",
9451  "mblock_dlos_grid",
9452  "sensor_response",
9453  "sensor_response_pol_grid",
9454  "sensor_response_f_grid",
9455  "sensor_response_dlos_grid",
9456  "jacobian_quantities"),
9457  GIN(),
9458  GIN_TYPE(),
9459  GIN_DEFAULT(),
9460  GIN_DESC()));
9461 
9462  md_data_raw.push_back(create_mdrecord(
9463  NAME("jacobianCalcPointingZaInterp"),
9464  DESCRIPTION("Calculates zenith angle pointing deviation jacobians by\n"
9465  "inter-extrapolation of *iyb*.\n"
9466  "\n"
9467  "This function is added to *jacobian_agenda* by\n"
9468  "jacobianAddPointingZa and should normally not be\n"
9469  "called by the user.\n"),
9470  AUTHORS("Patrick Eriksson"),
9471  OUT("jacobian"),
9472  GOUT(),
9473  GOUT_TYPE(),
9474  GOUT_DESC(),
9475  IN("jacobian",
9476  "mblock_index",
9477  "iyb",
9478  "yb",
9479  "stokes_dim",
9480  "f_grid",
9481  "sensor_los",
9482  "mblock_dlos_grid",
9483  "sensor_response",
9484  "sensor_time",
9485  "jacobian_quantities"),
9486  GIN(),
9487  GIN_TYPE(),
9488  GIN_DEFAULT(),
9489  GIN_DESC()));
9490 
9491  md_data_raw.push_back(create_mdrecord(
9492  NAME("jacobianCalcPointingZaRecalc"),
9493  DESCRIPTION("Calculates zenith angle pointing deviation jacobians by\n"
9494  "recalulation of *iyb*.\n"
9495  "\n"
9496  "This function is added to *jacobian_agenda* by\n"
9497  "jacobianAddPointingZa and should normally not be\n"
9498  "called by the user.\n"),
9499  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
9500  OUT("jacobian"),
9501  GOUT(),
9502  GOUT_TYPE(),
9503  GOUT_DESC(),
9504  IN("jacobian",
9505  "mblock_index",
9506  "iyb",
9507  "yb",
9508  "atmosphere_dim",
9509  "nlte_field",
9510  "cloudbox_on",
9511  "stokes_dim",
9512  "f_grid",
9513  "sensor_pos",
9514  "sensor_los",
9515  "transmitter_pos",
9516  "mblock_dlos_grid",
9517  "sensor_response",
9518  "sensor_time",
9519  "iy_unit",
9520  "iy_main_agenda",
9521  "geo_pos_agenda",
9522  "jacobian_quantities"),
9523  GIN(),
9524  GIN_TYPE(),
9525  GIN_DEFAULT(),
9526  GIN_DESC()));
9527 
9528  md_data_raw.push_back(create_mdrecord(
9529  NAME("jacobianCalcPolyfit"),
9530  DESCRIPTION(
9531  "Calculates jacobians for polynomial baseline fit.\n"
9532  "\n"
9533  "This function is added to *jacobian_agenda* by jacobianAddPolyfit\n"
9534  "and should normally not be called by the user.\n"),
9535  AUTHORS("Patrick Eriksson"),
9536  OUT("jacobian"),
9537  GOUT(),
9538  GOUT_TYPE(),
9539  GOUT_DESC(),
9540  IN("jacobian",
9541  "mblock_index",
9542  "iyb",
9543  "yb",
9544  "sensor_response",
9545  "sensor_response_pol_grid",
9546  "sensor_response_f_grid",
9547  "sensor_response_dlos_grid",
9548  "jacobian_quantities"),
9549  GIN("poly_coeff"),
9550  GIN_TYPE("Index"),
9551  GIN_DEFAULT(NODEF),
9552  GIN_DESC("Polynomial coefficient to handle."),
9553  SETMETHOD(true)));
9554 
9555  md_data_raw.push_back(create_mdrecord(
9556  NAME("jacobianCalcSinefit"),
9557  DESCRIPTION(
9558  "Calculates jacobians for sinusoidal baseline fit.\n"
9559  "\n"
9560  "This function is added to *jacobian_agenda* by jacobianAddPolyfit\n"
9561  "and should normally not be called by the user.\n"),
9562  AUTHORS("Patrick Eriksson"),
9563  OUT("jacobian"),
9564  GOUT(),
9565  GOUT_TYPE(),
9566  GOUT_DESC(),
9567  IN("jacobian",
9568  "mblock_index",
9569  "iyb",
9570  "yb",
9571  "sensor_response",
9572  "sensor_response_pol_grid",
9573  "sensor_response_f_grid",
9574  "sensor_response_dlos_grid",
9575  "jacobian_quantities"),
9576  GIN("period_index"),
9577  GIN_TYPE("Index"),
9578  GIN_DEFAULT(NODEF),
9579  GIN_DESC("Index among the period length specified for add-method."),
9580  SETMETHOD(true)));
9581 
9582  md_data_raw.push_back(create_mdrecord(
9583  NAME("jacobianClose"),
9584  DESCRIPTION(
9585  "Closes the array of retrieval quantities and prepares for\n"
9586  "calculation of the Jacobian matrix.\n"
9587  "\n"
9588  "This function closes the *jacobian_quantities* array and sets\n"
9589  "*jacobian_do* to 1.\n"
9590  "\n"
9591  "Retrieval quantities should not be added after a call to this WSM.\n"
9592  "No calculations are performed here.\n"),
9593  AUTHORS("Mattias Ekstrom"),
9594  OUT("jacobian_do", "jacobian_agenda"),
9595  GOUT(),
9596  GOUT_TYPE(),
9597  GOUT_DESC(),
9598  IN("jacobian_agenda", "jacobian_quantities"),
9599  GIN(),
9600  GIN_TYPE(),
9601  GIN_DEFAULT(),
9602  GIN_DESC()));
9603 
9604  md_data_raw.push_back(create_mdrecord(
9605  NAME("jacobianFromTwoY"),
9606  DESCRIPTION(
9607  "Sets *jacobian* based on the difference vetween two measurement vectors.\n"
9608  "\n"
9609  "This function assumes that *y_pert* contains a measurement calculated\n"
9610  "with some variable perturbed, in comparison to the calculation\n"
9611  "behind *y*. The function takes the differences between *y_pert*\n"
9612  "and *y* to form a numerical derived estimate of *jacobian*.\n"
9613  "This gives a Jacobian wit a single column.\n"
9614  "\n"
9615  "*jacobian* equals here: (y_pert-y)/pert_size.\n"),
9616  AUTHORS("Patrick Eriksson"),
9617  OUT("jacobian"),
9618  GOUT(),
9619  GOUT_TYPE(),
9620  GOUT_DESC(),
9621  IN("y"),
9622  GIN("y_pert", "pert_size"),
9623  GIN_TYPE("Vector", "Numeric"),
9625  GIN_DESC("Perturbed measurement vector",
9626  "Size of perturbation behind spectra in *ybatch*.")));
9627 
9628  md_data_raw.push_back(create_mdrecord(
9629  NAME("jacobianFromYbatch"),
9630  DESCRIPTION(
9631  "Sets *jacobian* based on perturbation calcuations.\n"
9632  "\n"
9633  "This function assumes that *ybatch* contains spectra calculated\n"
9634  "with some variable perturbed, in comparison to the calculation\n"
9635  "behind *y*. The function takes the differences between *ybatch*\n"
9636  "and *y* to form a numerical derived estimate of *jacobian*.\n"
9637  "\n"
9638  "Column i of *jacobian* equals: (ybatch[i]-y)/pert_size.\n"),
9639  AUTHORS("Patrick Eriksson"),
9640  OUT("jacobian"),
9641  GOUT(),
9642  GOUT_TYPE(),
9643  GOUT_DESC(),
9644  IN("ybatch", "y"),
9645  GIN("pert_size"),
9646  GIN_TYPE("Numeric"),
9647  GIN_DEFAULT(NODEF),
9648  GIN_DESC("Size of perturbation behind spectra in *ybatch*.")));
9649 
9650  md_data_raw.push_back(create_mdrecord(
9651  NAME("jacobianInit"),
9652  DESCRIPTION(
9653  "Initialises the variables connected to the Jacobian matrix.\n"
9654  "\n"
9655  "This function initialises the *jacobian_quantities* array so\n"
9656  "that retrieval quantities can be added to it. Accordingly, it has\n"
9657  "to be called before any calls to jacobianAddTemperature or\n"
9658  "similar methods.\n"
9659  "\n"
9660  "The Jacobian quantities are initialised to be empty.\n"),
9661  AUTHORS("Mattias Ekstrom"),
9662  OUT("jacobian_quantities", "jacobian_agenda"),
9663  GOUT(),
9664  GOUT_TYPE(),
9665  GOUT_DESC(),
9666  IN(),
9667  GIN(),
9668  GIN_TYPE(),
9669  GIN_DEFAULT(),
9670  GIN_DESC()));
9671 
9672  md_data_raw.push_back(create_mdrecord(
9673  NAME("jacobianOff"),
9674  DESCRIPTION(
9675  "Makes mandatory initialisation of some jacobian variables.\n"
9676  "\n"
9677  "Some clear-sky jacobian WSVs must be initialised even if no such\n"
9678  "calculations will be performed. This is handled with this method.\n"
9679  "That is, this method must be called when no clear-sky jacobians\n"
9680  "will be calculated (even if cloudy-sky jacobians are calculated!).\n"
9681  "\n"
9682  "Sets *jacobian_do* to 0.\n"),
9683  AUTHORS("Patrick Eriksson"),
9684  OUT("jacobian_do", "jacobian_agenda", "jacobian_quantities"),
9685  GOUT(),
9686  GOUT_TYPE(),
9687  GOUT_DESC(),
9688  IN(),
9689  GIN(),
9690  GIN_TYPE(),
9691  GIN_DEFAULT(),
9692  GIN_DESC()));
9693 
9694  md_data_raw.push_back(create_mdrecord(
9695  NAME("jacobianSetAffineTransformation"),
9696  DESCRIPTION(
9697  "Adds an affine transformation of the last element of\n"
9698  "*jacobian_quantities*.\n"
9699  "\n"
9700  "See *jacobianSetFuncTransformation* for a general description of how\n"
9701  "retrieval transformations are defined. Transformations are not applied by\n"
9702  "methods such as*yCalc*. Instead, the method *jacobianAdjustAndTransform*\n"
9703  "must be called to activate the transformations.\n"
9704  "\n"
9705  "The affine transformation is specified by a transformation matrix, A,\n"
9706  "and an offset vector, b. These two are applied as described in\n"
9707  "*jacobianSetFuncTransformation*.\n"
9708  "\n"
9709  "The transformations is applied as\n"
9710  " x = A * ( z - b )\n"
9711  "where z is the retrieval quantity on the standard retrieval grids\n"
9712  "and x is the final state vector.\n"
9713  "\n"
9714  "So far, the following must be true for valid A-matrices\n"
9715  " z = A'*x + b\n"
9716  "That is, the reversed transformation is given by A transposed.\n"
9717  "\n"
9718  "This method must only be called if an affine transformation is wanted.\n"
9719  "Default is to make no such tranformation at all.\n"),
9720  AUTHORS("Simon Pfreundschuh"),
9721  OUT("jacobian_quantities"),
9722  GOUT(),
9723  GOUT_TYPE(),
9724  GOUT_DESC(),
9725  IN("jacobian_quantities"),
9726  GIN("transformation_matrix", "offset_vector"),
9727  GIN_TYPE("Matrix", "Vector"),
9729  GIN_DESC("The transformation matrix A", "The offset vector b")));
9730 
9731  md_data_raw.push_back(create_mdrecord(
9732  NAME("jacobianSetFuncTransformation"),
9733  DESCRIPTION(
9734  "Sets the functional transformation of the last element of\n"
9735  "*jacobian_quantities*.\n"
9736  "\n"
9737  "See below for a general description of how retrieval transformations\n"
9738  "are defined. Transformations are not applied by methods such as*yCalc*.\n"
9739  "Instead, the method *jacobianAdjustAndTransform* must be called to\n"
9740  "activate the transformations.\n"
9741  "\n"
9742  "The following transformations can be selected (by *transformation_func*):\n"
9743  " log : The natural logarithm\n"
9744  " log10 : The base-10 logarithm\n"
9745  " atanh : Area hyperbolic tangent \n"
9746  " none : No transformation at all\n"
9747  "\n"
9748  "This method needs only to be called if a functional transformation\n"
9749  "is wanted. Default is to make no such tranformation at all (i.e.\n"
9750  "the option \"none\" exists only for reasons of flexibility).\n"
9751  "\n"
9752  "The log-options are applied as log(z-z_min) and log10(z-z_min).\n"
9753  "The default for *z_min* is zero, but by changing it the lower limit\n"
9754  "for z can be changed. Note that *z_min* becomes the lower limit for\n"
9755  "allowed values of z. The GIN *z_max* is here ignored.\n"
9756  "\n"
9757  "For the atanh-option, also *z_max* is considered. This transformation\n"
9758  "is applied as atanh((2(z-z_min)/(z_max-z_min))-1). As above,*z_min*\n"
9759  "is lower limit for allowed values of z. On the other hand, *z_max*\n"
9760  "eines the upper limit for z.\n"
9761  "\n"
9762  "The GIN *transformation_func* is so far only used for atanh. The parameter\n"
9763  "specifies the maximum allowed value allowed for u. That is, the valid\n"
9764  "range for u becomes ]0,tfunc_parameter[. Note that log and log10\n"
9765  "demands/ensures that u > 0, but implies no upper limit.\n"
9766  "\n"
9767  "General handling of retrieval units and transformations:\n"
9768  "---\n"
9769  "Default is that quantities are retrieved as defined in ARTS, but\n"
9770  "both some unit conversion and transformations are provided. These\n"
9771  "operations are applied as:\n"
9772  " x = A * ( f(u(z)) - b ) \n"
9773  "where\n"
9774  " z is the quantity as defined ARTS\n"
9775  " u represents the change of unit\n"
9776  " f is the transformation function\n"
9777  " A and b define together an affine transformation\n"
9778  " x is the retrieved quantity\n"
9779  "For example, this systen allows to retrive a principal component\n"
9780  "representation (A and b) of the log (f) of relative humidity (u).\n"
9781  "\n"
9782  "Change of unit is selected by the quantity specific jacobian-add\n"
9783  "methods (so far only at hand for gas species). \n"
9784  "\n"
9785  "Activating a transformation function is done by this method. Note\n"
9786  "that the functions are defined as the transformation from z to x.\n"
9787  "For more details on affine transformations, see\n"
9788  "*jacobianSetAffineTransformation*.\n"),
9789  AUTHORS("Patrick Eriksson", "Simon Pfreundschuh"),
9790  OUT("jacobian_quantities"),
9791  GOUT(),
9792  GOUT_TYPE(),
9793  GOUT_DESC(),
9794  IN("jacobian_quantities"),
9795  GIN("transformation_func", "z_min", "z_max"),
9796  GIN_TYPE("String", "Numeric", "Numeric"),
9797  GIN_DEFAULT(NODEF, "0", "-99e99"),
9798  GIN_DESC("The transformation function.",
9799  "Lower limit of z.",
9800  "Upper limit of z.")));
9801 
9802  md_data_raw.push_back(create_mdrecord(
9803  NAME("lat_gridFromRawField"),
9804  DESCRIPTION(
9805  "Sets *lat_grid* according to given raw atmospheric field's lat_grid.\n"
9806  "Similar to *p_gridFromZRaw*, but acting on a generic *GriddedField3*\n"
9807  "(e.g., a wind or magnetic field component).\n"),
9808  AUTHORS("Jana Mendrok"),
9809  OUT("lat_grid"),
9810  GOUT(),
9811  GOUT_TYPE(),
9812  GOUT_DESC(),
9813  IN(),
9814  GIN("field_raw"),
9815  GIN_TYPE("GriddedField3"),
9816  GIN_DEFAULT(NODEF),
9817  GIN_DESC("A raw atmospheric field.")));
9818 
9819  md_data_raw.push_back(create_mdrecord(
9820  NAME("lbl_checkedCalc"),
9821  DESCRIPTION("Checks that the line-by-line parameters are OK.\n"
9822  "\n"
9823  "On failure, will throw. On success, lbl_checked evals as true\n"
9824  "\n"
9825  "Note that checks may become more stringent as ARTS evolves, especially for\n"
9826  "\"new\" options. This test might succeed in one version of ARTS but fail\n"
9827  "in later versions\n"),
9828  AUTHORS("Richard Larsson"),
9829  OUT("lbl_checked"),
9830  GOUT(),
9831  GOUT_TYPE(),
9832  GOUT_DESC(),
9833  IN("abs_lines_per_species", "abs_species", "isotopologue_ratios", "partition_functions"),
9834  GIN(),
9835  GIN_TYPE(),
9836  GIN_DEFAULT(),
9837  GIN_DESC()));
9838 
9839  md_data_raw.push_back(create_mdrecord(
9840  NAME("LocalTimeOffset"),
9841  DESCRIPTION("Sets the seconds between localtime and gmtime representation of now().\n"),
9842  AUTHORS("Richard Larsson"),
9843  OUT(),
9844  GOUT("dt"),
9845  GOUT_TYPE("Numeric"),
9846  GOUT_DESC("Time in seconds between local and gmt"),
9847  IN(),
9848  GIN(),
9849  GIN_TYPE(),
9850  GIN_DEFAULT(),
9851  GIN_DESC()));
9852 
9853  md_data_raw.push_back(create_mdrecord(
9854  NAME("lon_gridFromRawField"),
9855  DESCRIPTION(
9856  "Sets *lon_grid* according to given raw atmospheric field's lat_grid.\n"
9857  "Similar to *p_gridFromZRaw*, but acting on a generic *GriddedField3*\n"
9858  "(e.g., a wind or magnetic field component).\n"),
9859  AUTHORS("Jana Mendrok"),
9860  OUT("lon_grid"),
9861  GOUT(),
9862  GOUT_TYPE(),
9863  GOUT_DESC(),
9864  IN(),
9865  GIN("field_raw"),
9866  GIN_TYPE("GriddedField3"),
9867  GIN_DEFAULT(NODEF),
9868  GIN_DESC("A raw atmospheric field.")));
9869 
9870  md_data_raw.push_back(create_mdrecord(
9871  NAME("MagFieldsCalc"),
9872  DESCRIPTION(
9873  "Interpolation of raw magnetic fields to calculation grids.\n"
9874  "Heritage from *AtmFieldsCalc*\n"
9875  "\n"
9876  "Internally, *MagFieldsCalc* applies *GriddedFieldPRegrid* and\n"
9877  "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
9878  "is allowed and applied.\n"),
9879  AUTHORS("Richard Larsson"),
9880  OUT("mag_u_field", "mag_v_field", "mag_w_field"),
9881  GOUT(),
9882  GOUT_TYPE(),
9883  GOUT_DESC(),
9884  IN("p_grid",
9885  "lat_grid",
9886  "lon_grid",
9887  "mag_u_field_raw",
9888  "mag_v_field_raw",
9889  "mag_w_field_raw",
9890  "atmosphere_dim"),
9891  GIN("interp_order"),
9892  GIN_TYPE("Index"),
9893  GIN_DEFAULT("1"),
9894  GIN_DESC("Interpolation order (1=linear interpolation).")));
9895 
9896  md_data_raw.push_back(create_mdrecord(
9897  NAME("MagFieldsCalcExpand1D"),
9898  DESCRIPTION(
9899  "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
9900  "homogeneous magnetic fields. Derived from *AtmFieldsCalcExpand1D*\n"
9901  "\n"
9902  "The method works as *MagFieldsCalc*, but accepts only raw 1D\n"
9903  "magnetic fields. The raw data is interpolated to *p_grid* and\n"
9904  "the obtained values are applied for all latitudes, and also\n"
9905  "longitudes for 3D, to create a homogeneous atmosphere.\n"),
9906  AUTHORS("Richard Larsson"),
9907  OUT("mag_u_field", "mag_v_field", "mag_w_field"),
9908  GOUT(),
9909  GOUT_TYPE(),
9910  GOUT_DESC(),
9911  IN("p_grid",
9912  "lat_grid",
9913  "lon_grid",
9914  "mag_u_field_raw",
9915  "mag_v_field_raw",
9916  "mag_w_field_raw",
9917  "atmosphere_dim"),
9918  GIN("interp_order"),
9919  GIN_TYPE("Index"),
9920  GIN_DEFAULT("1"),
9921  GIN_DESC("Interpolation order (1=linear interpolation).")));
9922 
9923  md_data_raw.push_back(create_mdrecord(
9924  NAME("MagFieldsFromAltitudeRawCalc"),
9925  DESCRIPTION(
9926  "Regrids the rawfield by lat-lon and interpolates to z_field.\n"),
9927  AUTHORS("Richard Larsson"),
9928  OUT("mag_u_field", "mag_v_field", "mag_w_field"),
9929  GOUT(),
9930  GOUT_TYPE(),
9931  GOUT_DESC(),
9932  IN("lat_grid",
9933  "lon_grid",
9934  "z_field",
9935  "mag_u_field_raw",
9936  "mag_v_field_raw",
9937  "mag_w_field_raw"),
9938  GIN("interp_order", "extrapolating"),
9939  GIN_TYPE("Index", "Numeric"),
9940  GIN_DEFAULT("1", "1e99"),
9941  GIN_DESC("Interpolation order (1=linear interpolation).",
9942  "Extrapolation allowed in interpolation of altitude.")));
9943 
9944  md_data_raw.push_back(create_mdrecord(
9945  NAME("MagRawRead"),
9946  DESCRIPTION(
9947  "Reads magnetic field data from a scenario.\n"
9948  "\n"
9949  "A full set of field components is read (NOTE: fails if scenario\n"
9950  "only contains selected field components). The files can be\n"
9951  "anywhere, but must all be in the same directory specified by\n"
9952  "'basename'. Naming convention for the field component files is\n"
9953  "basename.mag_u.xml for the u-component, v- and w-components\n"
9954  "accordingly.\n"),
9955  AUTHORS("Richard Larsson"),
9956  OUT("mag_u_field_raw", "mag_v_field_raw", "mag_w_field_raw"),
9957  GOUT(),
9958  GOUT_TYPE(),
9959  GOUT_DESC(),
9960  IN(),
9961  GIN("basename"),
9962  GIN_TYPE("String"),
9963  GIN_DEFAULT(NODEF),
9964  GIN_DESC("Name of scenario, probably including the full path. For "
9965  "example: \"/data/magnetic_field\"")));
9966 
9967  md_data_raw.push_back(create_mdrecord(
9968  NAME("MatrixAddScalar"),
9969  DESCRIPTION(
9970  "Adds a scalar to all elements of a matrix.\n"
9971  "\n"
9972  "The result can either be stored in the same or another matrix.\n"),
9973  AUTHORS("Patrick Eriksson"),
9974  OUT(),
9975  GOUT("out"),
9976  GOUT_TYPE("Matrix"),
9977  GOUT_DESC("Output matrix"),
9978  IN(),
9979  GIN("in", "value"),
9980  GIN_TYPE("Matrix", "Numeric"),
9982  GIN_DESC("Input matrix.", "The value to be added to the matrix.")));
9983 
9984  md_data_raw.push_back(create_mdrecord(
9985  NAME("MatrixCBR"),
9986  DESCRIPTION(
9987  "Sets a matrix to hold cosmic background radiation (CBR).\n"
9988  "\n"
9989  "The CBR is assumed to be un-polarized and Stokes components 2-4\n"
9990  "are zero. Number of Stokes components, that equals the number\n"
9991  "of columns in the created matrix, is determined by *stokes_dim*.\n"
9992  "The number of rows in the created matrix equals the length of the\n"
9993  "given frequency vector.\n"
9994  "\n"
9995  "The cosmic radiation is modelled as blackbody radiation for the\n"
9996  "temperature given by the global constant COSMIC_BG_TEMP, set in\n"
9997  "the file constants.cc. The frequencies are taken from the generic\n"
9998  "input vector.\n"
9999  "\n"
10000  "The standard definition, in ARTS, of the Planck function is\n"
10001  "followed and the unit of the returned data is W/(m3 * Hz * sr).\n"),
10002  AUTHORS("Patrick Eriksson"),
10003  OUT(),
10004  GOUT("out"),
10005  GOUT_TYPE("Matrix"),
10006  GOUT_DESC("Variable to initialize."),
10007  IN("stokes_dim"),
10008  GIN("f"),
10009  GIN_TYPE("Vector"),
10010  GIN_DEFAULT(NODEF),
10011  GIN_DESC("Frequency vector.")));
10012 
10013  md_data_raw.push_back(create_mdrecord(
10014  NAME("MatrixCopySparse"),
10015  DESCRIPTION("Creates a matrix by copying a variable of type Sparse.\n"),
10016  AUTHORS("Patrick Eriksson"),
10017  OUT(),
10018  GOUT("out"),
10019  GOUT_TYPE("Matrix"),
10020  GOUT_DESC("Created (full) matrix."),
10021  IN(),
10022  GIN("in"),
10023  GIN_TYPE("Sparse"),
10024  GIN_DEFAULT(NODEF),
10025  GIN_DESC("The sparse matrix to be copied.")));
10026 
10027  md_data_raw.push_back(create_mdrecord(
10028  NAME("MatrixExtractFromTensor3"),
10029  DESCRIPTION(
10030  "Extracts a Matrix from a Tensor3.\n"
10031  "\n"
10032  "Copies page or row or column with given Index from input Tensor3\n"
10033  "variable to output Matrix.\n"
10034  "Higher order equivalent of *VectorExtractFromMatrix*.\n"),
10035  AUTHORS("Jana Mendrok"),
10036  OUT(),
10037  GOUT("out"),
10038  GOUT_TYPE("Matrix"),
10039  GOUT_DESC("Extracted matrix."),
10040  IN(),
10041  GIN("in", "i", "direction"),
10042  GIN_TYPE("Tensor3", "Index", "String"),
10044  GIN_DESC("Input matrix.",
10045  "Index of page or row or column to extract.",
10046  "Direction. \"page\" or \"row\" or \"column\".")));
10047 
10048  md_data_raw.push_back(
10049  create_mdrecord(NAME("MatrixFromCovarianceMatrix"),
10050  DESCRIPTION("Turns a covariance matrix into a Matrix.\n"),
10051  AUTHORS("Richard Larsson"),
10052  OUT(),
10053  GOUT("out"),
10054  GOUT_TYPE("Matrix"),
10055  GOUT_DESC("Dense Matrix."),
10056  IN(),
10057  GIN("in"),
10058  GIN_TYPE("CovarianceMatrix"),
10059  GIN_DEFAULT(NODEF),
10060  GIN_DESC("Input covariance matrix.")));
10061 
10062  md_data_raw.push_back(create_mdrecord(
10063  NAME("MatrixIdentity"),
10064  DESCRIPTION(
10065  "Returns an identity matrix.\n"
10066  "\n"
10067  "The size if the matrix created is n x n. Default is to return a\n"
10068  "true identity matrix (I), but you can also select another value\n"
10069  "along the diagonal by setting *value*. That is, the output is\n"
10070  "value*I.\n"),
10071  AUTHORS("Patrick Eriksson"),
10072  OUT(),
10073  GOUT("out"),
10074  GOUT_TYPE("Matrix"),
10075  GOUT_DESC("Output matrix"),
10076  IN(),
10077  GIN("n", "value"),
10078  GIN_TYPE("Index", "Numeric"),
10079  GIN_DEFAULT(NODEF, "1"),
10080  GIN_DESC("Size of the matrix", "The value along the diagonal.")));
10081 
10082  md_data_raw.push_back(create_mdrecord(
10083  NAME("MatrixMatrixMultiply"),
10084  DESCRIPTION(
10085  "Multiply a Matrix with another Matrix and store the result in the result\n"
10086  "Matrix.\n"
10087  "\n"
10088  "This just computes the normal Matrix-Matrix product, Y=M*X. It is ok\n"
10089  "if Y and X are the same Matrix.\n"),
10090  AUTHORS("Stefan Buehler"),
10091  OUT(),
10092  GOUT("out"),
10093  GOUT_TYPE("Matrix"),
10094  GOUT_DESC("The result of the multiplication (dimension mxc)."),
10095  IN(),
10096  GIN("m", "x"),
10097  GIN_TYPE("Matrix", "Matrix"),
10099  GIN_DESC("The Matrix to multiply (dimension mxn).",
10100  "The original Matrix (dimension nxc).")));
10101 
10102  md_data_raw.push_back(create_mdrecord(
10103  NAME("MatrixPlanck"),
10104  DESCRIPTION(
10105  "Sets a matrix to hold blackbody radiation.\n"
10106  "\n"
10107  "The radiation is assumed to be un-polarized and Stokes components\n"
10108  "2-4 are zero. Number of Stokes components, that equals the number\n"
10109  "of columns in the created matrix, is determined by *stokes_dim*.\n"
10110  "The number of rows in the created matrix equals the length of the\n"
10111  "given frequency vector.\n"
10112  "\n"
10113  "The standard definition, in ARTS, of the Planck function is\n"
10114  "followed and the unit of the returned data is W/(m3 * Hz * sr).\n"),
10115  AUTHORS("Patrick Eriksson"),
10116  OUT(),
10117  GOUT("out"),
10118  GOUT_TYPE("Matrix"),
10119  GOUT_DESC("Variable to initialize."),
10120  IN("stokes_dim"),
10121  GIN("f", "t"),
10122  GIN_TYPE("Vector", "Numeric"),
10124  GIN_DESC("Frequency vector.", "Temperature [K].")));
10125 
10126  md_data_raw.push_back(create_mdrecord(
10127  NAME("MatrixScale"),
10128  DESCRIPTION("Scales all elements of a matrix with the specified value.\n"
10129  "\n"
10130  "The result can either be stored in the same or another\n"
10131  "variable.\n"),
10132  AUTHORS("Patrick Eriksson"),
10133  OUT(),
10134  GOUT("out"),
10135  GOUT_TYPE("Matrix"),
10136  GOUT_DESC("Output matrix"),
10137  IN(),
10138  GIN("in", "value"),
10139  GIN_TYPE("Matrix", "Numeric"),
10141  GIN_DESC("Input matrix.",
10142  "The value to be multiplied with the matrix.")));
10143 
10144  md_data_raw.push_back(create_mdrecord(
10145  NAME("MatrixSet"),
10146  DESCRIPTION("Initialize a Matrix from the given list of numbers.\n"
10147  "\n"
10148  "Usage:\n"
10149  " MatrixSet(m1, [1, 2, 3; 4, 5, 6])\n"),
10150  AUTHORS("Oliver Lemke"),
10151  OUT(),
10152  GOUT("out"),
10153  GOUT_TYPE("Matrix"),
10154  GOUT_DESC("The newly created matrix"),
10155  IN(),
10156  GIN("value"),
10157  GIN_TYPE("Matrix"),
10158  GIN_DEFAULT(NODEF),
10159  GIN_DESC("The values of the newly created matrix. Elements are separated "
10160  "by commas, rows by semicolons."),
10161  SETMETHOD(true)));
10162 
10163  md_data_raw.push_back(create_mdrecord(
10164  NAME("MatrixSetConstant"),
10165  DESCRIPTION(
10166  "Creates a matrix and sets all elements to the specified value.\n"
10167  "\n"
10168  "The size is determined by *ncols* and *nrows*.\n"),
10169  AUTHORS("Patrick Eriksson"),
10170  OUT(),
10171  GOUT("out"),
10172  GOUT_TYPE("Matrix"),
10173  GOUT_DESC("Variable to initialize."),
10174  IN("nrows", "ncols"),
10175  GIN("value"),
10176  GIN_TYPE("Numeric"),
10177  GIN_DEFAULT(NODEF),
10178  GIN_DESC("Matrix value.")));
10179 
10180  md_data_raw.push_back(create_mdrecord(
10181  NAME("MatrixUnitIntensity"),
10182  DESCRIPTION(
10183  "Sets a matrix to hold unpolarised radiation with unit intensity.\n"
10184  "\n"
10185  "Works as MatrixPlanck where the radiation is set to 1.\n"),
10186  AUTHORS("Patrick Eriksson"),
10187  OUT(),
10188  GOUT("out"),
10189  GOUT_TYPE("Matrix"),
10190  GOUT_DESC("Variable to initialize."),
10191  IN("stokes_dim"),
10192  GIN("f"),
10193  GIN_TYPE("Vector"),
10194  GIN_DEFAULT(NODEF),
10195  GIN_DESC("Frequency vector.")));
10196 
10197  md_data_raw.push_back(create_mdrecord(
10198  NAME("MatrixVectorMultiply"),
10199  DESCRIPTION(
10200  "Multiply a Matrix with a Vector\n"
10201  "\n"
10202  "Computes the normal Matrix-Vector product, out=m*v. It is ok if out and v\n"
10203  "are the same Vector.\n"),
10204  AUTHORS("Stefan Buehler and Patrick Eriksson"),
10205  OUT(),
10206  GOUT("out"),
10207  GOUT_TYPE("Vector"),
10208  GOUT_DESC("The result of the multiplication (length m)."),
10209  IN(),
10210  GIN("m", "v"),
10211  GIN_TYPE("Matrix", "Vector"),
10213  GIN_DESC("The Matrix to multiply (dimension mxn).",
10214  "The original Vector (length n).")));
10215 
10216  md_data_raw.push_back(create_mdrecord(
10217  NAME("Matrix1ColFromVector"),
10218  DESCRIPTION("Forms a matrix containing one column from a vector.\n"),
10219  AUTHORS("Mattias Ekstrom"),
10220  OUT(),
10221  GOUT("out"),
10222  GOUT_TYPE("Matrix"),
10223  GOUT_DESC("Variable to initialize."),
10224  IN(),
10225  GIN("v"),
10226  GIN_TYPE("Vector"),
10227  GIN_DEFAULT(NODEF),
10228  GIN_DESC("The vector to be copied.")));
10229 
10230  md_data_raw.push_back(create_mdrecord(
10231  NAME("Matrix2ColFromVectors"),
10232  DESCRIPTION(
10233  "Forms a matrix containing two columns from two vectors.\n"
10234  "\n"
10235  "The vectors are included as columns in the matrix in the same order\n"
10236  "as they are given.\n"),
10237  AUTHORS("Mattias Ekstrom"),
10238  OUT(),
10239  GOUT("out"),
10240  GOUT_TYPE("Matrix"),
10241  GOUT_DESC("Variable to initialize."),
10242  IN(),
10243  GIN("v1", "v2"),
10244  GIN_TYPE("Vector", "Vector"),
10246  GIN_DESC("The vector to be copied into the first column.",
10247  "The vector to be copied into the second column.")));
10248 
10249  md_data_raw.push_back(create_mdrecord(
10250  NAME("Matrix3ColFromVectors"),
10251  DESCRIPTION(
10252  "Forms a matrix containing three columns from three vectors.\n"
10253  "\n"
10254  "The vectors are included as columns in the matrix in the same order\n"
10255  "as they are given.\n"),
10256  AUTHORS("Mattias Ekstrom"),
10257  OUT(),
10258  GOUT("out"),
10259  GOUT_TYPE("Matrix"),
10260  GOUT_DESC("Variable to initialize."),
10261  IN(),
10262  GIN("v1", "v2", "v3"),
10263  GIN_TYPE("Vector", "Vector", "Vector"),
10265  GIN_DESC("The vector to be copied into the first column.",
10266  "The vector to be copied into the second column.",
10267  "The vector to be copied into the third column.")));
10268 
10269  md_data_raw.push_back(create_mdrecord(
10270  NAME("Matrix1RowFromVector"),
10271  DESCRIPTION("Forms a matrix containing one row from a vector.\n"),
10272  AUTHORS("Mattias Ekstrom"),
10273  OUT(),
10274  GOUT("out"),
10275  GOUT_TYPE("Matrix"),
10276  GOUT_DESC("Variable to initialize."),
10277  IN(),
10278  GIN("v"),
10279  GIN_TYPE("Vector"),
10280  GIN_DEFAULT(NODEF),
10281  GIN_DESC("The vector to be copied.")));
10282 
10283  md_data_raw.push_back(create_mdrecord(
10284  NAME("Matrix2RowFromVectors"),
10285  DESCRIPTION(
10286  "Forms a matrix containing two rows from two vectors.\n"
10287  "\n"
10288  "The vectors are included as rows in the matrix in the same order\n"
10289  "as they are given.\n"),
10290  AUTHORS("Mattias Ekstrom"),
10291  OUT(),
10292  GOUT("out"),
10293  GOUT_TYPE("Matrix"),
10294  GOUT_DESC("Variable to initialize."),
10295  IN(),
10296  GIN("v1", "v2"),
10297  GIN_TYPE("Vector", "Vector"),
10299  GIN_DESC("The vector to be copied into the first row.",
10300  "The vector to be copied into the second row.")));
10301 
10302  md_data_raw.push_back(create_mdrecord(
10303  NAME("Matrix3RowFromVectors"),
10304  DESCRIPTION(
10305  "Forms a matrix containing three rows from three vectors.\n"
10306  "\n"
10307  "The vectors are included as rows in the matrix in the same order\n"
10308  "as they are given.\n"),
10309  AUTHORS("Mattias Ekstrom"),
10310  OUT(),
10311  GOUT("out"),
10312  GOUT_TYPE("Matrix"),
10313  GOUT_DESC("Variable to initialize."),
10314  IN(),
10315  GIN("v1", "v2", "v3"),
10316  GIN_TYPE("Vector", "Vector", "Vector"),
10318  GIN_DESC("The vector to be copied into the first row.",
10319  "The vector to be copied into the second row.",
10320  "The vector to be copied into the third row.")));
10321 
10322  md_data_raw.push_back(create_mdrecord(
10323  NAME("mblock_dlos_gridUniformCircular"),
10324  DESCRIPTION(
10325  "Gives *mblock_dlos_grid* roughly circular coverage, with uniform spacing.\n"
10326  "\n"
10327  "The method considers points on a regular grid with a spacing set by\n"
10328  "GIN *spacing*. All points inside a radius from (0,0) are included in\n"
10329  "*mblock_dlos_grid*. The positions in *mblock_dlos_grid* thus covers\n"
10330  "a roughly circular domain, and cover the same solid beam angle.\n"
10331  "The radius is adjusted according to *spacing' and *centre*, but is\n"
10332  "ensured to be >= *width*.\n"
10333  "\n"
10334  "Note that the method assumes that width is small and the solid beam\n"
10335  "angle does not change with distance from (0.0).\n"
10336  "\n"
10337  "Defualt is to consider grid positions of ..., -spacing/2, spacing/2, ...\n"
10338  "If you want to have (0,0) as a point in *mblock_dlos_grid*, change\n"
10339  "*centre* from its default value.\n"),
10340  AUTHORS("Patrick Eriksson"),
10341  OUT("mblock_dlos_grid"),
10342  GOUT(),
10343  GOUT_TYPE(),
10344  GOUT_DESC(),
10345  IN(),
10346  GIN("spacing", "width", "centre"),
10347  GIN_TYPE("Numeric", "Numeric", "Index"),
10348  GIN_DEFAULT(NODEF, NODEF, "0"),
10349  GIN_DESC("The angular spacing between points.",
10350  "The minimum distance from (0,0) to cover.",
10351  "Set to 1 to place a point at (0,0).")));
10352 
10353  md_data_raw.push_back(create_mdrecord(
10354  NAME("mblock_dlos_gridUniformRectangular"),
10355  DESCRIPTION(
10356  "Gives *mblock_dlos_grid* rectangular coverage, with uniform spacing.\n"
10357  "\n"
10358  "The method creates an equidistant rectangular grid. The width in zenith\n"
10359  "and azimuth can differ. Note that selected widths are half-widths (i.e.\n"
10360  "distance from (0,0), and refers to the mimumum value allowed. The actual\n"
10361  "width depends on values selected for *spacing* and *centre*.\n"
10362  "\n"
10363  "Defualt is to consider grid positions of ..., -spacing/2, spacing/2, ...\n"
10364  "If you want to have (0,0) as a point in *mblock_dlos_grid*, change\n"
10365  "*centre* from its default value.\n"),
10366  AUTHORS("Patrick Eriksson"),
10367  OUT("mblock_dlos_grid"),
10368  GOUT(),
10369  GOUT_TYPE(),
10370  GOUT_DESC(),
10371  IN(),
10372  GIN("spacing", "za_width", "aa_width", "centre"),
10373  GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
10374  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
10375  GIN_DESC("The angular spacing between points.",
10376  "Min value of half-width in zenith angle direction.",
10377  "Min value of half-width in azimuth angle direction.",
10378  "Set to 1 to place a point at (0,0).")));
10379 
10380  md_data_raw.push_back(create_mdrecord(
10381  NAME("mc_antennaSetGaussian"),
10382  DESCRIPTION(
10383  "Makes mc_antenna (used by MCGeneral) a 2D Gaussian pattern.\n"
10384  "\n"
10385  "The gaussian antenna pattern is determined by *za_sigma* and\n"
10386  "*aa_sigma*, which represent the standard deviations in the\n"
10387  "uncorrelated bivariate normal distribution.\n"),
10388  AUTHORS("Cory Davis"),
10389  OUT("mc_antenna"),
10390  GOUT(),
10391  GOUT_TYPE(),
10392  GOUT_DESC(),
10393  IN(),
10394  GIN("za_sigma", "aa_sigma"),
10395  GIN_TYPE("Numeric", "Numeric"),
10397  GIN_DESC("Width in the zenith angle dimension as described above.",
10398  "Width in the azimuth angle dimension as described above.")));
10399 
10400  md_data_raw.push_back(create_mdrecord(
10401  NAME("mc_antennaSetGaussianByFWHM"),
10402  DESCRIPTION(
10403  "Makes mc_antenna (used by MCGeneral) a 2D Gaussian pattern.\n"
10404  "\n"
10405  "The gaussian antenna pattern is determined by *za_fwhm* and\n"
10406  "*aa_fwhm*, which represent the full width half maximum (FWHM)\n"
10407  "of the antenna response, in the zenith and azimuthal planes.\n"),
10408  AUTHORS("Cory Davis"),
10409  OUT("mc_antenna"),
10410  GOUT(),
10411  GOUT_TYPE(),
10412  GOUT_DESC(),
10413  IN(),
10414  GIN("za_fwhm", "aa_fwhm"),
10415  GIN_TYPE("Numeric", "Numeric"),
10417  GIN_DESC("Width in the zenith angle dimension as described above.",
10418  "Width in the azimuth angle dimension as described above.")));
10419 
10420  md_data_raw.push_back(create_mdrecord(
10421  NAME("mc_antennaSetPencilBeam"),
10422  DESCRIPTION(
10423  "Makes mc_antenna (used by MCGeneral) a pencil beam.\n"
10424  "\n"
10425  "This WSM makes the subsequent MCGeneral WSM perform pencil beam\n"
10426  "RT calculations.\n"),
10427  AUTHORS("Cory Davis"),
10428  OUT("mc_antenna"),
10429  GOUT(),
10430  GOUT_TYPE(),
10431  GOUT_DESC(),
10432  IN(),
10433  GIN(),
10434  GIN_TYPE(),
10435  GIN_DEFAULT(),
10436  GIN_DESC()));
10437 
10438  md_data_raw.push_back(create_mdrecord(
10439  NAME("MCGeneral"),
10440  DESCRIPTION(
10441  "A generalised 3D reversed Monte Carlo radiative algorithm, that\n"
10442  "allows for 2D antenna patterns, surface reflection and arbitrary\n"
10443  "sensor positions.\n"
10444  "\n"
10445  "The main output variables *y* and *mc_error* represent the\n"
10446  "Stokes vector integrated over the antenna function, and the\n"
10447  "estimated error in this vector, respectively.\n"
10448  "\n"
10449  "The WSV *mc_max_iter* describes the maximum number of `photons\'\n"
10450  "used in the simulation (more photons means smaller *mc_error*).\n"
10451  "*mc_std_err* is the desired value of mc_error. *mc_max_time* is\n"
10452  "the maximum allowed number of seconds for MCGeneral. The method\n"
10453  "will terminate once any of the max_iter, std_err, max_time\n"
10454  "criteria are met. If negative values are given for these\n"
10455  "parameters then it is ignored.\n"
10456  "\n"
10457  "The WSV *mc_min_iter* sets the minimum number of photons to apply\n"
10458  "before the condition set by *mc_std_err* is considered. Values\n"
10459  "of *mc_min_iter* below 100 are not accepted.\n"
10460  "\n"
10461  "Only \"1\" and \"RJBT\" are allowed for *iy_unit*. The value of\n"
10462  "*mc_error* follows the selection for *iy_unit* (both for in- and\n"
10463  "output.\n"),
10464  AUTHORS("Cory Davis"),
10465  OUT("y",
10466  "mc_iteration_count",
10467  "mc_error",
10468  "mc_points",
10469  "mc_source_domain",
10470  "mc_scat_order"),
10471  GOUT(),
10472  GOUT_TYPE(),
10473  GOUT_DESC(),
10474  IN("mc_antenna",
10475  "f_grid",
10476  "f_index",
10477  "sensor_pos",
10478  "sensor_los",
10479  "stokes_dim",
10480  "atmosphere_dim",
10481  "ppath_step_agenda",
10482  "ppath_lmax",
10483  "ppath_lraytrace",
10484  "iy_space_agenda",
10485  "surface_rtprop_agenda",
10486  "propmat_clearsky_agenda",
10487  "p_grid",
10488  "lat_grid",
10489  "lon_grid",
10490  "z_field",
10491  "refellipsoid",
10492  "z_surface",
10493  "t_field",
10494  "vmr_field",
10495  "cloudbox_on",
10496  "cloudbox_limits",
10497  "pnd_field",
10498  "scat_data",
10499  "atmfields_checked",
10500  "atmgeom_checked",
10501  "scat_data_checked",
10502  "cloudbox_checked",
10503  "iy_unit",
10504  "mc_seed",
10505  "mc_std_err",
10506  "mc_max_time",
10507  "mc_max_iter",
10508  "mc_min_iter",
10509  "mc_taustep_limit"),
10510  GIN("l_mc_scat_order", "t_interp_order"),
10511  GIN_TYPE("Index", "Index"),
10512  GIN_DEFAULT("11", "1"),
10513  GIN_DESC("The length to be given to *mc_scat_order*. Note that"
10514  " scattering orders equal and above this value will not"
10515  " be counted.",
10516  "Interpolation order of temperature for scattering data (so"
10517  " far only applied in phase matrix, not in extinction and"
10518  " absorption.")));
10519 
10520  md_data_raw.push_back(create_mdrecord(
10521  NAME("MCRadar"),
10522  DESCRIPTION(
10523  "A radar 3D foward Monte Carlo radiative algorithm, that allows \n"
10524  "for 2D antenna patterns and arbitrary sensor positions.\n"
10525  "Surface reflections are currently ignored.\n"
10526  "\n"
10527  "The main output variable *y* and *mc_error* represent the\n"
10528  "radar reflectivity integrated over the antenna function, and the\n"
10529  "estimated error in this vector, respectively.\n"
10530  "\n"
10531  "Unlike with yActive, the range bins gives the boundaries of \n"
10532  "the range bins as either round-trip time or distance from radar.\n"
10533  "\n"
10534  "The WSV *mc_y_tx* gives the polarization state of the \n"
10535  "transmitter.\n"
10536  "\n"
10537  "The WSV *mc_max_scatorder* prescribes the maximum scattering \n"
10538  "order to consider, after which `photon\'-tracing will be\n"
10539  "terminated. A value of one calculates only single scattering.\n"
10540  "\n"
10541  "The WSV *mc_max_iter* describes the maximum number of `photons\'\n"
10542  "used in the simulation (more photons means smaller *mc_error*).\n"
10543  "The method will terminate once the max_iter criterium is met.\n"
10544  "If negative values are given for these parameters then it is\n"
10545  "ignored.\n"
10546  "\n"
10547  "Only \"1\" and \"Ze\" are allowed for *iy_unit*. The value of\n"
10548  "*mc_error* follows the selection for *iy_unit* (both for in- and\n"
10549  "output.\n"),
10550  AUTHORS("Ian S. Adams"),
10551  OUT("y", "mc_error"),
10552  GOUT(),
10553  GOUT_TYPE(),
10554  GOUT_DESC(),
10555  IN("mc_antenna",
10556  "f_grid",
10557  "f_index",
10558  "sensor_pos",
10559  "sensor_los",
10560  "stokes_dim",
10561  "atmosphere_dim",
10562  "ppath_lmax",
10563  "ppath_step_agenda",
10564  "ppath_lraytrace",
10565  "propmat_clearsky_agenda",
10566  "p_grid",
10567  "lat_grid",
10568  "lon_grid",
10569  "z_field",
10570  "refellipsoid",
10571  "z_surface",
10572  "t_field",
10573  "vmr_field",
10574  "cloudbox_on",
10575  "cloudbox_limits",
10576  "pnd_field",
10577  "scat_data",
10578  "mc_y_tx",
10579  "range_bins",
10580  "atmfields_checked",
10581  "atmgeom_checked",
10582  "scat_data_checked",
10583  "cloudbox_checked",
10584  "iy_unit",
10585  "mc_max_scatorder",
10586  "mc_seed",
10587  "mc_max_iter"),
10588  GIN("ze_tref", "k2", "t_interp_order"),
10589  GIN_TYPE("Numeric", "Numeric", "Index"),
10590  GIN_DEFAULT("273.15", "-1", "1"),
10591  GIN_DESC("Reference temperature for conversion to Ze.",
10592  "Reference dielectric factor.",
10593  "Interpolation order of temperature for scattering data (so"
10594  " far only applied in phase matrix, not in extinction and"
10595  " absorption.")));
10596 
10597  md_data_raw.push_back(
10598  create_mdrecord(NAME("MCSetSeedFromTime"),
10599  DESCRIPTION("Sets the value of mc_seed from system time\n"),
10600  AUTHORS("Cory Davis"),
10601  OUT("mc_seed"),
10602  GOUT(),
10603  GOUT_TYPE(),
10604  GOUT_DESC(),
10605  IN(),
10606  GIN(),
10607  GIN_TYPE(),
10608  GIN_DEFAULT(),
10609  GIN_DESC()));
10610 
10611  md_data_raw.push_back(create_mdrecord(
10612  NAME("nlte_fieldRescalePopulationLevels"),
10613  DESCRIPTION(
10614  "Rescale NLTE field to expected total distribution amongst levels\n"),
10615  AUTHORS("Richard Larsson"),
10616  OUT("nlte_field"),
10617  GOUT(),
10618  GOUT_TYPE(),
10619  GOUT_DESC(),
10620  IN("nlte_field"),
10621  GIN("s"),
10622  GIN_TYPE("Numeric"),
10623  GIN_DEFAULT(NODEF),
10624  GIN_DESC("Scaling (e.g., 0.75 for only orth-water on Earth)")));
10625 
10626  md_data_raw.push_back(create_mdrecord(
10627  NAME("nlte_fieldForSingleSpeciesNonOverlappingLines"),
10628  DESCRIPTION(
10629  "NLTE field for a simple setup.\n"
10630  "\n"
10631  "This will solve for *nlte_field* in the input atmosphere.\n"
10632  "The solver depends on the lines not overlapping and that there\n"
10633  "is only a single species in the atmosphere.\n"),
10634  AUTHORS("Richard Larsson"),
10635  OUT("nlte_field"),
10636  GOUT(),
10637  GOUT_TYPE(),
10638  GOUT_DESC(),
10639  IN("nlte_field",
10640  "abs_species",
10641  "abs_lines_per_species",
10642  "collision_coefficients",
10643  "collision_line_identifiers",
10644  "isotopologue_ratios",
10645  "iy_main_agenda",
10646  "ppath_agenda",
10647  "iy_space_agenda",
10648  "iy_surface_agenda",
10649  "iy_cloudbox_agenda",
10650  "propmat_clearsky_agenda",
10651  "water_p_eq_agenda",
10652  "vmr_field",
10653  "t_field",
10654  "z_field",
10655  "p_grid",
10656  "atmosphere_dim",
10657  "refellipsoid",
10658  "surface_props_data",
10659  "nlte_do"),
10660  GIN("df", "convergence_limit", "nz", "nf", "dampened", "iteration_limit"),
10661  GIN_TYPE("Numeric", "Numeric", "Index", "Index", "Index", "Index"),
10662  GIN_DEFAULT(NODEF, "1e-6", NODEF, NODEF, NODEF, "20"),
10663  GIN_DESC("relative frequency to line center",
10664  "max relative change in ratio of level to stop iterations",
10665  "number of zenith angles",
10666  "number of frequency grid-points per line",
10667  "use transmission dampening or not",
10668  "max number of iterations before defaul break of iterations")));
10669 
10670  md_data_raw.push_back(create_mdrecord(
10671  NAME("collision_coefficientsFromSplitFiles"),
10672  DESCRIPTION(
10673  "Reads *collision_coefficients* and *collision_line_identifiers* from location on filesystem\n"
10674  "with many species. The species in this location must match *abs_species*. The location\n"
10675  "must also contain an ArrayOfQuantumIdentifier file ending with qid.xml\n"),
10676  AUTHORS("Richard Larsson"),
10677  OUT("collision_coefficients", "collision_line_identifiers"),
10678  GOUT(),
10679  GOUT_TYPE(),
10680  GOUT_DESC(),
10681  IN("abs_species"),
10682  GIN("basename"),
10683  GIN_TYPE("String"),
10684  GIN_DEFAULT("./"),
10685  GIN_DESC("path to files to read")));
10686 
10687  md_data_raw.push_back(create_mdrecord(
10688  NAME("NumericAdd"),
10689  DESCRIPTION(
10690  "Adds a numeric and a value (out = in+value).\n"
10691  "\n"
10692  "The result can either be stored in the same or another numeric.\n"
10693  "(in and out can be the same varible, but not out and value)\n"),
10694  AUTHORS("Patrick Eriksson"),
10695  OUT(),
10696  GOUT("out"),
10697  GOUT_TYPE("Numeric"),
10698  GOUT_DESC("Output numeric."),
10699  IN(),
10700  GIN("in", "value"),
10701  GIN_TYPE("Numeric", "Numeric"),
10703  GIN_DESC("Input numeric.", "Value to add.")));
10704 
10705  md_data_raw.push_back(create_mdrecord(
10706  NAME("NumericFromVector"),
10707  DESCRIPTION(
10708  "Derivs a numeric from a vector, following selected operation.\n"
10709  "\n"
10710  "The following operations can be selected:\n"
10711  " first : Selects the first element of the vector.\n"
10712  " last : Selects the last element of the vector.\n"
10713  " max : Selects the maximum element of the vector.\n"
10714  " min : Selects the minimum element of the vector.\n"
10715  " mean : Calculates the mean of the vector.\n"),
10716  AUTHORS("Patrick Eriksson"),
10717  OUT(),
10718  GOUT("out"),
10719  GOUT_TYPE("Numeric"),
10720  GOUT_DESC("Output numeric."),
10721  IN(),
10722  GIN("in", "op"),
10723  GIN_TYPE("Vector", "String"),
10725  GIN_DESC("Input vector.", "Selected operation.")));
10726 
10727  md_data_raw.push_back(create_mdrecord(
10728  NAME("NumericInvScale"),
10729  DESCRIPTION(
10730  "Inversely scales/divides a numeric with a value (out = in/value).\n"
10731  "\n"
10732  "The result can either be stored in the same or another numeric.\n"
10733  "(in and out can be the same varible, but not out and value)\n"),
10734  AUTHORS("Jana Mendrok"),
10735  OUT(),
10736  GOUT("out"),
10737  GOUT_TYPE("Numeric"),
10738  GOUT_DESC("Output numeric."),
10739  IN(),
10740  GIN("in", "value"),
10741  GIN_TYPE("Numeric", "Numeric"),
10743  GIN_DESC("Input numeric.", "Scaling value.")));
10744 
10745  md_data_raw.push_back(create_mdrecord(
10746  NAME("NumericScale"),
10747  DESCRIPTION(
10748  "Scales/multiplies a numeric with a value (out = in*value).\n"
10749  "\n"
10750  "The result can either be stored in the same or another numeric.\n"
10751  "(in and out can be the same varible, but not out and value)\n"),
10752  AUTHORS("Patrick Eriksson"),
10753  OUT(),
10754  GOUT("out"),
10755  GOUT_TYPE("Numeric"),
10756  GOUT_DESC("Output numeric."),
10757  IN(),
10758  GIN("in", "value"),
10759  GIN_TYPE("Numeric", "Numeric"),
10761  GIN_DESC("Input numeric.", "Scaling value.")));
10762 
10763  md_data_raw.push_back(create_mdrecord(
10764  NAME("NumericSet"),
10765  DESCRIPTION("Sets a numeric workspace variable to the given value.\n"),
10766  AUTHORS("Patrick Eriksson"),
10767  OUT(),
10768  GOUT("out"),
10769  GOUT_TYPE("Numeric"),
10770  GOUT_DESC("Variable to initialize."),
10771  IN(),
10772  GIN("value"),
10773  GIN_TYPE("Numeric"),
10774  GIN_DEFAULT(NODEF),
10775  GIN_DESC("The value."),
10776  SETMETHOD(true)));
10777 
10778  md_data_raw.push_back(create_mdrecord(
10779  NAME("QuantumIdentifierSet"),
10780  DESCRIPTION(
10781  "Sets a QuantumIdentifier workspace variable to the given value\n"
10782  "by converting the input String\n"),
10783  AUTHORS("Richard Larsson"),
10784  OUT(),
10785  GOUT("out"),
10786  GOUT_TYPE("QuantumIdentifier"),
10787  GOUT_DESC("Variable to initialize."),
10788  IN(),
10789  GIN("string_initializer"),
10790  GIN_TYPE("String"),
10791  GIN_DEFAULT(NODEF),
10792  GIN_DESC("The string representing the value."),
10793  SETMETHOD(false)));
10794 
10795  md_data_raw.push_back(create_mdrecord(
10796  NAME("ArrayOfQuantumIdentifierSet"),
10797  DESCRIPTION(
10798  "Sets an ArrayOfQuantumIdentifier workspace variable to the given value\n"
10799  "by converting the input ArrayOfString\n"),
10800  AUTHORS("Richard Larsson"),
10801  OUT(),
10802  GOUT("out"),
10803  GOUT_TYPE("ArrayOfQuantumIdentifier"),
10804  GOUT_DESC("Variables to initialize."),
10805  IN(),
10806  GIN("string_initializers"),
10807  GIN_TYPE("ArrayOfString"),
10808  GIN_DEFAULT(NODEF),
10809  GIN_DESC("The array of string representing the values of the array."),
10810  SETMETHOD(false)));
10811 
10812  md_data_raw.push_back(create_mdrecord(
10813  NAME("nelemGet"),
10814  DESCRIPTION(
10815  "Retrieve nelem from given variable and store the value in the\n"
10816  "variable *nelem*.\n"),
10817  AUTHORS("Oliver Lemke"),
10818  OUT("nelem"),
10819  GOUT(),
10820  GOUT_TYPE(),
10821  GOUT_DESC(),
10822  IN(),
10823  GIN("v"),
10824  GIN_TYPE(ARRAY_GROUPS + ", Vector"),
10825  GIN_DEFAULT(NODEF),
10826  GIN_DESC("Variable to get the number of elements from."),
10827  SETMETHOD(false),
10828  AGENDAMETHOD(false),
10829  USES_TEMPLATES(true)));
10830 
10831  md_data_raw.push_back(create_mdrecord(
10832  NAME("ncolsGet"),
10833  DESCRIPTION(
10834  "Retrieve ncols from given variable and store the value in the\n"
10835  "workspace variable *ncols*\n"),
10836  AUTHORS("Oliver Lemke"),
10837  OUT("ncols"),
10838  GOUT(),
10839  GOUT_TYPE(),
10840  GOUT_DESC(),
10841  IN(),
10842  GIN("v"),
10843  GIN_TYPE("Matrix, Sparse, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7"),
10844  GIN_DEFAULT(NODEF),
10845  GIN_DESC("Variable to get the number of columns from."),
10846  SETMETHOD(false),
10847  AGENDAMETHOD(false),
10848  USES_TEMPLATES(true)));
10849 
10850  md_data_raw.push_back(create_mdrecord(
10851  NAME("nrowsGet"),
10852  DESCRIPTION(
10853  "Retrieve nrows from given variable and store the value in the\n"
10854  "workspace variable *nrows*\n"),
10855  AUTHORS("Oliver Lemke"),
10856  OUT("nrows"),
10857  GOUT(),
10858  GOUT_TYPE(),
10859  GOUT_DESC(),
10860  IN(),
10861  GIN("v"),
10862  GIN_TYPE("Matrix, Sparse, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7"),
10863  GIN_DEFAULT(NODEF),
10864  GIN_DESC("Variable to get the number of rows from."),
10865  SETMETHOD(false),
10866  AGENDAMETHOD(false),
10867  USES_TEMPLATES(true)));
10868 
10869  md_data_raw.push_back(create_mdrecord(
10870  NAME("npagesGet"),
10871  DESCRIPTION(
10872  "Retrieve npages from given variable and store the value in the\n"
10873  "workspace variable *npages*\n"),
10874  AUTHORS("Oliver Lemke"),
10875  OUT("npages"),
10876  GOUT(),
10877  GOUT_TYPE(),
10878  GOUT_DESC(),
10879  IN(),
10880  GIN("v"),
10881  GIN_TYPE("Tensor3, Tensor4, Tensor5, Tensor6, Tensor7"),
10882  GIN_DEFAULT(NODEF),
10883  GIN_DESC("Variable to get the number of pages from."),
10884  SETMETHOD(false),
10885  AGENDAMETHOD(false),
10886  USES_TEMPLATES(true)));
10887 
10888  md_data_raw.push_back(create_mdrecord(
10889  NAME("nbooksGet"),
10890  DESCRIPTION(
10891  "Retrieve nbooks from given variable and store the value in the\n"
10892  "workspace variable *nbooks*\n"),
10893  AUTHORS("Oliver Lemke"),
10894  OUT("nbooks"),
10895  GOUT(),
10896  GOUT_TYPE(),
10897  GOUT_DESC(),
10898  IN(),
10899  GIN("v"),
10900  GIN_TYPE("Tensor4, Tensor5, Tensor6, Tensor7"),
10901  GIN_DEFAULT(NODEF),
10902  GIN_DESC("Variable to get the number of books from."),
10903  SETMETHOD(false),
10904  AGENDAMETHOD(false),
10905  USES_TEMPLATES(true)));
10906 
10907  md_data_raw.push_back(create_mdrecord(
10908  NAME("nshelvesGet"),
10909  DESCRIPTION(
10910  "Retrieve nshelves from given variable and store the value in the\n"
10911  "workspace variable *nshelves*\n"),
10912  AUTHORS("Oliver Lemke"),
10913  OUT("nshelves"),
10914  GOUT(),
10915  GOUT_TYPE(),
10916  GOUT_DESC(),
10917  IN(),
10918  GIN("v"),
10919  GIN_TYPE("Tensor5, Tensor6, Tensor7"),
10920  GIN_DEFAULT(NODEF),
10921  GIN_DESC("Variable to get the number of shelves from."),
10922  SETMETHOD(false),
10923  AGENDAMETHOD(false),
10924  USES_TEMPLATES(true)));
10925 
10926  md_data_raw.push_back(create_mdrecord(
10927  NAME("nvitrinesGet"),
10928  DESCRIPTION(
10929  "Retrieve nvitrines from given variable and store the value in the\n"
10930  "workspace variable *nvitrines*\n"),
10931  AUTHORS("Oliver Lemke"),
10932  OUT("nvitrines"),
10933  GOUT(),
10934  GOUT_TYPE(),
10935  GOUT_DESC(),
10936  IN(),
10937  GIN("v"),
10938  GIN_TYPE("Tensor6, Tensor7"),
10939  GIN_DEFAULT(NODEF),
10940  GIN_DESC("Variable to get the number of vitrines from."),
10941  SETMETHOD(false),
10942  AGENDAMETHOD(false),
10943  USES_TEMPLATES(true)));
10944 
10945  md_data_raw.push_back(create_mdrecord(
10946  NAME("nlibrariesGet"),
10947  DESCRIPTION(
10948  "Retrieve nlibraries from given variable and store the value in the\n"
10949  "workspace variable *nlibraries*\n"),
10950  AUTHORS("Oliver Lemke"),
10951  OUT("nlibraries"),
10952  GOUT(),
10953  GOUT_TYPE(),
10954  GOUT_DESC(),
10955  IN(),
10956  GIN("v"),
10957  GIN_TYPE("Tensor7"),
10958  GIN_DEFAULT(NODEF),
10959  GIN_DESC("Variable to get the number of libraries from."),
10960  SETMETHOD(false),
10961  AGENDAMETHOD(false),
10962  USES_TEMPLATES(true)));
10963 
10964  md_data_raw.push_back(create_mdrecord(
10965  NAME("nlte_sourceFromTemperatureAndSrcCoefPerSpecies"),
10966  DESCRIPTION(
10967  "Turn NLTE absorption per species into the source function by multiplying\n"
10968  "NLTE absorption per species with the LTE Planck source function.\n"),
10969  AUTHORS("Richard Larsson"),
10970  OUT("nlte_source", "dnlte_dx_source", "nlte_dsource_dx"),
10971  GOUT(),
10972  GOUT_TYPE(),
10973  GOUT_DESC(),
10974  IN("src_coef_per_species",
10975  "dsrc_coef_dx",
10976  "jacobian_quantities",
10977  "f_grid",
10978  "rtp_temperature"),
10979  GIN(),
10980  GIN_TYPE(),
10981  GIN_DEFAULT(),
10982  GIN_DESC()));
10983 
10984  md_data_raw.push_back(
10985  create_mdrecord(NAME("nlteOff"),
10986  DESCRIPTION("Disable Non-LTE calculations.\n"
10987  "\n"
10988  "The variables are set as follows:\n"
10989  " nlte_field : Empty.\n"
10990  " nlte_level_identifiers : Empty.\n"),
10991  AUTHORS("Oliver Lemke"),
10992  OUT("nlte_do", "nlte_field", "nlte_level_identifiers"),
10993  GOUT(),
10994  GOUT_TYPE(),
10995  GOUT_DESC(),
10996  IN(),
10997  GIN(),
10998  GIN_TYPE(),
10999  GIN_DEFAULT(),
11000  GIN_DESC()));
11001 
11002  md_data_raw.push_back(create_mdrecord(
11003  NAME("nlteSetByQuantumIdentifiers"),
11004  DESCRIPTION(
11005  "Turns on NTLE calculations.\n"
11006  "\n"
11007  "Takes the quantum identifers for NLTE temperatures and matches it to\n"
11008  "lines in *abs_lines_per_species*. *abs_species* must be set and is used\n"
11009  "to speed up calculations. After the function is done, all affected\n"
11010  "lines in *abs_lines_per_species* will have an internal tag to the relevant\n"
11011  "quantum identifier, which is a requirement for deeper code.\n"
11012  "\n"
11013  "If vibrational_energies is input it must match *nlte_level_identifiers*\n"
11014  "in length. The vibrational energies of the affected lines will then be\n"
11015  "set by the function. Otherwise, it is assumed the vibrational energies\n"
11016  "are set by another method. If they are not set, calculations will complain\n"
11017  "later on while running deeper code.\n"
11018  "\n"
11019  "For now only vibrational energy states are assumed to be able to be in\n"
11020  "non-LTE conditions. The *QuantumIdentifier* for an energy state in ARTS\n"
11021  "can look like:\n"
11022  "\t\"CO2-626 EN v1 0/1 v2 1/1 l2 1/1 v3 0/1 r 1/1\"\n"
11023  "and the matching will match ALL lines with the above. Note then that if, e.g.,\n"
11024  "the \"v1 0/1\" term was removed from the above, then ARTS will assume that\n"
11025  "\"v1\" is not part of the level of energy state of interest, so lines\n"
11026  "of different \"v1\" will be matched as the same state. If a line is matched\n"
11027  "to more than one energy state, errors should be thrown, but be careful.\n"
11028  "\n"
11029  "Set type of population to change computations and expected input as:\n"
11030  "\tLTE: Compute population by ratios found from LTE temperatures\n"
11031  "\tTV: Compute population by ratios found from NLTE vibrational temperatures\n"
11032  "\tND: Compute population by ratios found from NLTE number densities\n"),
11033  AUTHORS("Richard Larsson"),
11034  OUT("nlte_do", "abs_lines_per_species"),
11035  GOUT(),
11036  GOUT_TYPE(),
11037  GOUT_DESC(),
11038  IN("abs_lines_per_species", "nlte_field"),
11039  GIN(),
11040  GIN_TYPE(),
11041  GIN_DEFAULT(),
11042  GIN_DESC()));
11043 
11044  md_data_raw.push_back(create_mdrecord(
11045  NAME("nlte_fieldFromRaw"),
11046  DESCRIPTION("Sets NLTE values manually\n"
11047  "\n"
11048  "Touch\n"),
11049  AUTHORS("Richard Larsson"),
11050  OUT("nlte_field"),
11051  GOUT(),
11052  GOUT_TYPE(),
11053  GOUT_DESC(),
11054  IN("nlte_level_identifiers",
11055  "nlte_vibrational_energies"),
11056  GIN("data"),
11057  GIN_TYPE("Tensor4"),
11058  GIN_DEFAULT(NODEF),
11059  GIN_DESC("Vibrational data [nlevels, np, nlat, nlon]")));
11060 
11061  md_data_raw.push_back(create_mdrecord(
11062  NAME("nlte_fieldSetLteExternalPartitionFunction"),
11063  DESCRIPTION("Turns on NTLE calculations.\n"
11064  "\n"
11065  "Sets NLTE ratios to those expected for LTE calculations\n"
11066  "with a known partition function\n"),
11067  AUTHORS("Richard Larsson"),
11068  OUT("nlte_do", "nlte_field", "abs_lines_per_species"),
11069  GOUT(),
11070  GOUT_TYPE(),
11071  GOUT_DESC(),
11072  IN("abs_lines_per_species",
11073  "nlte_level_identifiers",
11074  "partition_functions",
11075  "t_field"),
11076  GIN(),
11077  GIN_TYPE(),
11078  GIN_DEFAULT(),
11079  GIN_DESC()));
11080 
11081  md_data_raw.push_back(create_mdrecord(
11082  NAME("ArrayOfQuantumIdentifierFromLines"),
11083  DESCRIPTION(
11084  "Sets an ArrayOfQuantumIdentifier to all levels in *abs_lines_per_species*\n"
11085  "with defined quantum numbers\n"
11086  "\n"
11087  "Lines without defined quantum numbers are ignored\n"),
11088  AUTHORS("Richard Larsson"),
11089  OUT(),
11090  GOUT("out"),
11091  GOUT_TYPE("ArrayOfQuantumIdentifier"),
11092  GOUT_DESC("Identifiers to all levels in *abs_lines_per_species*"),
11093  IN("abs_lines_per_species"),
11094  GIN("global"),
11095  GIN_TYPE("Index"),
11096  GIN_DEFAULT("1"),
11097  GIN_DESC("Only look at global quantum numbers")));
11098 
11099  md_data_raw.push_back(create_mdrecord(
11100  NAME("nlte_fieldSetLteInternalPartitionFunction"),
11101  DESCRIPTION(
11102  "Turns on NTLE calculations.\n"
11103  "\n"
11104  "Sets NLTE ratios to those expected for LTE calculations\n"
11105  "with estimation of the partition function as the sum of all\n"
11106  "states of a species\n"),
11107  AUTHORS("Richard Larsson"),
11108  OUT("nlte_do", "nlte_field", "abs_lines_per_species"),
11109  GOUT(),
11110  GOUT_TYPE(),
11111  GOUT_DESC(),
11112  IN("abs_lines_per_species", "nlte_level_identifiers", "t_field"),
11113  GIN(),
11114  GIN_TYPE(),
11115  GIN_DEFAULT(),
11116  GIN_DESC()));
11117 
11118  md_data_raw.push_back(create_mdrecord(
11119  NAME("timeNow"),
11120  DESCRIPTION("Sets time to system_clock::now().\n"),
11121  AUTHORS("Richard Larsson"),
11122  OUT("time"),
11123  GOUT(),
11124  GOUT_TYPE(),
11125  GOUT_DESC(),
11126  IN(),
11127  GIN(),
11128  GIN_TYPE(),
11129  GIN_DEFAULT(),
11130  GIN_DESC()));
11131 
11132  md_data_raw.push_back(create_mdrecord(
11133  NAME("timeOffset"),
11134  DESCRIPTION("Offsets time for some seconds\n"),
11135  AUTHORS("Richard Larsson"),
11136  OUT("time"),
11137  GOUT(),
11138  GOUT_TYPE(),
11139  GOUT_DESC(),
11140  IN("time"),
11141  GIN("offset"),
11142  GIN_TYPE("Numeric"),
11143  GIN_DEFAULT(NODEF),
11144  GIN_DESC("Time in seconds")));
11145 
11146  md_data_raw.push_back(create_mdrecord(
11147  NAME("OEM"),
11148  DESCRIPTION(
11149  "Inversion by the so called optimal estimation method (OEM).\n"
11150  "\n"
11151  "Work in progress ...\n"
11152  "\n"
11153  "The cost function to minimise, including a normalisation with length"
11154  "of *y*, is:\n"
11155  " cost = cost_y + cost_x\n"
11156  "where\n"
11157  " cost_y = 1/m * [y-yf]' * covmat_se_inv * [y-yf]\n"
11158  " cost_x = 1/m * [x-xa]' * covmat_sx_inv * [x-xa]\n"
11159  "\n"
11160  " The current implementation provides 3 methods for the minimization of\n"
11161  "the cost functional: Linear, Gauss-Newton and Levenberg-Marquardt.\n"
11162  "The Gauss-Newton minimizer attempts to find a minimum solution by \n"
11163  "fitting a quadratic function to the cost functional. The linear minimizer\n"
11164  "is a special case of the Gauss-Newton method, since for a linear forward\n"
11165  "model the exact solution of the minimization problem is obtained after\n"
11166  "the first step. The Levenberg-Marquardt method adaptively constrains the\n"
11167  "search region for the next iteration step by means of the so-called gamma-factor.\n"
11168  "This makes the method more suitable for strongly non-linear problems.\n"
11169  "If the gamma-factor is 0, Levenberg-Marquardt and Gauss-Newton method\n"
11170  "are identical. Each minimization method (li,gn,lm) has an indirect\n"
11171  "variant (li_cg,gn_cg,lm_cg), which uses the conjugate gradient solver\n"
11172  "for the linear system that has to be solved in each minimzation step.\n"
11173  "This of advantage for very large problems, that would otherwise require\n"
11174  "the computation of expensive matrix products.\n"
11175  "\n"
11176  "Description of the special input arguments:\n"
11177  "\n"
11178  "*method*\n"
11179  " \"li\": A linear problem is assumed and a single iteration is performed.\n"
11180  " \"li_cg\": A linear problem is assumed and solved using the CG solver.\n"
11181  " \"gn\": Non-linear, with Gauss-Newton iteration scheme.\n"
11182  " \"gn_cg\": Non-linear, with Gauss-Newton and conjugate gradient solver.\n"
11183  " \"lm\": Non-linear, with Levenberg-Marquardt (LM) iteration scheme.\n"
11184  " \"lm_cg\": Non-linear, with Levenberg-Marquardt (LM) iteration scheme and conjugate gradient solver.\n"
11185  "*max_start_cost*\n"
11186  " No inversion is done if the cost matching the a priori state is above\n"
11187  " this value. If set to a negative value, all values are accepted.\n"
11188  " This argument also controls if the start cost is calculated. If\n"
11189  " set to <= 0, the start cost in *oem_diagnostics* is set to NaN\n"
11190  " when using \"li\" and \"gn\".\n"
11191  "*x_norm*\n"
11192  " A normalisation vector for *x*. A normalisation of *x* can be needed\n"
11193  " due to limited numerical precision. If this vector is set to be empty\n"
11194  " no normalisation is done (defualt case). Otherwise, this must be a\n"
11195  " vector with same length as *x*, just having values above zero.\n"
11196  " Elementwise division between *x* and *x_norm* (x./x_norm) shall give\n"
11197  " a vector where all values are in the order of unity. Maybe the best\n"
11198  " way to set *x_norm* is x_norm = sqrt( diag( Sx ) ).\n"
11199  "*max_iter*\n"
11200  " Maximum number of iterations to perform. No effect for \"li\".\n"
11201  "*stop_dx*\n"
11202  " Iteration stop criterion. The criterion used is the same as given\n"
11203  " in Rodgers\' \"Inverse Methods for Atmospheric Sounding\"\n"
11204  "*lm_ga_settings*\n"
11205  " Settings controlling the gamma factor, part of the \"LM\" method.\n"
11206  " This is a vector of length 6, having the elements (0-based index):\n"
11207  " 0: Start value.\n"
11208  " 1: Fractional decrease after succesfull iteration.\n"
11209  " 2: Fractional increase after unsuccessful iteration.\n"
11210  " 3: Maximum allowed value. If the value is passed, the inversion\n"
11211  " is halted.\n"
11212  " 4: Lower treshold. If the threshold is passed, gamma is set to zero.\n"
11213  " If gamma must be increased from zero, gamma is set to this value.\n"
11214  " 5: Gamma limit. This is an additional stop criterion. Convergence\n"
11215  " is not considered until there has been one succesful iteration\n"
11216  " having a gamma <= this value.\n"
11217  " The default setting triggers an error if \"lm\" is selected.\n"
11218  "*clear matrices*\n"
11219  " With this flag set to 1, *jacobian* and *dxdy* are returned as empty\n"
11220  " matrices.\n"
11221  "*display_progress*\n"
11222  " Controls if there is any screen output. The overall report level\n"
11223  " is ignored by this WSM.\n"),
11224  AUTHORS("Patrick Eriksson"),
11225  OUT("x",
11226  "yf",
11227  "jacobian",
11228  "dxdy",
11229  "oem_diagnostics",
11230  "lm_ga_history",
11231  "oem_errors"),
11232  GOUT(),
11233  GOUT_TYPE(),
11234  GOUT_DESC(),
11235  IN("xa",
11236  "x",
11237  "covmat_sx",
11238  "yf",
11239  "y",
11240  "covmat_se",
11241  "jacobian",
11242  "jacobian_quantities",
11243  "inversion_iterate_agenda"),
11244  GIN("method",
11245  "max_start_cost",
11246  "x_norm",
11247  "max_iter",
11248  "stop_dx",
11249  "lm_ga_settings",
11250  "clear_matrices",
11251  "display_progress"),
11252  GIN_TYPE("String",
11253  "Numeric",
11254  "Vector",
11255  "Index",
11256  "Numeric",
11257  "Vector",
11258  "Index",
11259  "Index"),
11260  GIN_DEFAULT(NODEF, "Inf", "[]", "10", "0.01", "[]", "0", "0"),
11261  GIN_DESC("Iteration method. For this and all options below, see "
11262  "further above.",
11263  "Maximum allowed value of cost function at start.",
11264  "Normalisation of Sx.",
11265  "Maximum number of iterations.",
11266  "Stop criterion for iterative inversions.",
11267  "Settings associated with the ga factor of the LM method.",
11268  "An option to save memory.",
11269  "Flag to control if inversion diagnostics shall be printed "
11270  "on the screen.")));
11271 
11272  md_data_raw.push_back(create_mdrecord(
11273  NAME("avkCalc"),
11274  DESCRIPTION(
11275  "Calculates the averaging kernel matrix describing the sensitivity of the\n"
11276  "OEM retrieval with respect to the true state of the system. A prerequisite\n"
11277  "for the calculation of the averaging kernel matrix is a successful OEM\n"
11278  "calculation in which the jacobian and the gain matrix dxdy have been calculated.\n"),
11279  AUTHORS("Simon Pfreundschuh"),
11280  OUT("avk"),
11281  GOUT(),
11282  GOUT_TYPE(),
11283  GOUT_DESC(),
11284  IN("dxdy", "jacobian"),
11285  GIN(),
11286  GIN_TYPE(),
11287  GIN_DEFAULT(),
11288  GIN_DESC()));
11289 
11290  md_data_raw.push_back(create_mdrecord(
11291  NAME("covmat_soCalc"),
11292  DESCRIPTION(
11293  "Calculates the covariance matrix describing the error due to uncertainties\n"
11294  "in the observation system. The uncertainties of the observation system are\n"
11295  "described by *covmat_se*, which must be set by the user to include the\n"
11296  "relevant contributions from the measurement and the forward model.\n"
11297  "\n"
11298  "Prerequisite for the calculation of *covmat_so* is a successful OEM\n"
11299  "computation where also the gain matrix has been computed.\n"),
11300  AUTHORS("Simon Pfreundschuh"),
11301  OUT("covmat_so"),
11302  GOUT(),
11303  GOUT_TYPE(),
11304  GOUT_DESC(),
11305  IN("dxdy", "covmat_se"),
11306  GIN(),
11307  GIN_TYPE(),
11308  GIN_DEFAULT(),
11309  GIN_DESC()));
11310 
11311  md_data_raw.push_back(create_mdrecord(
11312  NAME("covmat_ssCalc"),
11313  DESCRIPTION(
11314  "Calculates the covariance matrix describing the error due to smoothing.\n"
11315  ""
11316  "The calculation of *covmat_ss* also requires the averaging kernel matrix *avk*\n"
11317  "to be computed after a successful OEM calculation.\n"),
11318  AUTHORS("Simon Pfreundschuh"),
11319  OUT("covmat_ss"),
11320  GOUT(),
11321  GOUT_TYPE(),
11322  GOUT_DESC(),
11323  IN("avk", "covmat_sx"),
11324  GIN(),
11325  GIN_TYPE(),
11326  GIN_DEFAULT(),
11327  GIN_DESC()));
11328 
11329  md_data_raw.push_back(create_mdrecord(
11330  NAME("opt_prop_bulkCalc"),
11331  DESCRIPTION(
11332  "Calculates bulk absorption extinction at one atmospheric grid point.\n"
11333  "\n"
11334  "This WSM sums up the monochromatic absorption vectors and\n"
11335  "extinction matrices of all scattering elements (*abs_vec_spt* and\n"
11336  "*ext_mat_spt*, respectively) weighted by their respective\n"
11337  "particle number density given by *pnd_field*, for a single location\n"
11338  "within the cloudbox, given by *scat_p_index*, *scat_lat_index*, and\n"
11339  "*scat_lon_index*.\n"
11340  "The resulting extinction matrix is added to the workspace variable\n"
11341  "*ext_mat*.\n"),
11342  AUTHORS("Jana Mendrok, Sreerekha T.R."),
11343  OUT("ext_mat", "abs_vec"),
11344  GOUT(),
11345  GOUT_TYPE(),
11346  GOUT_DESC(),
11347  IN("ext_mat",
11348  "abs_vec",
11349  "ext_mat_spt",
11350  "abs_vec_spt",
11351  "pnd_field",
11352  "scat_p_index",
11353  "scat_lat_index",
11354  "scat_lon_index"),
11355  GIN(),
11356  GIN_TYPE(),
11357  GIN_DEFAULT(),
11358  GIN_DESC()));
11359 
11360  md_data_raw.push_back(create_mdrecord(
11361  NAME("opt_prop_sptFromData"),
11362  DESCRIPTION(
11363  "Calculates monochromatic optical properties for all scattering\n"
11364  "elements.\n"
11365  "\n"
11366  "In this function the extinction matrix and the absorption vector\n"
11367  "are calculated in the laboratory frame. An interpolation of the\n"
11368  "data on the actual frequency is the first step in this function.\n"
11369  "The next step is a transformation from the database coordinate\n"
11370  "system to the laboratory coordinate system.\n"
11371  "\n"
11372  "Output of the function are *ext_mat_spt* and *abs_vec_spt*, which\n"
11373  "hold the optical properties for a specified propagation direction\n"
11374  "for each scattering element.\n"),
11375  AUTHORS("Claudia Emde"),
11376  OUT("ext_mat_spt", "abs_vec_spt"),
11377  GOUT(),
11378  GOUT_TYPE(),
11379  GOUT_DESC(),
11380  IN("ext_mat_spt",
11381  "abs_vec_spt",
11382  "scat_data",
11383  "za_grid",
11384  "aa_grid",
11385  "za_index",
11386  "aa_index",
11387  "f_index",
11388  "f_grid",
11389  "rtp_temperature",
11390  "pnd_field",
11391  "scat_p_index",
11392  "scat_lat_index",
11393  "scat_lon_index"),
11394  GIN(),
11395  GIN_TYPE(),
11396  GIN_DEFAULT(),
11397  GIN_DESC()));
11398 
11399  md_data_raw.push_back(create_mdrecord(
11400  NAME("opt_prop_sptFromScat_data"),
11401  DESCRIPTION(
11402  "Derives monochromatic optical properties for all scattering\n"
11403  "elements.\n"
11404  "\n"
11405  "As *opt_prop_sptFromData*, but using frequency pre-interpolated\n"
11406  "data (as produced by *scat_dataCalc*), i.e. in here no frequency\n"
11407  "interpolation is done anymore.\n"),
11408  AUTHORS("Jana Mendrok, Claudia Emde"),
11409  OUT("ext_mat_spt", "abs_vec_spt"),
11410  GOUT(),
11411  GOUT_TYPE(),
11412  GOUT_DESC(),
11413  IN("ext_mat_spt",
11414  "abs_vec_spt",
11415  "scat_data",
11416  "scat_data_checked",
11417  "za_grid",
11418  "aa_grid",
11419  "za_index",
11420  "aa_index",
11421  "f_index",
11422  "rtp_temperature",
11423  "pnd_field",
11424  "scat_p_index",
11425  "scat_lat_index",
11426  "scat_lon_index"),
11427  GIN(),
11428  GIN_TYPE(),
11429  GIN_DEFAULT(),
11430  GIN_DESC()));
11431 
11432  md_data_raw.push_back(create_mdrecord(
11433  NAME("opt_prop_sptFromMonoData"),
11434  DESCRIPTION(
11435  "Calculates optical properties for the scattering elements.\n"
11436  "\n"
11437  "As *opt_prop_sptFromData* but no frequency interpolation is\n"
11438  "performed. The single scattering data is here obtained from\n"
11439  "*scat_data_mono*, instead of *scat_data*.\n"),
11440  AUTHORS("Cory Davis"),
11441  OUT("ext_mat_spt", "abs_vec_spt"),
11442  GOUT(),
11443  GOUT_TYPE(),
11444  GOUT_DESC(),
11445  IN("ext_mat_spt",
11446  "abs_vec_spt",
11447  "scat_data_mono",
11448  "za_grid",
11449  "aa_grid",
11450  "za_index",
11451  "aa_index",
11452  "rtp_temperature",
11453  "pnd_field",
11454  "scat_p_index",
11455  "scat_lat_index",
11456  "scat_lon_index"),
11457  GIN(),
11458  GIN_TYPE(),
11459  GIN_DEFAULT(),
11460  GIN_DESC()));
11461 
11462  md_data_raw.push_back(
11463  create_mdrecord(NAME("output_file_formatSetAscii"),
11464  DESCRIPTION("Sets the output file format to ASCII.\n"),
11465  AUTHORS("Oliver Lemke"),
11466  OUT("output_file_format"),
11467  GOUT(),
11468  GOUT_TYPE(),
11469  GOUT_DESC(),
11470  IN(),
11471  GIN(),
11472  GIN_TYPE(),
11473  GIN_DEFAULT(),
11474  GIN_DESC()));
11475 
11476  md_data_raw.push_back(
11477  create_mdrecord(NAME("output_file_formatSetBinary"),
11478  DESCRIPTION("Sets the output file format to binary.\n"),
11479  AUTHORS("Oliver Lemke"),
11480  OUT("output_file_format"),
11481  GOUT(),
11482  GOUT_TYPE(),
11483  GOUT_DESC(),
11484  IN(),
11485  GIN(),
11486  GIN_TYPE(),
11487  GIN_DEFAULT(),
11488  GIN_DESC()));
11489 
11490  md_data_raw.push_back(
11491  create_mdrecord(NAME("output_file_formatSetZippedAscii"),
11492  DESCRIPTION("Sets the output file format to zipped ASCII.\n"),
11493  AUTHORS("Oliver Lemke"),
11494  OUT("output_file_format"),
11495  GOUT(),
11496  GOUT_TYPE(),
11497  GOUT_DESC(),
11498  IN(),
11499  GIN(),
11500  GIN_TYPE(),
11501  GIN_DEFAULT(),
11502  GIN_DESC()));
11503 
11504  md_data_raw.push_back(create_mdrecord(
11505  NAME("particle_bulkprop_fieldClip"),
11506  DESCRIPTION(
11507  "Clipping of *particle_bulkprop_field*.\n"
11508  "\n"
11509  "The method allows you to apply hard limits the values of\n"
11510  "*particle_bulkprop_field*. All values, of the property selected,\n"
11511  "below *limit_low*, are simply set to *limit_low*. And the same\n"
11512  "is performed with respect to *limit_high*. That is, the data in x\n"
11513  "for the retrieval quantity are forced to be inside the range\n"
11514  "[limit_low,limit_high].\n"
11515  "\n"
11516  "Setting species=\"ALL\", is a shortcut for applying the limits on all\n"
11517  "properties.\n"),
11518  AUTHORS("Patrick Eriksson"),
11519  OUT("particle_bulkprop_field"),
11520  GOUT(),
11521  GOUT_TYPE(),
11522  GOUT_DESC(),
11523  IN("particle_bulkprop_field", "particle_bulkprop_names"),
11524  GIN("bulkprop_name", "limit_low", "limit_high"),
11525  GIN_TYPE("String", "Numeric", "Numeric"),
11526  GIN_DEFAULT(NODEF, "-Inf", "Inf"),
11527  GIN_DESC("Name of bulk property to consider, or \"ALL\".",
11528  "Lower limit for clipping.",
11529  "Upper limit for clipping.")));
11530 
11531  md_data_raw.push_back(create_mdrecord(
11532  NAME("particle_bulkprop_fieldPerturb"),
11533  DESCRIPTION(
11534  "Adds a perturbation to *particle_bulkprop_field*.\n"
11535  "\n"
11536  "Works as *AtmFieldPerturb* but acts on *particle_bulkprop_field*.\n"),
11537  AUTHORS("Patrick Eriksson"),
11538  OUT("particle_bulkprop_field"),
11539  GOUT(),
11540  GOUT_TYPE(),
11541  GOUT_DESC(),
11542  IN("particle_bulkprop_field",
11543  "atmosphere_dim",
11544  "p_grid",
11545  "lat_grid",
11546  "lon_grid",
11547  "particle_bulkprop_names"),
11548  GIN("particle_type",
11549  "p_ret_grid",
11550  "lat_ret_grid",
11551  "lon_ret_grid",
11552  "pert_index",
11553  "pert_size",
11554  "pert_mode"),
11555  GIN_TYPE(
11556  "String", "Vector", "Vector", "Vector", "Index", "Numeric", "String"),
11557  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
11558  GIN_DESC("Name of field to perturb, such as "
11559  "IWC"
11560  ".",
11561  "Pressure retrieval grid.",
11562  "Latitude retrieval grid.",
11563  "Longitude retrieval grid.",
11564  "Index of position where the perturbation shall be performed.",
11565  "Size of perturbation.",
11566  "Type of perturbation, "
11567  "ansolute"
11568  " or "
11569  "relative"
11570  ".")));
11571 
11572  md_data_raw.push_back(create_mdrecord(
11573  NAME("particle_bulkprop_fieldPerturbAtmGrids"),
11574  DESCRIPTION(
11575  "Adds a perturbation to *particle_bulkprop_field*.\n"
11576  "\n"
11577  "Works as *AtmFieldPerturbAtmGrids* but acts on *particle_bulkprop_field*.\n"),
11578  AUTHORS("Patrick Eriksson"),
11579  OUT("particle_bulkprop_field"),
11580  GOUT(),
11581  GOUT_TYPE(),
11582  GOUT_DESC(),
11583  IN("particle_bulkprop_field",
11584  "atmosphere_dim",
11585  "p_grid",
11586  "lat_grid",
11587  "lon_grid",
11588  "particle_bulkprop_names"),
11589  GIN("particle_type", "pert_index", "pert_size", "pert_mode"),
11590  GIN_TYPE("String", "Index", "Numeric", "String"),
11591  GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
11592  GIN_DESC("Name of field to perturb, such as "
11593  "IWC"
11594  ".",
11595  "Index of position where the perturbation shall be performed.",
11596  "Size of perturbation.",
11597  "Type of perturbation, "
11598  "ansolute"
11599  " or "
11600  "relative"
11601  ".")));
11602 
11603  md_data_raw.push_back(create_mdrecord(
11604  NAME("particle_massesFromMetaDataSingleCategory"),
11605  DESCRIPTION(
11606  "Sets *particle_masses* based on *scat_meta* assuming\n"
11607  "all particles are of the same mass category.\n"
11608  "\n"
11609  "This method derives the particle masses from the mass entry\n"
11610  "of each scattering element. It is assumed that all scattering\n"
11611  "elements represent particles of the same (bulk) matter\n"
11612  "(e.g. water or ice). With other words, a single mass category\n"
11613  "is assumed (see *particle_masses* for a definition of \"mass\n"
11614  "category\").\n"
11615  "\n"
11616  "To be clear, the above are assumptions of the method, the user\n"
11617  "is free to work with any scattering element. For Earth and just having\n"
11618  "cloud and particles, the resulting mass category can be seen as\n"
11619  "the total cloud water content, with possible contribution from\n"
11620  "both ice and liquid phase.\n"),
11621  AUTHORS("Jana Mendrok", "Patrick Eriksson"),
11622  OUT("particle_masses"),
11623  GOUT(),
11624  GOUT_TYPE(),
11625  GOUT_DESC(),
11626  IN("scat_meta"),
11627  GIN(),
11628  GIN_TYPE(),
11629  GIN_DEFAULT(),
11630  GIN_DESC()));
11631 
11632  md_data_raw.push_back(create_mdrecord(
11633  NAME("particle_massesFromMetaData"),
11634  DESCRIPTION(
11635  "Derives *particle_masses* from *scat_meta*.\n"
11636  "\n"
11637  "This method is supposed to be used to derive *particle_masses*\n"
11638  "when *pnd_field* is internally calculated using\n"
11639  "*pnd_fieldCalcFromParticleBulkProps* (in contrast to reading it\n"
11640  "from external sources using *ScatElementsPndAndScatAdd* and\n"
11641  "*pnd_fieldCalcFrompnd_field_raw*).\n"
11642  "It extracts the mass information of the scattering elements from\n"
11643  "*scat_meta*. Each scattering species is taken as a separate\n"
11644  "category of particle_masses, i.e., the resulting\n"
11645  "*particle_masses* matrix will contain as many columns as\n"
11646  "scattering species are present in *scat_meta*.\n"),
11647  AUTHORS("Jana Mendrok"),
11648  OUT("particle_masses"),
11649  GOUT(),
11650  GOUT_TYPE(),
11651  GOUT_DESC(),
11652  IN("scat_meta"),
11653  GIN(),
11654  GIN_TYPE(),
11655  GIN_DEFAULT(),
11656  GIN_DESC()));
11657 
11658  md_data_raw.push_back(create_mdrecord(
11659  NAME("partition_functionsInitFromBuiltin"),
11660  DESCRIPTION(
11661  "Initialize partition functions with default values from built-in\n"
11662  "species data.\n"),
11663  AUTHORS("Oliver Lemke"),
11664  OUT("partition_functions"),
11665  GOUT(),
11666  GOUT_TYPE(),
11667  GOUT_DESC(),
11668  IN(),
11669  GIN(),
11670  GIN_TYPE(),
11671  GIN_DEFAULT(),
11672  GIN_DESC()));
11673 
11674  md_data_raw.push_back(create_mdrecord(
11675  NAME("pha_matCalc"),
11676  DESCRIPTION(
11677  "Calculates the total phase matrix of all scattering elements.\n"
11678  "\n"
11679  "This function sums up the monochromatic phase matrices of all\n"
11680  "scattering elements *pha_mat_spt* weighted with their respective\n"
11681  "particle number density, given by *pnd_field*, for a single location\n"
11682  "within the cloudbox, given by *scat_p_index*, *scat_lat_index*, and\n"
11683  "*scat_lon_index*.\n"),
11684  AUTHORS("Sreerekha T.R."),
11685  OUT("pha_mat"),
11686  GOUT(),
11687  GOUT_TYPE(),
11688  GOUT_DESC(),
11689  IN("pha_mat_spt",
11690  "pnd_field",
11691  "atmosphere_dim",
11692  "scat_p_index",
11693  "scat_lat_index",
11694  "scat_lon_index"),
11695  GIN(),
11696  GIN_TYPE(),
11697  GIN_DEFAULT(),
11698  GIN_DESC()));
11699 
11700  md_data_raw.push_back(create_mdrecord(
11701  NAME("pha_mat_sptFromData"),
11702  DESCRIPTION(
11703  "Calculation of the phase matrix of the individual scattering elements.\n"
11704  "\n"
11705  "This function can be used in *pha_mat_spt_agenda* as part of\n"
11706  "the calculation of the scattering integral.\n"
11707  "\n"
11708  "First, data at the requested frequency (given by *f_grid* and\n"
11709  "*f_index*) and temperature (given by *rtp_temperature*) is\n"
11710  "extracted. This is followed by a transformation from the database\n"
11711  "coordinate system to the laboratory coordinate system.\n"
11712  "\n"
11713  "Frequency extraction is always done by (linear) interpolation.\n"
11714  "Temperature is (linearly) interpolated when at least two\n"
11715  "temperature grid points are present in the *scat_data* and\n"
11716  "*rtp_temperature* is positive. If only a single temperature point\n"
11717  "is available, data for this point is used without modification. In\n"
11718  "order to speed up calculations, temperature interpolation can be\n"
11719  "avoided by passing a *rtp_temperature*<0. In this case, a specific\n"
11720  "temperature grid from the *scat_data* grid is used without\n"
11721  "modification. The selection is as follows:\n"
11722  " -10 < *rtp_temperature * < 0 T_grid[0] lowest temperature\n"
11723  " -20 < *rtp_temperature * < -10 T_grid[nT-1] highest temperature\n"
11724  " *rtp_temperature* < -20 T_grid[nT/2] median grid point\n"),
11725  AUTHORS("Claudia Emde"),
11726  OUT("pha_mat_spt"),
11727  GOUT(),
11728  GOUT_TYPE(),
11729  GOUT_DESC(),
11730  IN("pha_mat_spt",
11731  "scat_data",
11732  "za_grid",
11733  "aa_grid",
11734  "za_index",
11735  "aa_index",
11736  "f_index",
11737  "f_grid",
11738  "rtp_temperature",
11739  "pnd_field",
11740  "scat_p_index",
11741  "scat_lat_index",
11742  "scat_lon_index"),
11743  GIN(),
11744  GIN_TYPE(),
11745  GIN_DEFAULT(),
11746  GIN_DESC()));
11747 
11748  md_data_raw.push_back(create_mdrecord(
11749  NAME("pha_mat_sptFromDataDOITOpt"),
11750  DESCRIPTION(
11751  "Calculation of the phase matrix of the individual scattering elements.\n"
11752  "\n"
11753  "In this function the phase matrix is extracted from\n"
11754  "*pha_mat_sptDOITOpt*. It can be used in the agenda\n"
11755  "*pha_mat_spt_agenda*. This method must be used in combination with\n"
11756  "*DoitScatteringDataPrepare*.\n"
11757  "\n"
11758  "Temperature is considered as described for *pha_mat_sptFromData*\n"),
11759  AUTHORS("Claudia Emde"),
11760  OUT("pha_mat_spt"),
11761  GOUT(),
11762  GOUT_TYPE(),
11763  GOUT_DESC(),
11764  IN("pha_mat_spt",
11765  "pha_mat_sptDOITOpt",
11766  "scat_data_mono",
11767  "doit_za_grid_size",
11768  "aa_grid",
11769  "za_index",
11770  "aa_index",
11771  "rtp_temperature",
11772  "pnd_field",
11773  "scat_p_index",
11774  "scat_lat_index",
11775  "scat_lon_index"),
11776  GIN(),
11777  GIN_TYPE(),
11778  GIN_DEFAULT(),
11779  GIN_DESC()));
11780 
11781  md_data_raw.push_back(create_mdrecord(
11782  NAME("pha_mat_sptFromMonoData"),
11783  DESCRIPTION(
11784  "Calculation of the phase matrix of the individual scattering elements.\n"
11785  "\n"
11786  "This function is the monochromatic version of *pha_mat_sptFromData*.\n"),
11787  AUTHORS("Claudia Emde"),
11788  OUT("pha_mat_spt"),
11789  GOUT(),
11790  GOUT_TYPE(),
11791  GOUT_DESC(),
11792  IN("pha_mat_spt",
11793  "scat_data_mono",
11794  "doit_za_grid_size",
11795  "aa_grid",
11796  "za_index",
11797  "aa_index",
11798  "rtp_temperature",
11799  "pnd_field",
11800  "scat_p_index",
11801  "scat_lat_index",
11802  "scat_lon_index"),
11803  GIN(),
11804  GIN_TYPE(),
11805  GIN_DEFAULT(),
11806  GIN_DESC()));
11807 
11808  md_data_raw.push_back(create_mdrecord(
11809  NAME("pha_mat_sptFromScat_data"),
11810  DESCRIPTION(
11811  "Calculation of the phase matrix of the individual scattering elements.\n"
11812  "\n"
11813  "As *pha_mat_sptFromData*, but using frequency pre-interpolated\n"
11814  "data (as produced by *scat_dataCalc*), i.e. in here no frequency\n"
11815  "interpolation is done anymore.\n"),
11816  AUTHORS("Jana Mendrok, Claudia Emde"),
11817  OUT("pha_mat_spt"),
11818  GOUT(),
11819  GOUT_TYPE(),
11820  GOUT_DESC(),
11821  IN("pha_mat_spt",
11822  "scat_data",
11823  "scat_data_checked",
11824  "za_grid",
11825  "aa_grid",
11826  "za_index",
11827  "aa_index",
11828  "f_index",
11829  "rtp_temperature",
11830  "pnd_field",
11831  "scat_p_index",
11832  "scat_lat_index",
11833  "scat_lon_index"),
11834  GIN(),
11835  GIN_TYPE(),
11836  GIN_DEFAULT(),
11837  GIN_DESC()));
11838 
11839  md_data_raw.push_back(create_mdrecord(
11840  NAME("pndFromPsd"),
11841  DESCRIPTION(
11842  "Calculates *pnd_data* from given *psd_data* for one scattering species.\n"
11843  "\n"
11844  "Performs integration of the size distribution over the size grid\n"
11845  "bin deriving pnd (units #/m3) from psd (units #/m3/m). Some checks\n"
11846  "on the sufficiency of the size grid range and coverage are applied.\n"
11847  "\n"
11848  "*quad_order* can be 0 for rectangular or 1 for trapezoidal\n"
11849  "integration. The only difference is the treatment of the start and\n"
11850  "end nodes. For trapezoidal their corresponding bins end exactly at\n"
11851  "the nodes, while for rectangular they extend further out by the half\n"
11852  "distance to the neighbor node (but not beyond 0).\n"
11853  "\n"
11854  "Attempts to check that the size grids and *scat_data* represent the\n"
11855  "bulk extinction sufficiently. Specifically, it is tested that\n"
11856  " (a) psd*ext is decreasing at the small and large particle size\n"
11857  " ends of the size grid - but only if scattering species bulk\n"
11858  " extinction exceeds 1% of *threshold_ss_ext*.\n"
11859  " (b) removing the smallest and largest particles changes the\n"
11860  " resulting bulk extinction by less then a fraction of\n"
11861  " *threshold_se_ext* - but only if scattering species bulk\n"
11862  " extinction exceeds *threshold_ss_ext* and number density (pnd)\n"
11863  " of the edge size point at this atmospheric level is larger\n"
11864  " than *threshold_se_pnd* times the maximum pnd of this\n"
11865  " scattering element over all atmospheric levels.\n"
11866  "Skipping tests in case of low extinction is done in order to\n"
11867  "minimize issues arising from very low mass densities,\n"
11868  "particularly at single atmospheric levels, and very low bulk\n"
11869  "extinctions, i.e. in cases where the effects on the radiance fields\n"
11870  "are estimated to be low."
11871  "\n"
11872  "NOTE: The tests are only approximate and do not guarantee the\n"
11873  "validity of the resulting bulk properties (and increasing the\n"
11874  "thresholds will decrease the reliability of the bulk properties).\n"),
11875  AUTHORS("Jana Mendrok, Patrick Eriksson"),
11876  OUT("pnd_data", "dpnd_data_dx"),
11877  GOUT(),
11878  GOUT_TYPE(),
11879  GOUT_DESC(),
11880  IN("pnd_size_grid",
11881  "psd_data",
11882  "psd_size_grid",
11883  "dpsd_data_dx",
11884  "scat_data",
11885  "f_grid",
11886  "scat_data_checked"),
11887  GIN("quad_order",
11888  "scat_index",
11889  "threshold_se_ext",
11890  "threshold_ss_ext",
11891  "threshold_se_pnd"),
11892  GIN_TYPE("Index", "Index", "Numeric", "Numeric", "Numeric"),
11893  GIN_DEFAULT("1", NODEF, "0.02", "1e-8", "0.02"),
11894  GIN_DESC("Order of bin quadrature.",
11895  "Take data from scattering species of this index (0-based) in"
11896  " *scat_data*.",
11897  "Maximum allowed extinction fraction in each of the edge size"
11898  " bins.",
11899  "Minimum bulk extinction in the processed scattering species"
11900  " for which to apply size grid representation checks.",
11901  "Minimum ratio of edge point pnd to maximum pnd of this"
11902  " scattering element over all pressure levels.")));
11903 
11904  md_data_raw.push_back(create_mdrecord(
11905  NAME("pndFromPsdBasic"),
11906  DESCRIPTION(
11907  "Calculates *pnd_data* from given *psd_data*.\n"
11908  "\n"
11909  "As *pndFromPsdBasic*, but without bulk extinction representation\n"
11910  "checks.\n"),
11911  AUTHORS("Jana Mendrok, Patrick Eriksson"),
11912  OUT("pnd_data", "dpnd_data_dx"),
11913  GOUT(),
11914  GOUT_TYPE(),
11915  GOUT_DESC(),
11916  IN("pnd_size_grid", "psd_data", "psd_size_grid", "dpsd_data_dx"),
11917  GIN("quad_order"),
11918  GIN_TYPE("Index"),
11919  GIN_DEFAULT("1"),
11920  GIN_DESC("Order of bin quadrature.")));
11921 
11922  md_data_raw.push_back(create_mdrecord(
11923  NAME("pnd_fieldCalcFromParticleBulkProps"),
11924  DESCRIPTION(
11925  "Converts particle bulk property data to *pnd_field*.\n"
11926  "\n"
11927  "In short, the method combines *scat_species*, *pnd_agenda_array*,\n"
11928  "*particle_bulkprop_field* and their associated variables to derive\n"
11929  "*pnd_field*.\n"
11930  "\n"
11931  "The method does nothing if cloudbox is inactive.\n"
11932  "\n"
11933  "Otherwise, cloudbox limits must be set before calling the method,\n"
11934  "and *particle_bulkprop_field* is checked to have non-zero elements\n"
11935  "just inside the cloudbox.\n"),
11936  AUTHORS("Patrick Eriksson, Jana Mendrok"),
11937  OUT("pnd_field", "dpnd_field_dx"),
11938  GOUT(),
11939  GOUT_TYPE(),
11940  GOUT_DESC(),
11941  IN("atmosphere_dim",
11942  "p_grid",
11943  "lat_grid",
11944  "lon_grid",
11945  "t_field",
11946  "cloudbox_on",
11947  "cloudbox_limits",
11948  "scat_species",
11949  "scat_data",
11950  "scat_meta",
11951  "particle_bulkprop_field",
11952  "particle_bulkprop_names",
11953  "pnd_agenda_array",
11954  "pnd_agenda_array_input_names",
11955  "jacobian_do",
11956  "jacobian_quantities"),
11957  GIN(),
11958  GIN_TYPE(),
11959  GIN_DEFAULT(),
11960  GIN_DESC()));
11961 
11962  md_data_raw.push_back(create_mdrecord(
11963  NAME("pnd_fieldCalcFrompnd_field_raw"),
11964  DESCRIPTION(
11965  "Interpolation of particle number density fields to calculation grid\n"
11966  "inside cloudbox.\n"
11967  "\n"
11968  "This method interpolates the particle number density field\n"
11969  "from the raw data *pnd_field_raw* to obtain *pnd_field*.\n"
11970  "For 1D cases, where internally *GriddedFieldPRegrid* and\n"
11971  "*GriddedFieldLatLonRegrid* are applied, *zeropadding*=1 sets the\n"
11972  "*pnd_field* at pressure levels levels exceeding pnd_field_raw's\n"
11973  "pressure grid to 0 (not implemented for 2D and 3D yet). Default:\n"
11974  "zeropadding=0, which throws an error if the calculation pressure grid\n"
11975  "*p_grid* is not completely covered by pnd_field_raw's pressure grid.\n"),
11976  AUTHORS("Sreerekha T.R.", "Claudia Emde", "Oliver Lemke"),
11977  OUT("pnd_field", "dpnd_field_dx"),
11978  GOUT(),
11979  GOUT_TYPE(),
11980  GOUT_DESC(),
11981  IN("p_grid",
11982  "lat_grid",
11983  "lon_grid",
11984  "pnd_field_raw",
11985  "atmosphere_dim",
11986  "cloudbox_limits",
11987  "jacobian_quantities"),
11988  GIN("zeropadding"),
11989  GIN_TYPE("Index"),
11990  GIN_DEFAULT("0"),
11991  GIN_DESC("Allow zeropadding of pnd_field.")));
11992 
11993  md_data_raw.push_back(create_mdrecord(
11994  NAME("pnd_fieldExpand1D"),
11995  DESCRIPTION(
11996  "Maps a 1D pnd_field to a (homogeneous) 2D or 3D pnd_field.\n"
11997  "\n"
11998  "This method takes a 1D *pnd_field* and converts it to a 2D or 3D\n"
11999  "\"cloud\". It is assumed that a complete 1D case has been created,\n"
12000  "and after this *atmosphere_dim*, *lat_grid*, *lon_grid* and\n"
12001  "*cloudbox_limits* have been changed to a 2D or 3D case (without\n"
12002  "changing the vertical extent of the cloudbox.\n"
12003  "\n"
12004  "No modification of *pnd_field* is made for the pressure dimension.\n"
12005  "At the latitude and longitude cloudbox edge points *pnd_field* is set to\n"
12006  "zero. This corresponds to nzero=1. If you want a larger margin between\n"
12007  "the lat and lon cloudbox edges and the \"cloud\" you increase\n"
12008  "*nzero*, where *nzero* is the number of grid points for which\n"
12009  "*pnd_field* shall be set to 0, counted from each lat and lon edge.\n"
12010  "\n"
12011  "See further *AtmFieldsExpand1D*.\n"),
12012  AUTHORS("Patrick Eriksson"),
12013  OUT("pnd_field"),
12014  GOUT(),
12015  GOUT_TYPE(),
12016  GOUT_DESC(),
12017  IN("pnd_field", "atmosphere_dim", "cloudbox_on", "cloudbox_limits"),
12018  GIN("nzero"),
12019  GIN_TYPE("Index"),
12020  GIN_DEFAULT("1"),
12021  GIN_DESC("Number of zero values inside lat and lon limits.")));
12022 
12023  md_data_raw.push_back(create_mdrecord(
12024  NAME("pnd_fieldZero"),
12025  DESCRIPTION(
12026  "Sets *pnd_field* to zero.\n"
12027  "\n"
12028  "Creates an empty *pnd_field* of cloudbox size according to\n"
12029  "*cloudbox_limits* and with number of scattering elemements\n"
12030  "according to *scat_data*. If *scat_data* is not set yet, it will be\n"
12031  "filled with one dummy scattering element.\n"
12032  "\n"
12033  "The method works with both *scat_data* and *scat_data_raw*."
12034  "\n"
12035  "This method primarily exists for testing purposes.\n"
12036  "On the one hand, empty *pnd_field* runs can be used to test the\n"
12037  "agreement between true clear-sky (*cloudboxOff*) solutions and the\n"
12038  "scattering solver solution in factual clear-sky conditions. It is\n"
12039  "important to avoid discontinuities when switching from thin-cloud\n"
12040  "to clear-sky conditions.\n"
12041  "Moreover, scattering calculations using the DOIT method include\n"
12042  "interpolation errors. If one is interested in this effect, one\n"
12043  "should compare the DOIT result with an empty cloudbox to a clearsky\n"
12044  "calculation. That means that the iterative method is performed for\n"
12045  "a cloudbox with no particles.\n"),
12046  AUTHORS("Claudia Emde, Jana Mendrok"),
12047  OUT("pnd_field", "dpnd_field_dx", "scat_data"),
12048  GOUT(),
12049  GOUT_TYPE(),
12050  GOUT_DESC(),
12051  IN("scat_data",
12052  "atmosphere_dim",
12053  "f_grid",
12054  "cloudbox_limits",
12055  "jacobian_quantities"),
12056  GIN(),
12057  GIN_TYPE(),
12058  GIN_DEFAULT(),
12059  GIN_DESC()));
12060 
12061  md_data_raw.push_back(create_mdrecord(
12062  NAME("ppath_fieldFromDownUpLimbGeoms"),
12063  DESCRIPTION(
12064  "Computes ppath_field from \"standalone\" sensors looking upwards from\n"
12065  "0 m altitude with zenith angles range [0, 90], downwards from the top\n"
12066  "of the atmosphere covering the zenith angle range from 180 degrees to\n"
12067  "the surface tangent minus 1e-4 degrees, and through the limb covering\n"
12068  "at the same position as the downwards looking sensor covering the zenith\n"
12069  "angle range from the surface tangent plus 1e-4 degrees to 90 degrees minus\n"
12070  "1e-4 degrees.\n"
12071  "\n"
12072  "The top of the atmosphere is from *z_field*(-1, 0, 0) [python range notation].\n"
12073  "\n"
12074  "The field will consist of 3*nz arrays structured as [up, limb, down]\n"
12075  "\n"
12076  "The intent of this function is to generate a field so that calculations\n"
12077  "of *ppvar_iy* of all the fields will cover the zenith angle space\n"
12078  "of all positions in *z_field*.\n"
12079  "\n"
12080  "Only works for *atmosphere_dim* 1, spherical planets, and *ppath_lmax*<0\n"),
12081  AUTHORS("Richard Larsson"),
12082  OUT("ppath_field"),
12083  GOUT(),
12084  GOUT_TYPE(),
12085  GOUT_DESC(),
12086  IN("ppath_agenda",
12087  "ppath_lmax",
12088  "ppath_lraytrace",
12089  "atmgeom_checked",
12090  "z_field",
12091  "f_grid",
12092  "cloudbox_on",
12093  "cloudbox_checked",
12094  "ppath_inside_cloudbox_do",
12095  "rte_pos",
12096  "rte_los",
12097  "rte_pos2",
12098  "refellipsoid",
12099  "atmosphere_dim"),
12100  GIN("nz"),
12101  GIN_TYPE("Index"),
12102  GIN_DEFAULT("3"),
12103  GIN_DESC("Number of zenith angles per position")));
12104 
12105  md_data_raw.push_back(create_mdrecord(
12106  NAME("ppathCalc"),
12107  DESCRIPTION(
12108  "Stand-alone calculation of propagation paths.\n"
12109  "\n"
12110  "Beside a few checks of input data, the only operation of this\n"
12111  "method is to execute *ppath_agenda*.\n"
12112  "\n"
12113  "Propagation paths are normally calculated as part of the radiative\n"
12114  "transfer calculations, and this method is not part of the control\n"
12115  "file. A reason to call this function directly would be to obtain a\n"
12116  "propagation path for plotting. Anyhow, use this method instead\n"
12117  "of calling e.g.*ppathStepByStep directly.\n"),
12118  AUTHORS("Patrick Eriksson"),
12119  OUT("ppath"),
12120  GOUT(),
12121  GOUT_TYPE(),
12122  GOUT_DESC(),
12123  IN("ppath_agenda",
12124  "ppath_lmax",
12125  "ppath_lraytrace",
12126  "atmgeom_checked",
12127  "f_grid",
12128  "cloudbox_on",
12129  "cloudbox_checked",
12130  "ppath_inside_cloudbox_do",
12131  "rte_pos",
12132  "rte_los",
12133  "rte_pos2"),
12134  GIN(),
12135  GIN_TYPE(),
12136  GIN_DEFAULT(),
12137  GIN_DESC()));
12138 
12139  md_data_raw.push_back(create_mdrecord(
12140  NAME("ppath_fieldCalc"),
12141  DESCRIPTION(
12142  "Stand-alone calculation of propagation path field from sensors.\n"
12143  "\n"
12144  "Uses *ppathCalc* internally.\n"),
12145  AUTHORS("Richard Larsson"),
12146  OUT("ppath_field"),
12147  GOUT(),
12148  GOUT_TYPE(),
12149  GOUT_DESC(),
12150  IN("ppath_agenda",
12151  "ppath_lmax",
12152  "ppath_lraytrace",
12153  "atmgeom_checked",
12154  "f_grid",
12155  "cloudbox_on",
12156  "cloudbox_checked",
12157  "ppath_inside_cloudbox_do",
12158  "sensor_pos",
12159  "sensor_los",
12160  "rte_pos2"),
12161  GIN(),
12162  GIN_TYPE(),
12163  GIN_DEFAULT(),
12164  GIN_DESC()));
12165 
12166  md_data_raw.push_back(create_mdrecord(
12167  NAME("ppathCalcFromAltitude"),
12168  DESCRIPTION(
12169  "Moves *rte_pos* forwards to near altitude before calling *ppathCalc*\n"
12170  "to compute a different *ppath*. The accuracy-variable gives minimum\n"
12171  "distance before the input altitude.\n"
12172  "\n"
12173  "The forward-moving algorithm calls *ppathCalc* several\n"
12174  "times at reduced maximum distances. The intention is to maintain\n"
12175  "the correct *rte_los* for a given *rte_pos* at all altitudes. The\n"
12176  "method is thus relatively slow, and VERY memory intense at low\n"
12177  "accuracy.\n"
12178  "\n"
12179  "Intended to be used with \"tropospheric corrections\" from ground\n"
12180  "geometry. Not well-tested\n"
12181  "\n"
12182  "Throws error if no altitude is in line of sight.\n"),
12183  AUTHORS("Richard Larsson"),
12184  OUT("ppath"),
12185  GOUT(),
12186  GOUT_TYPE(),
12187  GOUT_DESC(),
12188  IN("ppath_agenda",
12189  "ppath_lmax",
12190  "ppath_lraytrace",
12191  "atmgeom_checked",
12192  "f_grid",
12193  "cloudbox_on",
12194  "cloudbox_checked",
12195  "ppath_inside_cloudbox_do",
12196  "rte_pos",
12197  "rte_los",
12198  "rte_pos2"),
12199  GIN("altitude", "accuracy"),
12200  GIN_TYPE("Numeric", "Numeric"),
12201  GIN_DEFAULT(NODEF, "0.5"),
12202  GIN_DESC("Altitude to move forward towards", "Accuracy of altitude")));
12203 
12204  md_data_raw.push_back(create_mdrecord(
12205  NAME("ppathFromRtePos2"),
12206  DESCRIPTION(
12207  "Determines the propagation path from *rte_pos2* to *rte_pos*.\n"
12208  "\n"
12209  "The propagation path linking *rte_pos* and *rte_pos2* is calculated\n"
12210  "and returned. The method determines the path in a pure numerical\n"
12211  "manner, where a simple algorithm is applied. The task is to find\n"
12212  "the value of *rte_los* (at *rte_pos*) linking the two positions.\n"
12213  "\n"
12214  "See the user guide for a description of the search algorithm,\n"
12215  "including a more detailed definition of *za_accuracy*, \n"
12216  "*pplrt_factor* and *pplrt_lowest*.\n"
12217  "\n"
12218  "The standard application of this method should be to radio link\n"
12219  "calculations, where *rte_pos2* corresponds to a transmitter, and\n"
12220  "*rte_pos* to the receiver/sensor.\n"
12221  "\n"
12222  "The details of the ray tracing is controlled by *ppath_step_agenda*\n"
12223  "as usual.\n"),
12224  AUTHORS("Patrick Eriksson"),
12225  OUT("ppath", "rte_los", "ppath_lraytrace"),
12226  GOUT(),
12227  GOUT_TYPE(),
12228  GOUT_DESC(),
12229  IN("ppath_step_agenda",
12230  "atmosphere_dim",
12231  "p_grid",
12232  "lat_grid",
12233  "lon_grid",
12234  "z_field",
12235  "f_grid",
12236  "refellipsoid",
12237  "z_surface",
12238  "rte_pos",
12239  "rte_pos2",
12240  "rte_los",
12241  "ppath_lmax",
12242  "ppath_lraytrace"),
12243  GIN("za_accuracy", "pplrt_factor", "pplrt_lowest"),
12244  GIN_TYPE("Numeric", "Numeric", "Numeric"),
12245  GIN_DEFAULT("2e-5", "5", "0.5"),
12246  GIN_DESC("Required accuracy, in form of the maximum allowed angular "
12247  "off-set [deg].",
12248  "The factor with which ppath_lraytrace is decreased if "
12249  "no solution is found.",
12250  "Lowest value ppath_lraytrace to consider. The calculations "
12251  "are halted if this length is passed.")));
12252 
12253  md_data_raw.push_back(create_mdrecord(
12254  NAME("ppathPlaneParallel"),
12255  DESCRIPTION(
12256  "Propagation path calculations for a plane parallel atmosphere.\n"
12257  "\n"
12258  "This method basically assumes that the planet's radius is infinite,\n"
12259  "i.e. the planet surface has no curvature. Some consequences of this\n"
12260  "assumption:\n"
12261  " - the mathod can only be used for 1D\n"
12262  " - zenith angles between 89.9 and 90.1 deg are not allowed\n"
12263  " - refraction is always neglected\n"
12264  " - radii in ppath are set to Inf\n"
12265  "\n"
12266  "Notice that the method provides full propagation paths. This means\n"
12267  "that *ppath_step_agenda* is ignored (and thus also refraction).\n"
12268  "On the other hand, the method considers the cloudbox exactly as\n"
12269  "the standard path calculations.\n"),
12270  AUTHORS("Patrick Eriksson"),
12271  OUT("ppath"),
12272  GOUT(),
12273  GOUT_TYPE(),
12274  GOUT_DESC(),
12275  IN("atmosphere_dim",
12276  "z_field",
12277  "z_surface",
12278  "cloudbox_on",
12279  "cloudbox_limits",
12280  "ppath_inside_cloudbox_do",
12281  "rte_pos",
12282  "rte_los",
12283  "ppath_lmax"),
12284  GIN(),
12285  GIN_TYPE(),
12286  GIN_DEFAULT(),
12287  GIN_DESC()));
12288 
12289  md_data_raw.push_back(create_mdrecord(
12290  NAME("ppathStepByStep"),
12291  DESCRIPTION(
12292  "Standard method for calculation of propagation paths.\n"
12293  "\n"
12294  "This method calculates complete propagation paths in a stepwise\n"
12295  "manner. Each step is denoted as a \"ppath_step\" and is the path\n"
12296  "through/inside a single grid box.\n"
12297  "\n"
12298  "The definition of a propgation path cannot be accommodated here.\n"
12299  "For more information read the chapter on propagation paths in the\n"
12300  "ARTS user guide.\n"
12301  "\n"
12302  "This method should never be called directly. Use *ppathCalc* instead\n"
12303  "if you want to extract propagation paths.\n"),
12304  AUTHORS("Patrick Eriksson"),
12305  OUT("ppath"),
12306  GOUT(),
12307  GOUT_TYPE(),
12308  GOUT_DESC(),
12309  IN("ppath_step_agenda",
12310  "ppath_inside_cloudbox_do",
12311  "atmosphere_dim",
12312  "p_grid",
12313  "lat_grid",
12314  "lon_grid",
12315  "z_field",
12316  "f_grid",
12317  "refellipsoid",
12318  "z_surface",
12319  "cloudbox_on",
12320  "cloudbox_limits",
12321  "rte_pos",
12322  "rte_los",
12323  "ppath_lmax",
12324  "ppath_lraytrace"),
12325  GIN(),
12326  GIN_TYPE(),
12327  GIN_DEFAULT(),
12328  GIN_DESC()));
12329 
12330  md_data_raw.push_back(create_mdrecord(
12331  NAME("ppathWriteXMLPartial"),
12332  DESCRIPTION(
12333  "WSM to only write a reduced Ppath, omitting grid positions.\n"
12334  "\n"
12335  "The following fields are set to be empty: gp_p, gp_lat and gp_lon.\n"
12336  "This cam drastically decrease the time for reading the structure\n"
12337  "by some external software.\n"
12338  "\n"
12339  "If *file_index is >= 0, the variable is written to a file with name:\n"
12340  " <filename>.<file_index>.xml.\n"
12341  "where <file_index> is the value of *file_index*.\n"
12342  "\n"
12343  "This means that *filename* shall here not include the .xml\n"
12344  "extension. Omitting filename works as for *WriteXML*.\n"),
12345  AUTHORS("Oliver Lemke"),
12346  OUT(),
12347  GOUT(),
12348  GOUT_TYPE(),
12349  GOUT_DESC(),
12350  IN("output_file_format", "ppath"),
12351  GIN("filename", "file_index"),
12352  GIN_TYPE("String", "Index"),
12353  GIN_DEFAULT("", "-1"),
12354  GIN_DESC("File name. See above.",
12355  "Optional file index to append to filename.")));
12356 
12357  md_data_raw.push_back(create_mdrecord(
12358  NAME("ppath_stepGeometric"),
12359  DESCRIPTION(
12360  "Calculates a geometrical propagation path step.\n"
12361  "\n"
12362  "This function determines a propagation path step by pure\n"
12363  "geometrical calculations. That is, refraction is neglected. Path\n"
12364  "points are always included for crossings with the grids, tangent\n"
12365  "points and intersection points with the surface. The WSV *ppath_lmax*\n"
12366  "gives the option to include additional points to ensure that the\n"
12367  "distance along the path between the points does not exceed the\n"
12368  "selected maximum length. No additional points are included if\n"
12369  "*ppath_lmax* is set to <= 0.\n"
12370  "\n"
12371  "For further information, type see the on-line information for\n"
12372  "*ppath_step_agenda*.\n"),
12373  AUTHORS("Patrick Eriksson"),
12374  OUT("ppath_step"),
12375  GOUT(),
12376  GOUT_TYPE(),
12377  GOUT_DESC(),
12378  IN("ppath_step",
12379  "atmosphere_dim",
12380  "lat_grid",
12381  "lon_grid",
12382  "z_field",
12383  "refellipsoid",
12384  "z_surface",
12385  "ppath_lmax"),
12386  GIN(),
12387  GIN_TYPE(),
12388  GIN_DEFAULT(),
12389  GIN_DESC()));
12390 
12391  md_data_raw.push_back(create_mdrecord(
12392  NAME("ppath_stepRefractionBasic"),
12393  DESCRIPTION(
12394  "Calculates a propagation path step, considering refraction by a\n"
12395  "basic approach.\n"
12396  "\n"
12397  "Refraction is taken into account by probably the simplest approach\n"
12398  "possible. The path is treated to consist of piece-wise geometric\n"
12399  "steps. A geometric path step is calculated from each point by\n"
12400  "using the local line-of-sight. Snell's law for spherical symmetry\n"
12401  "is used for 1D to determine the zenith angle at the new point.\n"
12402  "For 2D and 3D, the zenith angle is calculated using the average\n"
12403  "gradient of the refractive index between the two points. For 3D,\n"
12404  "the azimuth angle is treated in the same way as the zenith one.\n"
12405  "\n"
12406  "The maximum length of each ray tracing step is given by the WSV\n"
12407  "*ppath_lraytrace*. The length will never exceed the given maximum,\n"
12408  "but it can be smaller. The ray tracing steps are only used to\n"
12409  "determine the path. Points to describe the path are included as\n"
12410  "for *ppath_stepGeometric*, this including the functionality of\n"
12411  "*ppath_lmax*.\n"),
12412  AUTHORS("Patrick Eriksson"),
12413  OUT("ppath_step"),
12414  GOUT(),
12415  GOUT_TYPE(),
12416  GOUT_DESC(),
12417  IN("refr_index_air_agenda",
12418  "ppath_step",
12419  "atmosphere_dim",
12420  "p_grid",
12421  "lat_grid",
12422  "lon_grid",
12423  "z_field",
12424  "t_field",
12425  "vmr_field",
12426  "refellipsoid",
12427  "z_surface",
12428  "f_grid",
12429  "ppath_lmax",
12430  "ppath_lraytrace"),
12431  GIN(),
12432  GIN_TYPE(),
12433  GIN_DEFAULT(),
12434  GIN_DESC()));
12435 
12436  md_data_raw.push_back(create_mdrecord(
12437  NAME("ppvar_optical_depthFromPpvar_trans_cumulat"),
12438  DESCRIPTION(
12439  "Sets *ppvar_optical_depth* according to provided transmission data.\n"
12440  "\n"
12441  "The values in ppvar_optical_depth are set to\n"
12442  "-log( ppvar_trans_cumulat(joker,joker,0,0) ).\n"),
12443  AUTHORS("Patrick Eriksson"),
12444  OUT("ppvar_optical_depth"),
12445  GOUT(),
12446  GOUT_TYPE(),
12447  GOUT_DESC(),
12448  IN("ppvar_trans_cumulat"),
12449  GIN(),
12450  GIN_TYPE(),
12451  GIN_DEFAULT(),
12452  GIN_DESC()));
12453 
12454  md_data_raw.push_back(
12455  create_mdrecord(NAME("Print"),
12456  DESCRIPTION("Prints a variable on the screen.\n"),
12457  AUTHORS("Oliver Lemke"),
12458  OUT(),
12459  GOUT(),
12460  GOUT_TYPE(),
12461  GOUT_DESC(),
12462  IN(),
12463  GIN("in", "level"),
12464  GIN_TYPE("Any", "Index"),
12465  GIN_DEFAULT(NODEF, "1"),
12466  GIN_DESC("Variable to be printed.", "Output level to use."),
12467  SETMETHOD(false),
12468  AGENDAMETHOD(false),
12469  USES_TEMPLATES(true)));
12470 
12471  md_data_raw.push_back(
12472  create_mdrecord(NAME("PrintPhysicalConstants"),
12473  DESCRIPTION("Prints (most) physical constants used in ARTS.\n"),
12474  AUTHORS("Richard Larsson"),
12475  OUT(),
12476  GOUT(),
12477  GOUT_TYPE(),
12478  GOUT_DESC(),
12479  IN(),
12480  GIN(),
12481  GIN_TYPE(),
12482  GIN_DEFAULT(),
12483  GIN_DESC()));
12484 
12485  md_data_raw.push_back(
12486  create_mdrecord(NAME("PrintWorkspace"),
12487  DESCRIPTION("Prints a list of the workspace variables.\n"),
12488  AUTHORS("Oliver Lemke"),
12489  OUT(),
12490  GOUT(),
12491  GOUT_TYPE(),
12492  GOUT_DESC(),
12493  IN(),
12494  GIN("only_allocated", "level"),
12495  GIN_TYPE("Index", "Index"),
12496  GIN_DEFAULT("1", "1"),
12497  GIN_DESC("Flag for printing either all variables (0) or only "
12498  "allocated ones (1).",
12499  "Output level to use."),
12500  SETMETHOD(false),
12501  AGENDAMETHOD(false),
12502  USES_TEMPLATES(true),
12503  PASSWORKSPACE(true)));
12504 
12505  md_data_raw.push_back(create_mdrecord(
12506  NAME("ZFromPSimple"),
12507  DESCRIPTION(
12508  "Simple conversion from pressure to altitude.\n"
12509  "\n"
12510  "This function converts a vector of pressure values to an approximate vector\n"
12511  "of corresponding heights. The formula used to convert pressure to height is:\n"
12512  "z = 16000 * (5.0 - log10(p))"
12513  "That is, a pressure is assumed to decrease by a factor of 10 every 16km.\n"
12514  "\n"
12515  "Note that all pressure values in the vector must be greater than 0.01.\n"),
12516  AUTHORS("Simon Pfreundschuh"),
12517  OUT(),
12518  GOUT("z_grid"),
12519  GOUT_TYPE("Vector"),
12520  GOUT_DESC("Approximate heights of pressure grid points."),
12521  IN(),
12522  GIN("p_grid"),
12523  GIN_TYPE("Vector"),
12524  GIN_DEFAULT(NODEF),
12525  GIN_DESC("Pressure grid."),
12526  SETMETHOD(false),
12527  AGENDAMETHOD(false)));
12528 
12529  md_data_raw.push_back(create_mdrecord(
12530  NAME("PFromZSimple"),
12531  DESCRIPTION(
12532  "Simple conversion from altitude to pressure.\n"
12533  "\n"
12534  "This function converts a vector of altitudes to an approximate vector\n"
12535  "of corresponding pressures. The formula used to convert altitide z to height\n"
12536  " is:\n"
12537  "p = 10.0^(5.0 - z / 1600)\n"
12538  "\n"
12539  "Note that all altitude values in the vector must be less than 120 km, \n"
12540  " otherwise an error will be thrown.\n"),
12541  AUTHORS("Simon Pfreundschuh"),
12542  OUT(),
12543  GOUT("p_grid"),
12544  GOUT_TYPE("Vector"),
12545  GOUT_DESC("Approximate pressures of corresponding to given altitudes."),
12546  IN(),
12547  GIN("z_grid"),
12548  GIN_TYPE("Vector"),
12549  GIN_DEFAULT(NODEF),
12550  GIN_DESC("Altitude grid."),
12551  SETMETHOD(false),
12552  AGENDAMETHOD(false)));
12553 
12554  md_data_raw.push_back(create_mdrecord(
12555  NAME("propmat_clearskyAddFaraday"),
12556  DESCRIPTION(
12557  "Calculates absorption matrix describing Faraday rotation.\n"
12558  "\n"
12559  "Faraday rotation is a change of polarization state of an\n"
12560  "electromagnetic wave propagating through charged matter by\n"
12561  "interaction with a magnetic field. Hence, this method requires\n"
12562  "*abs_species* to contain 'free_electrons' and electron content field\n"
12563  "(as part of *vmr_field*) as well as magnetic field (*mag_u_field*,\n"
12564  "*mag_v_field*, *mag_w_field*) to be specified.\n"
12565  "\n"
12566  "Faraday rotation affects Stokes parameters 2 and 3 (but not\n"
12567  "intensity!). Therefore, this method requires stokes_dim>2.\n"
12568  "\n"
12569  "Like all 'propmat_clearskyAdd*' methods, the method is additive,\n"
12570  "i.e., does not overwrite the propagation matrix *propmat_clearsky*,\n"
12571  "but adds further contributions.\n"),
12572  AUTHORS("Patrick Eriksson"),
12573  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12574  GOUT(),
12575  GOUT_TYPE(),
12576  GOUT_DESC(),
12577  IN("propmat_clearsky",
12578  "dpropmat_clearsky_dx",
12579  "stokes_dim",
12580  "atmosphere_dim",
12581  "f_grid",
12582  "abs_species",
12583  "jacobian_quantities",
12584  "rtp_vmr",
12585  "rtp_los",
12586  "rtp_mag"),
12587  GIN(),
12588  GIN_TYPE(),
12589  GIN_DEFAULT(),
12590  GIN_DESC()));
12591 
12592  md_data_raw.push_back(create_mdrecord(
12593  NAME("propmat_clearskyAddFromAbsCoefPerSpecies"),
12594  DESCRIPTION(
12595  "Copy *propmat_clearsky* from *abs_coef_per_species*. This is handy for putting an\n"
12596  "explicit line-by-line calculation into the\n"
12597  "*propmat_clearsky_agenda*. This method is also used internally by.\n"
12598  "*propmat_clearskyAddOnTheFly*.\n"
12599  "Like all other propmat_clearsky methods, this method does not overwrite\n"
12600  "prior content of *propmat_clearsky*, but adds to it.\n"),
12601  AUTHORS("Stefan Buehler"),
12602  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12603  GOUT(),
12604  GOUT_TYPE(),
12605  GOUT_DESC(),
12606  IN("propmat_clearsky", "abs_coef_per_species", "dabs_coef_dx"),
12607  GIN(),
12608  GIN_TYPE(),
12609  GIN_DEFAULT(),
12610  GIN_DESC()));
12611 
12612  md_data_raw.push_back(create_mdrecord(
12613  NAME("propmat_clearskyAddFromLookup"),
12614  DESCRIPTION(
12615  "Extract gas absorption coefficients from lookup table.\n"
12616  "\n"
12617  "This extracts the absorption coefficient for all species from the\n"
12618  "lookup table, and adds them to the propagation matrix. Extraction is\n"
12619  "for one specific atmospheric condition, i.e., a set of pressure,\n"
12620  "temperature, and VMR values.\n"
12621  "\n"
12622  "Some special species are ignored, for example Zeeman species and free\n"
12623  "electrons, since their absorption properties are not simple scalars\n"
12624  "and cannot be handled by the lookup table.\n"
12625  "\n"
12626  "The interpolation order in T and H2O is given by *abs_t_interp_order*\n"
12627  "and *abs_nls_interp_order*, respectively.\n"
12628  "\n"
12629  "Extraction is done for the frequencies in f_grid. Frequency\n"
12630  "interpolation is controlled by *abs_f_interp_order*. If this is zero,\n"
12631  "then f_grid must either be the same as the internal frequency grid of\n"
12632  "the lookup table (for efficiency reasons, only the first and last\n"
12633  "element of f_grid are checked), or must have only a single element.\n"
12634  "If *abs_f_interp_order* is above zero, then frequency is interpolated\n"
12635  "along with the other interpolation dimensions. This is useful for\n"
12636  "calculations with Doppler shift.\n"
12637  "\n"
12638  "For Doppler calculations, you should generate the table with a\n"
12639  "somewhat larger frequency grid than the calculation itself has, since\n"
12640  "the Doppler shift will push the frequency grid out of the table range\n"
12641  "on one side.\n"
12642  "\n"
12643  "Some extrapolation is allowed. For pressure and frequency interpolation\n"
12644  "the standard extrapolation factor of 0.5 is applied. The factor is the\n"
12645  "default for temperature and VMR interpolation, but the extrapolation\n"
12646  "limit can here be adjusted by the *extpolfac* argument.\n"
12647  "\n"
12648  "See also: *propmat_clearskyAddOnTheFly*.\n"),
12649  AUTHORS("Stefan Buehler, Richard Larsson"),
12650  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12651  GOUT(),
12652  GOUT_TYPE(),
12653  GOUT_DESC(),
12654  IN("propmat_clearsky",
12655  "dpropmat_clearsky_dx",
12656  "abs_lookup",
12657  "abs_lookup_is_adapted",
12658  "abs_p_interp_order",
12659  "abs_t_interp_order",
12660  "abs_nls_interp_order",
12661  "abs_f_interp_order",
12662  "f_grid",
12663  "rtp_pressure",
12664  "rtp_temperature",
12665  "rtp_vmr",
12666  "jacobian_quantities"),
12667  GIN("extpolfac"),
12668  GIN_TYPE("Numeric"),
12669  GIN_DEFAULT("0.5"),
12670  GIN_DESC("Extrapolation factor (for temperature and VMR grid edges).")));
12671 
12672  md_data_raw.push_back(create_mdrecord(
12673  NAME("propmat_clearskyAddHitranLineMixingLines"),
12674  DESCRIPTION(
12675  "Calculates gas absorption coefficients line-by-line for HITRAN line mixed data.\n"
12676  "\n"
12677  "*Wigner6Init* or *Wigner3Init* must be called before this function.\n"
12678  "\n"
12679  "\n"
12680  "Please ensure you cite the original authors when you use this function:\n"
12681  "\tJ. Lamouroux, L. Realia, X. Thomas, et al., J.Q.S.R.T. 151 (2015), 88-96\n"),
12682  AUTHORS("Richard Larsson"),
12683  OUT("propmat_clearsky"),
12684  GOUT(),
12685  GOUT_TYPE(),
12686  GOUT_DESC(),
12687  IN("propmat_clearsky",
12688  "abs_hitran_relmat_data",
12689  "abs_lines_per_species",
12690  "f_grid",
12691  "abs_species",
12692  "jacobian_quantities",
12693  "partition_functions",
12694  "rtp_pressure",
12695  "rtp_temperature",
12696  "rtp_vmr"),
12697  GIN(),
12698  GIN_TYPE(),
12699  GIN_DEFAULT(),
12700  GIN_DESC()));
12701 
12702  md_data_raw.push_back(create_mdrecord(
12703  NAME("propmat_clearskyAddOnTheFly"),
12704  DESCRIPTION(
12705  "Calculates gas absorption coefficients line-by-line.\n"
12706  "\n"
12707  "This method can be used inside *propmat_clearsky_agenda* just like\n"
12708  "*propmat_clearskyAddFromLookup*. It is a shortcut for putting in some\n"
12709  "other methods explicitly, namely:\n"
12710  "\n"
12711  " 1. *AbsInputFromRteScalars*\n"
12712  " 2. Execute *abs_xsec_agenda*\n"
12713  " 3. *abs_coefCalcFromXsec*\n"
12714  " 4. *propmat_clearskyAddFromAbsCoefPerSpecies*\n"
12715  "\n"
12716  "The calculation is for one specific atmospheric condition, i.e., a set\n"
12717  "of pressure, temperature, and VMR values.\n"),
12718  AUTHORS("Stefan Buehler, Richard Larsson"),
12719  OUT("propmat_clearsky",
12720  "nlte_source",
12721  "dpropmat_clearsky_dx",
12722  "dnlte_dx_source",
12723  "nlte_dsource_dx"),
12724  GOUT(),
12725  GOUT_TYPE(),
12726  GOUT_DESC(),
12727  IN("propmat_clearsky",
12728  "nlte_source",
12729  "dpropmat_clearsky_dx",
12730  "dnlte_dx_source",
12731  "nlte_dsource_dx",
12732  "f_grid",
12733  "abs_species",
12734  "jacobian_quantities",
12735  "rtp_pressure",
12736  "rtp_temperature",
12737  "rtp_nlte",
12738  "rtp_vmr",
12739  "abs_xsec_agenda"),
12740  GIN(),
12741  GIN_TYPE(),
12742  GIN_DEFAULT(),
12743  GIN_DESC()));
12744 
12745  md_data_raw.push_back(create_mdrecord(
12746  NAME("propmat_clearskyAddParticles"),
12747  DESCRIPTION(
12748  "Calculates absorption coefficients of particles to be used in\n"
12749  "clearsky (non-cloudbox) calculations.\n"
12750  "\n"
12751  "This is a method to include particles (neglecting possible\n"
12752  "scattering components) in a clearsky calculation, i.e. without\n"
12753  "applying the cloudbox and scattering solvers. Particles are handled\n"
12754  "as absorbing species with one instance of 'particles' per scattering\n"
12755  "element considered added to *abs_species*. Particle absorption cross-\n"
12756  "sections at current atmospheric conditions are extracted from the\n"
12757  "single scattering data stored in *scat_data*, i.e., one array\n"
12758  "element per 'particles' instance in *abs_species* is required. Number\n"
12759  "densities are stored in *vmr_field_raw* or *vmr_field* as for all\n"
12760  "*abs_species*, but can be taken from (raw) pnd_field type data.\n"
12761  "\n"
12762  "Note that the absorption coefficient is applied both in the\n"
12763  "extinction term (neglecting scattering out of the line of sight)\n"
12764  "and the emission term (neglecting the scattering source term, i.e.\n"
12765  "scattering into the line of sight).\n"
12766  "\n"
12767  "Optionally, particle extinction (sum of absorption and scattering\n"
12768  "coefficient) can be used instead of absorption only. To choose this\n"
12769  "case, set the *use_abs_as_ext* flag to 0. However, be aware that\n"
12770  "this creates some unphysical emission term, hence is only suitable,\n"
12771  "where the source term is negligible anyways, e.g. for occultation\n"
12772  "simulations.\n"
12773  "\n"
12774  "A line-of-sight direction *rtp_los* is required as particles can\n"
12775  "exhibit directional dependent absorption properties, which is taken\n"
12776  "into account by this method."
12777  "\n"
12778  "*ScatElementsToabs_speciesAdd* can be used to add all required\n"
12779  "settings/data for individual scattering elements at once, i.e. a\n"
12780  " 'particles' tag to *abs_species*, a set of single scattering data to\n"
12781  "*scat_data* and a number density field to *vmr_field_raw*\n"
12782  "(*vmr_field* is derived applying AtmFieldsCalc once VMRs for all\n"
12783  "*abs_species* have been added) is appended for each scattering\n"
12784  "element.\n"
12785  "\n"
12786  "Like all 'propmat_clearskyAdd*' methods, the method is additive,\n"
12787  "i.e., does not overwrite the propagation matrix *propmat_clearsky*,\n"
12788  "but adds further contributions.\n"),
12789  AUTHORS("Jana Mendrok"),
12790  OUT("propmat_clearsky", "dpropmat_clearsky_dx"),
12791  GOUT(),
12792  GOUT_TYPE(),
12793  GOUT_DESC(),
12794  IN("propmat_clearsky",
12795  "dpropmat_clearsky_dx",
12796  "stokes_dim",
12797  "atmosphere_dim",
12798  "f_grid",
12799  "abs_species",
12800  "jacobian_quantities",
12801  "rtp_vmr",
12802  "rtp_los",
12803  "rtp_temperature",
12804  "scat_data",
12805  "scat_data_checked"),
12806  GIN("use_abs_as_ext"),
12807  GIN_TYPE("Index"),
12808  GIN_DEFAULT("1"),
12809  GIN_DESC("A flag with value 1 or 0. If set to one, particle absorption\n"
12810  "is used in extinction and emission parts of the RT equation,\n"
12811  "and scattering out of LOS as well as into LOS is neglected.\n"
12812  "Otherwise, particle extinction (absorption+scattering) is\n"
12813  "applied in both the extinction as well as the emission part\n"
12814  "of the RT equation. That is, true extinction is applied, but\n"
12815  "emission also includes a pseudo-emission contribution from\n"
12816  "the scattering coefficient.\n")));
12817 
12818  md_data_raw.push_back(create_mdrecord(
12819  NAME("propmat_clearskyAddZeeman"),
12820  DESCRIPTION(
12821  "Calculates Zeeman-affected polarized propagation matrix and its\n"
12822  "derivatives.\n"
12823  "\n"
12824  "Otherwise as *propmat_clearskyAddFromLookup*\n"),
12825  AUTHORS("Richard Larsson"),
12826  OUT("propmat_clearsky",
12827  "nlte_source",
12828  "dpropmat_clearsky_dx",
12829  "dnlte_dx_source",
12830  "nlte_dsource_dx"),
12831  GOUT(),
12832  GOUT_TYPE(),
12833  GOUT_DESC(),
12834  IN("propmat_clearsky",
12835  "nlte_source",
12836  "dpropmat_clearsky_dx",
12837  "dnlte_dx_source",
12838  "nlte_dsource_dx",
12839  "abs_lines_per_species",
12840  "f_grid",
12841  "abs_species",
12842  "jacobian_quantities",
12843  "isotopologue_ratios",
12844  "partition_functions",
12845  "rtp_pressure",
12846  "rtp_temperature",
12847  "rtp_nlte",
12848  "rtp_vmr",
12849  "rtp_mag",
12850  "rtp_los",
12851  "atmosphere_dim",
12852  "lbl_checked"),
12853  GIN("manual_zeeman_tag",
12854  "manual_zeeman_magnetic_field_strength",
12855  "manual_zeeman_theta",
12856  "manual_zeeman_eta"),
12857  GIN_TYPE("Index", "Numeric", "Numeric", "Numeric"),
12858  GIN_DEFAULT("0", "1.0", "0.0", "0.0"),
12859  GIN_DESC("Manual angles tag",
12860  "Manual Magnetic Field Strength",
12861  "Manual theta given positive tag",
12862  "Manual eta given positive tag")));
12863 
12864  md_data_raw.push_back(create_mdrecord(
12865  NAME("propmat_clearskyInit"),
12866  DESCRIPTION(
12867  "Initialize *propmat_clearsky* and *nlte_source*.\n"
12868  "\n"
12869  "This method must be used inside *propmat_clearsky_agenda* and then\n"
12870  "be called first.\n"),
12871  AUTHORS("Oliver Lemke, Richard Larsson"),
12872  OUT("propmat_clearsky",
12873  "nlte_source",
12874  "dpropmat_clearsky_dx",
12875  "dnlte_dx_source",
12876  "nlte_dsource_dx"),
12877  GOUT(),
12878  GOUT_TYPE(),
12879  GOUT_DESC(),
12880  IN("abs_species",
12881  "jacobian_quantities",
12882  "f_grid",
12883  "stokes_dim",
12884  "propmat_clearsky_agenda_checked",
12885  "nlte_do"),
12886  GIN(),
12887  GIN_TYPE(),
12888  GIN_DEFAULT(),
12889  GIN_DESC()));
12890 
12891  md_data_raw.push_back(create_mdrecord(
12892  NAME("propmat_clearskyZero"),
12893  DESCRIPTION(
12894  "Sets *propmat_clearsky* to match zero attenuation.\n"
12895  "\n"
12896  "Use this method just if you know what you are doing!\n"
12897  "\n"
12898  "If you want to make a calculation with no clear-sky attenuation at\n"
12899  "all, fill *propmat_clearsky_agenda* with this method and required\n"
12900  "Ignore statements (don't include *propmat_clearskyInit*).\n"),
12901  AUTHORS("Patrick Eriksson"),
12902  OUT("propmat_clearsky"),
12903  GOUT(),
12904  GOUT_TYPE(),
12905  GOUT_DESC(),
12906  IN("f_grid", "stokes_dim"),
12907  GIN(),
12908  GIN_TYPE(),
12909  GIN_DEFAULT(),
12910  GIN_DESC()));
12911 
12912  md_data_raw.push_back(create_mdrecord(
12913  NAME("propmat_clearskyForceNegativeToZero"),
12914  DESCRIPTION("Sets *propmat_clearsky* to match zero attenuation\n"
12915  "if negative value. Useful for line mixing in some cases.\n"
12916  "\n"
12917  "Use this method just if you know what you are doing!\n"),
12918  AUTHORS("Richard Larsson"),
12919  OUT("propmat_clearsky"),
12920  GOUT(),
12921  GOUT_TYPE(),
12922  GOUT_DESC(),
12923  IN("propmat_clearsky"),
12924  GIN(),
12925  GIN_TYPE(),
12926  GIN_DEFAULT(),
12927  GIN_DESC()));
12928 
12929  md_data_raw.push_back(create_mdrecord(
12930  NAME("propmat_clearsky_agenda_checkedCalc"),
12931  DESCRIPTION(
12932  "Checks if the *propmat_clearsky_agenda* contains all necessary\n"
12933  "methods to calculate all the species in *abs_species*.\n"
12934  "\n"
12935  "This method should be called just before the *propmat_clearsky_agenda*\n"
12936  "is used, e.g. *DoitGetIncoming*, *ybatchCalc*, *yCalc*\n"),
12937  AUTHORS("Oliver Lemke"),
12938  OUT("propmat_clearsky_agenda_checked"),
12939  GOUT(),
12940  GOUT_TYPE(),
12941  GOUT_DESC(),
12942  IN("abs_species", "propmat_clearsky_agenda"),
12943  GIN(),
12944  GIN_TYPE(),
12945  GIN_DEFAULT(),
12946  GIN_DESC()));
12947 
12948  md_data_raw.push_back(create_mdrecord(
12949  NAME("propmat_clearsky_fieldCalc"),
12950  DESCRIPTION(
12951  "Calculate (vector) gas absorption coefficients for all points in the\n"
12952  "atmosphere.\n"
12953  "\n"
12954  "This is useful in two different contexts:\n"
12955  "\n"
12956  "1. For testing and plotting gas absorption. (For RT calculations, gas\n"
12957  "absorption is calculated or extracted locally, therefore there is no\n"
12958  "need to calculate a global field. But this method is handy for easy\n"
12959  "plotting of absorption vs. pressure, for example.)\n"
12960  "\n"
12961  "2. Inside the scattering region, monochromatic absorption is\n"
12962  "pre-calculated for the entire atmospheric field.\n"
12963  "\n"
12964  "The calculation itself is performed by the\n"
12965  "*propmat_clearsky_agenda*.\n"),
12966  AUTHORS("Stefan Buehler, Richard Larsson"),
12967  OUT("propmat_clearsky_field", "nlte_source_field"),
12968  GOUT(),
12969  GOUT_TYPE(),
12970  GOUT_DESC(),
12971  IN("atmfields_checked",
12972  "f_grid",
12973  "stokes_dim",
12974  "p_grid",
12975  "lat_grid",
12976  "lon_grid",
12977  "t_field",
12978  "vmr_field",
12979  "nlte_field",
12980  "mag_u_field",
12981  "mag_v_field",
12982  "mag_w_field",
12983  "propmat_clearsky_agenda"),
12984  GIN("doppler", "los"),
12985  GIN_TYPE("Vector", "Vector"),
12986  GIN_DEFAULT("[]", "[]"),
12987  GIN_DESC("A vector of doppler shift values in Hz. Must either be "
12988  "empty or have same dimension as p_grid.",
12989  "Line of sight")));
12990 
12991  md_data_raw.push_back(create_mdrecord(
12992  NAME("psdAbelBoutle12"),
12993  DESCRIPTION(
12994  "Abel and Boutle [2012] particle size distribution for rain.\n"
12995  "\n"
12996  "Reference: Abel and Boutle, An improved representation of the \n"
12997  "raindrop size distribution for single-moment microphysics schemes,\n"
12998  "QJRMS, 2012.\n"
12999  "\n"
13000  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13001  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13002  "The input data in *pnd_agenda_input* shall be rain mass content in\n"
13003  "unit of [kg/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13004  "but the same name must be used in *particle_bulkprop_names* and\n"
13005  "*dpnd_data_dx_names*.\n"
13006  "\n"
13007  "Particles are assumed to be near-spherical, ie. *psd_size_grid* can\n"
13008  "either be in terms of volume (or mass) equivalent diameter or\n"
13009  "maximum diameter.\n"
13010  "\n"
13011  "Derivatives are obtained analytically.\n"
13012  "\n"
13013  "The validity range of mass content is not limited. Negative mass\n"
13014  "contents will produce negative psd values following a distribution\n"
13015  "given by abs(RWC), ie. abs(psd)=f(abs(RWC)).\n"
13016  "\n"
13017  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13018  "picky=0, or an error is thrown if picky=1.\n"),
13019  AUTHORS("Patrick Eriksson"),
13020  OUT("psd_data", "dpsd_data_dx"),
13021  GOUT(),
13022  GOUT_TYPE(),
13023  GOUT_DESC(),
13024  IN("psd_size_grid",
13025  "pnd_agenda_input_t",
13026  "pnd_agenda_input",
13027  "pnd_agenda_input_names",
13028  "dpnd_data_dx_names",
13029  "scat_species_a",
13030  "scat_species_b"),
13031  GIN("t_min", "t_max", "picky"),
13032  GIN_TYPE("Numeric", "Numeric", "Index"),
13033  GIN_DEFAULT("273", "373", "0"),
13034  GIN_DESC(
13035  "Low temperature limit to calculate a psd.",
13036  "High temperature limit to calculate a psd.",
13037  "Flag whether to be strict with parametrization value checks.")));
13038 
13039  md_data_raw.push_back(create_mdrecord(
13040  NAME("psdDelanoeEtAl14"),
13041  DESCRIPTION(
13042  "Normalized PSD as proposed in Delanoë et al. ((2014)),\n"
13043  "\n"
13044  "Title and journal:\n"
13045  "'Normalized particle size distribution for remote sensing\n"
13046  "application', J. Geophys. Res. Atmos., 119, 4204–422.\n"
13047  "\n"
13048  "The PSD has two independent parameters *n0Star*, the intercept\n"
13049  "parameter, and *Dm*, the volume-weighted diameter.\n"
13050  "This implementation expects as input two out of the following\n"
13051  "three quantities: *iwc*, *n0Star*, *Dm*. In this case one of\n"
13052  "the input parameters *iwc*, *n0Star*, *Dm* must be set to -999.\n*"
13053  "It is also possible to provide only *iwc*, in which case an a\n"
13054  "priori assumption will be used to deduce *n0Star* from temperature.\n"
13055  "In this case both *n0Star* and *Dm* must be set to -999.0.\n"
13056  "\n"
13057  "This PSD is not defined for vanishing concentrations of\n"
13058  "scatterers as it requires normalization by *Dm*. It is up\n"
13059  "to the user to ensure that the value of *Dm* is sufficiently\n"
13060  "large. An error is thrown if *Dm* is zero or below the value\n"
13061  "provided by *dm_min*.\n"),
13062  AUTHORS("Simon Pfreundschuh"),
13063  OUT("psd_data", "dpsd_data_dx"),
13064  GOUT(),
13065  GOUT_TYPE(),
13066  GOUT_DESC(),
13067  IN("psd_size_grid",
13068  "pnd_agenda_input_t",
13069  "pnd_agenda_input",
13070  "pnd_agenda_input_names",
13071  "dpnd_data_dx_names"),
13072  GIN("iwc",
13073  "n0Star",
13074  "Dm",
13075  "rho",
13076  "alpha",
13077  "beta",
13078  "t_min",
13079  "t_max",
13080  "dm_min",
13081  "picky"),
13082  GIN_TYPE("Numeric",
13083  "Numeric",
13084  "Numeric",
13085  "Numeric",
13086  "Numeric",
13087  "Numeric",
13088  "Numeric",
13089  "Numeric",
13090  "Numeric",
13091  "Index"),
13092  GIN_DEFAULT("NaN",
13093  "NaN",
13094  "NaN",
13095  "917.6",
13096  "-0.237",
13097  "1.839",
13098  NODEF,
13099  NODEF,
13100  "-1.0",
13101  "0"),
13102  GIN_DESC(
13103  "Ice water content",
13104  "Intercept parameter",
13105  "Volume weighted diameter",
13106  "Density of ice",
13107  "*alpha* parameter of the shape function",
13108  "*beta* paramter of the shape function",
13109  "Low temperature limit to calculate a psd.",
13110  "High temperature limit to calculate a psd.",
13111  "Lower threshold for *Dm* below which an error is thrown.",
13112  "Flag whether to be strict with parametrization value checks.")));
13113 
13114  md_data_raw.push_back(create_mdrecord(
13115  NAME("psdFieldEtAl07"),
13116  DESCRIPTION(
13117  "The Field et al. [2007] particle size distribution for snow and\n"
13118  "cloud ice.\n"
13119  "\n"
13120  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13121  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13122  "The input data in *pnd_agenda_input* shall be ice hydrometeor mass\n"
13123  "content in unit of [kg/m3]. The naming used is *pnd_agenda_input_names*\n"
13124  "is free but the same name must be used in *particle_bulkprop_names* and\n"
13125  "*dpnd_data_dx_names*.\n"
13126  "\n"
13127  "*psd_size_grid* shall contain size in terms of maximum diameter.\n"
13128  "\n"
13129  "Derivatives are obtained by perturbation of 0.1%, but not less than\n"
13130  "1e-9 kg/m3.\n"
13131  "\n"
13132  "Both parametrization for tropics and midlatitudes are handled,\n"
13133  "governed by setting of *regime*, where \"TR\" selectes the tropical\n"
13134  "case, and \"ML\" the midlatitude one.\n"
13135  "\n"
13136  "The validity range of mass content is not limited. Negative mass\n"
13137  "contents will produce negative psd values following a distribution\n"
13138  "given by abs(IWC), ie. abs(psd)=f(abs(IWC)).\n"
13139  "\n"
13140  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13141  "picky=0, or an error is thrown if picky=1.\n"
13142  "\n"
13143  "For temperatures below *t_min_psd*, the size distribution is\n"
13144  "calculated for T = *t_min_psd*. Likewise, for temperatures above\n"
13145  "*t_max_psd*, the distribution is derived for T = *t_max_psd*.\n"
13146  "\n"
13147  "Defaults of *t_min_psd* and *t_max_psd* were set considering that\n"
13148  "the parametrization has been derived from measurements over\n"
13149  "temperatures of -60C to 0C."
13150  "\n"
13151  "Checks of the sanity of the mass-dimension relationship are performed\n"
13152  "Errors are thrown if:\n"
13153  "- Mass-dimension relation exponent *scat_species_b* is outside\n"
13154  " [*beta_min*, *beta_max*].\n"),
13155  AUTHORS("Jana Mendrok"),
13156  OUT("psd_data", "dpsd_data_dx"),
13157  GOUT(),
13158  GOUT_TYPE(),
13159  GOUT_DESC(),
13160  IN("psd_size_grid",
13161  "pnd_agenda_input_t",
13162  "pnd_agenda_input",
13163  "pnd_agenda_input_names",
13164  "dpnd_data_dx_names",
13165  "scat_species_a",
13166  "scat_species_b"),
13167  GIN("regime",
13168  "t_min",
13169  "t_max",
13170  "t_min_psd",
13171  "t_max_psd",
13172  "beta_min",
13173  "beta_max",
13174  "picky"),
13175  GIN_TYPE("String",
13176  "Numeric",
13177  "Numeric",
13178  "Numeric",
13179  "Numeric",
13180  "Numeric",
13181  "Numeric",
13182  "Index"),
13183  GIN_DEFAULT(NODEF, "0", "290.", "200.", "273.15", "1.01", "4", "0"),
13184  GIN_DESC(
13185  "Parametrization regime (\"TR\"=tropical or \"ML\"=midlatitude).",
13186  "Low temperature limit to calculate a psd.",
13187  "High temperature limit to calculate a psd.",
13188  "Low temperature limit to use as paramtrization temperature.",
13189  "High temperature limit to use as paramtrization temperature.",
13190  "Low *b* limit (only if picky).",
13191  "High *b* limit (only if picky).",
13192  "Flag whether to be strict with parametrization value checks.")));
13193 
13194  md_data_raw.push_back(create_mdrecord(
13195  NAME("psdFieldEtAl19"),
13196  DESCRIPTION(
13197  "The Field [2019] particle size distribution for hail.\n"
13198  "\n"
13199  "Reference: Field, Normalized hail particle size distributions from the T-28\n"
13200  "storm-penetrating aircraft, JAMC, 2019\n"
13201  "\n"
13202  "This is a 1-parmater PSD i.e. *pnd_agenda_input* shall have one column and\n"
13203  "*pnd_agenda_input_names* shall contain a single string.\n"
13204  "The input data in *pnd_agenda_input* shall be hail mass content in\n"
13205  "unit of [kg/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13206  "but the same name must be used in *particle_bulkprop_names* and\n"
13207  "*dpnd_data_dx_names*.\n"
13208  "The parameters assume a constant effective density, i.e. scat_species_b \approx 3\n"
13209  "\n"
13210  "Derivatives are obtained analytically.\n"
13211  "\n"
13212  "The validity range of mass content is not limited. Negative mass\n"
13213  "contents will produce negative psd values following a distribution\n"
13214  "given by abs(HWC), ie. abs(psd)=f(abs(HWC)).\n"
13215  "\n"
13216  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13217  "picky=0, or an error is thrown if picky=1.\n"),
13218  AUTHORS("Stuart Fox"),
13219  OUT("psd_data", "dpsd_data_dx"),
13220  GOUT(),
13221  GOUT_TYPE(),
13222  GOUT_DESC(),
13223  IN("psd_size_grid",
13224  "pnd_agenda_input_t",
13225  "pnd_agenda_input",
13226  "pnd_agenda_input_names",
13227  "dpnd_data_dx_names",
13228  "scat_species_a",
13229  "scat_species_b"),
13230  GIN("t_min", "t_max", "picky"),
13231  GIN_TYPE("Numeric", "Numeric", "Index"),
13232  GIN_DEFAULT(NODEF, NODEF, "0"),
13233  GIN_DESC(
13234  "Low temperature limit to calculate a psd.",
13235  "High temperature limit to calculate a psd.",
13236  "Flag whether to be strict with parametrization value checks.")));
13237 
13238  md_data_raw.push_back(create_mdrecord(
13239  NAME("psdMcFarquaharHeymsfield97"),
13240  DESCRIPTION(
13241  "McFarquahar and Heymsfield [1997] particle size distribution\n"
13242  "for cloud ice.\n"
13243  "\n"
13244  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13245  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13246  "The input data in *pnd_agenda_input* shall be ice hydrometeor mass\n"
13247  "content in unit of [kg/m3]. The naming used is *pnd_agenda_input_names*\n"
13248  "is free but the same name must be used in *particle_bulkprop_names* and\n"
13249  "*dpnd_data_dx_names*.\n"
13250  "\n"
13251  "*psd_size_grid* shall contain size in terms of volume equivalent diameter.\n"
13252  "\n"
13253  "Derivatives are obtained by perturbation of 0.1%, but not less than\n"
13254  "1e-9 kg/m3.\n"
13255  "\n"
13256  "The validity range of mass content is not limited. Negative mass\n"
13257  "contents will produce negative psd values following a distribution\n"
13258  "given by abs(IWC), ie. abs(psd)=f(abs(IWC)).\n"
13259  "\n"
13260  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13261  "picky=0, or an error is thrown if picky=1.\n"
13262  "\n"
13263  "For temperatures below *t_min_psd*, the size distribution is\n"
13264  "calculated for T = *t_min_psd*. Likewise, for temperatures above\n"
13265  "*t_max_psd*, the distribution is derived for T = *t_max_psd*.\n"
13266  "\n"
13267  "Defaults of *t_min_psd* and *t_max_psd* were set considering that\n"
13268  "the parametrization has been derived from measurements over\n"
13269  "temperatures of -70C to -20C."
13270  "\n"
13271  "The noisy option can not be used together with calculation of\n"
13272  "derivatives (ie. when *dpnd_data_dx_names* is not empty).\n"),
13273  AUTHORS("Patrick Eriksson, Jana Mendrok"),
13274  OUT("psd_data", "dpsd_data_dx"),
13275  GOUT(),
13276  GOUT_TYPE(),
13277  GOUT_DESC(),
13278  IN("psd_size_grid",
13279  "pnd_agenda_input_t",
13280  "pnd_agenda_input",
13281  "pnd_agenda_input_names",
13282  "dpnd_data_dx_names",
13283  "scat_species_a",
13284  "scat_species_b"),
13285  GIN("t_min", "t_max", "t_min_psd", "t_max_psd", "picky", "noisy"),
13286  GIN_TYPE("Numeric", "Numeric", "Numeric", "Numeric", "Index", "Index"),
13287  GIN_DEFAULT("0", "280.", "180", "273.15", "0", "0"),
13288  GIN_DESC("Low temperature limit to calculate a psd.",
13289  "High temperature limit to calculate a psd.",
13290  "Low temperature limit to use as paramtrization temperature.",
13291  "High temperature limit to use as paramtrization temperature.",
13292  "Flag whether to be strict with parametrization value checks.",
13293  "Distribution parameter perturbance flag")));
13294 
13295  md_data_raw.push_back(create_mdrecord(
13296  NAME("psdMilbrandtYau05"),
13297  DESCRIPTION(
13298  "Calculates *psd_data* and *dpsd_data_dx* following Milbrandt and Yau (2005)\n"
13299  "two moment particle size distribution for cloud water, cloud ice,\n"
13300  "rain, snow, graupel and hail, which is used in the GEM model.\n"
13301  "\n"
13302  "WSM for use in *pnd_agenda_array* for mapping *particle_bulkprop_field*\n"
13303  "to *pnd_field* using *pnd_fieldCalcFromParticleBulkProps*.\n"
13304  "Produces the particle size distribution values (dN/dD) and their\n"
13305  "derivates with respect to independent variables x by *dpnd_data_dx_names*\n"
13306  "over multiple particle sizes and atmospheric levels (or SWC/T\n"
13307  "combinations).\n"
13308  "\n"
13309  "*psd_size_grid* is considered to be in terms of maximum diameter.\n"
13310  "WC is considered to be in terms of mass content (or mass density),\n"
13311  "ie. units of [kg/m3]. N_tot in terms of number density, ie. units of [1/m3] ."
13312  "\n"
13313  "Derivatives with respect to WC and N_tot are obtained analytically.\n"
13314  "\n"
13315  "Six particle size distributions for the different hydrometeors are handled,\n"
13316  "governed by setting of *hydrometeor_type*, where \n"
13317  " \"cloud_water\" selects cloud liquid water , \n"
13318  " \"cloud_ice\" selects cloud ice, \n"
13319  " \"snow\" selects snow, \n"
13320  " \"rain\" selects rain, \n"
13321  " \"graupel\" selects graupel, and \n"
13322  " \"hail\" selects hail, \n"
13323  "\n"
13324  "Requirements:\n"
13325  "\n"
13326  "*pnd_agenda_input_names* must include :\n"
13327  " [\"X-mass_density\", \"X-number_density\" ]. \"X\" is an arbitrary name\n"
13328  "The entries in *dpnd_data_dx_names* (ie. the allowed\n"
13329  "independent variablea ) can be \"X-mass_density\" and\\or \n"
13330  "\"X-number_density\".\n"
13331  "\n"
13332  "The validity range of WC is not limited. Negative WC will produce\n"
13333  "negative psd values following a distribution given by abs(WC), ie.\n"
13334  "abs(psd)=f(abs(WC)).\n"
13335  "\n"
13336  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13337  "picky=0, or an error is thrown if picky=1.\n"
13338 
13339  ),
13340  AUTHORS("Manfred Brath"),
13341  OUT("psd_data", "dpsd_data_dx"),
13342  GOUT(),
13343  GOUT_TYPE(),
13344  GOUT_DESC(),
13345  IN("psd_size_grid",
13346  "pnd_agenda_input_t",
13347  "pnd_agenda_input",
13348  "pnd_agenda_input_names",
13349  "dpnd_data_dx_names"),
13350  GIN("hydrometeor_type", "t_min", "t_max", "picky"),
13351  GIN_TYPE("String", "Numeric", "Numeric", "Index"),
13352  GIN_DEFAULT(NODEF, "0", "999", "0"),
13353  GIN_DESC(
13354  "Hydrometeor type (see above description).",
13355  "Low temperature limit to calculate a psd.",
13356  "High temperature limit to calculate a psd.",
13357  "Flag whether to be strict with parametrization value checks.")));
13358 
13359  md_data_raw.push_back(create_mdrecord(
13360  NAME("psdModifiedGamma"),
13361  DESCRIPTION(
13362  "Modified gamma distribution PSD using n0, mu, la and ga as parameters.\n"
13363  "\n"
13364  "The modified gamma distribution is a 4-parameter (n0, mu, la and ga)\n"
13365  "distribution [Petty & Huang, JAS, 2011)]:\n"
13366  " n(x) = n0 * x^mu * exp( -la*x^ga )\n"
13367  "where x is particle size or mass.\n"
13368  "\n"
13369  "The parameters can be given in two ways, either by *pnd_agenda_input* or\n"
13370  "as GIN arguments. The first option allows the parameter to vary, while\n"
13371  "in the second case the parameter gets a constant value. If a parameter is\n"
13372  "part of *pnd_agenda_input*, the corresponding GIN argument must be set\n"
13373  "to NaN (which is default). This means that the number of columns in\n"
13374  "*pnd_agenda_input* and the number of non-NaN choices for n0, mu, la and\n"
13375  "ga must add up to four.\n"
13376  "\n"
13377  "Data in *pnd_agenda_input* are linked to the MGD parameters in term of\n"
13378  "order, the naming in *pnd_agenda_input_names* is free. If all four\n"
13379  "parameteras are specified by *pnd_agenda_input*, the data in the first\n"
13380  "column are taken as n0, the second column as mu etc. If a parameter is\n"
13381  "given as a GIN argument, the columns are just shifted with one position.\n"
13382  "For example, if mu and ga are specified as GIN arguments, *pnd_agenda_input*\n"
13383  "shall have two columns, with n0-values in the first one and la-values in\n"
13384  "the second one.\n"
13385  "\n"
13386  "The GIN route is especially suitable for selecting special cases of MGD.\n"
13387  "For example, by setting mu=0 and ga=1, an exponential PSD is obtained:\n"
13388  " n(x) = n0 * exp( -la*x )\n"
13389  "With mu=1 and ga=1, the gamma PSD is obtained:\n"
13390  " n(x) = n0 * x^mu *exp( -la*x )\n"
13391  "There should be little overhead in using the method for exponential\n"
13392  "and gamma PSDs, there is an internal switch to dedicated expressions\n"
13393  "for those PSDs.\n"
13394  "\n"
13395  "Derivatives can only be obtained for parameters that are specified by\n"
13396  "*pnd_agenda_input*.\n"
13397  "\n"
13398  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13399  "picky=0, or an error is thrown if picky=1.\n"
13400  "\n"
13401  "These requirements apply to the MGD parameters:\n"
13402  " la > 0\n"
13403  " ga > 0\n"),
13404  AUTHORS("Patrick Eriksson"),
13405  OUT("psd_data", "dpsd_data_dx"),
13406  GOUT(),
13407  GOUT_TYPE(),
13408  GOUT_DESC(),
13409  IN("psd_size_grid",
13410  "pnd_agenda_input_t",
13411  "pnd_agenda_input",
13412  "pnd_agenda_input_names",
13413  "dpnd_data_dx_names"),
13414  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13415  GIN_TYPE("Numeric",
13416  "Numeric",
13417  "Numeric",
13418  "Numeric",
13419  "Numeric",
13420  "Numeric",
13421  "Index"),
13422  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13423  GIN_DESC(
13424  "n0",
13425  "mu",
13426  "la",
13427  "ga",
13428  "Low temperature limit to calculate a psd.",
13429  "High temperature limit to calculate a psd.",
13430  "Flag whether to be strict with parametrization value checks.")));
13431 
13432  md_data_raw.push_back(create_mdrecord(
13433  NAME("psdModifiedGammaMass"),
13434  DESCRIPTION(
13435  "Modified gamma distribution (MGD) PSD, with mass content as input.\n"
13436  "\n"
13437  "See *psdModifiedGamma* for a defintion of MGD parameters and how\n"
13438  "this PSD is handled in ARTS. Only deviations with respect to\n"
13439  "*psdModifiedGamma* are described here.\n"
13440  "\n"
13441  "This version of MGD PSD takes mass content as first input argument.\n"
13442  "This means that the first column of *pnd_agenda_input* shall hold\n"
13443  "mass content data.\n"
13444  "\n"
13445  "The mass content basically replaces one of the standard parameters\n"
13446  "(n0, mu, la and ga). This parameter is denoted as the dependent one.\n"
13447  "The dependent parameter is selected by setting the corresponding GIN\n"
13448  "to -999. So far only n0 and la are allowed to be dependent.\n"
13449  "\n"
13450  "Regarding remaining columns in *pnd_agenda_input* and constant\n"
13451  "parameter values (by GIN) follows the same principle as for\n"
13452  "*psdModifiedGamma* except that mass is always in column one (as\n"
13453  "mentioned) and that there is no position in *pnd_agenda_input*\n"
13454  "for the dependent parameter.\n"
13455  "\n"
13456  "These requirements apply to the MGD parameters:\n"
13457  " mu + scat_species_b + 1 > 0\n"
13458  " la > 0\n"
13459  " ga > 0\n"
13460  " If la is the dependent parameter, mass content must be > 0.\n"),
13461  AUTHORS("Patrick Eriksson"),
13462  OUT("psd_data", "dpsd_data_dx"),
13463  GOUT(),
13464  GOUT_TYPE(),
13465  GOUT_DESC(),
13466  IN("psd_size_grid",
13467  "pnd_agenda_input_t",
13468  "pnd_agenda_input",
13469  "pnd_agenda_input_names",
13470  "dpnd_data_dx_names",
13471  "scat_species_a",
13472  "scat_species_b"),
13473  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13474  GIN_TYPE("Numeric",
13475  "Numeric",
13476  "Numeric",
13477  "Numeric",
13478  "Numeric",
13479  "Numeric",
13480  "Index"),
13481  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13482  GIN_DESC(
13483  "n0",
13484  "mu",
13485  "la",
13486  "ga",
13487  "Low temperature limit to calculate a psd.",
13488  "High temperature limit to calculate a psd.",
13489  "Flag whether to be strict with parametrization value checks.")));
13490 
13491  md_data_raw.push_back(create_mdrecord(
13492  NAME("psdModifiedGammaMassNtot"),
13493  DESCRIPTION(
13494  "Modified gamma distribution PSD, with mass content and total number\n"
13495  "density (Ntot) as inputs.\n"
13496  "\n"
13497  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13498  "mass content and total number density as first two arguments. This\n"
13499  "means that the first and second column of *pnd_agenda_input* shall\n"
13500  "hold mass content and Ntot, respectively. Accordingly, the number\n"
13501  "of dependent parameters is two.\n"
13502  "\n"
13503  "These requirements apply:\n"
13504  " mu + 1 > 0\n"
13505  " la > 0\n"
13506  " ga > 0\n"
13507  " Ntot must be > 0.\n"),
13508  AUTHORS("Patrick Eriksson"),
13509  OUT("psd_data", "dpsd_data_dx"),
13510  GOUT(),
13511  GOUT_TYPE(),
13512  GOUT_DESC(),
13513  IN("psd_size_grid",
13514  "pnd_agenda_input_t",
13515  "pnd_agenda_input",
13516  "pnd_agenda_input_names",
13517  "dpnd_data_dx_names",
13518  "scat_species_a",
13519  "scat_species_b"),
13520  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13521  GIN_TYPE("Numeric",
13522  "Numeric",
13523  "Numeric",
13524  "Numeric",
13525  "Numeric",
13526  "Numeric",
13527  "Index"),
13528  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13529  GIN_DESC(
13530  "n0",
13531  "mu",
13532  "la",
13533  "ga",
13534  "Low temperature limit to calculate a psd.",
13535  "High temperature limit to calculate a psd.",
13536  "Flag whether to be strict with parametrization value checks.")));
13537 
13538  md_data_raw.push_back(create_mdrecord(
13539  NAME("psdModifiedGammaMassMeanParticleMass"),
13540  DESCRIPTION(
13541  "Modified gamma distribution PSD, with mass content and mean particle\n"
13542  "mass (Mmean) as inputs.\n"
13543  "\n"
13544  "\"Mean particle mass\" is here defined as the mass content divided with\n"
13545  "the total number density.\n"
13546  "\n"
13547  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13548  "mass content and mean particle mass as first two arguments. This\n"
13549  "means that the first and second column of *pnd_agenda_input* shall\n"
13550  "hold mass content and Mmean, respectively. Accordingly, the number\n"
13551  "of dependent parameters is two.\n"
13552  "\n"
13553  "These requirements apply to the MGD parameters:\n"
13554  " mu + 1 > 0\n"
13555  " la > 0\n"
13556  " ga > 0\n"
13557  " Mmean must be > 0.\n"),
13558  AUTHORS("Patrick Eriksson"),
13559  OUT("psd_data", "dpsd_data_dx"),
13560  GOUT(),
13561  GOUT_TYPE(),
13562  GOUT_DESC(),
13563  IN("psd_size_grid",
13564  "pnd_agenda_input_t",
13565  "pnd_agenda_input",
13566  "pnd_agenda_input_names",
13567  "dpnd_data_dx_names",
13568  "scat_species_a",
13569  "scat_species_b"),
13570  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13571  GIN_TYPE("Numeric",
13572  "Numeric",
13573  "Numeric",
13574  "Numeric",
13575  "Numeric",
13576  "Numeric",
13577  "Index"),
13578  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13579  GIN_DESC(
13580  "n0",
13581  "mu",
13582  "la",
13583  "ga",
13584  "Low temperature limit to calculate a psd.",
13585  "High temperature limit to calculate a psd.",
13586  "Flag whether to be strict with parametrization value checks.")));
13587 
13588  md_data_raw.push_back(create_mdrecord(
13589  NAME("psdModifiedGammaMassSingleMoment"),
13590  DESCRIPTION(
13591  "Modified gamma distribution PSD, with mass content as input.\n"
13592  "\n"
13593  "The intercept parameter N0 is assumed dependent on the slope parameter\n"
13594  "lambda, such that N0=N_alpha*lambda^n_b with fixed N_alpha and n_b.\n"
13595  "This is a common form for many PSD parametrizations for use with\n"
13596  "single-moment mass-based schemes.\n"
13597  "\n"
13598  "This version of MGD PSD takes mass content as first input argument.\n"
13599  "This means that the first column of *pnd_agenda_input* shall hold\n"
13600  "mass content data. The dependent parameter is assumed to be lambda.\n"),
13601  AUTHORS("Stuart Fox"),
13602  OUT("psd_data", "dpsd_data_dx"),
13603  GOUT(),
13604  GOUT_TYPE(),
13605  GOUT_DESC(),
13606  IN("psd_size_grid",
13607  "pnd_agenda_input_t",
13608  "pnd_agenda_input",
13609  "pnd_agenda_input_names",
13610  "dpnd_data_dx_names",
13611  "scat_species_a",
13612  "scat_species_b"),
13613  GIN("n_alpha", "n_b", "mu", "gamma", "t_min", "t_max", "picky"),
13614  GIN_TYPE("Numeric",
13615  "Numeric",
13616  "Numeric",
13617  "Numeric",
13618  "Numeric",
13619  "Numeric",
13620  "Index"),
13622  GIN_DESC(
13623  "n_alpha",
13624  "n_b",
13625  "mu",
13626  "gamma",
13627  "Low temperature limit to calculate a psd.",
13628  "High temperature limit to calculate a psd.",
13629  "Flag whether to be strict with parametrization value checks.")));
13630 
13631  md_data_raw.push_back(create_mdrecord(
13632  NAME("psdModifiedGammaMassXmean"),
13633  DESCRIPTION(
13634  "Modified gamma distribution PSD, with mass content and mean size\n"
13635  "(Xmean) as inputs.\n"
13636  "\n"
13637  "\"Mean size\" is here defined as mass weighted size. Remembering that\n"
13638  "mass is a*x^b, this mean size can be expressed as M_b+1/M_b where M_b\n"
13639  "is b:th moment of the PSD (see e.g. Eq. 17 in Petty&Huang, JAS, 2011).\n"
13640  "\n"
13641  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13642  "mass content and mass size as first two arguments. This means that\n"
13643  "the first and second column of *pnd_agenda_input* shall hold mass\n"
13644  "content and Xmean, respectively. Accordingly, the number of dependent\n"
13645  "parameters is two.\n"
13646  "\n"
13647  "These requirements apply to the MGD parameters:\n"
13648  " mu + scat_species_b + 1 > 0\n"
13649  " la > 0\n"
13650  " ga > 0\n"
13651  " Xmean must be > 0.\n"),
13652  AUTHORS("Patrick Eriksson"),
13653  OUT("psd_data", "dpsd_data_dx"),
13654  GOUT(),
13655  GOUT_TYPE(),
13656  GOUT_DESC(),
13657  IN("psd_size_grid",
13658  "pnd_agenda_input_t",
13659  "pnd_agenda_input",
13660  "pnd_agenda_input_names",
13661  "dpnd_data_dx_names",
13662  "scat_species_a",
13663  "scat_species_b"),
13664  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13665  GIN_TYPE("Numeric",
13666  "Numeric",
13667  "Numeric",
13668  "Numeric",
13669  "Numeric",
13670  "Numeric",
13671  "Index"),
13672  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13673  GIN_DESC(
13674  "n0",
13675  "mu",
13676  "la",
13677  "ga",
13678  "Low temperature limit to calculate a psd.",
13679  "High temperature limit to calculate a psd.",
13680  "Flag whether to be strict with parametrization value checks.")));
13681 
13682  md_data_raw.push_back(create_mdrecord(
13683  NAME("psdModifiedGammaMassXmedian"),
13684  DESCRIPTION(
13685  "Modified gamma distribution PSD, with mass content and median size\n"
13686  "(Xmedian) as inputs.\n"
13687  "\n"
13688  "\n"
13689  "This version of MGD PSD works as *psdModifiedGammaMass*, but takes\n"
13690  "mass content and median size as first two arguments. This means that\n"
13691  "the first and second column of *pnd_agenda_input* shall hold mass\n"
13692  "content and Xmedian, respectively. Accordingly, the number of\n"
13693  "dependent parameters is two.\n"
13694  "\n"
13695  "These requirements apply to the MGD parameters:\n"
13696  " mu + scat_species_b + 1 > 0\n"
13697  " la > 0\n"
13698  " ga > 0\n"
13699  " Xmedian must be > 0.\n"),
13700  AUTHORS("Patrick Eriksson"),
13701  OUT("psd_data", "dpsd_data_dx"),
13702  GOUT(),
13703  GOUT_TYPE(),
13704  GOUT_DESC(),
13705  IN("psd_size_grid",
13706  "pnd_agenda_input_t",
13707  "pnd_agenda_input",
13708  "pnd_agenda_input_names",
13709  "dpnd_data_dx_names",
13710  "scat_species_a",
13711  "scat_species_b"),
13712  GIN("n0", "mu", "la", "ga", "t_min", "t_max", "picky"),
13713  GIN_TYPE("Numeric",
13714  "Numeric",
13715  "Numeric",
13716  "Numeric",
13717  "Numeric",
13718  "Numeric",
13719  "Index"),
13720  GIN_DEFAULT("NaN", "NaN", "NaN", "NaN", NODEF, NODEF, "0"),
13721  GIN_DESC(
13722  "n0",
13723  "mu",
13724  "la",
13725  "ga",
13726  "Low temperature limit to calculate a psd.",
13727  "High temperature limit to calculate a psd.",
13728  "Flag whether to be strict with parametrization value checks.")));
13729 
13730  md_data_raw.push_back(create_mdrecord(
13731  NAME("psdMonoDispersive"),
13732  DESCRIPTION(
13733  "Mono-dispersive PSD, with number density given.\n"
13734  "\n"
13735  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13736  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13737  "The input data in *pnd_agenda_input* shall be number densities, in\n"
13738  "unit of [#/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13739  "but the same name must be used in *particle_bulkprop_names* and\n"
13740  "*dpnd_data_dx_names*.\n"
13741  "\n"
13742  "The method checks that the scattering species indicated (by\n"
13743  "*species_index*) has a single element, and just inserts the provided\n"
13744  "number density in *psd_data*.\n"
13745  "\n"
13746  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13747  "picky=0, or an error is thrown if picky=1.\n"),
13748  AUTHORS("Patrick Eriksson"),
13749  OUT("psd_data", "dpsd_data_dx"),
13750  GOUT(),
13751  GOUT_TYPE(),
13752  GOUT_DESC(),
13753  IN("pnd_agenda_input_t",
13754  "pnd_agenda_input",
13755  "pnd_agenda_input_names",
13756  "dpnd_data_dx_names",
13757  "scat_meta"),
13758  GIN("species_index", "t_min", "t_max", "picky"),
13759  GIN_TYPE("Index", "Numeric", "Numeric", "Index"),
13760  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
13761  GIN_DESC(
13762  "The index of the scattering species of concern (0-based).",
13763  "Low temperature limit to calculate a psd.",
13764  "High temperature limit to calculate a psd.",
13765  "Flag whether to be strict with parametrization value checks.")));
13766 
13767  md_data_raw.push_back(create_mdrecord(
13768  NAME("psdMonoMass"),
13769  DESCRIPTION(
13770  "Mono-dispersive PSD, with mass content given.\n"
13771  "\n"
13772  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13773  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13774  "The input data in *pnd_agenda_input* shall be mass contents, in\n"
13775  "unit of [#/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13776  "but the same name must be used in *particle_bulkprop_names* and\n"
13777  "*dpnd_data_dx_names*.\n"
13778  "\n"
13779  "The method checks that the scattering species indicated (by\n"
13780  "*species_index*) has a single element, and sets *psd_data* based\n"
13781  "on the mass contents given and the particle mass (derived from\n"
13782  "*scat_meta*).\n"
13783  "\n"
13784  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13785  "picky=0, or an error is thrown if picky=1.\n"),
13786  AUTHORS("Patrick Eriksson"),
13787  OUT("psd_data", "dpsd_data_dx"),
13788  GOUT(),
13789  GOUT_TYPE(),
13790  GOUT_DESC(),
13791  IN("pnd_agenda_input_t",
13792  "pnd_agenda_input",
13793  "pnd_agenda_input_names",
13794  "dpnd_data_dx_names",
13795  "scat_meta"),
13796  GIN("species_index", "t_min", "t_max", "picky"),
13797  GIN_TYPE("Index", "Numeric", "Numeric", "Index"),
13798  GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
13799  GIN_DESC(
13800  "The index of the scattering species of concern (0-based).",
13801  "Low temperature limit to calculate a psd.",
13802  "High temperature limit to calculate a psd.",
13803  "Flag whether to be strict with parametrization value checks.")));
13804 
13805  md_data_raw.push_back(create_mdrecord(
13806  NAME("psdSeifertBeheng06"),
13807  DESCRIPTION(
13808  "Calculates *psd_data* and *dpsd_data_dx* following Seifert and Beheng (2006)\n"
13809  "two moment particle size distribution for cloud water, cloud ice,\n"
13810  "rain, snow, graupel and hail, which is used in the ICON model.\n"
13811  "\n"
13812  "WSM for use in *pnd_agenda_array* for mapping *particle_bulkprop_field*\n"
13813  "to *pnd_field* using *pnd_fieldCalcFromParticleBulkProps*.\n"
13814  "Produces the particle size distribution values (dN/dD) and their\n"
13815  "derivates with respect to independent variables x by *dpnd_data_dx_names*\n"
13816  "over multiple particle sizes and atmospheric levels (or SWC/T\n"
13817  "combinations).\n"
13818  "\n"
13819  "*psd_size_grid* is considered to be in terms of mass.\n"
13820  "WC is considered to be in terms of mass content (or mass density),\n"
13821  "ie. units of [kg/m3]. N_tot in terms of number density, ie. units of [1/m3] ."
13822  "\n"
13823  "Derivatives with respect to WC and N_tot are obtained analytically.\n"
13824  "\n"
13825  "Six particle size distributions for the different hydrometeors are handled,\n"
13826  "governed by setting of *hydrometeor_type*, where \n"
13827  " \"cloud_water\" selects cloud liquid water , \n"
13828  " \"cloud_ice\" selects cloud ice, \n"
13829  " \"snow\" selects snow, \n"
13830  " \"rain\" selects rain, \n"
13831  " \"graupel\" selects graupel, and \n"
13832  " \"hail\" selects hail, \n"
13833  "\n"
13834  "Requirements:\n"
13835  "\n"
13836  "*pnd_agenda_input_names* must include :\n"
13837  " [\"X-mass_density\", \"X-number_density\" ]. \"X\" is an arbitrary name\n"
13838  "The entries in *dpnd_data_dx_names* (ie. the allowed\n"
13839  "independent variablea ) can be \"X-mass_density\" and\\or \n"
13840  "\"X-number_density\".\n"
13841  "\n"
13842  "The validity range of WC is not limited. Negative WC will produce\n"
13843  "negative psd values following a distribution given by abs(WC), ie.\n"
13844  "abs(psd)=f(abs(WC)).\n"
13845  "\n"
13846  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13847  "picky=0, or an error is thrown if picky=1.\n"
13848 
13849  ),
13850  AUTHORS("Manfred Brath"),
13851  OUT("psd_data", "dpsd_data_dx"),
13852  GOUT(),
13853  GOUT_TYPE(),
13854  GOUT_DESC(),
13855  IN("psd_size_grid",
13856  "pnd_agenda_input_t",
13857  "pnd_agenda_input",
13858  "pnd_agenda_input_names",
13859  "dpnd_data_dx_names"),
13860  GIN("hydrometeor_type", "t_min", "t_max", "picky"),
13861  GIN_TYPE("String", "Numeric", "Numeric", "Index"),
13862  GIN_DEFAULT(NODEF, "0", "999", "0"),
13863  GIN_DESC(
13864  "Hydrometeor type (see above description).",
13865  "Low temperature limit to calculate a psd.",
13866  "High temperature limit to calculate a psd.",
13867  "Flag whether to be strict with parametrization value checks.")));
13868 
13869  md_data_raw.push_back(create_mdrecord(
13870  NAME("psdWangEtAl16"),
13871  DESCRIPTION(
13872  "Wang et al. [2016] particle size distribution for rain.\n"
13873  "\n"
13874  "Reference: Wang et al., Investigation of liquid cloud microphysical\n"
13875  "properties of deep convective systems: 1. Parameterization raindrop\n"
13876  "size distribution and its application ..., 2016.\n"
13877  "\n"
13878  "This is a 1-parameter PSD, i.e. *pnd_agenda_input* shall have one\n"
13879  "column and *pnd_agenda_input_names* shall contain a single string.\n"
13880  "The input data in *pnd_agenda_input* shall be rain mass content in\n"
13881  "unit of [kg/m3]. The naming used is *pnd_agenda_input_names* is free\n"
13882  "but the same name must be used in *particle_bulkprop_names* and\n"
13883  "*dpnd_data_dx_names*.\n"
13884  "\n"
13885  "Particles are assumed to be near-spherical, ie. *psd_size_grid* can\n"
13886  "either be in terms of volume (or mass) equivalent diameter or\n"
13887  "maximum diameter.\n"
13888  "\n"
13889  "Derivatives are obtained analytically.\n"
13890  "\n"
13891  "The validity range of mass content is not limited. Negative mass\n"
13892  "contents will produce negative psd values following a distribution\n"
13893  "given by abs(RWC), ie. abs(psd)=f(abs(RWC)).\n"
13894  "\n"
13895  "If temperature is outside [*t_min*,*t_max*] psd=0 and dpsd=0 if\n"
13896  "picky=0, or an error is thrown if picky=1.\n"),
13897  AUTHORS("Jana Mendrok, Patrick Eriksson"),
13898  OUT("psd_data", "dpsd_data_dx"),
13899  GOUT(),
13900  GOUT_TYPE(),
13901  GOUT_DESC(),
13902  IN("psd_size_grid",
13903  "pnd_agenda_input_t",
13904  "pnd_agenda_input",
13905  "pnd_agenda_input_names",
13906  "dpnd_data_dx_names",
13907  "scat_species_a",
13908  "scat_species_b"),
13909  GIN("t_min", "t_max", "picky"),
13910  GIN_TYPE("Numeric", "Numeric", "Index"),
13911  GIN_DEFAULT("273", "373", "0"),
13912  GIN_DESC(
13913  "Low temperature limit to calculate a psd.",
13914  "High temperature limit to calculate a psd.",
13915  "Flag whether to be strict with parametrization value checks.")));
13916 
13917  md_data_raw.push_back(create_mdrecord(
13918  NAME("p_gridDensify"),
13919  DESCRIPTION(
13920  "A simple way to make *p_grid* more dense.\n"
13921  "\n"
13922  "The method includes new values in *p_grid*. For each intermediate\n"
13923  "pressure range, *nfill* points are added. That is, setting *nfill*\n"
13924  "to zero returns an unmodified copy of *p_grid_old*. The number of\n"
13925  "elements of the new *p_grid* is (n0-1)*(1+nfill)+1, where n0 is the\n"
13926  "length of *p_grid_old*.\n"
13927  "\n"
13928  "The new points are distributed equidistant in log(p).\n"
13929  "\n"
13930  "For safety, new grid and old grid Vectors are not allowed to be the\n"
13931  "same variable (both will be needed later on for regridding of the\n"
13932  "atmospheric fields), and atmospheric field related *checked WSV are\n"
13933  "reset to 0 (unchecked).\n"),
13934  AUTHORS("Patrick Eriksson, Jana Mendrok"),
13935  OUT("p_grid", "atmfields_checked", "atmgeom_checked", "cloudbox_checked"),
13936  GOUT(),
13937  GOUT_TYPE(),
13938  GOUT_DESC(),
13939  IN(),
13940  GIN("p_grid_old", "nfill"),
13941  GIN_TYPE("Vector", "Index"),
13942  GIN_DEFAULT(NODEF, "-1"),
13943  GIN_DESC(/* p_grid_old */
13944  "A copy of the current (the old) p_grid. Not allowed to be "
13945  "the same variable as the output *p_grid*.",
13946  /* nfill */
13947  "Number of points to add between adjacent pressure points."
13948  "The default value (-1) results in an error.")));
13949 
13950  md_data_raw.push_back(create_mdrecord(
13951  NAME("p_gridFromZRaw"),
13952  DESCRIPTION(
13953  "Sets *p_grid* according to input atmosphere's raw z_field, derived\n"
13954  "e.g. from *AtmRawRead*.\n"
13955  "Attention: as default only pressure values for altitudes >= 0 are\n"
13956  "extracted. If negative altitudes shall also be selected, set no_neg=0.\n"),
13957  AUTHORS("Claudia Emde, Jana Mendrok"),
13958  OUT("p_grid"),
13959  GOUT(),
13960  GOUT_TYPE(),
13961  GOUT_DESC(),
13962  IN("z_field_raw"),
13963  GIN("no_negZ"),
13964  GIN_TYPE("Index"),
13965  GIN_DEFAULT("1"),
13966  GIN_DESC("Exclude negative altitudes.")));
13967 
13968  md_data_raw.push_back(create_mdrecord(
13969  NAME("lat_gridFromZRaw"),
13970  DESCRIPTION(
13971  "Sets *lat_grid* according to input atmosphere's *z_field_raw*\n"),
13972  AUTHORS("Richard Larsson"),
13973  OUT("lat_grid"),
13974  GOUT(),
13975  GOUT_TYPE(),
13976  GOUT_DESC(),
13977  IN("z_field_raw"),
13978  GIN(),
13979  GIN_TYPE(),
13980  GIN_DEFAULT(),
13981  GIN_DESC()));
13982 
13983  md_data_raw.push_back(create_mdrecord(
13984  NAME("lon_gridFromZRaw"),
13985  DESCRIPTION(
13986  "Sets *lon_grid* according to input atmosphere's *z_field_raw*\n"),
13987  AUTHORS("Richard Larsson"),
13988  OUT("lon_grid"),
13989  GOUT(),
13990  GOUT_TYPE(),
13991  GOUT_DESC(),
13992  IN("z_field_raw"),
13993  GIN(),
13994  GIN_TYPE(),
13995  GIN_DEFAULT(),
13996  GIN_DESC()));
13997 
13998  md_data_raw.push_back(create_mdrecord(
13999  NAME("atm_gridsFromZRaw"),
14000  DESCRIPTION(
14001  "Calls *p_gridFromZRaw*, *lat_gridFromZRaw* and *lon_gridFromZRaw*\n"),
14002  AUTHORS("Richard Larsson"),
14003  OUT("p_grid", "lat_grid", "lon_grid"),
14004  GOUT(),
14005  GOUT_TYPE(),
14006  GOUT_DESC(),
14007  IN("z_field_raw"),
14008  GIN("no_negZ"),
14009  GIN_TYPE("Index"),
14010  GIN_DEFAULT("1"),
14011  GIN_DESC("Exclude negative altitudes.")));
14012 
14013  md_data_raw.push_back(create_mdrecord(
14014  NAME("p_gridFromGasAbsLookup"),
14015  DESCRIPTION("Sets *p_grid* to the pressure grid of *abs_lookup*.\n"),
14016  AUTHORS("Patrick Eriksson"),
14017  OUT("p_grid"),
14018  GOUT(),
14019  GOUT_TYPE(),
14020  GOUT_DESC(),
14021  IN("abs_lookup"),
14022  GIN(),
14023  GIN_TYPE(),
14024  GIN_DEFAULT(),
14025  GIN_DESC()));
14026 
14027  md_data_raw.push_back(create_mdrecord(
14028  NAME("p_gridRefine"),
14029  DESCRIPTION(
14030  "Provides refined pressure grid.\n"
14031  "\n"
14032  "Created new pressure grid has (log10) spacings below a given\n"
14033  "threshold.\n"
14034  "\n"
14035  "For safety, new grid and old grid Vectors are not allowed to be the\n"
14036  "same variable (both will be needed later on for regridding of the\n"
14037  "atmospheric fields), and atmospheric field related *checked WSV are\n"
14038  "reset to 0 (unchecked).\n"),
14039  AUTHORS("Stefan Buehler, Jana Mendrok"),
14040  OUT("p_grid", "atmfields_checked", "atmgeom_checked", "cloudbox_checked"),
14041  GOUT(),
14042  GOUT_TYPE(),
14043  GOUT_DESC(),
14044  IN(),
14045  GIN("p_grid_old", "p_step"),
14046  GIN_TYPE("Vector", "Numeric"),
14048  GIN_DESC(/* p_grid_old */
14049  "A copy of the current (the old) p_grid. Not allowed to be "
14050  "the same variable as the output *p_grid*.",
14051  /* p_step */
14052  "Maximum step in log10(p[Pa]). If the pressure grid is "
14053  "coarser than this, additional points are added until each "
14054  "log step is smaller than this.")));
14055 
14056  md_data_raw.push_back(create_mdrecord(
14057  NAME("RadiationFieldSpectralIntegrate"),
14058  DESCRIPTION(
14059  "Integrates fields like *spectral_irradiance_field* or *cloudbox_field*\n"
14060  "over frequency.\n"
14061  "Important, the first dimension must be the frequency dimension!\n"
14062  "If a field like *cloudbox_field* is input, the stokes dimension\n"
14063  "is also removed.\n"),
14064  AUTHORS("Manfred Brath"),
14065  OUT(),
14066  GOUT("radiation_field"),
14067  GOUT_TYPE("Tensor4, Tensor5"),
14068  GOUT_DESC("TBD"),
14069  IN("f_grid"),
14070  GIN("spectral_radiation_field"),
14071  GIN_TYPE("Tensor5, Tensor7"),
14072  GIN_DEFAULT(NODEF),
14073  GIN_DESC("TBD")));
14074 
14075  md_data_raw.push_back(create_mdrecord(
14076  NAME("line_irradianceCalcForSingleSpeciesNonOverlappingLinesPseudo2D"),
14077  DESCRIPTION("Computes the line irradiance and line transmission\n"
14078  "\n"
14079  "Presently only works for 1D atmospheres\n"),
14080  AUTHORS("Richard Larsson"),
14081  OUT("line_irradiance", "line_transmission"),
14082  GOUT(),
14083  GOUT_TYPE(),
14084  GOUT_DESC(),
14085  IN("abs_species",
14086  "abs_lines_per_species",
14087  "nlte_field",
14088  "vmr_field",
14089  "t_field",
14090  "z_field",
14091  "p_grid",
14092  "refellipsoid",
14093  "surface_props_data",
14094  "iy_main_agenda",
14095  "ppath_agenda",
14096  "iy_space_agenda",
14097  "iy_surface_agenda",
14098  "iy_cloudbox_agenda",
14099  "propmat_clearsky_agenda"),
14100  GIN("df", "nz", "nf", "r"),
14101  GIN_TYPE("Numeric", "Index", "Index", "Numeric"),
14102  GIN_DEFAULT(NODEF, NODEF, NODEF, "1.0"),
14103  GIN_DESC("relative frequency to line center",
14104  "number of zeniths",
14105  "number of frequencies per line",
14106  "Distance assumed when computing local (1-T)")));
14107 
14108  md_data_raw.push_back(create_mdrecord(
14109  NAME("RationalAdd"),
14110  DESCRIPTION(
14111  "Adds a Rational and a value (out = in+value).\n"
14112  "\n"
14113  "The result can either be stored in the same or another Rational.\n"
14114  "(in and out can be the same varible, but not out and value)\n"),
14115  AUTHORS("Richard Larsson"),
14116  OUT(),
14117  GOUT("out"),
14118  GOUT_TYPE("Rational"),
14119  GOUT_DESC("Output Rational."),
14120  IN(),
14121  GIN("in", "value"),
14122  GIN_TYPE("Rational", "Rational"),
14124  GIN_DESC("Input Rational.", "Value to add.")));
14125 
14126  md_data_raw.push_back(create_mdrecord(
14127  NAME("RationalInvScale"),
14128  DESCRIPTION(
14129  "Inversely scales/divides a Rational with a value (out = in/value).\n"
14130  "\n"
14131  "The result can either be stored in the same or another Rational.\n"
14132  "(in and out can be the same varible, but not out and value)\n"),
14133  AUTHORS("Richard Larsson"),
14134  OUT(),
14135  GOUT("out"),
14136  GOUT_TYPE("Rational"),
14137  GOUT_DESC("Output Rational."),
14138  IN(),
14139  GIN("in", "value"),
14140  GIN_TYPE("Rational", "Rational"),
14142  GIN_DESC("Input Rational.", "Scaling Rational.")));
14143 
14144  md_data_raw.push_back(create_mdrecord(
14145  NAME("RationalScale"),
14146  DESCRIPTION(
14147  "Scales/multiplies a Rational with a value (out = in*value).\n"
14148  "\n"
14149  "The result can either be stored in the same or another Rational.\n"
14150  "(in and out can be the same varible, but not out and value)\n"),
14151  AUTHORS("Richard Larsson"),
14152  OUT(),
14153  GOUT("out"),
14154  GOUT_TYPE("Rational"),
14155  GOUT_DESC("Output Rational."),
14156  IN(),
14157  GIN("in", "value"),
14158  GIN_TYPE("Rational", "Rational"),
14160  GIN_DESC("Input Rational.", "Scaling value.")));
14161 
14162  md_data_raw.push_back(create_mdrecord(
14163  NAME("RationalSet"),
14164  DESCRIPTION("Sets a Rational workspace variable to the given value.\n"),
14165  AUTHORS("Richard Larsson"),
14166  OUT(),
14167  GOUT("out"),
14168  GOUT_TYPE("Rational"),
14169  GOUT_DESC("Variable to initialize."),
14170  IN(),
14171  GIN("numerator", "denominator"),
14172  GIN_TYPE("Index", "Index"),
14173  GIN_DEFAULT(NODEF, "1"),
14174  GIN_DESC("The numerator.", "The denominator.")));
14175 
14176  md_data_raw.push_back(create_mdrecord(
14177  NAME("ReadArrayOfARTSCAT"),
14178  DESCRIPTION("Reads an old Array<ArrayOfLineRecord> ARTSCAT file.\n"
14179  "\n"
14180  "Note that the ARTSCAT-5 had quantum numbers and options\n"
14181  "stored inside it but that the options will overwrite that\n"
14182  "information. Be careful setting the options!\n"),
14183  AUTHORS("Stefan Buehler", "Richard Larsson"),
14184  OUT("abs_lines"),
14185  GOUT(),
14186  GOUT_TYPE(),
14187  GOUT_DESC(),
14188  IN(),
14189  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14190  "localquantumnumbers", "normalization_option", "mirroring_option",
14191  "population_option", "lineshapetype_option", "cutoff_option",
14192  "cutoff_value", "linemixinglimit_value"),
14193  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14194  "String", "String", "String", "String", "Numeric", "Numeric"),
14195  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14196  "None", "750e9", "-1"),
14197  GIN_DESC("Name of the ARTSCAT file",
14198  "Minimum frequency of read lines",
14199  "Maximum frequency of read lines",
14200  "Global quantum number list (space-separated)",
14201  "Local quantum number list (space-separated)",
14202  "Normalization option, see *abs_linesSetNormalization*",
14203  "Mirroring option, see *abs_linesSetMirroring*",
14204  "Population option, see *abs_linesSetPopulation*",
14205  "Lineshape option, see *abs_linesSetLineShapeType*",
14206  "Cutoff option, see *abs_linesSetCutoff*",
14207  "Cutoff value, see *abs_linesSetCutoff*",
14208  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14209 
14210  md_data_raw.push_back(create_mdrecord(
14211  NAME("ReadSplitARTSCAT"),
14212  DESCRIPTION("Reads several old ArrayOfLineRecord ARTSCAT file\n"
14213  "\n"
14214  "Note that the ARTSCAT-5 had quantum numbers and options\n"
14215  "stored inside it but that the options will overwrite that\n"
14216  "information. Be careful setting the options!\n"),
14217  AUTHORS("Oliver Lemke", "Richard Larsson"),
14218  OUT("abs_lines"),
14219  GOUT(),
14220  GOUT_TYPE(),
14221  GOUT_DESC(),
14222  IN("abs_species"),
14223  GIN("basename", "fmin", "fmax", "globalquantumnumbers", "localquantumnumbers",
14224  "ignore_missing", "normalization_option", "mirroring_option",
14225  "population_option", "lineshapetype_option", "cutoff_option",
14226  "cutoff_value", "linemixinglimit_value"),
14227  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "Index", "String",
14228  "String", "String", "String", "String", "Numeric", "Numeric"),
14229  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "0", "None", "None", "LTE", "VP",
14230  "None", "750e9", "-1"),
14231  GIN_DESC("Path to the files",
14232  "Minimum frequency of read lines",
14233  "Maximum frequency of read lines",
14234  "Global quantum number list (space-separated)",
14235  "Local quantum number list (space-separated)",
14236  "Ignores instead of throws if an *abs_species* is missing",
14237  "Normalization option, see *abs_linesSetNormalization*",
14238  "Mirroring option, see *abs_linesSetMirroring*",
14239  "Population option, see *abs_linesSetPopulation*",
14240  "Lineshape option, see *abs_linesSetLineShapeType*",
14241  "Cutoff option, see *abs_linesSetCutoff*",
14242  "Cutoff value, see *abs_linesSetCutoff*",
14243  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14244 
14245  md_data_raw.push_back(create_mdrecord(
14246  NAME("ReadARTSCAT"),
14247  DESCRIPTION("Reads an old ArrayOfLineRecord ARTSCAT file\n"
14248  "\n"
14249  "Note that the ARTSCAT-5 had quantum numbers and options\n"
14250  "stored inside it but that the options will overwrite that\n"
14251  "information. Be careful setting the options!\n"),
14252  AUTHORS("Stefan Buehler", "Richard Larsson"),
14253  OUT("abs_lines"),
14254  GOUT(),
14255  GOUT_TYPE(),
14256  GOUT_DESC(),
14257  IN(),
14258  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14259  "localquantumnumbers", "normalization_option", "mirroring_option",
14260  "population_option", "lineshapetype_option", "cutoff_option",
14261  "cutoff_value", "linemixinglimit_value"),
14262  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14263  "String", "String", "String", "String", "Numeric", "Numeric"),
14264  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14265  "None", "750e9", "-1"),
14266  GIN_DESC("Name of the ARTSCAT file",
14267  "Minimum frequency of read lines",
14268  "Maximum frequency of read lines",
14269  "Global quantum number list (space-separated)",
14270  "Local quantum number list (space-separated)",
14271  "Normalization option, see *abs_linesSetNormalization*",
14272  "Mirroring option, see *abs_linesSetMirroring*",
14273  "Population option, see *abs_linesSetPopulation*",
14274  "Lineshape option, see *abs_linesSetLineShapeType*",
14275  "Cutoff option, see *abs_linesSetCutoff*",
14276  "Cutoff value, see *abs_linesSetCutoff*",
14277  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14278 
14279  md_data_raw.push_back(create_mdrecord(
14280  NAME("ReadHITRAN"),
14281  DESCRIPTION("Reads a HITRAN .par file.\n"
14282  "\n"
14283  "The HITRAN type switch can be:\n"
14284  "\t\"Pre2004\"\t-\tfor old format\n"
14285  "\t\"Post2004\"\t-\tfor new format\n"
14286  "\t\"Online\"\t-\tfor the online format with quantum numbers (highly experimental)\n"
14287  "\n"
14288  "Be careful setting the options!\n"
14289  ),
14290  AUTHORS("Hermann Berg", "Thomas Kuhn", "Richard Larsson"),
14291  OUT("abs_lines"),
14292  GOUT(),
14293  GOUT_TYPE(),
14294  GOUT_DESC(),
14295  IN(),
14296  GIN("filename", "fmin", "fmax", "globalquantumnumbers", "localquantumnumbers",
14297  "hitran_type", "normalization_option", "mirroring_option",
14298  "population_option", "lineshapetype_option", "cutoff_option",
14299  "cutoff_value", "linemixinglimit_value"),
14300  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String", "String",
14301  "String", "String", "String", "String", "Numeric", "Numeric"),
14302  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "Post2004", "None", "None", "LTE", "VP",
14303  "None", "750e9", "-1"),
14304  GIN_DESC("Name of the HITRAN file",
14305  "Minimum frequency of read lines",
14306  "Maximum frequency of read lines",
14307  "Global quantum number list (space-separated)",
14308  "Local quantum number list (space-separated)",
14309  "Method to use to read the line data",
14310  "Normalization option, see *abs_linesSetNormalization*",
14311  "Mirroring option, see *abs_linesSetMirroring*",
14312  "Population option, see *abs_linesSetPopulation*",
14313  "Lineshape option, see *abs_linesSetLineShapeType*",
14314  "Cutoff option, see *abs_linesSetCutoff*",
14315  "Cutoff value, see *abs_linesSetCutoff*",
14316  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14317 
14318  md_data_raw.push_back(create_mdrecord(
14319  NAME("ReadLBLRTM"),
14320  DESCRIPTION("Reads a LBLRTM file.\n"
14321  "\n"
14322  "Be careful setting the options!\n"),
14323  AUTHORS("Richard Larsson"),
14324  OUT("abs_lines"),
14325  GOUT(),
14326  GOUT_TYPE(),
14327  GOUT_DESC(),
14328  IN(),
14329  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14330  "localquantumnumbers", "normalization_option", "mirroring_option",
14331  "population_option", "lineshapetype_option", "cutoff_option",
14332  "cutoff_value", "linemixinglimit_value"),
14333  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14334  "String", "String", "String", "String", "Numeric", "Numeric"),
14335  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14336  "None", "750e9", "-1"),
14337  GIN_DESC("Name of the LBLRTM file",
14338  "Minimum frequency of read lines",
14339  "Maximum frequency of read lines",
14340  "Global quantum number list (space-separated)",
14341  "Local quantum number list (space-separated)",
14342  "Normalization option, see *abs_linesSetNormalization*",
14343  "Mirroring option, see *abs_linesSetMirroring*",
14344  "Population option, see *abs_linesSetPopulation*",
14345  "Lineshape option, see *abs_linesSetLineShapeType*",
14346  "Cutoff option, see *abs_linesSetCutoff*",
14347  "Cutoff value, see *abs_linesSetCutoff*",
14348  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14349 
14350  md_data_raw.push_back(create_mdrecord(
14351  NAME("ReadMytran2"),
14352  DESCRIPTION("Reads a Mytran2 file.\n"
14353  "\n"
14354  "Be careful setting the options!\n"),
14355  AUTHORS("Axel von Engeln", "Stefan Buehler", "Richard Larsson"),
14356  OUT("abs_lines"),
14357  GOUT(),
14358  GOUT_TYPE(),
14359  GOUT_DESC(),
14360  IN(),
14361  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14362  "localquantumnumbers", "normalization_option", "mirroring_option",
14363  "population_option", "lineshapetype_option", "cutoff_option",
14364  "cutoff_value", "linemixinglimit_value"),
14365  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14366  "String", "String", "String", "String", "Numeric", "Numeric"),
14367  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14368  "None", "750e9", "-1"),
14369  GIN_DESC("Name of the Mytran2 file",
14370  "Minimum frequency of read lines",
14371  "Maximum frequency of read lines",
14372  "Global quantum number list (space-separated)",
14373  "Local quantum number list (space-separated)",
14374  "Normalization option, see *abs_linesSetNormalization*",
14375  "Mirroring option, see *abs_linesSetMirroring*",
14376  "Population option, see *abs_linesSetPopulation*",
14377  "Lineshape option, see *abs_linesSetLineShapeType*",
14378  "Cutoff option, see *abs_linesSetCutoff*",
14379  "Cutoff value, see *abs_linesSetCutoff*",
14380  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14381 
14382  md_data_raw.push_back(create_mdrecord(
14383  NAME("ReadJPL"),
14384  DESCRIPTION("Reads a JPL file.\n"
14385  "\n"
14386  "Be careful setting the options!\n"),
14387  AUTHORS("Thomas Kuhn", "Richard Larsson"),
14388  OUT("abs_lines"),
14389  GOUT(),
14390  GOUT_TYPE(),
14391  GOUT_DESC(),
14392  IN(),
14393  GIN("filename", "fmin", "fmax", "globalquantumnumbers",
14394  "localquantumnumbers", "normalization_option", "mirroring_option",
14395  "population_option", "lineshapetype_option", "cutoff_option",
14396  "cutoff_value", "linemixinglimit_value"),
14397  GIN_TYPE("String", "Numeric", "Numeric", "String", "String", "String",
14398  "String", "String", "String", "String", "Numeric", "Numeric"),
14399  GIN_DEFAULT(NODEF, "0", "1e99", "", "", "None", "None", "LTE", "VP",
14400  "None", "750e9", "-1"),
14401  GIN_DESC("Name of the JPL file",
14402  "Minimum frequency of read lines",
14403  "Maximum frequency of read lines",
14404  "Global quantum number list (space-separated)",
14405  "Local quantum number list (space-separated)",
14406  "Normalization option, see *abs_linesSetNormalization*",
14407  "Mirroring option, see *abs_linesSetMirroring*",
14408  "Population option, see *abs_linesSetPopulation*",
14409  "Lineshape option, see *abs_linesSetLineShapeType*",
14410  "Cutoff option, see *abs_linesSetCutoff*",
14411  "Cutoff value, see *abs_linesSetCutoff*",
14412  "Line mixing limit, see *abs_linesSetLinemixingLimit*")));
14413 
14414  md_data_raw.push_back(create_mdrecord(
14415  NAME("abs_linesTruncateGlobalQuantumNumbers"),
14416  DESCRIPTION("Truncates all global quantum numbers\n"
14417  "and then recombine the line list.\n"),
14418  AUTHORS("Richard Larsson"),
14419  OUT("abs_lines"),
14420  GOUT(),
14421  GOUT_TYPE(),
14422  GOUT_DESC(),
14423  IN("abs_lines"),
14424  GIN(),
14425  GIN_TYPE(),
14426  GIN_DEFAULT(),
14427  GIN_DESC()));
14428 
14429  md_data_raw.push_back(create_mdrecord(
14430  NAME("abs_linesWriteSplitXML"),
14431  DESCRIPTION("Writes a split catalog, AbsorptionLines by AbsorptionLines.\n"
14432  "\n"
14433  "There will be one unique file generated per AbsorptionLines in *abs_lines*.\n"
14434  "\n"
14435  "The names of these files will be:\n"
14436  "\tbasename+\".\"+AbsorptionLines.SpeciesName()+\".\"+to_string(N)+\".xml\"\n"
14437  "where N>=0 and the species name is something line \"H2O\".\n"),
14438  AUTHORS("Richard Larsson"),
14439  OUT(),
14440  GOUT(),
14441  GOUT_TYPE(),
14442  GOUT_DESC(),
14443  IN("output_file_format", "abs_lines"),
14444  GIN("basename"),
14445  GIN_TYPE("String"),
14446  GIN_DEFAULT(NODEF),
14447  GIN_DESC("Path to store the files at")));
14448 
14449  md_data_raw.push_back(create_mdrecord(
14450  NAME("abs_linesWriteSpeciesSplitXML"),
14451  DESCRIPTION("As *abs_linesWriteSplitXML* but writes an array\n"
14452  "per species\n"),
14453  AUTHORS("Richard Larsson"),
14454  OUT(),
14455  GOUT(),
14456  GOUT_TYPE(),
14457  GOUT_DESC(),
14458  IN("output_file_format", "abs_lines"),
14459  GIN("basename"),
14460  GIN_TYPE("String"),
14461  GIN_DEFAULT(NODEF),
14462  GIN_DESC("Path to store the files at")));
14463 
14464  md_data_raw.push_back(create_mdrecord(
14465  NAME("abs_lines_per_speciesWriteSplitXML"),
14466  DESCRIPTION("See *abs_linesWriteSplitXML*\n"
14467  "\n"
14468  "In addition, the structure of the files generated will not care about\n"
14469  "generating identifiers for the order in *abs_species*\n"),
14470  AUTHORS("Richard Larsson"),
14471  OUT(),
14472  GOUT(),
14473  GOUT_TYPE(),
14474  GOUT_DESC(),
14475  IN("output_file_format", "abs_lines_per_species"),
14476  GIN("basename"),
14477  GIN_TYPE("String"),
14478  GIN_DEFAULT(NODEF),
14479  GIN_DESC("Path to store the files at")));
14480 
14481  md_data_raw.push_back(create_mdrecord(
14482  NAME("abs_lines_per_speciesWriteSpeciesSplitXML"),
14483  DESCRIPTION("See *abs_linesWriteSpeciesSplitXML*\n"
14484  "\n"
14485  "In addition, the structure of the files generated will not care about\n"
14486  "generating identifiers for the order in *abs_species*\n"),
14487  AUTHORS("Richard Larsson"),
14488  OUT(),
14489  GOUT(),
14490  GOUT_TYPE(),
14491  GOUT_DESC(),
14492  IN("output_file_format", "abs_lines_per_species"),
14493  GIN("basename"),
14494  GIN_TYPE("String"),
14495  GIN_DEFAULT(NODEF),
14496  GIN_DESC("Path to store the files at")));
14497 
14498  md_data_raw.push_back(create_mdrecord(
14499  NAME("ReadNetCDF"),
14500  DESCRIPTION("Reads a workspace variable from a NetCDF file.\n"
14501  "\n"
14502  "This method can read variables of any group.\n"
14503  "\n"
14504  "If the filename is omitted, the variable is read\n"
14505  "from <basename>.<variable_name>.nc.\n"),
14506  AUTHORS("Oliver Lemke"),
14507  OUT(),
14508  GOUT("out"),
14509  GOUT_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, ArrayOfVector,"
14510  "ArrayOfMatrix, GasAbsLookup"),
14511  GOUT_DESC("Variable to be read."),
14512  IN(),
14513  GIN("filename"),
14514  GIN_TYPE("String"),
14515  GIN_DEFAULT(NODEF),
14516  GIN_DESC("Name of the NetCDF file."),
14517  SETMETHOD(false),
14518  AGENDAMETHOD(false),
14519  USES_TEMPLATES(true),
14520  PASSWORKSPACE(false),
14521  PASSWSVNAMES(true)));
14522 
14523  md_data_raw.push_back(create_mdrecord(
14524  NAME("ReadXML"),
14525  DESCRIPTION(
14526  "Reads a workspace variable from an XML file.\n"
14527  "\n"
14528  "This method can read variables of any group.\n"
14529  "\n"
14530  "If the filename is omitted, the variable is read\n"
14531  "from <basename>.<variable_name>.xml.\n"
14532  "If the given filename does not exist, this method will\n"
14533  "also look for files with an added .xml, .xml.gz and .gz extension\n"),
14534  AUTHORS("Oliver Lemke"),
14535  OUT(),
14536  GOUT("out"),
14537  GOUT_TYPE("Any"),
14538  GOUT_DESC("Variable to be read."),
14539  IN(),
14540  GIN("filename"),
14541  GIN_TYPE("String"),
14542  GIN_DEFAULT(""),
14543  GIN_DESC("Name of the XML file."),
14544  SETMETHOD(false),
14545  AGENDAMETHOD(false),
14546  USES_TEMPLATES(true),
14547  PASSWORKSPACE(false),
14548  PASSWSVNAMES(true)));
14549 
14550  md_data_raw.push_back(create_mdrecord(
14551  NAME("ReadXMLIndexed"),
14552  DESCRIPTION("As *ReadXML*, but reads indexed file names.\n"
14553  "\n"
14554  "The variable is read from a file with name:\n"
14555  " <filename>.<file_index>.xml.\n"
14556  "where <file_index> is the value of *file_index*.\n"
14557  "\n"
14558  "This means that *filename* shall here not include the .xml\n"
14559  "extension. Omitting filename works as for *ReadXML*.\n"),
14560  AUTHORS("Oliver Lemke"),
14561  OUT(),
14562  GOUT("out"),
14563  GOUT_TYPE("Any"),
14564  GOUT_DESC("Workspace variable to be read."),
14565  IN("file_index"),
14566  GIN("filename", "digits"),
14567  GIN_TYPE("String", "Index"),
14568  GIN_DEFAULT("", "0"),
14569  GIN_DESC(
14570  "File name. See above.",
14571  "Equalize the widths of all numbers by padding with zeros as necessary.\n"
14572  "0 means no padding (default)."),
14573  SETMETHOD(false),
14574  AGENDAMETHOD(false),
14575  USES_TEMPLATES(true),
14576  PASSWORKSPACE(false),
14577  PASSWSVNAMES(true)));
14578 
14579  md_data_raw.push_back(create_mdrecord(
14580  NAME("Reduce"),
14581  DESCRIPTION(
14582  "Reduces a larger class to a smaller class of same size.\n"
14583  "\n"
14584  "The Reduce command reduces all \"1\"-dimensions to nil. Examples:\n"
14585  "\t1) 1 Vector can be reduced to a Numeric\n"
14586  "\t2) 2x1 Matrix can be reduced to 2 Vector\n"
14587  "\t3) 1x3x1 Tensor3 can be reduced to 3 Vector\n"
14588  "\t4) 1x1x1x1 Tensor4 can be reduced to a Numeric\n"
14589  "\t5) 3x1x4x1x5 Tensor5 can only be reduced to 3x4x5 Tensor3\n"
14590  "\t6) 1x1x1x1x2x3 Tensor6 can be reduced to 2x3 Matrix\n"
14591  "\t7) 2x3x4x5x6x7x1 Tensor7 can be reduced to 2x3x4x5x6x7 Tensor6\n"
14592  "And so on\n"),
14593  AUTHORS("Oliver Lemke", "Richard Larsson"),
14594  OUT(),
14595  GOUT("o"),
14596  GOUT_TYPE("Numeric, Numeric, Numeric, Numeric, Numeric, Numeric, Numeric,"
14597  "Vector, Vector, Vector, Vector, Vector, Vector,"
14598  "Matrix, Matrix, Matrix, Matrix, Matrix,"
14599  "Tensor3, Tensor3, Tensor3, Tensor3,"
14600  "Tensor4, Tensor4, Tensor4,"
14601  "Tensor5, Tensor5,"
14602  "Tensor6"),
14603  GOUT_DESC("Reduced form of input."),
14604  IN(),
14605  GIN("i"),
14606  GIN_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
14607  "Matrix, Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
14608  "Tensor3, Tensor4, Tensor5, Tensor6, Tensor7,"
14609  "Tensor4, Tensor5, Tensor6, Tensor7,"
14610  "Tensor5, Tensor6, Tensor7,"
14611  "Tensor6, Tensor7,"
14612  "Tensor7"),
14613  GIN_DEFAULT(NODEF),
14614  GIN_DESC("Over-dimensioned input"),
14615  SETMETHOD(false),
14616  AGENDAMETHOD(false),
14617  USES_TEMPLATES(false)));
14618 
14619  md_data_raw.push_back(create_mdrecord(
14620  NAME("refellipsoidEarth"),
14621  DESCRIPTION(
14622  "Earth reference ellipsoids.\n"
14623  "\n"
14624  "The reference ellipsoid (*refellipsoid*) is set to model the Earth,\n"
14625  "following different models. The options are:\n"
14626  "\n"
14627  " \"Sphere\" : A spherical Earth. The radius is set following\n"
14628  " the value set for the Earth radius in constants.cc.\n"
14629  "\n"
14630  " \"WGS84\" : The reference ellipsoid used by the GPS system.\n"
14631  " Should be the standard choice for a non-spherical Earth.\n"),
14632  AUTHORS("Patrick Eriksson"),
14633  OUT("refellipsoid"),
14634  GOUT(),
14635  GOUT_TYPE(),
14636  GOUT_DESC(),
14637  IN(),
14638  GIN("model"),
14639  GIN_TYPE("String"),
14640  GIN_DEFAULT("Sphere"),
14641  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14642 
14643  md_data_raw.push_back(
14644  create_mdrecord(NAME("refellipsoidGanymede"),
14645  DESCRIPTION("Ganymede reference ellipsoids.\n"
14646  "\n"
14647  "From Wikipedia\n"),
14648  AUTHORS("Takayoshi Yamada"),
14649  OUT("refellipsoid"),
14650  GOUT(),
14651  GOUT_TYPE(),
14652  GOUT_DESC(),
14653  IN(),
14654  GIN("model"),
14655  GIN_TYPE("String"),
14656  GIN_DEFAULT("Sphere"),
14657  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14658 
14659  md_data_raw.push_back(create_mdrecord(
14660  NAME("refellipsoidForAzimuth"),
14661  DESCRIPTION(
14662  "Conversion of 3D ellipsoid to 1D curvature radius.\n"
14663  "\n"
14664  "Calculates the curvature radius for the given latitude and azimuth\n"
14665  "angle, and uses this to set a spherical reference ellipsoid\n"
14666  "suitable for 1D calculations. The curvature radius is a better\n"
14667  "local approximation than using the local ellipsoid radius.\n"
14668  "\n"
14669  "The used expression assumes a geodetic latitude, but also\n"
14670  "latitudes should be OK as using this method anyhow signifies\n"
14671  "an approximation.\n"),
14672  AUTHORS("Patrick Eriksson"),
14673  OUT("refellipsoid"),
14674  GOUT(),
14675  GOUT_TYPE(),
14676  GOUT_DESC(),
14677  IN("refellipsoid"),
14678  GIN("latitude", "azimuth"),
14679  GIN_TYPE("Numeric", "Numeric"),
14681  GIN_DESC("Latitude.", "Azimuth angle.")));
14682 
14683  md_data_raw.push_back(create_mdrecord(
14684  NAME("refellipsoidEuropa"),
14685  DESCRIPTION(
14686  "Io reference ellipsoids.\n"
14687  "\n"
14688  "The reference ellipsoid (*refellipsoid*) is set to model Io,\n"
14689  "folowing different models. The options are:\n"
14690  "\n"
14691  " \"Sphere\" : A spherical planetesimal. The radius is taken from\n"
14692  " report of the IAU/IAG Working Group.\n"),
14693  AUTHORS("Richard Larsson"),
14694  OUT("refellipsoid"),
14695  GOUT(),
14696  GOUT_TYPE(),
14697  GOUT_DESC(),
14698  IN(),
14699  GIN("model"),
14700  GIN_TYPE("String"),
14701  GIN_DEFAULT("Sphere"),
14702  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14703 
14704  md_data_raw.push_back(create_mdrecord(
14705  NAME("refellipsoidIo"),
14706  DESCRIPTION(
14707  "Io reference ellipsoids.\n"
14708  "\n"
14709  "The reference ellipsoid (*refellipsoid*) is set to model Io,\n"
14710  "folowing different models. The options are:\n"
14711  "\n"
14712  " \"Sphere\" : A spherical planetesimal. The radius is taken from\n"
14713  " report of the IAU/IAG Working Group.\n"),
14714  AUTHORS("Richard Larsson"),
14715  OUT("refellipsoid"),
14716  GOUT(),
14717  GOUT_TYPE(),
14718  GOUT_DESC(),
14719  IN(),
14720  GIN("model"),
14721  GIN_TYPE("String"),
14722  GIN_DEFAULT("Sphere"),
14723  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14724 
14725  md_data_raw.push_back(create_mdrecord(
14726  NAME("refellipsoidJupiter"),
14727  DESCRIPTION(
14728  "Jupiter reference ellipsoids.\n"
14729  "\n"
14730  "The reference ellipsoid (*refellipsoid*) is set to model Jupiter,\n"
14731  "folowing different models. The options are:\n"
14732  "\n"
14733  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14734  " report of the IAU/IAG Working Group.\n"
14735  "\n"
14736  " \"Ellipsoid\" : A reference ellipsoid with parameters taken from\n"
14737  " a report of the IAU/IAG Working Group.\n"),
14738  AUTHORS("Patrick Eriksson"),
14739  OUT("refellipsoid"),
14740  GOUT(),
14741  GOUT_TYPE(),
14742  GOUT_DESC(),
14743  IN(),
14744  GIN("model"),
14745  GIN_TYPE("String"),
14746  GIN_DEFAULT("Sphere"),
14747  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14748 
14749  md_data_raw.push_back(create_mdrecord(
14750  NAME("refellipsoidMars"),
14751  DESCRIPTION(
14752  "Mars reference ellipsoids.\n"
14753  "\n"
14754  "The reference ellipsoid (*refellipsoid*) is set to model Mars,\n"
14755  "folowing different models. The options are:\n"
14756  "\n"
14757  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14758  " report of the IAU/IAG Working Group.\n"
14759  "\n"
14760  " \"Ellipsoid\" : A reference ellipsoid with parameters taken from\n"
14761  " a report of the IAU/IAG Working Group.\n"),
14762  AUTHORS("Patrick Eriksson"),
14763  OUT("refellipsoid"),
14764  GOUT(),
14765  GOUT_TYPE(),
14766  GOUT_DESC(),
14767  IN(),
14768  GIN("model"),
14769  GIN_TYPE("String"),
14770  GIN_DEFAULT("Sphere"),
14771  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14772 
14773  md_data_raw.push_back(create_mdrecord(
14774  NAME("refellipsoidMoon"),
14775  DESCRIPTION(
14776  "Moon reference ellipsoids.\n"
14777  "\n"
14778  "The reference ellipsoid (*refellipsoid*) is set to model Moon,\n"
14779  "folowing different models. The options are:\n"
14780  "\n"
14781  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14782  " report of the IAU/IAG Working Group.\n"
14783  "\n"
14784  " \"Ellipsoid\" : A reference ellipsoid with parameters taken from\n"
14785  " Wikepedia (see code for details). The IAU/IAG working group\n"
14786  " defines the Moon ellipsoid to be a sphere.\n"),
14787  AUTHORS("Patrick Eriksson"),
14788  OUT("refellipsoid"),
14789  GOUT(),
14790  GOUT_TYPE(),
14791  GOUT_DESC(),
14792  IN(),
14793  GIN("model"),
14794  GIN_TYPE("String"),
14795  GIN_DEFAULT("Sphere"),
14796  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14797 
14798  md_data_raw.push_back(create_mdrecord(
14799  NAME("refellipsoidOrbitPlane"),
14800  DESCRIPTION(
14801  "Conversion of 3D ellipsoid to 2D orbit track geometry.\n"
14802  "\n"
14803  "Determines an approximate reference ellipsoid following an orbit\n"
14804  "track. The new ellipsoid is determined simply, by determining the\n"
14805  "radius at the maximum latitude and from this value calculate a new\n"
14806  "new eccentricity. The orbit is specified by giving the orbit\n"
14807  "inclination (*orbitinc*), that is normally a value around 100 deg\n"
14808  "for polar sun-synchronous orbits.\n"),
14809  AUTHORS("Patrick Eriksson"),
14810  OUT("refellipsoid"),
14811  GOUT(),
14812  GOUT_TYPE(),
14813  GOUT_DESC(),
14814  IN("refellipsoid"),
14815  GIN("orbitinc"),
14816  GIN_TYPE("Numeric"),
14817  GIN_DEFAULT(NODEF),
14818  GIN_DESC("Orbit inclination.")));
14819 
14820  md_data_raw.push_back(create_mdrecord(
14821  NAME("refellipsoidSet"),
14822  DESCRIPTION(
14823  "Manual setting of the reference ellipsoid.\n"
14824  "\n"
14825  "The two values of *refellipsoid* can here be set manually. The two\n"
14826  "arguments correspond directly to first and second element of\n"
14827  "*refellipsoid*.\n"),
14828  AUTHORS("Patrick Eriksson"),
14829  OUT("refellipsoid"),
14830  GOUT(),
14831  GOUT_TYPE(),
14832  GOUT_DESC(),
14833  IN(),
14834  GIN("re", "e"),
14835  GIN_TYPE("Numeric", "Numeric"),
14836  GIN_DEFAULT(NODEF, "0"),
14837  GIN_DESC("Average or equatorial radius.", "Eccentricity")));
14838 
14839  md_data_raw.push_back(create_mdrecord(
14840  NAME("refellipsoidVenus"),
14841  DESCRIPTION(
14842  "Venus reference ellipsoids.\n"
14843  "\n"
14844  "The reference ellipsoid (*refellipsoid*) is set to model Venus,\n"
14845  "folowing different models. The options are:\n"
14846  "\n"
14847  " \"Sphere\" : A spherical planet. The radius is taken from a\n"
14848  " report of the IAU/IAG Working Group.\n"
14849  "\n"
14850  "According to the report used above, the Venus ellipsoid lacks\n"
14851  "eccentricity and no further models should be required.\n"),
14852  AUTHORS("Patrick Eriksson"),
14853  OUT("refellipsoid"),
14854  GOUT(),
14855  GOUT_TYPE(),
14856  GOUT_DESC(),
14857  IN(),
14858  GIN("model"),
14859  GIN_TYPE("String"),
14860  GIN_DEFAULT("Sphere"),
14861  GIN_DESC("Model ellipsoid to use. Options listed above.")));
14862 
14863  md_data_raw.push_back(create_mdrecord(
14864  NAME("refr_index_airFreeElectrons"),
14865  DESCRIPTION(
14866  "Microwave refractive index due to free electrons.\n"
14867  "\n"
14868  "The refractive index of free electrons is added to *refr_index_air*.\n"
14869  "To obtain the complete value, *refr_index_air* should be set to 1\n"
14870  "before calling this WSM. This applies also to *refr_index_air_group*.\n"
14871  "\n"
14872  "The expression applied is n=sqrt(1-wp^2/w^2) where wp is the plasma\n"
14873  "frequency, and w is the angular frequency (the function returns\n"
14874  "n-1, that here is slightly negative). This expressions is found in\n"
14875  "many textbooks, e.g. Rybicki and Lightman (1979). The above refers\n"
14876  "to *refr_index_air*. *refr_index_air_group* is sqrt(1+wp^2/w^2).\n"
14877  "\n"
14878  "The expression is dispersive. The frequency applied is the mean of\n"
14879  "first and last element of *f_grid* is selected. This frequency must\n"
14880  "be at least twice the plasma frequency.\n"
14881  "\n"
14882  "An error is issued if free electrons not are part of *abs_species*\n"
14883  "(and there exist a corresponding \"vmr\"-value). This demand is\n"
14884  "removed if *demand_vmr_value* is set to 0, but use this option\n"
14885  "with care.\n"),
14886  AUTHORS("Patrick Eriksson"),
14887  OUT("refr_index_air", "refr_index_air_group"),
14888  GOUT(),
14889  GOUT_TYPE(),
14890  GOUT_DESC(),
14891  IN("refr_index_air",
14892  "refr_index_air_group",
14893  "f_grid",
14894  "abs_species",
14895  "rtp_vmr"),
14896  GIN("demand_vmr_value"),
14897  GIN_TYPE("Index"),
14898  GIN_DEFAULT("1"),
14899  GIN_DESC("Flag to control if it is demanded that free electrons are "
14900  "in *abs_species*. Default is that this is demanded.")));
14901 
14902  md_data_raw.push_back(create_mdrecord(
14903  NAME("refr_index_airInfraredEarth"),
14904  DESCRIPTION(
14905  "Calculates the IR refractive index due to gases in the\n"
14906  "Earth's atmosphere.\n"
14907  "\n"
14908  "Only refractivity of dry air is considered. The formula used is\n"
14909  "contributed by Michael Hoepfner, Forschungszentrum Karlsruhe.\n"
14910  "\n"
14911  "The refractivity of dry air is added to *refr_index_air*. To obtain\n"
14912  "the complete value, *refr_index_air* should be set to 1 before\n"
14913  "calling this WSM. This applies also to *refr_index_air_group*.\n"
14914  "\n"
14915  "The expression used is non-dispersive. Hence, *refr_index_air* and\n"
14916  "*refr_index_air_group* are identical.\n"),
14917  AUTHORS("Mattias Ekstrom"),
14918  OUT("refr_index_air", "refr_index_air_group"),
14919  GOUT(),
14920  GOUT_TYPE(),
14921  GOUT_DESC(),
14922  IN("refr_index_air",
14923  "refr_index_air_group",
14924  "rtp_pressure",
14925  "rtp_temperature"),
14926  GIN(),
14927  GIN_TYPE(),
14928  GIN_DEFAULT(),
14929  GIN_DESC()));
14930 
14931  md_data_raw.push_back(create_mdrecord(
14932  NAME("refr_index_airMicrowavesEarth"),
14933  DESCRIPTION(
14934  "Microwave refractive index in Earth's atmosphere.\n"
14935  "\n"
14936  "This method just considers pressure, temperature and water\n"
14937  "vapour, which should suffice for Earth. For a more general\n"
14938  "method, see *refr_index_airMicrowavesGeneral*.\n"
14939  "\n"
14940  "The refractivity of dry air and water vapour is added to\n"
14941  "*refr_index_air*. To obtain the complete value, *refr_index_air*\n"
14942  "should be set to 1 before calling this WSM. This applies also to\n"
14943  "*refr_index_air_group.\n"
14944  "\n"
14945  "The expression used is non-dispersive. Hence, *refr_index_air*\n"
14946  "and *refr_index_air_group* are identical.\n"
14947  "\n"
14948  "The standard expression for Earth and microwaves is used:\n"
14949  " N = k1*(P-e)/T + k2*e/T + k3*e/T^2\n"
14950  "where N is refractivity, P is pressure, T is temperature and\n"
14951  "e is water vapour partial pressure. The values of k1, k2 and k3\n"
14952  "can be modified.\n"
14953  "\n"
14954  "Many different values of k1, k2 and k3 can be found in the\n"
14955  "literature. The default values applied here are taken from\n"
14956  "Bevis et al., GPS meteorology: Mapping ..., JAM, 1994.\n"
14957  "More specifically, these value are found in Table 1, listed\n"
14958  "as \"Present study\". Note that in ARTS Pa is used for pressure\n"
14959  "and k1, k2 and k3 must be adjusted accordingly.\n"),
14960  AUTHORS("Patrick Eriksson"),
14961  OUT("refr_index_air", "refr_index_air_group"),
14962  GOUT(),
14963  GOUT_TYPE(),
14964  GOUT_DESC(),
14965  IN("refr_index_air",
14966  "refr_index_air_group",
14967  "rtp_pressure",
14968  "rtp_temperature",
14969  "rtp_vmr",
14970  "abs_species"),
14971  GIN("k1", "k2", "k3"),
14972  GIN_TYPE("Numeric", "Numeric", "Numeric"),
14973  GIN_DEFAULT("77.6e-8", "70.4e-8", "3.739e-3"),
14974  GIN_DESC("Coefficient a, see above",
14975  "Coefficient b, see above",
14976  "Coefficient c, see above")));
14977 
14978  md_data_raw.push_back(create_mdrecord(
14979  NAME("refr_index_airMicrowavesGeneral"),
14980  DESCRIPTION(
14981  "Microwave refractive index due to gases in planetary atmospheres.\n"
14982  "\n"
14983  "The refractivity of a specified gas mixture is calculated and added\n"
14984  "to *refr_index_air*. To obtain the complete value, *refr_index_air*\n"
14985  "should be set to 1 before calling this WSM. This applies also to\n"
14986  "*refr_index_air_group.\n"
14987  "\n"
14988  "The expression used is non-dispersive. Hence, *refr_index_air* and\n"
14989  "*refr_index_air_group* are identical.\n"
14990  "\n"
14991  "Uses the methodology introduced by Newell&Baird (1965) for calculating\n"
14992  "refractivity of variable gas mixtures based on refractivity of the\n"
14993  "individual gases at reference conditions. Assuming ideal gas law for\n"
14994  "converting reference refractivity to actual pressure and temperature\n"
14995  "conditions. Reference refractivities are also taken from Newell&Baird (1965)\n"
14996  "and are vailable for N2, O2, CO2, H2, and He. Additionally, H2O reference\n"
14997  "refractivity has been derived from H2O contribution in Thayer (see\n"
14998  "*refr_index_airMicrowavesEarth*) for T0=273.15K. Any mixture of these gases\n"
14999  "can be taken into account.\n"),
15000  AUTHORS("Jana Mendrok"),
15001  OUT("refr_index_air", "refr_index_air_group"),
15002  GOUT(),
15003  GOUT_TYPE(),
15004  GOUT_DESC(),
15005  IN("refr_index_air",
15006  "refr_index_air_group",
15007  "rtp_pressure",
15008  "rtp_temperature",
15009  "rtp_vmr",
15010  "abs_species"),
15011  GIN(),
15012  GIN_TYPE(),
15013  GIN_DEFAULT(),
15014  GIN_DESC()));
15015 
15016  md_data_raw.push_back(create_mdrecord(
15017  NAME("retrievalDefClose"),
15018  DESCRIPTION(
15019  "Closes the definition of retrieval quantities and correlations and\n"
15020  "prepares related WSVs for the retrieval.\n"
15021  "\n"
15022  "This function calls jacobianClose and checks that the corvariance matrices\n"
15023  "are consistent with the Jacobian.\n"),
15024  AUTHORS("Simon Pfreundschuh"),
15025  OUT("jacobian_do", "jacobian_agenda", "retrieval_checked"),
15026  GOUT(),
15027  GOUT_TYPE(),
15028  GOUT_DESC(),
15029  IN("jacobian_agenda", "covmat_sx", "jacobian_quantities"),
15030  GIN(),
15031  GIN_TYPE(),
15032  GIN_DEFAULT(),
15033  GIN_DESC()));
15034 
15035  md_data_raw.push_back(create_mdrecord(
15036  NAME("retrievalAddAbsSpecies"),
15037  DESCRIPTION(
15038  "Adds an absorption species to the retrieval quantities.\n"
15039  "\n"
15040  "Similar to *jacobianAddAbsSpecies* but also sets the corresponding block in\n"
15041  "*covmat_sx* to the matrices provided in *covmat_block* and *covmat_inv_block*.\n"
15042  "The dimensions of *covmat_block* are required to agree with the dimensions of the\n"
15043  "retrieval grid.\n"
15044  "\n"
15045  "*covmat_inv_block* must be either empty or the same dimension as *covmat_block*.\n"
15046  "If provided, this matrix will be used as the inverse for the covariance matrix block\n"
15047  "and numerical inversion of this block is thus avoided. Note, however, that this is\n"
15048  "only effective if this block is uncorrelated with any other retrieval quantity.\n"
15049  "\n"
15050  "For number and order of elements added to *x*, see *jacobianAddAbsSpecies*.\n"),
15051  AUTHORS("Simon Pfreundschuh"),
15052  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15053  GOUT(),
15054  GOUT_TYPE(),
15055  GOUT_DESC(),
15056  IN("covmat_sx",
15057  "jacobian_quantities",
15058  "jacobian_agenda",
15059  "atmosphere_dim",
15060  "covmat_block",
15061  "covmat_inv_block",
15062  "p_grid",
15063  "lat_grid",
15064  "lon_grid"),
15065  GIN("g1", "g2", "g3", "species", "unit", "for_species_tag"),
15066  GIN_TYPE("Vector", "Vector", "Vector", "String", "String", "Index"),
15067  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "rel", "1"),
15068  GIN_DESC("Pressure retrieval grid.",
15069  "Latitude retrieval grid.",
15070  "Longitude retreival grid.",
15071  "The species tag of the retrieval quantity.",
15072  "Retrieval unit. See above.",
15073  "Index-bool for acting on species tags or species."),
15074  SETMETHOD(false),
15075  AGENDAMETHOD(false),
15076  USES_TEMPLATES(false),
15077  PASSWORKSPACE(true)));
15078 
15079  md_data_raw.push_back(create_mdrecord(
15080  NAME("retrievalAddFreqShift"),
15081  DESCRIPTION(
15082  "Same as *jacobianAddFreqShift* but also adds the correlation block\n"
15083  "contained in *covmat_block* and *covmat_inv_block* to *covmat_sx*.\n"
15084  "\n"
15085  "For number and order of elements added to *x*, see *jacobianAddFreqShift*.\n"),
15086  AUTHORS("Simon Pfreundschuh"),
15087  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15088  GOUT(),
15089  GOUT_TYPE(),
15090  GOUT_DESC(),
15091  IN("covmat_sx",
15092  "covmat_block",
15093  "covmat_inv_block",
15094  "jacobian_quantities",
15095  "jacobian_agenda",
15096  "f_grid"),
15097  GIN("df"),
15098  GIN_TYPE("Numeric"),
15099  GIN_DEFAULT("100e3"),
15100  GIN_DESC("Size of perturbation to apply.")));
15101 
15102  md_data_raw.push_back(create_mdrecord(
15103  NAME("retrievalAddFreqStretch"),
15104  DESCRIPTION(
15105  "Same as *jacobianAddFreqShift* but also adds the correlation block\n"
15106  "contained in *covmat_block* and *covmat_inv_block* to *covmat_sx*.\n"
15107  "\n"
15108  "For number and order of elements added to *x*, see *jacobianAddFreqStretch*.\n"),
15109  AUTHORS("Simon Pfreundschuh"),
15110  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15111  GOUT(),
15112  GOUT_TYPE(),
15113  GOUT_DESC(),
15114  IN("jacobian_quantities",
15115  "jacobian_agenda",
15116  "f_grid",
15117  "covmat_block",
15118  "covmat_inv_block"),
15119  GIN("df"),
15120  GIN_TYPE("Numeric"),
15121  GIN_DEFAULT("100e3"),
15122  GIN_DESC("Size of perturbation to apply.")));
15123 
15124  md_data_raw.push_back(create_mdrecord(
15125  NAME("retrievalDefInit"),
15126  DESCRIPTION(
15127  "Begin retrieval definition section.\n"
15128  "\n"
15129  "This function initialises all variables required for defining\n"
15130  "retrieval quantities and corresponding covariance matrices.\n"
15131  "By default, Jacobian quantities should be added withing the.\n"
15132  "retrieval definition section. If Jacobian quantities are\n"
15133  "defined separately *initialize_jacobian* must be set to 0,\n"
15134  "otherwise the quantities will be discarded.\n"),
15135  AUTHORS("Simon Pfreundschuh"),
15136  OUT("covmat_se",
15137  "covmat_sx",
15138  "covmat_block",
15139  "covmat_inv_block",
15140  "jacobian_quantities",
15141  "jacobian_agenda"),
15142  GOUT(),
15143  GOUT_TYPE(),
15144  GOUT_DESC(),
15145  IN(),
15146  GIN("initialize_jacobian"),
15147  GIN_TYPE("Index"),
15148  GIN_DEFAULT("1"),
15149  GIN_DESC("Flag whether or not to (re)initialize Jacobian-related\n"
15150  "quantities. Set to 0 if Jacobian is already defined.")));
15151 
15152  md_data_raw.push_back(create_mdrecord(
15153  NAME("retrievalAddCatalogParameter"),
15154  DESCRIPTION(
15155  "Similar to *jacobianAddBasicCatalogParameter* but also adds a corresponding\n"
15156  "block to *covmat_sx* with the given *var* as variance value.\n"
15157  "\n"
15158  "For number and order of elements added to *x*,\n"
15159  "see *jacobianAddBasicCatalogParameter*.\n"),
15160  AUTHORS("Simon Pfreundschuh"),
15161  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15162  GOUT(),
15163  GOUT_TYPE(),
15164  GOUT_DESC(),
15165  IN("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15166  GIN("catalog_identity", "catalog_parameter", "var"),
15167  GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
15169  GIN_DESC("The catalog line matching information.",
15170  "The catalog parameter of the retrieval quantity.",
15171  "The variance of the catalog parameter.")));
15172 
15173  md_data_raw.push_back(create_mdrecord(
15174  NAME("retrievalAddCatalogParameters"),
15175  DESCRIPTION(
15176  "Same as *jacobianAddBasicCatalogParameters* but also adds a new\n"
15177  "block to *covmat_sx* using the matrices in *covmat_block* and\n"
15178  "*covmat_inv_block*.\n"
15179  "\n"
15180  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15181  "which avoids its numerical computation.\n"
15182  "\n"
15183  "For number and order of elements added to *x*,\n"
15184  "see *jacobianAddBasicCatalogParameters*.\n"),
15185  AUTHORS("Simon Pfreundschuh"),
15186  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15187  GOUT(),
15188  GOUT_TYPE(),
15189  GOUT_DESC(),
15190  IN("covmat_sx",
15191  "jacobian_quantities",
15192  "jacobian_agenda",
15193  "covmat_block",
15194  "covmat_inv_block"),
15195  GIN("catalog_identities", "catalog_parameters"),
15196  GIN_TYPE("ArrayOfQuantumIdentifier", "ArrayOfString"),
15198  GIN_DESC("The catalog line matching informations.",
15199  "The catalog parameters of the retrieval quantity.")));
15200 
15201  md_data_raw.push_back(create_mdrecord(
15202  NAME("retrievalAddMagField"),
15203  DESCRIPTION(
15204  "Same as *jacobianAddMagField* but also adds a new block to *covmat_sx*\n"
15205  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15206  "\n"
15207  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15208  "which avoids its numerical computation.\n"
15209  "\n"
15210  "For number and order of elements added to *x*, see *jacobianAddMagField*.\n"),
15211  AUTHORS("Simon Pfreundschuh"),
15212  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15213  GOUT(),
15214  GOUT_TYPE(),
15215  GOUT_DESC(),
15216  IN("covmat_sx",
15217  "jacobian_quantities",
15218  "jacobian_agenda",
15219  "atmosphere_dim",
15220  "covmat_block",
15221  "covmat_inv_block",
15222  "p_grid",
15223  "lat_grid",
15224  "lon_grid"),
15225  GIN("g1", "g2", "g3", "component", "dB"),
15226  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
15227  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "1.0e-7"),
15228  GIN_DESC("Pressure retrieval grid.",
15229  "Latitude retrieval grid.",
15230  "Longitude retreival grid.",
15231  "Magnetic field component to retrieve",
15232  "Magnetic field perturbation")));
15233 
15234  md_data_raw.push_back(create_mdrecord(
15235  NAME("retrievalAddPointingZa"),
15236  DESCRIPTION(
15237  "Same as *jacobianAddPointingZa* but also adds a new block to *covmat_sx*\n"
15238  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15239  "\n"
15240  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15241  "which avoids its numerical computation.\n"
15242  "\n"
15243  "For number and order of elements added to *x*, see *jacobianAddPointingZa*.\n"),
15244  AUTHORS("Simon Pfreundschuh"),
15245  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15246  GOUT(),
15247  GOUT_TYPE(),
15248  GOUT_DESC(),
15249  IN("covmat_sx",
15250  "jacobian_quantities",
15251  "jacobian_agenda",
15252  "covmat_block",
15253  "covmat_inv_block",
15254  "sensor_pos",
15255  "sensor_time"),
15256  GIN("poly_order", "calcmode", "dza"),
15257  GIN_TYPE("Index", "String", "Numeric"),
15258  GIN_DEFAULT("0", "recalc", "0.01"),
15259  GIN_DESC("Order of polynomial to describe the time variation of "
15260  "pointing off-sets.",
15261  "Calculation method. See above",
15262  "Size of perturbation to apply (when applicable).")));
15263 
15264  md_data_raw.push_back(create_mdrecord(
15265  NAME("retrievalAddPolyfit"),
15266  DESCRIPTION(
15267  "Same as *jacobianAddPolyfit* but also adds a new block to *covmat_sx*\n"
15268  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15269  "\n"
15270  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15271  "which avoids its numerical computation.\n"
15272  "\n"
15273  "For number and order of elements added to *x*, see *jacobianAddPolyfit*.\n"),
15274  AUTHORS("Simon Pfreundschuh"),
15275  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15276  GOUT(),
15277  GOUT_TYPE(),
15278  GOUT_DESC(),
15279  IN("covmat_sx",
15280  "jacobian_quantities",
15281  "jacobian_agenda",
15282  "covmat_block",
15283  "covmat_inv_block",
15284  "sensor_response_pol_grid",
15285  "sensor_response_dlos_grid",
15286  "sensor_pos"),
15287  GIN("poly_order",
15288  "no_pol_variation",
15289  "no_los_variation",
15290  "no_mblock_variation"),
15291  GIN_TYPE("Index", "Index", "Index", "Index"),
15292  GIN_DEFAULT(NODEF, "0", "0", "0"),
15293  GIN_DESC("Polynomial order to use for the fit.",
15294  "Set to 1 if the baseline off-set is the same for all "
15295  "Stokes components.",
15296  "Set to 1 if the baseline off-set is the same for all "
15297  "line-of-sights (inside each measurement block).",
15298  "Set to 1 if the baseline off-set is the same for all "
15299  "measurement blocks.")));
15300 
15301  md_data_raw.push_back(create_mdrecord(
15302  NAME("retrievalAddScatSpecies"),
15303  DESCRIPTION(
15304  "Same as *jacobianAddPolyfit* but also adds a new block to *covmat_sx*\n"
15305  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15306  "\n"
15307  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15308  "which avoids its numerical computation.\n"
15309  "\n"
15310  "For number and order of elements added to *x*, see *jacobianAddScatSpecies*.\n"),
15311  AUTHORS("Simon Pfreundschuh"),
15312  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15313  GOUT(),
15314  GOUT_TYPE(),
15315  GOUT_DESC(),
15316  IN("covmat_sx",
15317  "jacobian_quantities",
15318  "jacobian_agenda",
15319  "atmosphere_dim",
15320  "covmat_block",
15321  "covmat_inv_block",
15322  "p_grid",
15323  "lat_grid",
15324  "lon_grid"),
15325  GIN("g1", "g2", "g3", "species", "quantity"),
15326  GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
15328  GIN_DESC(
15329  "Pressure retrieval grid.",
15330  "Latitude retrieval grid.",
15331  "Longitude retreival grid.",
15332  "Name of scattering species, must match one element in *scat_species*.",
15333  "Retrieval quantity, e.g. \"IWC\"."),
15334  SETMETHOD(false),
15335  AGENDAMETHOD(false),
15336  USES_TEMPLATES(false),
15337  PASSWORKSPACE(true)));
15338 
15339  md_data_raw.push_back(create_mdrecord(
15340  NAME("retrievalAddSinefit"),
15341  DESCRIPTION(
15342  "Same as *jacobianAddSinefit* but also adds a new block to *covmat_sx*\n"
15343  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15344  "\n"
15345  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15346  "which avoids its numerical computation.\n"
15347  "\n"
15348  "For number and order of elements added to *x*, see *jacobianAddSinefit*.\n"),
15349  AUTHORS("Simon Pfreundschuh"),
15350  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15351  GOUT(),
15352  GOUT_TYPE(),
15353  GOUT_DESC(),
15354  IN("covmat_sx",
15355  "jacobian_quantities",
15356  "jacobian_agenda",
15357  "covmat_block",
15358  "covmat_inv_block",
15359  "sensor_response_pol_grid",
15360  "sensor_response_dlos_grid",
15361  "sensor_pos"),
15362  GIN("period_lengths",
15363  "no_pol_variation",
15364  "no_los_variation",
15365  "no_mblock_variation"),
15366  GIN_TYPE("Vector", "Index", "Index", "Index"),
15367  GIN_DEFAULT(NODEF, "0", "0", "0"),
15368  GIN_DESC("Period lengths of the fit.",
15369  "Set to 1 if the baseline off-set is the same for all "
15370  "Stokes components.",
15371  "Set to 1 if the baseline off-set is the same for all "
15372  "line-of-sights (inside each measurement block).",
15373  "Set to 1 if the baseline off-set is the same for all "
15374  "measurement blocks.")));
15375 
15376  md_data_raw.push_back(create_mdrecord(
15377  NAME("retrievalAddSpecialSpecies"),
15378  DESCRIPTION(
15379  "Same as *jacobianAddSpecialSpecies* but also adds a new block to *covmat_sx*\n"
15380  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15381  "\n"
15382  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15383  "which avoids its numerical computation.\n"
15384  "\n"
15385  "For number and order of elements added to *x*, see *jacobianAddSpecialSpecies*.\n"),
15386  AUTHORS("Simon Pfreundschuh"),
15387  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15388  GOUT(),
15389  GOUT_TYPE(),
15390  GOUT_DESC(),
15391  IN("covmat_sx",
15392  "jacobian_quantities",
15393  "jacobian_agenda",
15394  "atmosphere_dim",
15395  "covmat_block",
15396  "covmat_inv_block",
15397  "p_grid",
15398  "lat_grid",
15399  "lon_grid"),
15400  GIN("g1", "g2", "g3", "species"),
15401  GIN_TYPE("Vector", "Vector", "Vector", "String"),
15403  GIN_DESC("Pressure retrieval grid.",
15404  "Latitude retrieval grid.",
15405  "Longitude retreival grid.",
15406  "The species of the retrieval quantity."),
15407  SETMETHOD(false),
15408  AGENDAMETHOD(false),
15409  USES_TEMPLATES(false),
15410  PASSWORKSPACE(true)));
15411 
15412  md_data_raw.push_back(create_mdrecord(
15413  NAME("retrievalAddSurfaceQuantity"),
15414  DESCRIPTION(
15415  "Same as *jacobianAddSurfaceQuantity* but also adds a new block to *covmat_sx*\n"
15416  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15417  "\n"
15418  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15419  "which avoids its numerical computation.\n"
15420  "\n"
15421  "For number and order of elements added to *x*, see *jacobianAddSurfaceQuantity*.\n"),
15422  AUTHORS("Patrick Eriksson"),
15423  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15424  GOUT(),
15425  GOUT_TYPE(),
15426  GOUT_DESC(),
15427  IN("covmat_sx",
15428  "jacobian_quantities",
15429  "jacobian_agenda",
15430  "covmat_block",
15431  "covmat_inv_block",
15432  "atmosphere_dim",
15433  "lat_grid",
15434  "lon_grid"),
15435  GIN("g1", "g2", "quantity"),
15436  GIN_TYPE("Vector", "Vector", "String"),
15438  GIN_DESC("Latitude retrieval grid.",
15439  "Longitude retreival grid.",
15440  "Retrieval quantity, e.g. \"Wind speed\".")));
15441 
15442  md_data_raw.push_back(create_mdrecord(
15443  NAME("retrievalAddTemperature"),
15444  DESCRIPTION(
15445  "Same as *jacobianAddTemperature* but also adds a new block to *covmat_sx*\n"
15446  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15447  "\n"
15448  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15449  "which avoids its numerical computation.\n"
15450  "\n"
15451  "For number and order of elements added to *x*, see *jacobianAddTemperature*.\n"),
15452  AUTHORS("Simon Pfreundschuh"),
15453  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15454  GOUT(),
15455  GOUT_TYPE(),
15456  GOUT_DESC(),
15457  IN("covmat_sx",
15458  "jacobian_quantities",
15459  "jacobian_agenda",
15460  "atmosphere_dim",
15461  "covmat_block",
15462  "covmat_inv_block",
15463  "p_grid",
15464  "lat_grid",
15465  "lon_grid"),
15466  GIN("g1", "g2", "g3", "hse"),
15467  GIN_TYPE("Vector", "Vector", "Vector", "String"),
15468  GIN_DEFAULT(NODEF, NODEF, NODEF, "on"),
15469  GIN_DESC("Pressure retrieval grid.",
15470  "Latitude retrieval grid.",
15471  "Longitude retreival grid.",
15472  "Flag to assume HSE or not (\"on\" or \"off\").")));
15473 
15474  md_data_raw.push_back(create_mdrecord(
15475  NAME("retrievalAddWind"),
15476  DESCRIPTION(
15477  "Same as *jacobianAddWind* but also adds a new block to *covmat_sx*\n"
15478  "using the matrices in *covmat_block* and *covmat_inv_block*.\n"
15479  "\n"
15480  "If *covmat_inv_block* is non-empty, it is used as inverse for the added block\n"
15481  "which avoids its numerical computation.\n"
15482  "\n"
15483  "For number and order of elements added to *x*, see *jacobianAddWind*.\n"),
15484  AUTHORS("Simon Pfreundschuh"),
15485  OUT("covmat_sx", "jacobian_quantities", "jacobian_agenda"),
15486  GOUT(),
15487  GOUT_TYPE(),
15488  GOUT_DESC(),
15489  IN("covmat_sx",
15490  "jacobian_quantities",
15491  "jacobian_agenda",
15492  "atmosphere_dim",
15493  "covmat_block",
15494  "covmat_inv_block",
15495  "p_grid",
15496  "lat_grid",
15497  "lon_grid"),
15498  GIN("g1", "g2", "g3", "component", "dfrequency"),
15499  GIN_TYPE("Vector", "Vector", "Vector", "String", "Numeric"),
15500  GIN_DEFAULT(NODEF, NODEF, NODEF, "v", "0.1"),
15501  GIN_DESC("Pressure retrieval grid.",
15502  "Latitude retrieval grid.",
15503  "Longitude retrieval grid.",
15504  "Wind component to retrieve",
15505  "This is the frequency perturbation")));
15506 
15507  md_data_raw.push_back(create_mdrecord(
15508  NAME("retrievalErrorsExtract"),
15509  DESCRIPTION(
15510  "Extract retrieval error from covariance matrices.\n"
15511  "\n"
15512  "Extracts the error estimates for the retrieved quantities from the covariance\n"
15513  "matrices for the error due to measurement noise *covmat_so* and the error due\n"
15514  "to limited resolution of the observation system *covmat_ss* and stores them in\n"
15515  "the vectors *retrieval_eo* and *retrieval_ss*, respectively."
15516  "\n"
15517  "To etract these errors, first the convariance matrices of which the errors \n"
15518  "should be extracted have to be computed using the WSMs *covmat_soCalc*\n"
15519  "and *covmat_ssCalc* or set to be empty in order to be ignored. Note, however,\n"
15520  "that this will also set the corresponding error vector to be empty.\n"),
15521  AUTHORS("Simon Pfreundschuh"),
15522  OUT("retrieval_eo", "retrieval_ss"),
15523  GOUT(),
15524  GOUT_TYPE(),
15525  GOUT_DESC(),
15526  IN("covmat_so", "covmat_ss"),
15527  GIN(),
15528  GIN_TYPE(),
15529  GIN_DEFAULT(),
15530  GIN_DESC()));
15531 
15532  md_data_raw.push_back(create_mdrecord(
15533  NAME("RT4Calc"),
15534  DESCRIPTION(
15535  "Interface to the PolRadTran RT4 scattering solver (by F. Evans).\n"
15536  "\n"
15537  "RT4 provides the radiation field (*cloudbox_field*) from a vector\n"
15538  "1D scattering solution assuming a plane-parallel atmosphere (flat\n"
15539  "Earth). It calculates up to two Stokes parameters (*stokes_dim*<=2),\n"
15540  "i.e., all azimuthally randomly oriented particles are allowed (this\n"
15541  "also includes macroscopically isotropic particles). Refraction is\n"
15542  "not taken into account.\n"
15543  "\n"
15544  "The scattering solution is internally obtained over the full\n"
15545  "(plane-parallel) atmosphere, i.e. not confined to the cloudbox.\n"
15546  "However, the radiation field output is limited to the cloudbox.\n"
15547  "This allows to consider clearsky RT through a non-spherical\n"
15548  "atmosphere outside the cloudbox improving the RT solution for\n"
15549  "non-plane-parallel media compared to the plain RT4 output.\n"
15550  "\n"
15551  "*nstreams* is the number of polar angles taken into account\n"
15552  "internally in the scattering solution. That is, *nstreams*\n"
15553  "determines the angular resolution, hence the accuracy, of the\n"
15554  "scattering solution. The more anisotropic the bulk scattering\n"
15555  "matrix, the more streams are required. The computational burden\n"
15556  "increases approximately with the third power of *nstreams*.\n"
15557  "The default value (*nstreams*=16) was found to be sufficient for\n"
15558  "most microwave scattering calculations. It is likely insufficient\n"
15559  "for IR calculations involving ice clouds, though.\n"
15560  "\n"
15561  "Here, *za_grid* is NOT an input parameter, but output, and its\n"
15562  "size equals *nstreams* or *nstreams*+2 (Gauss-Legendre and Double\n"
15563  "Gauss quadratures in case *add_straight_angles*=1) (the reason is\n"
15564  "that the computational burden is high for additional angles,\n"
15565  "regardless whether they are quadrature angles or not; hence the\n"
15566  "quadrature angles supplemented with 0 and 180deg are considered to\n"
15567  "provide the best radiation field for a given effort).\n"
15568  "\n"
15569  "The *auto_inc_nstreams* feature can be used to increase the number\n"
15570  "of streams used internally in the scattering solution when found\n"
15571  "necessary.\n"
15572  "NOTE: this number-of-streams increase is only internally - the\n"
15573  "angular dimension of the output *cloudbox_field* is fixed to the\n"
15574  "*nstreams* given as input to this WSM.\n"
15575  "\n"
15576  "Quadrature methods available are: 'L'obatto, 'G'auss-Legendre and\n"
15577  "'D'ouble Gauss quadrature.\n"
15578  "\n"
15579  "This WSM applies *surface_rtprop_agenda* to derive reflection\n"
15580  "matrix and surface emission vector that are directly feed into\n"
15581  "RT4's core solver (instead of their RT4-internal calculation as\n"
15582  "used by *RT4CalcWithRT4Surface*).\n"
15583  "\n"
15584  "Known issues of ARTS implementation:\n"
15585  "- TOA incoming radiation is so far assumed as blackbody cosmic\n"
15586  " background (temperature taken from the ARTS-internal constant).\n"
15587  "\n"
15588  "The keyword *pfct_method* allows to choose the method to extract the\n"
15589  "scattering matrix. 'interpolate' considers temperature dependence,\n"
15590  "others neglect it by chosing one specific temperature grid point\n"
15591  "from the single scattering data: 'low' choses the lowest T-point,\n"
15592  "'high' the highest T-point, and 'median' the median T-point. As\n"
15593  "different scattering elements can have different temperature grids,\n"
15594  "the actual temperature value used can differ between the scattering\n"
15595  "elements.\n"
15596  "Note that this keyword solely affects the scattering matrix;\n"
15597  "extinction matrix and absorption vector are always interpolated to\n"
15598  "the actual temperature.\n"),
15599  AUTHORS("Jana Mendrok"),
15600  OUT("cloudbox_field", "za_grid", "aa_grid"),
15601  GOUT(),
15602  GOUT_TYPE(),
15603  GOUT_DESC(),
15604  IN("atmfields_checked",
15605  "atmgeom_checked",
15606  "scat_data_checked",
15607  "cloudbox_checked",
15608  "cloudbox_on",
15609  "cloudbox_limits",
15610  "propmat_clearsky_agenda",
15611  "surface_rtprop_agenda",
15612  "atmosphere_dim",
15613  "pnd_field",
15614  "t_field",
15615  "z_field",
15616  "vmr_field",
15617  "p_grid",
15618  "scat_data",
15619  "f_grid",
15620  "stokes_dim",
15621  "z_surface"),
15622  GIN("nstreams",
15623  "pfct_method",
15624  "quad_type",
15625  "add_straight_angles",
15626  "pfct_aa_grid_size",
15627  "auto_inc_nstreams",
15628  "robust",
15629  "za_interp_order",
15630  "cos_za_interp",
15631  "max_delta_tau"),
15632  GIN_TYPE("Index",
15633  "String",
15634  "String",
15635  "Index",
15636  "Index",
15637  "Index",
15638  "Index",
15639  "Index",
15640  "Index",
15641  "Numeric"),
15642  GIN_DEFAULT("16", "median", "D", "1", "19", "0", "0", "1", "0", "1e-6"),
15643  GIN_DESC("Number of polar angle directions (streams) in RT4"
15644  " solution (must be an even number).",
15645  "Flag which method to apply to derive phase function (for"
15646  " available options see above).",
15647  "Flag which quadrature to apply in RT4 solution (for"
15648  " available options see above).",
15649  "Flag whether to include nadir and zenith as explicit"
15650  " directions (only effective for quad_type G and D).",
15651  "Number of azimuthal angle grid points to consider in"
15652  " Fourier series decomposition of scattering matrix (only"
15653  " applied for randomly oriented scattering elements)",
15654  "Flag whether to internally increase nstreams (individually"
15655  " per frequency) if norm of (bulk) scattering matrix is not"
15656  " preserved properly. If 0, no adaptation is done. Else"
15657  " *auto_inc_nstreams* gives the maximum number of streams to"
15658  " increase to. Note that the output *cloudbox_field* remains"
15659  " with angular dimension of *nstreams*, only the internal"
15660  " solution is adapted (and then interpolated to the"
15661  " lower-resolution output angular grid).",
15662  "For *auto_inc_nstreams*>0, flag whether to not fail even if"
15663  " scattering matrix norm is not preserved when maximum stream"
15664  " number is reached. Internal RT4 calculations is then"
15665  " performed with nstreams=*auto_inc_nstreams*.",
15666  "For *auto_inc_nstreams*>0, polar angle interpolation order"
15667  " for interpolation from internal increased stream to"
15668  " originally requested nstreams-ifield.",
15669  "For *auto_inc_nstreams*>0, flag whether to do polar angle"
15670  " interpolation in cosine (='mu') space.",
15671  "Maximum optical depth of infinitesimal layer (where single"
15672  " scattering approximation is assumed to apply).")));
15673 
15674  md_data_raw.push_back(create_mdrecord(
15675  NAME("RT4CalcWithRT4Surface"),
15676  DESCRIPTION(
15677  "As RT4Calc except for using RT4's proprietary surface type handling.\n"
15678  "\n"
15679  "This WSM is only indented for testing purposes.\n"
15680  "\n"
15681  "The following surface type/property methods are available and\n"
15682  "require the the following input:\n"
15683  "- 'L'ambertian: *surface_scalar_reflectivity*, *surface_skin_t*\n"
15684  "- 'F'resnel: *surface_complex_refr_index*, *surface_skin_t*\n"
15685  "- 'S'pecular: *surface_reflectivity*, *surface_skin_t*\n"
15686  "'L' and 'F' use proprietary RT4 methods, 'S' uses RT4's Fresnel\n"
15687  "methods modified to behave similar to ARTS'\n"
15688  "*surfaceFlatReflectivity*.\n"),
15689  AUTHORS("Jana Mendrok"),
15690  OUT("cloudbox_field", "za_grid", "aa_grid"),
15691  GOUT(),
15692  GOUT_TYPE(),
15693  GOUT_DESC(),
15694  IN("atmfields_checked",
15695  "atmgeom_checked",
15696  "scat_data_checked",
15697  "cloudbox_checked",
15698  "cloudbox_on",
15699  "cloudbox_limits",
15700  "propmat_clearsky_agenda",
15701  "atmosphere_dim",
15702  "pnd_field",
15703  "t_field",
15704  "z_field",
15705  "vmr_field",
15706  "p_grid",
15707  "scat_data",
15708  "f_grid",
15709  "stokes_dim",
15710  "z_surface",
15711  "surface_skin_t",
15712  "surface_scalar_reflectivity",
15713  "surface_reflectivity",
15714  "surface_complex_refr_index"),
15715  GIN("nstreams",
15716  "pfct_method",
15717  "ground_type",
15718  "quad_type",
15719  "add_straight_angles",
15720  "pfct_aa_grid_size",
15721  "auto_inc_nstreams",
15722  "robust",
15723  "za_interp_order",
15724  "cos_za_interp",
15725  "max_delta_tau"),
15726  GIN_TYPE("Index",
15727  "String",
15728  "String",
15729  "String",
15730  "Index",
15731  "Index",
15732  "Index",
15733  "Index",
15734  "Index",
15735  "Index",
15736  "Numeric"),
15737  GIN_DEFAULT(
15738  "16", "median", "A", "D", "1", "19", "0", "0", "1", "0", "1e-6"),
15739  GIN_DESC("Number of polar angle directions (streams) in RT4"
15740  " solution (must be an even number).",
15741  "Flag which method to apply to derive phase function (for"
15742  " available options see above).",
15743  "Flag which surface type/surface property method to use"
15744  " (for available options see above).",
15745  "Flag which quadrature to apply in RT4 solution (for"
15746  " available options see above).",
15747  "Flag whether to include nadir and zenith as explicit"
15748  " directions (only effective for quad_type G and D).",
15749  "Number of azimuthal angle grid points to consider in"
15750  " Fourier series decomposition of scattering matrix (only"
15751  " applied for randomly oriented scattering elements)",
15752  "Flag whether to internally increase nstreams (individually"
15753  " per frequency) if norm of (bulk) scattering matrix is not"
15754  " preserved properly. If 0, no adaptation is done. Else"
15755  " *auto_inc_nstreams* gives the maximum number of streams to"
15756  " increase to.",
15757  "For *auto_inc_nstreams*>0, flag whether to not fail even if"
15758  " scattering matrix norm is not preserved when maximum stream"
15759  " number is reached. Internal RT4 calculations is then"
15760  " performed with nstreams=*auto_inc_nstreams*.",
15761  "For *auto_inc_nstreams*>0, polar angle interpolation order"
15762  " for interpolation from internal increased stream to"
15763  " originally requested nstreams-ifield.",
15764  "For *auto_inc_nstreams*>0, flag whether to do polar angle"
15765  " interpolation in cosine (='mu') space.",
15766  "Maximum optical depth of infinitesimal layer (where single"
15767  " scattering approximation is assumed to apply).")));
15768 
15769  md_data_raw.push_back(create_mdrecord(
15770  NAME("RT4Test"),
15771  DESCRIPTION(
15772  "RT4 validation test.\n"
15773  "\n"
15774  "Executes test case testc shipped with PolRadTran/RT4 code (but uses\n"
15775  "data files converted to arts-xml). Output written to (xml-)file.\n"),
15776  AUTHORS("Jana Mendrok"),
15777  OUT(),
15778  GOUT("out_rad"),
15779  GOUT_TYPE("Tensor4"),
15780  GOUT_DESC("RT4 testc calculation results."),
15781  IN(),
15782  GIN("datapath"),
15783  GIN_TYPE("String"),
15784  GIN_DEFAULT("artscomponents/polradtran/testdata/"),
15785  GIN_DESC("Folder containing arts-xml converted test case input data.")));
15786 
15787  md_data_raw.push_back(create_mdrecord(
15788  NAME("rte_losGeometricFromRtePosToRtePos2"),
15789  DESCRIPTION(
15790  "The geometric line-of-sight between two points.\n"
15791  "\n"
15792  "The method sets *rte_los* to the line-of-sight, at *rte_pos*,\n"
15793  "that matches the geometrical propagation path between *rte_pos*\n"
15794  "and *rte_pos2*.\n"
15795  "\n"
15796  "The standard case should be that *rte_pos2* corresponds to a\n"
15797  "transmitter, and *rte_pos* to the receiver/sensor.\n"),
15798  AUTHORS("Patrick Eriksson"),
15799  OUT("rte_los"),
15800  GOUT(),
15801  GOUT_TYPE(),
15802  GOUT_DESC(),
15803  IN("atmosphere_dim",
15804  "lat_grid",
15805  "lon_grid",
15806  "refellipsoid",
15807  "rte_pos",
15808  "rte_pos2"),
15809  GIN(),
15810  GIN_TYPE(),
15811  GIN_DEFAULT(),
15812  GIN_DESC()));
15813 
15814  md_data_raw.push_back(
15815  create_mdrecord(NAME("rte_losSet"),
15816  DESCRIPTION("Sets *rte_los* to the given angles.\n"
15817  "\n"
15818  "The azimuth angle is ignored for 1D and 2D.\n"),
15819  AUTHORS("Patrick Eriksson"),
15820  OUT("rte_los"),
15821  GOUT(),
15822  GOUT_TYPE(),
15823  GOUT_DESC(),
15824  IN("atmosphere_dim"),
15825  GIN("za", "aa"),
15826  GIN_TYPE("Numeric", "Numeric"),
15828  GIN_DESC("Zenith angle of sensor line-of-sight.",
15829  "Azimuth angle of sensor line-of-sight.")));
15830 
15831  md_data_raw.push_back(create_mdrecord(
15832  NAME("rte_posSet"),
15833  DESCRIPTION(
15834  "Sets *rte_pos* to the given co-ordinates.\n"
15835  "\n"
15836  "The longitude is ignored for 1D and 2D, and the latitude is also \n"
15837  "ignored for 1D.\n"),
15838  AUTHORS("Patrick Eriksson"),
15839  OUT("rte_pos"),
15840  GOUT(),
15841  GOUT_TYPE(),
15842  GOUT_DESC(),
15843  IN("atmosphere_dim"),
15844  GIN("z", "lat", "lon"),
15845  GIN_TYPE("Numeric", "Numeric", "Numeric"),
15847  GIN_DESC("Geometrical altitude of sensor position.",
15848  "Latitude of sensor position.",
15849  "Longitude of sensor position.")));
15850 
15851  md_data_raw.push_back(create_mdrecord(
15852  NAME("rte_pos_losMoveToStartOfPpath"),
15853  DESCRIPTION(
15854  "Sets *rte_pos* and *rte_los* to values for last point in *ppath*.\n"
15855  "\n"
15856  "For example, if the propagation path intersects with the surface,\n"
15857  "this method gives you the position and angle of *ppath* at the\n"
15858  "surface.\n"),
15859  AUTHORS("Patrick Eriksson"),
15860  OUT("rte_pos", "rte_los"),
15861  GOUT(),
15862  GOUT_TYPE(),
15863  GOUT_DESC(),
15864  IN("atmosphere_dim", "ppath"),
15865  GIN(),
15866  GIN_TYPE(),
15867  GIN_DEFAULT(),
15868  GIN_DESC()));
15869 
15870 
15871  md_data_raw.push_back(create_mdrecord(
15872  NAME("rtp_nlteFromRaw"),
15873  DESCRIPTION("Sets NLTE values manually\n"
15874  "\n"
15875  "Touch\n"),
15876  AUTHORS("Richard Larsson"),
15877  OUT("rtp_nlte"),
15878  GOUT(),
15879  GOUT_TYPE(),
15880  GOUT_DESC(),
15881  IN("nlte_level_identifiers",
15882  "nlte_vibrational_energies"),
15883  GIN("data"),
15884  GIN_TYPE("Vector"),
15885  GIN_DEFAULT(NODEF),
15886  GIN_DESC("Vibrational data [nlevels]")));
15887 
15888  md_data_raw.push_back(create_mdrecord(
15889  NAME("ScatElementsPndAndScatAdd"),
15890  DESCRIPTION(
15891  "Adds single scattering data and particle number density for\n"
15892  "individual scattering elements.\n"
15893  "\n"
15894  "The methods reads the specified files and appends the obtained data\n"
15895  "to *scat_data* and *pnd_field_raw*. Scattering data is appended to\n"
15896  "the current last existing scattering species in *scat_data*.\n"),
15897  AUTHORS("Claudia Emde, Jana Mendrok"),
15898  OUT("scat_data_raw", "pnd_field_raw"),
15899  GOUT(),
15900  GOUT_TYPE(),
15901  GOUT_DESC(),
15902  IN("scat_data_raw", "pnd_field_raw", "atmosphere_dim"),
15903  GIN("scat_data_files", "pnd_field_files"),
15904  GIN_TYPE("ArrayOfString", "ArrayOfString"),
15906  GIN_DESC("List of names of single scattering data files.",
15907  "List of names of the corresponding pnd_field files.")));
15908 
15909  md_data_raw.push_back(create_mdrecord(
15910  NAME("ScatElementsSelect"),
15911  DESCRIPTION(
15912  "Allows to limit considered scattering elements according to size.\n"
15913  "\n"
15914  "Scattering elements of a specified scattering species are removed\n"
15915  "from *scat_data_raw* and *scat_meta*, i.e. removed from further\n"
15916  "calculations, if their particle size exceeds the specified limits.\n"
15917  "Specification of the scattering species is done by name matching the\n"
15918  "scattering species name part of *scat_species* tag.\n"
15919  "As size parameter, all size parameters reported by the meta data\n"
15920  "can be used (see *scat_meta_single* for offered parameters and\n"
15921  "their naming).\n"),
15922  AUTHORS("Daniel Kreyling, Oliver Lemke, Jana Mendrok"),
15923  OUT("scat_data_raw", "scat_meta"),
15924  GOUT(),
15925  GOUT_TYPE(),
15926  GOUT_DESC(),
15927  IN("scat_data_raw", "scat_meta", "scat_species"),
15928  GIN("species", "sizeparam", "sizemin", "sizemax", "tolerance", "delim"),
15929  GIN_TYPE("String", "String", "Numeric", "Numeric", "Numeric", "String"),
15930  GIN_DEFAULT(NODEF, NODEF, "0.", "-1.", "1e-6", "-"),
15931  GIN_DESC("Species on which to apply size selection.",
15932  "Size parameter to apply for size selection.",
15933  "Minimum size [m] of the scattering elements to consider",
15934  "Maximum size [m] of the scattering elements to consider (if "
15935  "negative, no max. limitation is applied).",
15936  "Relative numerical tolerance of size limit values.",
15937  "Delimiter string of *scat_species* elements.")));
15938 
15939  md_data_raw.push_back(create_mdrecord(
15940  NAME("ScatElementsToabs_speciesAdd"),
15941  DESCRIPTION(
15942  "Appends scattering elements to *abs_species* including reading\n"
15943  "single scattering data and corresponding pnd field.\n"
15944  "\n"
15945  "The methods reads the specified single scattering and pnd_field\n"
15946  "data of individual scattering elements and appends the obtained data\n"
15947  "to *scat_data* (appending to its last scattering species) and\n"
15948  "*vmr_field_raw*. Per scattering element, it also appends one\n"
15949  "instance of species 'particles' to *abs_species*.\n"),
15950  AUTHORS("Jana Mendrok"),
15951  OUT("scat_data_raw",
15952  "vmr_field_raw",
15953  "abs_species",
15954  "propmat_clearsky_agenda_checked",
15955  "abs_xsec_agenda_checked"),
15956  GOUT(),
15957  GOUT_TYPE(),
15958  GOUT_DESC(),
15959  IN("scat_data_raw",
15960  "vmr_field_raw",
15961  "abs_species",
15962  "propmat_clearsky_agenda_checked",
15963  "abs_xsec_agenda_checked",
15964  "atmosphere_dim",
15965  "f_grid"),
15966  GIN("scat_data_files", "pnd_field_files"),
15967  GIN_TYPE("ArrayOfString", "ArrayOfString"),
15969  GIN_DESC("List of names of single scattering data files.",
15970  "List of names of the corresponding pnd_field files.")));
15971 
15972  md_data_raw.push_back(create_mdrecord(
15973  NAME("ScatSpeciesExtendTemperature"),
15974  DESCRIPTION(
15975  "Extends valid temperature range of single scattering data.\n"
15976  "\n"
15977  "The method allows to extend the temperature range of given single\n"
15978  "scattering data by duplicating optical property data at the low\n"
15979  "and/or high limits of the associated temperature grid. *T_low* and\n"
15980  "*T_high* specify the temperature grid points that are added.\n"
15981  "Extension is only performed if *T_low* is lower and *T_high* is\n"
15982  "higher than the original lowest and highest temperatures,\n"
15983  "respectively, and if the original data contains more than one\n"
15984  "temperature grid point (i.e., when not assumed constant anyways).\n"
15985  "\n"
15986  "The method is thought, e.g., for atmospheric ice falling into\n"
15987  "atmospheric layers with temperatures above the melting point of\n"
15988  "ice, where ambient and particle temperature deviate (as long as\n"
15989  "frozen the ice temperature remains at the melting point\n"
15990  "temperature). It is not internally checked, whether the original\n"
15991  "data includes the melting point.\n"
15992  "The method can be used in a wider sense. However, it remains in the\n"
15993  "responsibility of the user to apply the method in a meaningful\n"
15994  "sense and on meaningful single scattering data.\n"
15995  "\n"
15996  "The temperature extension is applied on all scattering elements of\n"
15997  "a scattering species. If *scat_species* is defined, *species* can\n"
15998  "be used to select the species on which the extension shall be\n"
15999  "applied comparing *species* with the scattering species name part\n"
16000  "of *scat_species*. If no *species* is specified, the method is\n"
16001  "applied on the current last existing scattering species in\n"
16002  "*scat_data*. Through the latter the method can be applied for cases\n"
16003  "when *scat_species* is not defined (e.g. when *pnd_field* data is\n"
16004  "created externally instead of from hydrometeor fields \n"),
16005  AUTHORS("Jana Mendrok"),
16006  OUT("scat_data_raw"),
16007  GOUT(),
16008  GOUT_TYPE(),
16009  GOUT_DESC(),
16010  IN("scat_data_raw", "scat_species"),
16011  GIN("species", "scat_species_delim", "T_low", "T_high"),
16012  GIN_TYPE("String", "String", "Numeric", "Numeric"),
16013  GIN_DEFAULT("", "-", "-1.", "-1."),
16014  GIN_DESC(
16015  "Scattering species to act on (see WSM description for details).",
16016  "Delimiter string of *scat_species* elements.",
16017  "Temperature grid extension point at low temperature limit.",
16018  "Temperature grid extension point at high temperature limit.")));
16019 
16020  md_data_raw.push_back(create_mdrecord(
16021  NAME("ScatSpeciesInit"),
16022  DESCRIPTION(
16023  "Initializes the scattering species related data variables.\n"
16024  "\n"
16025  "This method initializes the *scat_species* WSV, the variables that\n"
16026  "will hold the raw optical properties and the raw particle number\n"
16027  "distributions of the scattering elements (*scat_data_raw* and\n"
16028  "*pnd_field_raw*, respectively) as well as the one holding the meta\n"
16029  "information about the scattering elements (*scat_meta*).\n"
16030  "\n"
16031  "This method has to be executed before WSM reading/adding to the\n"
16032  "said variable, e.g. before *ScatSpeciesPndAndScatAdd*.\n"),
16033  AUTHORS("Jana Mendrok"),
16034  OUT("scat_species",
16035  "scat_data_raw",
16036  "scat_meta",
16037  "scat_data_checked",
16038  "pnd_field_raw"),
16039  GOUT(),
16040  GOUT_TYPE(),
16041  GOUT_DESC(),
16042  IN(),
16043  GIN(),
16044  GIN_TYPE(),
16045  GIN_DEFAULT(),
16046  GIN_DESC()));
16047 
16048  //TODO: Check if ScatSpeciesMerge can be removed
16049  md_data_raw.push_back(create_mdrecord(
16050  NAME("ScatSpeciesMerge"),
16051  DESCRIPTION(
16052  "Merges single scattering data of all scattering elements into one\n"
16053  "element of bulk properties.\n"
16054  "\n"
16055  "Before entering the scattering solver, this method prepares the\n"
16056  "effective bulk single scattering properties of all scattering\n"
16057  "elements. Done by calculating the particle number density weighted\n"
16058  "sum of the single scattering properties of all scattering elements\n"
16059  "per pressure level. Accordingly, *pnd_field* is resized to\n"
16060  "[np, np, 1, 1], where np is the number of pressure levels inside\n"
16061  "the cloudbox. The diagonal elements of the new *pnd_field* are set\n"
16062  "to 1, all others to 0. *scat_data* is resized to np. Each new\n"
16063  "scattering element represents the weighted sum of all particles at\n"
16064  "one presssure level.\n"
16065  "\n"
16066  "The method also adapts *scat_species* and *scat_meta* such that\n"
16067  "they remain consistent with *pnd_field* and can pass\n"
16068  "*cloudbox_checkedCalc*.\n"
16069  "\n"
16070  "The method is suggested to be called directly after\n"
16071  "*pnd_fieldCalcFromParticleBulkProps* (but also after\n"
16072  "*cloudbox_checkedCalc*).\n"
16073  "Its purpose is to speed up the scattering calculations.\n"
16074  "\n"
16075  "This is an experimental method currently only working for limited\n"
16076  "cases. All scattering elements must be of the same ptype and must\n"
16077  "share the same *f_grid*, *za_grid*, and *aa_grid*. That is, the\n"
16078  "scattering matrix, extinction matrix, and absorption vector of all\n"
16079  "scattering elements must have the same dimensions. No interpolation\n"
16080  "(apart from temperature) is performed.\n"
16081  "\n"
16082  "This method can only be used with a 1D atmosphere.\n"),
16083  AUTHORS("Oliver Lemke"),
16084  OUT("pnd_field",
16085  "scat_data",
16086  "scat_meta",
16087  "scat_species",
16088  "cloudbox_checked"),
16089  GOUT(),
16090  GOUT_TYPE(),
16091  GOUT_DESC(),
16092  IN("pnd_field",
16093  "scat_data",
16094  "scat_meta",
16095  "scat_species",
16096  "cloudbox_checked",
16097  "atmosphere_dim",
16098  "cloudbox_on",
16099  "cloudbox_limits",
16100  "t_field",
16101  "z_field",
16102  "z_surface"),
16103  GIN(),
16104  GIN_TYPE(),
16105  GIN_DEFAULT(),
16106  GIN_DESC()));
16107 
16108  md_data_raw.push_back(create_mdrecord(
16109  NAME("ScatSpeciesPndAndScatAdd"),
16110  DESCRIPTION(
16111  "Adds single scattering data and particle number densities for one\n"
16112  "scattering species.\n"
16113  "\n"
16114  "The WSV *pnd_field_raw* containing particle number densities for\n"
16115  "all scattering species can be generated outside ARTS, for example\n"
16116  "by using PyARTS or atmlab. This method reads this data as well as\n"
16117  "its corresponding single scattering data, which is added as a new\n"
16118  "scattering species to *scat_data*.\n"
16119  "This method needs as input an ArrayOfString holding the filenames\n"
16120  "of the single scattering data for each scattering element and a\n"
16121  "file containing the corresponding *pnd_field_raw*. In contrast to\n"
16122  "the scattering data, the pnd-fields are stored in a single XML-file\n"
16123  "containing an ArrayofGriddedField3, i.e. holding the pnd-field data\n"
16124  "of all scattering elements.\n"
16125  "\n"
16126  "Important note:\n"
16127  "The order of the filenames for the scattering data files has to\n"
16128  "correspond to the order of the pnd-fields, stored in the variable\n"
16129  "*pnd_field_raw*.\n"),
16130  AUTHORS("Claudia Emde, Jana Mendrok"),
16131  OUT("scat_data_raw", "pnd_field_raw"),
16132  GOUT(),
16133  GOUT_TYPE(),
16134  GOUT_DESC(),
16135  IN("scat_data_raw", "pnd_field_raw", "atmosphere_dim"),
16136  GIN("scat_data_files", "pnd_fieldarray_file"),
16137  GIN_TYPE("ArrayOfString", "String"),
16139  GIN_DESC(
16140  "Array of names of files containing the single scattering data.",
16141  "Name of file holding the corresponding array of pnd_field data.")));
16142 
16143  md_data_raw.push_back(create_mdrecord(
16144  NAME("ScatSpeciesScatAndMetaRead"),
16145  DESCRIPTION(
16146  "Reads single scattering data and scattering meta data for one\n"
16147  "scattering species.\n"
16148  "\n"
16149  "This method takes a string array as input containing the location\n"
16150  "(path and filename) of the single scattering data. Location of\n"
16151  "corresponding scattering meta data is derived applying a naming\n"
16152  "convention: ending '.xml*' is replaced by '.meta.xml' (search for\n"
16153  "zipped files is done automatically).\n"
16154  "\n"
16155  "All scattering elements read in one call of the method are assigned\n"
16156  "to one and the same scattering species. That is, reading in data for\n"
16157  "a bunch of scattering species can be realized by multiple call of\n"
16158  "this method. Assignment to scattering species is in the order of the\n"
16159  "calls (i.e., first method call reads data for first *scat_species*\n"
16160  "entry, second call for second scat_species entry and so on).\n"
16161  "Note that no two scattering elements of the same scattering species\n"
16162  "are allowed to be equal in size*\n"
16163  "\n"
16164  "Important note:\n"
16165  "The order of the filenames for the single scattering data files has to\n"
16166  "exactly correspond to the order of the scattering meta data files.\n"),
16167  AUTHORS("Daniel Kreyling, Oliver Lemke, Jana Mendrok"),
16168  OUT("scat_data_raw", "scat_meta"),
16169  GOUT(),
16170  GOUT_TYPE(),
16171  GOUT_DESC(),
16172  IN("scat_data_raw", "scat_meta"),
16173  GIN("scat_data_files"),
16174  GIN_TYPE("ArrayOfString"),
16175  GIN_DEFAULT(NODEF),
16176  GIN_DESC("Array of single scattering data file names.")));
16177 
16178  md_data_raw.push_back(create_mdrecord(
16179  NAME("scat_data_singleTmatrix"),
16180  DESCRIPTION(
16181  "A basic interface to Mishchenko's T-matrix code linked to ARTS.\n"
16182  "\n"
16183  "The method performs a T-matrix calculation for a single scattering\n"
16184  "element, i.e. a combination of particle shape, size, aspect ratio\n"
16185  "and orientation.\n"
16186  "\n"
16187  "Particle shape (*shape*) has two options:\n"
16188  " \"spheroidal\" and \"cylindrical\"\n"
16189  "\n"
16190  "Particle size (*diameter_volume_equ*) is given as the equivalent\n"
16191  "volume sphere diameter. That is, the diameter obtained if all the\n"
16192  "particle's material is rearranged into a (solid) sphere.\n"
16193  "\n"
16194  "Particle aspect ratio ar (*aspect_ratio*) is a numeric value, defined\n"
16195  "according to Mishchenko's definition as ratio of horizontal axis a to\n"
16196  "vertical (rotational) axis b: ar=a/b. That is, oblates have ar>1,\n"
16197  "prolates ar<1.\n"
16198  "Perfect spheres (spheroidals with ar=1) can trigger numerical issues.\n"
16199  "To avoid these, we internally increase their aspect ratio by 1e-6,\n"
16200  "i.e. turning perfect spheres into very light oblates.\n"
16201  "\n"
16202  "Particle type (*ptype*) has two options:\n"
16203  " \"totally_random\" and \"azimuthally_random\"\n"
16204  "For totally randomly oriented particles, *data_aa_grid* is not taken\n"
16205  "into account (but a Vector type container needs to be passed).\n"
16206  "\n"
16207  "For further information on how aspect ratio and the different shapes\n"
16208  "and orientations are defined, see the documentation of the T-matrix\n"
16209  "code found http://www.giss.nasa.gov/staff/mmishchenko/t_matrix.html\n"
16210  "\n"
16211  "Regarding *ndgs*, we refer to the this comment from the documentation:\n"
16212  " \"Parameter controlling the number of division points\n"
16213  " in computing integrals over the particle surface.\n"
16214  " For compact particles, the recommended value is 2.\n"
16215  " For highly aspherical particles larger values (3, 4,...)\n"
16216  " may be necessary to obtain convergence.\n"
16217  " The code does not check convergence over this parameter.\n"
16218  " Therefore, control comparisons of results obtained with\n"
16219  " different NDGS-values are recommended.\"\n"),
16220  AUTHORS("Johan Strandgren", "Patrick Eriksson"),
16221  OUT("scat_data_single", "scat_meta_single"),
16222  GOUT(),
16223  GOUT_TYPE(),
16224  GOUT_DESC(),
16225  IN("complex_refr_index"),
16226  GIN("shape",
16227  "diameter_volume_equ",
16228  "aspect_ratio",
16229  "mass",
16230  "ptype",
16231  "data_f_grid",
16232  "data_t_grid",
16233  "data_za_grid",
16234  "data_aa_grid",
16235  "precision",
16236  "cri_source",
16237  "ndgs",
16238  "robust",
16239  "quiet"),
16240  GIN_TYPE("String",
16241  "Numeric",
16242  "Numeric",
16243  "Numeric",
16244  "String",
16245  "Vector",
16246  "Vector",
16247  "Vector",
16248  "Vector",
16249  "Numeric",
16250  "String",
16251  "Index",
16252  "Index",
16253  "Index"),
16255  NODEF,
16256  NODEF,
16257  "NaN",
16258  NODEF,
16259  NODEF,
16260  NODEF,
16261  NODEF,
16262  "[]",
16263  "0.001",
16264  "Set by user, unknown source.",
16265  "2",
16266  "0",
16267  "1"),
16268  GIN_DESC("Particle shape. Options listed above.",
16269  "Particle volume equivalent diameter [m]. See defintion above.",
16270  "Particle aspect ratio.",
16271  "Particle mass. This information is just included in the meta"
16272  " data, and does not affect the T-matrix calculations.",
16273  "Particle type/orientation. Options listed above.",
16274  "Frequency grid of the scattering data to be calculated.",
16275  "Temperature grid of the scattering data to be calculated.",
16276  "Zenith angle grid of the scattering data to be calculated.",
16277  "Azimuth angle grid of the scattering data to be calculated.",
16278  "Accuracy of the computations.",
16279  "String describing the source of *complex_refr_index*, for"
16280  " inclusion in meta data.",
16281  "See above. So far only applied for random orientation.",
16282  "Continue even if individual T-matrix calculations fail. "
16283  "Respective scattering element data will be NAN.",
16284  "Suppress print output from tmatrix fortran code.")));
16285 
16286  /*
16287  md_data_raw.push_back
16288  ( create_mdrecord
16289  ( NAME( "scat_metaAddTmatrix" ),
16290  DESCRIPTION
16291  (
16292  "This method adds scattering element meta data to the workspace variable\n"
16293  "*scat_meta*.\n"
16294  "\n"
16295  "One set of meta data is created and added to the array for each\n"
16296  "combination of maximum diameter and aspect ratio in the GINs\n"
16297  "diameter_max_grid and aspect_ratio_grid. The size of *scat_meta*\n"
16298  "and hence the usage has been extended. For that reason, a short summary\n"
16299  "below tells which input parameters are required for certain further\n"
16300  "calculations.\n"
16301  "\n"
16302  "String[description]\t\tNot used for any particular calculations\n"
16303  "String[material]\t\tUsed for PND calculations\n"
16304  "String[shape]\t\t\tUsed for scattering and PND calculations\n"
16305  "Numeric[ptype]\t\tUsed for scattering calculations\n"
16306  "Numeric[density]\t\tUsed for PND calculations\n"
16307  "Vector[diameter_max_grid]\t\tUsed for both scattering and PND calculations\n"
16308  "Vector[aspect_ratio_grid]\t\tUsed for scattering calculations and PND calculations\n"
16309  "Vector[scat_f_grid]\t\tUsed for scattering calculations\n"
16310  "Vector[scat_T_grid]\t\tUsed for scattering calculations\n"
16311  "Tensor3[complex_refr_index]\tUsed for scattering calculations\n"
16312  ),
16313  AUTHORS( "Johan Strandgren" ),
16314  OUT("scat_meta"),
16315  GOUT(),
16316  GOUT_TYPE(),
16317  GOUT_DESC(),
16318  IN( "scat_meta", "complex_refr_index" ),
16319  GIN( "description", "material", "shape", "ptype", "density",
16320  "aspect_ratio_grid", "diameter_max_grid", "scat_f_grid", "scat_T_grid" ),
16321  GIN_TYPE( "String", "String", "String", "String", "Numeric", "Vector",
16322  "Vector", "Vector", "Vector" ),
16323  GIN_DEFAULT( "", "undefined", NODEF, NODEF, "-999", NODEF, NODEF,
16324  NODEF, NODEF ),
16325  GIN_DESC( "Particle description", "Water or Ice", "spheroidal or cylinder",
16326  "Particle Type: "totally_random" (20) or "azimuthally_random" (30)",
16327  "Particle mass density",
16328  "Particle aspect ratio vector",
16329  "Maximum diameter vector (diameter of a sphere that fully"
16330  "encloses the particle)",
16331  "Frequency grid vector",
16332  "Temperature grid vector" )
16333  ));
16334 */
16335 
16336  md_data_raw.push_back(create_mdrecord(
16337  NAME("scat_data_checkedCalc"),
16338  DESCRIPTION(
16339  "Checks dimensions, grids and single scattering properties of all\n"
16340  "scattering elements in *scat_data*.\n"
16341  "\n"
16342  "Dimension and grid equirements:\n"
16343  "- The scattering element's f_grid is either identical to *f_grid* or\n"
16344  " of dimension 1.\n"
16345  "- In the latter case, the scattering element's f_grid value must\n"
16346  " not deviate from any of the *f_grid* values by more than a\n"
16347  " fraction of *dfrel_threshold*.\n"
16348  "- The frequency dimension of pha_mat_data, ext_mat_data, and\n"
16349  " abs_vec_data is either equal to the scattering element's f_grid\n"
16350  " or 1.\n"
16351  "- The temperature dimension of pha_mat_data, ext_mat_data, and\n"
16352  " abs_vec_data is either equal to the scattering element's T_grid\n"
16353  " or 1.\n"
16354  "- The temperature dimension of ext_mat_data, and abs_vec_data is\n"
16355  " identical.\n"
16356  "\n"
16357  "The single scattering property contents are checked using\n"
16358  "*scat_dataCheck*. For details, see there. The depth of these checks\n"
16359  "and their rigour can adapted (see description of parameters\n"
16360  "*check_level* and *sca_mat_threshold* in *scat_dataCheck*) or can\n"
16361  "be skipped entirely (setting *check_level* to 'none').\n"
16362  "NOTE: These test shall only be skipped when one is confident that\n"
16363  "the data is correct, e.g. by having run *scat_dataCheck* on the set\n"
16364  "of data before, e.g. in a separate ARTS run.\n"),
16365  AUTHORS("Jana Mendrok"),
16366  OUT("scat_data_checked"),
16367  GOUT(),
16368  GOUT_TYPE(),
16369  GOUT_DESC(),
16370  IN("scat_data", "f_grid"),
16371  GIN("dfrel_threshold", "check_level", "sca_mat_threshold"),
16372  GIN_TYPE("Numeric", "String", "Numeric"),
16373  GIN_DEFAULT("0.1", "all", "5e-2"),
16374  GIN_DESC("Maximum relative frequency deviation between (single entry)"
16375  " scattering element f_grid values and the RT calculation's"
16376  " *f_grid*.",
16377  "See *check_level* in *scat_dataCheck*.",
16378  "See *sca_mat_threshold* in *scat_dataCheck*.")));
16379 
16380  md_data_raw.push_back(create_mdrecord(
16381  NAME("scat_data_monoCalc"),
16382  DESCRIPTION(
16383  "Interpolates *scat_data* by frequency to give *scat_data_mono*.\n"),
16384  AUTHORS("Cory Davis"),
16385  OUT("scat_data_mono"),
16386  GOUT(),
16387  GOUT_TYPE(),
16388  GOUT_DESC(),
16389  IN("scat_data", "f_grid", "f_index"),
16390  GIN(),
16391  GIN_TYPE(),
16392  GIN_DEFAULT(),
16393  GIN_DESC()));
16394 
16395  md_data_raw.push_back(create_mdrecord(
16396  NAME("scat_data_monoExtract"),
16397  DESCRIPTION(
16398  "Extracts data at *f_index* from *scat_data* to give *scat_data_mono*.\n"),
16399  AUTHORS("Jana Mendrok"),
16400  OUT("scat_data_mono"),
16401  GOUT(),
16402  GOUT_TYPE(),
16403  GOUT_DESC(),
16404  IN("scat_data", "f_index"),
16405  GIN(),
16406  GIN_TYPE(),
16407  GIN_DEFAULT(),
16408  GIN_DESC()));
16409 
16410  md_data_raw.push_back(create_mdrecord(
16411  NAME("scat_dataCalc"),
16412  DESCRIPTION(
16413  "Prepares *scat_data* for the scattering solver.\n"
16414  "\n"
16415  "Derives single scattering data for the frequencies given by\n"
16416  "*f_grid* by interpolation from *scat_data_raw*. *f_grid* should be\n"
16417  "the actual WSV *f_grid* or a single-element Vector.\n"),
16418  AUTHORS("Jana Mendrok"),
16419  OUT("scat_data"),
16420  GOUT(),
16421  GOUT_TYPE(),
16422  GOUT_DESC(),
16423  IN("scat_data_raw", "f_grid"),
16424  GIN("interp_order"),
16425  GIN_TYPE("Index"),
16426  GIN_DEFAULT("1"),
16427  GIN_DESC("Interpolation order.")));
16428 
16429  md_data_raw.push_back(create_mdrecord(
16430  NAME("scat_dataCheck"),
16431  DESCRIPTION(
16432  "Method for checking the validity and consistency of the single\n"
16433  "scattering properties in *scat_data*.\n"
16434  "\n"
16435  "It checks that *scat_data* does not contain any invalid values,\n"
16436  "that is any NaN elements in K, Z, or a or any negative values in\n"
16437  "the 'scalar' properties K11, Z11, and a1.\n"
16438  "\n"
16439  "When *check_type* is 'all', it is furthermore checked that the\n"
16440  "scattering matrix is properly normalized, that is that the solid\n"
16441  "sphere integrated scattering matrix (int_Z11), which is supposed to\n"
16442  "be normalized to the scattering cross section, is sufficiently\n"
16443  "consistent with the scattering cross section (C_sca) derived from\n"
16444  "the difference of extinction (K11) and absorption (a1):\n"
16445  "int_z11 ~ C_sca = K11-a1.\n"
16446  "Sufficient consistency is defined by the maximum allowed deviation\n"
16447  "in single scattering albedo, *sca_mat_threshold*, testing for\n"
16448  " ( <int_Z11>/<C_sca>-1. ) * ( <C_sca>/<K11> ) <= sca_mat_threshold.\n"
16449  "The check is skipped if *check_type* is 'sane'.\n"),
16450  AUTHORS("Claudia Emde", "Jana Mendrok"),
16451  OUT(),
16452  GOUT(),
16453  GOUT_TYPE(),
16454  GOUT_DESC(),
16455  IN("scat_data"),
16456  GIN("check_type", "sca_mat_threshold"),
16457  GIN_TYPE("String", "Numeric"),
16458  GIN_DEFAULT("all", "5e-2"),
16459  GIN_DESC("The level of checks to apply on scat_data ('sane' or 'all';"
16460  " see above).",
16461  "Threshold for allowed albedo deviation (see above).")));
16462 
16463  md_data_raw.push_back(create_mdrecord(
16464  NAME("scat_dataReduceT"),
16465  DESCRIPTION(
16466  "Reduces temperature dimension of single scattering to a single entry.\n"
16467  "\n"
16468  "FIXME...\n"
16469  "Derives single scattering data for the frequencies given by\n"
16470  "*f_grid* by interpolation from *scat_data*. *f_grid* should be\n"
16471  "the actual WSV *f_grid* or a single-element Vector.\n"),
16472  AUTHORS("Jana Mendrok"),
16473  OUT("scat_data"),
16474  GOUT(),
16475  GOUT_TYPE(),
16476  GOUT_DESC(),
16477  IN("scat_data"),
16478  GIN("scat_index",
16479  "temperature",
16480  "interp_order",
16481  "phamat_only",
16482  "sca_mat_threshold"),
16483  GIN_TYPE("Index", "Numeric", "Index", "Index", "Numeric"),
16484  GIN_DEFAULT(NODEF, NODEF, "1", "1", "5e-2"),
16485  GIN_DESC("Apply on *scat_data* from scattering species of this index"
16486  " (0-based).",
16487  "Temperature to interpolate *scat_data* to.",
16488  "Interpolation order.",
16489  "Flag whether to apply temperture reduction on phase matrix"
16490  " data only (1) or on all single scattering properties (0).",
16491  "Threshold for allowed albedo deviation.")));
16492 
16493  md_data_raw.push_back(create_mdrecord(
16494  NAME("ScatSpeciesSizeMassInfo"),
16495  DESCRIPTION(
16496  "Derives size and mass information for a scattering species."
16497  "\n"
16498  "This method assumes that the mass-size relationship can described\n"
16499  "by *scat_species_a* and *scat_species_b*. See documentation of \n"
16500  "*scat_species_a* for details.\n"
16501  "\n"
16502  "The quantity to be used as size descriptor is here denoted as x, and\n"
16503  "is selected by setting *x_unit*. The options are:\n"
16504  " \"dveq\" : The size grid is set to scat_meta.diameter_volume_equ\n"
16505  " \"dmax\" : The size grid is set to scat_meta.diameter_max\n"
16506  " \"area\" : The size grid is set to scat_meta.diameter_area_equ_aerodynamical\n"
16507  " \"mass\" : The size grid is set to scat_meta.mass\n"
16508  "This selection determines *scat_species_x*.\n"
16509  "\n"
16510  "The parameters *scat_species_a* and *scat_species_b* are determined by\n"
16511  "a numeric fit between *scat_species_x* and corresponding masses in\n"
16512  "*scat_meta*. This fit is performed over sizes inside the range\n"
16513  "[x_fit_start,x_fit_end]. This range is allowed to be broader than\n"
16514  "the coverage of *scat_species_x*. There must be at least two sizes\n"
16515  "inside [x_fit_start,x_fit_end].\n"),
16516  AUTHORS("Manfred Brath", "Jana Mendrok", "Patrick Eriksson"),
16517  OUT("scat_species_x", "scat_species_a", "scat_species_b"),
16518  GOUT(),
16519  GOUT_TYPE(),
16520  GOUT_DESC(),
16521  IN("scat_meta"),
16522  GIN("species_index", "x_unit", "x_fit_start", "x_fit_end", "do_only_x"),
16523  GIN_TYPE("Index", "String", "Numeric", "Numeric", "Index"),
16524  GIN_DEFAULT(NODEF, NODEF, "0", "1e9", "0"),
16525  GIN_DESC("Take data from scattering species of this index (0-based) in"
16526  " *scat_meta*.",
16527  "Unit for size grid, allowed options listed above.",
16528  "Smallest size to consider in fit to determine a and b.",
16529  "Largest size to consider in fit to determine a and b.",
16530  "A flag to deactivate calculation of a and b, to possibly "
16531  "save some time. The a and b parameters are then set to -1."
16532  "Default is to calculate a and b.")));
16533 
16534  md_data_raw.push_back(create_mdrecord(
16535  NAME("particle_fieldCleanup"),
16536  DESCRIPTION(
16537  "Removes unrealistically small or erroneous data from particle fields.\n"
16538  "\n"
16539  "This WSM checks if the input particle field (e.g.\n"
16540  "*particle_bulkprop_field*, scat_species_XXX_field) contains values\n"
16541  "smaller than the given *threshold*. In this case, these values will\n"
16542  "be set to zero.\n"
16543  "\n"
16544  "The method should be applied if the particle fields contain\n"
16545  "unrealistically small or erroneous data (NWP/GCM model data, e.g.\n"
16546  "from the Chevallierl_91l sets, often contain very small or even\n"
16547  "negative values, which are numerical artefacts rather than physical\n"
16548  "values.)\n"
16549  "For the scat_species_XXX_fields, it needs to be applied separately\n"
16550  "per Tensor4 type field collection. This allows to use different\n"
16551  "thresholds for the different types of fields (not for the different\n"
16552  "scattering species, though).\n"
16553  "\n"
16554  "*particle_fieldCleanup* shall be called after generation of the\n"
16555  "atmopheric fields.\n"),
16556  AUTHORS("Daniel Kreyling"),
16557  OUT(),
16558  GOUT("particle_field_out"),
16559  GOUT_TYPE("Tensor4"),
16560  GOUT_DESC("A particle property field, e.g. *particle_bulkprop_field*"
16561  " or *scat_species_mass_density_field*"),
16562  IN(),
16563  GIN("particle_field_in", "threshold"),
16564  GIN_TYPE("Tensor4", "Numeric"),
16566  GIN_DESC("A particle property field, e.g. *particle_bulkprop_field* or"
16567  " *scat_species_mass_density_field*",
16568  "Threshold below which the *particle_field* values are set to"
16569  " zero.")));
16570 
16571  md_data_raw.push_back(create_mdrecord(
16572  NAME("Select"),
16573  DESCRIPTION(
16574  "Method to select some elements from one array and copy them to\n"
16575  "a new array. (Works also for vectors.)\n"
16576  "\n"
16577  "This works also for higher dimensional objects, where the selection is\n"
16578  "always performed in the first dimension.\n"
16579  "\n"
16580  "If needleindexes is set to [-1], all elements are copied."
16581  "\n"
16582  "For example:\n"
16583  "\n"
16584  "Select(y,x,[0,3])\n"
16585  "\n"
16586  "will select the first and fourth row of matrix x and copy them to the\n"
16587  "output matrix y.\n"
16588  "\n"
16589  "Note that it is even safe to use this method if needles and haystack\n"
16590  "are the same variable.\n"),
16591  AUTHORS("Oliver Lemke"),
16592  OUT(),
16593  GOUT("needles"),
16594  GOUT_TYPE(ARRAY_GROUPS + ", Vector, Matrix, Sparse"),
16595  GOUT_DESC("Selected elements. Must have the same variable type as "
16596  "haystack."),
16597  IN(),
16598  GIN("haystack", "needleindexes"),
16599  GIN_TYPE(ARRAY_GROUPS + ", Vector, Matrix, Sparse", "ArrayOfIndex"),
16601  GIN_DESC("Variable to select from. May be the same variable as needles.",
16602  "The elements to select (zero based indexing, as always.)"),
16603  SETMETHOD(false),
16604  AGENDAMETHOD(false),
16605  USES_TEMPLATES(true)));
16606 
16607  md_data_raw.push_back(create_mdrecord(
16608  NAME("sensor_checkedCalc"),
16609  DESCRIPTION(
16610  "Checks consistency of the sensor variables.\n"
16611  "\n"
16612  "The following WSVs are examined: *f_grid*, *sensor_pos*, *sensor_los*,\n"
16613  "*transmitter_pos*, *mblock_dlos_grid*, *antenna_dim*,\n"
16614  "*sensor_response*, *sensor_response_f*, *sensor_response_pol*,\n"
16615  "and *sensor_response_dlos*.\n"
16616  "\n"
16617  "If any of these variables are changed, then this method shall be\n"
16618  "called again (no automatic check that this is fulfilled!).\n"
16619  "\n"
16620  "The main tests are that dimensions of sensor variables agree\n"
16621  "with other settings, e.g., the size of f_grid, atmosphere_dim,\n"
16622  "stokes_dim, etc.\n"
16623  "\n"
16624  "If any test fails, there is an error. Otherwise, *sensor_checked*\n"
16625  "is set to 1.\n"),
16626  AUTHORS("Jana Mendrok"),
16627  OUT("sensor_checked"),
16628  GOUT(),
16629  GOUT_TYPE(),
16630  GOUT_DESC(),
16631  IN("atmosphere_dim",
16632  "stokes_dim",
16633  "f_grid",
16634  "sensor_pos",
16635  "sensor_los",
16636  "transmitter_pos",
16637  "mblock_dlos_grid",
16638  "sensor_response",
16639  "sensor_response_f",
16640  "sensor_response_pol",
16641  "sensor_response_dlos"),
16642  GIN(),
16643  GIN_TYPE(),
16644  GIN_DEFAULT(),
16645  GIN_DESC()));
16646 
16647  md_data_raw.push_back(create_mdrecord(
16648  NAME("sensorOff"),
16649  DESCRIPTION(
16650  "Sets sensor WSVs to obtain monochromatic pencil beam values.\n"
16651  "\n"
16652  "The variables are set as follows:\n"
16653  " mblock_dlos_grid : One row with zero(s).\n"
16654  " sensor_response* : As returned by *sensor_responseInit*.\n"),
16655  AUTHORS("Patrick Eriksson"),
16656  OUT("sensor_response",
16657  "sensor_response_f",
16658  "sensor_response_pol",
16659  "sensor_response_dlos",
16660  "sensor_response_f_grid",
16661  "sensor_response_pol_grid",
16662  "sensor_response_dlos_grid",
16663  "mblock_dlos_grid"),
16664  GOUT(),
16665  GOUT_TYPE(),
16666  GOUT_DESC(),
16667  IN("stokes_dim", "f_grid"),
16668  GIN(),
16669  GIN_TYPE(),
16670  GIN_DEFAULT(),
16671  GIN_DESC()));
16672 
16673  md_data_raw.push_back(create_mdrecord(
16674  NAME("sensor_losGeometricFromSensorPosToOtherPositions"),
16675  DESCRIPTION(
16676  "The geometric line-of-sight between pair of points.\n"
16677  "\n"
16678  "The method sets *sensor_los* to the line-of-sights, that matches the\n"
16679  "geometrical propagation path from *sensor_pos* to *target_pos*. This\n"
16680  "is done for pair of positions, i.e. the two matrices shall have the same\n"
16681  "number of rows. The number of columns in *target_pos* shall be two for\n"
16682  "1D and 2D and two for 3D, exactly as for *rte_pos2*.\n"
16683  "\n"
16684  "See also *rte_losGeometricFromRtePosToRtePos2*. This method calls that\n"
16685  "method for each pair of positions, where values in *sensor_pos* matches\n"
16686  "*rte_pos and values in *target_pos* matches *rte_pos2*.\n"),
16687  AUTHORS("Patrick Eriksson"),
16688  OUT("sensor_los"),
16689  GOUT(),
16690  GOUT_TYPE(),
16691  GOUT_DESC(),
16692  IN("atmosphere_dim",
16693  "lat_grid",
16694  "lon_grid",
16695  "refellipsoid",
16696  "sensor_pos"),
16697  GIN("target_pos"),
16698  GIN_TYPE("Matrix"),
16699  GIN_DEFAULT(NODEF),
16700  GIN_DESC("Target position, for each position in *sensor_pos*.")));
16701 
16702  md_data_raw.push_back(create_mdrecord(
16703  NAME("sensor_responseAntenna"),
16704  DESCRIPTION(
16705  "Includes response of the antenna.\n"
16706  "\n"
16707  "The function returns the sensor response matrix after the antenna\n"
16708  "characteristics have been included.\n"
16709  "\n"
16710  "The function handles \"multi-beam\" cases where the polarisation\n"
16711  "coordinate system is the same for all beams.\n"
16712  "\n"
16713  "See *antenna_dim*, *antenna_dlos* and *antenna_response* for\n"
16714  "details on how to specify the antenna response.\n"
16715  "\n"
16716  "The text below refers to *mblock_dlos_grid* despite it is not an\n"
16717  "input to the method. The method instead uses *sensor_response_dlos_grid*\n"
16718  "but the values in this WSV are likely coming from *mblock_dlos_grid*.\n"
16719  "\n"
16720  "One dimensional antenna patterns are handled as other response\n"
16721  "functions. That is, both antenna response and radiances are treated\n"
16722  "as piece-wise linear functions, and the pencil beam calculations must\n"
16723  "cover the full sensor response (i.e. *mblock_dlos_grid* must be\n"
16724  "sufficiently broad).\n"
16725  "\n"
16726  "There exist different options for two dimensional (2D) antenna patterns,\n"
16727  "see below (if 2D, the GIN *option_2d* must be set, the default results\n"
16728  "in an error). A normalisation is always applied for 2D antennas (i.e.\n"
16729  "*sensor-norm* is ignored).\n"
16730  "\n"
16731  "\"interp_response\""
16732  "For this option, each direction defined by *mblock_dlos_grid* is\n"
16733  "considered to represent the same size in terms of solid beam angle,\n"
16734  "and the antenna pattern is interpolated to these directions. There is\n"
16735  "no check on how well *mblock_dlos_grid* covers the antenna response.\n"
16736  "The response is treated to be zero outside the ranges of its anular\n"
16737  "grids\n"
16738  "\n"
16739  "\"gridded_dlos\""
16740  "This option is more similar to the 1D case. The radiances are treated\n"
16741  "as a bi-linear function, but the antenna response is treated as step-\n"
16742  "wise constant function (in contrast to 1D). For this option\n"
16743  "*mblock_dlos_grid* must match a combination of zenith and azimuth\n"
16744  "grids, and this for a particular order. If the zenith and azimuth\n"
16745  "grids have 3 and 2 values, respectively, the order shall be:\n"
16746  " [(za1,aa1); (za2,aa1); (za3,aa1); (za1,aa2); (za2,aa2); (za3,aa2) ]\n"
16747  "Both these grids must be strictly increasing and as for 1D must cover\n"
16748  "the antenna response completely.\n"),
16749  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
16750  OUT("sensor_response",
16751  "sensor_response_f",
16752  "sensor_response_pol",
16753  "sensor_response_dlos",
16754  "sensor_response_dlos_grid"),
16755  GOUT(),
16756  GOUT_TYPE(),
16757  GOUT_DESC(),
16758  IN("sensor_response",
16759  "sensor_response_f",
16760  "sensor_response_pol",
16761  "sensor_response_dlos",
16762  "sensor_response_f_grid",
16763  "sensor_response_pol_grid",
16764  "sensor_response_dlos_grid",
16765  "atmosphere_dim",
16766  "antenna_dim",
16767  "antenna_dlos",
16768  "antenna_response",
16769  "sensor_norm"),
16770  GIN( "option_2d" ),
16771  GIN_TYPE( "String" ),
16772  GIN_DEFAULT( "-" ),
16773  GIN_DESC( "Calculation option for 2D antenna cases. See above for details." )));
16774 
16775  md_data_raw.push_back(create_mdrecord(
16776  NAME("sensor_responseBackend"),
16777  DESCRIPTION(
16778  "Includes response of the backend (spectrometer).\n"
16779  "\n"
16780  "The function returns the sensor response matrix after the backend\n"
16781  "characteristics have been included.\n"
16782  "\n"
16783  "See *f_backend*, *backend_channel_response* and *sensor_norm* for\n"
16784  "details on how to specify the backend response.\n"),
16785  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
16786  OUT("sensor_response",
16787  "sensor_response_f",
16788  "sensor_response_pol",
16789  "sensor_response_dlos",
16790  "sensor_response_f_grid"),
16791  GOUT(),
16792  GOUT_TYPE(),
16793  GOUT_DESC(),
16794  IN("sensor_response",
16795  "sensor_response_f",
16796  "sensor_response_pol",
16797  "sensor_response_dlos",
16798  "sensor_response_f_grid",
16799  "sensor_response_pol_grid",
16800  "sensor_response_dlos_grid",
16801  "f_backend",
16802  "backend_channel_response",
16803  "sensor_norm"),
16804  GIN(),
16805  GIN_TYPE(),
16806  GIN_DEFAULT(),
16807  GIN_DESC()));
16808 
16809  md_data_raw.push_back(create_mdrecord(
16810  NAME("sensor_responseBackendFrequencySwitching"),
16811  DESCRIPTION(
16812  "Frequency switching for a pure SSB reciever.\n"
16813  "\n"
16814  "This function can be used for simulation of frequency switching.\n"
16815  "That is, when the final spectrum is the difference of two spectra\n"
16816  "shifted in frequency. The switching is performed by the LO, but\n"
16817  "for a pure singel sideband reciever this is most easily simulated\n"
16818  "by instead shifting the backend, as done here.\n"
16819  "\n"
16820  "A strightforward frequency switching is modelled (no folding)\n"
16821  "The channel positions for the first measurement cycle are\n"
16822  "f_backend+df1, and for the second f_backend+df2. The first\n"
16823  "measurement cycle is given the negive weight. That is, the output\n"
16824  "is the spectrum for cycle2 minus the spectrum for cycle1.\n"
16825  "Output frequency grids are set to *f_backend*.\n"
16826  "\n"
16827  "Use *sensor_responseFrequencySwitching* for double sideband cases.\n"
16828  "\n"
16829  "The method has the same general functionality as, and can replace,\n"
16830  "*sensor_responseBackend*.\n"),
16831  AUTHORS("Patrick Eriksson"),
16832  OUT("sensor_response",
16833  "sensor_response_f",
16834  "sensor_response_pol",
16835  "sensor_response_dlos",
16836  "sensor_response_f_grid"),
16837  GOUT(),
16838  GOUT_TYPE(),
16839  GOUT_DESC(),
16840  IN("sensor_response",
16841  "sensor_response_f",
16842  "sensor_response_pol",
16843  "sensor_response_dlos",
16844  "sensor_response_f_grid",
16845  "sensor_response_pol_grid",
16846  "sensor_response_dlos_grid",
16847  "f_backend",
16848  "backend_channel_response",
16849  "sensor_norm"),
16850  GIN("df1", "df2"),
16851  GIN_TYPE("Numeric", "Numeric"),
16853  GIN_DESC("Frequency throw for cycle1.", "Frequency throw for cycle2.")));
16854 
16855  md_data_raw.push_back(create_mdrecord(
16856  NAME("sensor_responseBeamSwitching"),
16857  DESCRIPTION(
16858  "Simulation of \"beam switching\".\n"
16859  "\n"
16860  "The measurement procedure is based on taking the difference between\n"
16861  "two spectra measured in different directions, and the calculation\n"
16862  "set-up must treat exactly two observation directions.\n"
16863  "\n"
16864  "The returned spectrum is y = w1*y + w2*y2, where y1 and w1 are the\n"
16865  "spectrum and weight for the first direction, respectively (y2 and\n"
16866  "(w2 defined correspondingly for the second direction).\n"
16867  "\n"
16868  "Zenith and azimuth angles after beam switching are set to the\n"
16869  "values of the second direction.\n"),
16870  AUTHORS("Patrick Eriksson"),
16871  OUT("sensor_response",
16872  "sensor_response_f",
16873  "sensor_response_pol",
16874  "sensor_response_dlos",
16875  "sensor_response_dlos_grid"),
16876  GOUT(),
16877  GOUT_TYPE(),
16878  GOUT_DESC(),
16879  IN("sensor_response",
16880  "sensor_response_f",
16881  "sensor_response_pol",
16882  "sensor_response_dlos",
16883  "sensor_response_f_grid",
16884  "sensor_response_pol_grid",
16885  "sensor_response_dlos_grid"),
16886  GIN("w1", "w2"),
16887  GIN_TYPE("Numeric", "Numeric"),
16888  GIN_DEFAULT("-1", "1"),
16889  GIN_DESC("Weight for values from first viewing direction.",
16890  "Weight for values from second viewing direction.")));
16891 
16892  md_data_raw.push_back(create_mdrecord(
16893  NAME("sensor_responseFillFgrid"),
16894  DESCRIPTION(
16895  "Polynomial frequency interpolation of spectra.\n"
16896  "\n"
16897  "The sensor response methods treat the spectra to be piece-wise linear\n"
16898  "functions. This method is a workaround for making methods handling\n"
16899  "the spectra in a more elaborate way: it generates spectra on a more\n"
16900  "dense grid by polynomial interpolation. The interpolation is not\n"
16901  "done explicitly, it is incorporated into *sensor_response*.\n"
16902  "\n"
16903  "This method should in general increase the calculation accuracy for\n"
16904  "a given *f_grid*. However, the selection of (original) grid points\n"
16905  "becomes more sensitive when using this method. A poor choice of grid\n"
16906  "points can result in a decreased accuracy, or generation of negative\n"
16907  "radiances. Test calculations indicated that the error easily can\n"
16908  "increase with this method close the edge of *f_grid*, and it could\n"
16909  "be wise to make *f_grid* a bit wider than actually necessary to avoid\n"
16910  "this effect\n"
16911  "\n"
16912  "The method shall be inserted before the antenna stage. That is, this\n"
16913  "method shall normally be called directly after *sensor_responseInit*.\n"
16914  "\n"
16915  "Between each neighbouring points of *f_grid*, this method adds\n"
16916  "*nfill* grid points. The polynomial order of the interpolation is\n"
16917  "*polyorder*.\n"),
16918  AUTHORS("Patrick Eriksson"),
16919  OUT("sensor_response",
16920  "sensor_response_f",
16921  "sensor_response_pol",
16922  "sensor_response_dlos",
16923  "sensor_response_f_grid"),
16924  GOUT(),
16925  GOUT_TYPE(),
16926  GOUT_DESC(),
16927  IN("sensor_response",
16928  "sensor_response_f",
16929  "sensor_response_pol",
16930  "sensor_response_dlos",
16931  "sensor_response_f_grid",
16932  "sensor_response_pol_grid",
16933  "sensor_response_dlos_grid"),
16934  GIN("polyorder", "nfill"),
16935  GIN_TYPE("Index", "Index"),
16936  GIN_DEFAULT("3", "2"),
16937  GIN_DESC("Polynomial order of interpolation",
16938  "Number of points to insert in each gap of f_grid")));
16939 
16940  md_data_raw.push_back(create_mdrecord(
16941  NAME("sensor_responseFrequencySwitching"),
16942  DESCRIPTION(
16943  "Simulation of \"frequency switching\".\n"
16944  "\n"
16945  "A general method for frequency switching. The WSM\n"
16946  "*sensor_responseBackendFrequencySwitching* gives a description of\n"
16947  "this observation technique, and is also a more straightforward\n"
16948  " method for pure singel sideband cases.\n"
16949  "\n"
16950  "It is here assume that *sensor_responseMultiMixerBackend* has been\n"
16951  "used to calculate the spectrum for two LO positions. This method\n"
16952  "calculates the difference between these two spectra, where the\n"
16953  "second spectrum gets weight 1 and the first weight -1 (as in\n"
16954  "*sensor_responseBackendFrequencySwitching*).\n"
16955  "\n"
16956  "Output frequency grids are taken from the second spectrum.\n"),
16957  AUTHORS("Patrick Eriksson"),
16958  OUT("sensor_response",
16959  "sensor_response_f",
16960  "sensor_response_pol",
16961  "sensor_response_dlos",
16962  "sensor_response_f_grid"),
16963  GOUT(),
16964  GOUT_TYPE(),
16965  GOUT_DESC(),
16966  IN("sensor_response",
16967  "sensor_response_f",
16968  "sensor_response_pol",
16969  "sensor_response_dlos",
16970  "sensor_response_f_grid",
16971  "sensor_response_pol_grid",
16972  "sensor_response_dlos_grid"),
16973  GIN(),
16974  GIN_TYPE(),
16975  GIN_DEFAULT(),
16976  GIN_DESC()));
16977 
16978  md_data_raw.push_back(create_mdrecord(
16979  NAME("sensor_responseIF2RF"),
16980  DESCRIPTION(
16981  "Converts sensor response variables from IF to RF.\n"
16982  "\n"
16983  "The function converts intermediate frequencies (IF) in\n"
16984  "*sensor_response_f* and *sensor_response_f_grid* to radio\n"
16985  "frequencies (RF). This conversion is needed if the frequency\n"
16986  "translation of a mixer is included and the position of backend\n"
16987  "channels are specified in RF.\n"
16988  "\n"
16989  "A direct frequency conversion is performed. Values are not\n"
16990  "sorted in any way.\n"),
16991  AUTHORS("Patrick Eriksson"),
16992  OUT("sensor_response_f", "sensor_response_f_grid"),
16993  GOUT(),
16994  GOUT_TYPE(),
16995  GOUT_DESC(),
16996  IN("sensor_response_f", "sensor_response_f_grid", "lo", "sideband_mode"),
16997  GIN(),
16998  GIN_TYPE(),
16999  GIN_DEFAULT(),
17000  GIN_DESC()));
17001 
17002  md_data_raw.push_back(create_mdrecord(
17003  NAME("sensor_responseInit"),
17004  DESCRIPTION(
17005  "Initialises the variables summarising the sensor response.\n"
17006  "\n"
17007  "This method sets the variables to match monochromatic pencil beam\n"
17008  "calculations, to be further modified by inclusion of sensor\n"
17009  "characteristics. Use *sensorOff* if pure monochromatic pencil\n"
17010  "beam calculations shall be performed.\n"
17011  "\n"
17012  "The variables are set as follows:\n"
17013  " sensor_response : Identity matrix, with size matching *f_grid*,\n"
17014  " *stokes_dim* and *mblock_dlos_grid*.\n"
17015  " sensor_response_f : Repeated values of *f_grid*.\n"
17016  " sensor_response_pol : Data matching *stokes_dim*.\n"
17017  " sensor_response_dlos : Repeated values of *mblock_dlos_grid*.\n"
17018  " sensor_response_f_grid : Equal to *f_grid*.\n"
17019  " sensor_response_pol_grid: Set to 1:*stokes_dim*.\n"
17020  " sensor_response_dlos_grid : Equal to *mblock_dlos_grid*.\n"),
17021  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
17022  OUT("sensor_response",
17023  "sensor_response_f",
17024  "sensor_response_pol",
17025  "sensor_response_dlos",
17026  "sensor_response_f_grid",
17027  "sensor_response_pol_grid",
17028  "sensor_response_dlos_grid"),
17029  GOUT(),
17030  GOUT_TYPE(),
17031  GOUT_DESC(),
17032  IN("f_grid",
17033  "mblock_dlos_grid",
17034  "antenna_dim",
17035  "atmosphere_dim",
17036  "stokes_dim",
17037  "sensor_norm"),
17038  GIN(),
17039  GIN_TYPE(),
17040  GIN_DEFAULT(),
17041  GIN_DESC()));
17042 
17043  md_data_raw.push_back(create_mdrecord(
17044  NAME("sensor_responseMetMM"),
17045  DESCRIPTION(
17046  "Sensor setup for meteorological millimeter instruments.\n"
17047  "\n"
17048  "This method is handy if you are simulating a passband-type instrument,\n"
17049  "consisting of a few discrete channels.\n"
17050  "\n"
17051  "For flexibility, the Met-MM system is seperated in two calculation\n"
17052  "steps. To fully use the system, create *f_grid* (and some associated\n"
17053  "variables) by *f_gridMetMM* before calling this method. However, it is\n"
17054  "possible to use this method with any *f_grid*, as long as matching\n"
17055  "*f_backend*, *channel2fgrid_indexes* and *channel2fgrid_weights*\n"
17056  "are provided.\n"
17057  "\n"
17058  "Each scan sequence is treated as a measurement block. *sensor_pos* is\n"
17059  "set in the standard way. The number of rows in *sensor_pos* determines the\n"
17060  "number of scan sequences that will be simulated. On the other hand,\n"
17061  "*sensor_los* is handled in a special way. All zenith angles must be set\n"
17062  "to 180 deg. For 3D, the given azimuth angles are taken as the direction\n"
17063  "of scanning, where the azimuth angle is defined with respect to North\n"
17064  "in standard manner. For example, if the scanning happens to move from\n"
17065  "SW to NE, the azimuth angle should be set to 45 deg. The angles of the\n"
17066  "scanning sequence are taken from *antenna_dlos*. This WSV is here only\n"
17067  "allowed to have a single column, holding relative zenith angles. For\n"
17068  "3D, the azimuth angles in *antenna_dlos* are hard-coded to zero. As\n"
17069  "zenith angles in *sensor_los* are locked to 180 deg, *antenna_dlos*\n"
17070  "effectively holds the nadir angles. These angles can be both positive or\n"
17071  "negative, where the recommended choice is to operate with negative\n"
17072  "to end up with final zenith angles between 0 and 180 deg.\n"
17073  "\n"
17074  "The method does not support 2D atmospheres (across-track scanning is\n"
17075  "inconsistent with 2D). For simpler switching between 1D and 3D,\n"
17076  "the argument *mirror_dza* is at hand. It can only be used for 3D.\n"
17077  "If set to true, the zenith angles in *antenna_dlos* are mapped\n"
17078  "to also cover the other side of the swath and the simulations will\n"
17079  "cover both sides of the swath.\n"),
17080  AUTHORS("Oliver Lemke", "Patrick Eriksson"),
17081  OUT("antenna_dim",
17082  "mblock_dlos_grid",
17083  "sensor_response",
17084  "sensor_response_f",
17085  "sensor_response_pol",
17086  "sensor_response_dlos",
17087  "sensor_response_f_grid",
17088  "sensor_response_pol_grid",
17089  "sensor_response_dlos_grid",
17090  "sensor_norm"),
17091  GOUT(),
17092  GOUT_TYPE(),
17093  GOUT_DESC(),
17094  IN("atmosphere_dim",
17095  "stokes_dim",
17096  "f_grid",
17097  "f_backend",
17098  "channel2fgrid_indexes",
17099  "channel2fgrid_weights",
17100  "iy_unit",
17101  "antenna_dlos",
17102  "met_mm_polarisation",
17103  "met_mm_antenna"),
17104  GIN("use_antenna", "mirror_dza"),
17105  GIN_TYPE("Index", "Index"),
17106  GIN_DEFAULT("0", "0"),
17107  GIN_DESC("Flag to enable (1) or disable (0) antenna.",
17108  "Flag to include second part of swath (only 3D, see above).")));
17109 
17110  md_data_raw.push_back(create_mdrecord(
17111  NAME("sensor_responseMixer"),
17112  DESCRIPTION(
17113  "Includes response of the mixer of a heterodyne system.\n"
17114  "\n"
17115  "The function returns the sensor response matrix after the mixer\n"
17116  "characteristics have been included. Frequency variables are\n"
17117  "converted from radio frequency (RF) to intermediate frequency (IF).\n"
17118  "The returned frequency grid covers the range [0,max_if], where\n"
17119  "max_if is the highest IF covered by the sideband response grid.\n"
17120  "\n"
17121  "See *lo* and *sideband_response* for details on how to specify the\n"
17122  "mixer response\n"),
17123  AUTHORS("Mattias Ekstrom", "Patrick Eriksson"),
17124  OUT("sensor_response",
17125  "sensor_response_f",
17126  "sensor_response_pol",
17127  "sensor_response_dlos",
17128  "sensor_response_f_grid"),
17129  GOUT(),
17130  GOUT_TYPE(),
17131  GOUT_DESC(),
17132  IN("sensor_response",
17133  "sensor_response_f",
17134  "sensor_response_pol",
17135  "sensor_response_dlos",
17136  "sensor_response_f_grid",
17137  "sensor_response_pol_grid",
17138  "sensor_response_dlos_grid",
17139  "lo",
17140  "sideband_response",
17141  "sensor_norm"),
17142  GIN(),
17143  GIN_TYPE(),
17144  GIN_DEFAULT(),
17145  GIN_DESC()));
17146 
17147  md_data_raw.push_back(create_mdrecord(
17148  NAME("sensor_responseMixerBackendPrecalcWeights"),
17149  DESCRIPTION(
17150  "Includes pre-calculated response covering mixer and backend.\n"
17151  "\n"
17152  "This method acts similar to *sensor_responseBackend*, but uses\n"
17153  "pre-calculated weights. These weights can also include the effect\n"
17154  "of mixer and sideband filtering.\n"
17155  "\n"
17156  "As usual, *f_backend* gives the frequency of the channels. This WSM\n"
17157  "has no direct influence on the result, but at least representative\n"
17158  "values must be set.\n"
17159  "\n"
17160  "The frequency response is defined using *channel2fgrid_indexes* and\n"
17161  "*channel2fgrid_weights*.\n"
17162  "\n"
17163  "Both *channel2fgrid_indexes* and *channel2fgrid_weights* are assumed\n"
17164  "to be common for all viewing directions.\n"),
17165  AUTHORS("Patrick Eriksson"),
17166  OUT("sensor_response",
17167  "sensor_response_f",
17168  "sensor_response_pol",
17169  "sensor_response_dlos",
17170  "sensor_response_f_grid"),
17171  GOUT(),
17172  GOUT_TYPE(),
17173  GOUT_DESC(),
17174  IN("sensor_response",
17175  "sensor_response_f",
17176  "sensor_response_pol",
17177  "sensor_response_dlos",
17178  "sensor_response_f_grid",
17179  "sensor_response_pol_grid",
17180  "sensor_response_dlos_grid",
17181  "f_backend",
17182  "channel2fgrid_indexes",
17183  "channel2fgrid_weights"),
17184  GIN(),
17185  GIN_TYPE(),
17186  GIN_DEFAULT(),
17187  GIN_DESC()));
17188 
17189  md_data_raw.push_back(create_mdrecord(
17190  NAME("sensor_responseMultiMixerBackend"),
17191  DESCRIPTION(
17192  "Handles mixer and backend parts for an instrument having multiple\n"
17193  "mixer chains.\n"
17194  "\n"
17195  "The WSMs *sensor_responseMixer*, *sensor_responseIF2RF* and\n"
17196  "*sensor_responseBackend* are called for each mixer chain, and a\n"
17197  "complete *sensor_response* is assembled. The instrument responses\n"
17198  "are described by *lo_multi*, *sideband_response_multi*,\n"
17199  "*sideband_mode_multi*, *f_backend_multi* and\n"
17200  "*backend_channel_response_multi*. All these WSVs must have same\n"
17201  "vector or array length. As *sensor_responseIF2RF* is called,\n"
17202  "*f_backend_multi* must hold RF (not IF) and output frequencies\n"
17203  "will be in absolute frequency (RF).\n"),
17204  AUTHORS("Patrick Eriksson"),
17205  OUT("sensor_response",
17206  "sensor_response_f",
17207  "sensor_response_pol",
17208  "sensor_response_dlos",
17209  "sensor_response_f_grid"),
17210  GOUT(),
17211  GOUT_TYPE(),
17212  GOUT_DESC(),
17213  IN("sensor_response",
17214  "sensor_response_f",
17215  "sensor_response_pol",
17216  "sensor_response_dlos",
17217  "sensor_response_f_grid",
17218  "sensor_response_pol_grid",
17219  "sensor_response_dlos_grid",
17220  "lo_multi",
17221  "sideband_response_multi",
17222  "sideband_mode_multi",
17223  "f_backend_multi",
17224  "backend_channel_response_multi",
17225  "sensor_norm"),
17226  GIN(),
17227  GIN_TYPE(),
17228  GIN_DEFAULT(),
17229  GIN_DESC()));
17230 
17231  md_data_raw.push_back(create_mdrecord(
17232  NAME("sensor_responsePolarisation"),
17233  DESCRIPTION(
17234  "Extraction of non-default polarisation components.\n"
17235  "\n"
17236  "The default is to output the Stokes elements I, Q, U and V (up to\n"
17237  "*stokes_dim*). This method allows to change the \"polarisation\" of\n"
17238  "the output. Polarisation components to be extracted are selected by\n"
17239  "*instrument_pol*. This method can be applied at any step of the sensor\n"
17240  "matrix set-up.\n"
17241  "\n"
17242  "The method can only be applied on data for I, Q, U and V. The value\n"
17243  "of *stokes_dim* must be sufficiently large for the selected\n"
17244  "components. For example, I+45 requires that *stokes_dim* is at\n"
17245  "least 3. \n"
17246  "\n"
17247  "See *instrument_pol* for coding of polarisation states.\n"
17248  "\n"
17249  "Note that the state of *iy_unit* is considered. This WSV must give\n"
17250  "the actual unit of the data. This as, the extraction of components\n"
17251  "is slightly different if data are radiances or brightness\n"
17252  "temperatures. In practise this means that *iy_unit* (as to be\n"
17253  "applied inside *iy_main_agenda*) must be set before calling this\n"
17254  "method.\n"),
17255  AUTHORS("Patrick Eriksson"),
17256  OUT("sensor_response",
17257  "sensor_response_f",
17258  "sensor_response_pol",
17259  "sensor_response_dlos",
17260  "sensor_response_pol_grid"),
17261  GOUT(),
17262  GOUT_TYPE(),
17263  GOUT_DESC(),
17264  IN("sensor_response",
17265  "sensor_response_f",
17266  "sensor_response_pol",
17267  "sensor_response_dlos",
17268  "sensor_response_f_grid",
17269  "sensor_response_pol_grid",
17270  "sensor_response_dlos_grid",
17271  "stokes_dim",
17272  "iy_unit",
17273  "instrument_pol"),
17274  GIN(),
17275  GIN_TYPE(),
17276  GIN_DEFAULT(),
17277  GIN_DESC()));
17278 
17279  md_data_raw.push_back(create_mdrecord(
17280  NAME("sensor_responseStokesRotation"),
17281  DESCRIPTION(
17282  "Includes a rotation of the Stokes H and V directions.\n"
17283  "\n"
17284  "The method applies the rotations implied by *stokes_rotation*.\n"
17285  "See the description of that WSV for details.\n"
17286  "\n"
17287  "This method does not change the size of *sensor_response*, and\n"
17288  "the auxiliary variables (sensor_response_f etc.) are not changed.\n"
17289  "\n"
17290  "To apply the method, *stokes_dim* must be >= 3. The complete effect\n"
17291  "of the rotation can not be determibed with lower *stokes_dim*.\n"),
17292  AUTHORS("Patrick Eriksson"),
17293  OUT("sensor_response"),
17294  GOUT(),
17295  GOUT_TYPE(),
17296  GOUT_DESC(),
17297  IN("sensor_response",
17298  "sensor_response_f_grid",
17299  "sensor_response_pol_grid",
17300  "sensor_response_dlos_grid",
17301  "stokes_dim",
17302  "stokes_rotation"),
17303  GIN(),
17304  GIN_TYPE(),
17305  GIN_DEFAULT(),
17306  GIN_DESC()));
17307 
17308  md_data_raw.push_back(create_mdrecord(
17309  NAME("sensor_responseSimpleAMSU"),
17310  DESCRIPTION(
17311  "Simplified sensor setup for an AMSU-type instrument.\n"
17312  "\n"
17313  "This method allows quick and simple definition of AMSU-type\n"
17314  "sensors. Assumptions:\n"
17315  "\n"
17316  "1. Pencil beam antenna.\n"
17317  "2. Double sideband receivers.\n"
17318  "3. Sideband mode \"upper\"\n"
17319  "4. The channel response is rectangular.\n"
17320  "\n"
17321  "Under these assumptions the only inputs needed are the LO positions,\n"
17322  "the offsets from the LO, and the IF bandwidths. They are provieded\n"
17323  "in sensor_description_amsu.\n"),
17324  AUTHORS("Stefan Buehler"),
17325  OUT("f_grid",
17326  "antenna_dim",
17327  "mblock_dlos_grid",
17328  "sensor_response",
17329  "sensor_response_f",
17330  "sensor_response_pol",
17331  "sensor_response_dlos",
17332  "sensor_response_f_grid",
17333  "sensor_response_pol_grid",
17334  "sensor_response_dlos_grid",
17335  "sensor_norm"),
17336  GOUT(),
17337  GOUT_TYPE(),
17338  GOUT_DESC(),
17339  IN("atmosphere_dim", "stokes_dim", "sensor_description_amsu"),
17340  GIN("spacing"),
17341  GIN_TYPE("Numeric"),
17342  GIN_DEFAULT(".1e9"),
17343  GIN_DESC("Desired grid spacing in Hz.")));
17344 
17345  md_data_raw.push_back(create_mdrecord(
17346  NAME("sensor_responseGenericAMSU"),
17347  DESCRIPTION(
17348  "Simplified sensor setup for an AMSU-type instrument.\n"
17349  "\n"
17350  "This function is derived from 'sensor_responseSimpleAMSU' \n"
17351  "but is more generalized since the number of passbands in each \n"
17352  "can be in the range from 1 to 4 - in order to correctly simulate\n"
17353  "AMSU-A type sensors \n"
17354  "\n"
17355  "This method allows quick and simple definition of AMSU-type\n"
17356  "sensors. Assumptions:\n"
17357  "\n"
17358  "1. Pencil beam antenna.\n"
17359  "2. 1-4 Passband/sidebands per channel.\n"
17360  "3. Sideband mode \"upper\"\n"
17361  "4. The channel response is rectangular.\n"
17362  "\n"
17363  "Under these assumptions the only inputs needed are the LO positions,\n"
17364  "the offsets from the LO, and the IF bandwidths. They are provided\n"
17365  "in sensor_description_amsu.\n"),
17366  AUTHORS("Oscar Isoz"),
17367  OUT("f_grid",
17368  "antenna_dim",
17369  "mblock_dlos_grid",
17370  "sensor_response",
17371  "sensor_response_f",
17372  "sensor_response_pol",
17373  "sensor_response_dlos",
17374  "sensor_response_f_grid",
17375  "sensor_response_pol_grid",
17376  "sensor_response_dlos_grid",
17377  "sensor_norm"),
17378  GOUT(),
17379  GOUT_TYPE(),
17380  GOUT_DESC(),
17381  IN("atmosphere_dim", "stokes_dim", "sensor_description_amsu"),
17382  GIN("spacing"),
17383  GIN_TYPE("Numeric"),
17384  GIN_DEFAULT(".1e9"),
17385  GIN_DESC("Desired grid spacing in Hz.")));
17386 
17387  md_data_raw.push_back(create_mdrecord(
17388  NAME("sensor_responseWMRF"),
17389  DESCRIPTION(
17390  "Adds WMRF weights to sensor response.\n"
17391  "\n"
17392  "This method adds a spectrometer response that has been calculated\n"
17393  "with the weighted mean of representative frequencies (WMRF) method. It\n"
17394  "consists of a set of selected frequencies, and associated weights.\n"),
17395  AUTHORS(
17396  "Stefan Buehler, based on Patrick Erikssons sensor_responseBackend"),
17397  OUT("sensor_response",
17398  "sensor_response_f",
17399  "sensor_response_pol",
17400  "sensor_response_dlos",
17401  "sensor_response_f_grid"),
17402  GOUT(),
17403  GOUT_TYPE(),
17404  GOUT_DESC(),
17405  IN("sensor_response",
17406  "sensor_response_f",
17407  "sensor_response_pol",
17408  "sensor_response_dlos",
17409  "sensor_response_f_grid",
17410  "sensor_response_pol_grid",
17411  "sensor_response_dlos_grid",
17412  "wmrf_weights",
17413  "f_backend"),
17414  GIN(),
17415  GIN_TYPE(),
17416  GIN_DEFAULT(),
17417  GIN_DESC()));
17418 
17419  md_data_raw.push_back(
17420  create_mdrecord(NAME("SetNumberOfThreads"),
17421  DESCRIPTION("Change the number of threads used by ARTS.\n"),
17422  AUTHORS("Oliver Lemke"),
17423  OUT(),
17424  GOUT(),
17425  GOUT_TYPE(),
17426  GOUT_DESC(),
17427  IN(),
17428  GIN("nthreads"),
17429  GIN_TYPE("Index"),
17430  GIN_DEFAULT(NODEF),
17431  GIN_DESC("Number of threads.")));
17432 
17433  md_data_raw.push_back(create_mdrecord(
17434  NAME("Sleep"),
17435  DESCRIPTION("Sleeps for a number of seconds\n"),
17436  AUTHORS("Richard Larsson"),
17437  OUT(),
17438  GOUT(),
17439  GOUT_TYPE(),
17440  GOUT_DESC(),
17441  IN(),
17442  GIN("time"),
17443  GIN_TYPE("Numeric"),
17444  GIN_DEFAULT(NODEF),
17445  GIN_DESC("Time to sleep for in seconds")));
17446 
17447  md_data_raw.push_back(create_mdrecord(
17448  NAME("timeSleep"),
17449  DESCRIPTION("Sleeps until time has been reached.\n"),
17450  AUTHORS("Richard Larsson"),
17451  OUT(),
17452  GOUT(),
17453  GOUT_TYPE(),
17454  GOUT_DESC(),
17455  IN("time"),
17456  GIN(),
17457  GIN_TYPE(),
17458  GIN_DEFAULT(),
17459  GIN_DESC()));
17460 
17461  md_data_raw.push_back(create_mdrecord(
17462  NAME("SparseSparseMultiply"),
17463  DESCRIPTION(
17464  "Multiplies a Sparse with another Sparse, result stored in Sparse.\n"
17465  "\n"
17466  "Makes the calculation: out = m1 * m2\n"),
17467  AUTHORS("Patrick Eriksson"),
17468  OUT(),
17469  GOUT("out"),
17470  GOUT_TYPE("Sparse"),
17471  GOUT_DESC("Product, can be same variable as any of the inputs."),
17472  IN(),
17473  GIN("m1", "m2"),
17474  GIN_TYPE("Sparse", "Sparse"),
17476  GIN_DESC("Left sparse matrix.", "Right sparse matrix.")));
17477 
17478  md_data_raw.push_back(create_mdrecord(
17479  NAME("SparseMatrixIdentity"),
17480  DESCRIPTION(
17481  "Returns a sparse dentity matrix.\n"
17482  "\n"
17483  "The size of the matrix created is n x n. Default is to return a\n"
17484  "true identity matrix (I), but you can also select another value\n"
17485  "along the diagonal be setting *value*. That is, the output is\n"
17486  "value*I.\n"),
17487  AUTHORS("Simon Pfreundschuh"),
17488  OUT(),
17489  GOUT("out"),
17490  GOUT_TYPE("Sparse"),
17491  GOUT_DESC("Sparse output matrix"),
17492  IN(),
17493  GIN("n", "value"),
17494  GIN_TYPE("Index", "Numeric"),
17495  GIN_DEFAULT(NODEF, "1"),
17496  GIN_DESC("Size of the matrix", "The value along the diagonal.")));
17497 
17498  md_data_raw.push_back(create_mdrecord(
17499  NAME("spectral_irradiance_fieldFromSpectralRadianceField"),
17500  DESCRIPTION(
17501  "Calculates the spectral irradiance from *spectral_radiance_field* .\n"
17502  "by integrating over the angular grids according to the grids set\n"
17503  "by *AngularGridsSetFluxCalc* \n"
17504  "See *AngularGridsSetFluxCalc to set \n"
17505  "*za_grid, aa_grid, and za_grid_weights*\n"),
17506  AUTHORS("Manfred Brath"),
17507  OUT("spectral_irradiance_field"),
17508  GOUT(),
17509  GOUT_TYPE(),
17510  GOUT_DESC(),
17511  IN("spectral_radiance_field", "za_grid", "aa_grid", "za_grid_weights"),
17512  GIN(),
17513  GIN_TYPE(),
17514  GIN_DEFAULT(),
17515  GIN_DESC()));
17516 
17517  md_data_raw.push_back(create_mdrecord(
17518  NAME("spectral_radiance_fieldClearskyPlaneParallel"),
17519  DESCRIPTION(
17520  "Clear-sky radiance field of a plane parallel atmosphere.\n"
17521  "\n"
17522  "The method assumes a 1D flat planet. Radiances along each direction\n"
17523  "given by *za_grid* are calculated using *ppathPlaneParallel*\n"
17524  "and *iyEmissionStandard*.\n"
17525  "\n"
17526  "Surface properties are defined by *iy_surface_agenda*, i.e. there is no\n"
17527  "restriction to e.g. specular surfaces.\n"
17528  "\n"
17529  "Note that the variable *ppath_lmax* is considered, and that it can be\n"
17530  "critical for the accuracy for zenith angles close to 90 degrees. That\n"
17531  "is, using ppath_lmax=-1 is not recommended for this function.\n"
17532  "\n"
17533  "Information on transmission is also provided by the GOUT *trans_field*.\n"
17534  "For up-welling radiation (scat_za > 90), this variable holds the\n"
17535  "transmission to space, for considered position and propagation direction.\n"
17536  "For down-welling radiation, *trans_field* holds instead the transmission\n"
17537  "down to the surface.\n"),
17538  AUTHORS("Patrick Eriksson"),
17539  OUT("spectral_radiance_field"),
17540  GOUT("trans_field"),
17541  GOUT_TYPE("Tensor3"),
17542  GOUT_DESC("Dimensions: [f_grid,p_grid,za_grid]. See further above."),
17543  IN("propmat_clearsky_agenda",
17544  "water_p_eq_agenda",
17545  "iy_space_agenda",
17546  "iy_surface_agenda",
17547  "iy_cloudbox_agenda",
17548  "stokes_dim",
17549  "f_grid",
17550  "atmosphere_dim",
17551  "p_grid",
17552  "z_field",
17553  "t_field",
17554  "nlte_field",
17555  "vmr_field",
17556  "abs_species",
17557  "wind_u_field",
17558  "wind_v_field",
17559  "wind_w_field",
17560  "mag_u_field",
17561  "mag_v_field",
17562  "mag_w_field",
17563  "z_surface",
17564  "ppath_lmax",
17565  "rte_alonglos_v",
17566  "surface_props_data",
17567  "za_grid"),
17568  GIN("use_parallel_iy"),
17569  GIN_TYPE("Index"),
17570  GIN_DEFAULT("0"),
17571  GIN_DESC("0: Parallelize over zenith angles\n"
17572  "1: Use more memory intensiv iyEmissionStandardParallel*")));
17573 
17574  md_data_raw.push_back(create_mdrecord(
17575  NAME("spectral_radiance_fieldCopyCloudboxField"),
17576  DESCRIPTION(
17577  "Set *spectral_radiance_field* to be a copy of *cloudbox_field*.\n"
17578  "\n"
17579  "This method can only be used for 1D atmospheres and if the cloud\n"
17580  "box covers the complete atmosphere. For such case, the two fields\n"
17581  "cover the same atmospheric volume and a direct copying can be made.\n"),
17582  AUTHORS("Patrick Eriksson"),
17583  OUT("spectral_radiance_field"),
17584  GOUT(),
17585  GOUT_TYPE(),
17586  GOUT_DESC(),
17587  IN("atmosphere_dim",
17588  "p_grid",
17589  "cloudbox_on",
17590  "cloudbox_limits",
17591  "cloudbox_field"),
17592  GIN(),
17593  GIN_TYPE(),
17594  GIN_DEFAULT(),
17595  GIN_DESC()));
17596 
17597  md_data_raw.push_back(create_mdrecord(
17598  NAME("spectral_radiance_fieldExpandCloudboxField"),
17599  DESCRIPTION(
17600  "Uses and expands *cloudbox_field* to set *spectral_radiance_field*.\n"
17601  "\n"
17602  "The method demands that *cloudbox_field* starts at the first pressure\n"
17603  "level (i.e. cloudbox_limits[0] is 0). The method copies *cloudbox_field*\n"
17604  "to fill *spectral_radiance_field* up to the top of the cloudbox.\n"
17605  "\n"
17606  "To fill the remaning part of *spectral_radiance_field*, clear-sky\n"
17607  "calculations are performed largely in the same maner as done by\n"
17608  "*spectral_radiance_fieldClearskyPlaneParallel*. That is, clear-sky\n"
17609  "calculations are done for the upper part of the atmosphere, assuming\n"
17610  "a flat planet.\n"
17611  "\n"
17612  "Note that the cloud box constitutes the lower boundary for the later\n"
17613  "calculations, and *iy_cloudbox_agenda* must be set to perform an\n"
17614  "interpolation of the cloudbox field.\n"),
17615  AUTHORS("Patrick Eriksson"),
17616  OUT("spectral_radiance_field"),
17617  GOUT(),
17618  GOUT_TYPE(),
17619  GOUT_DESC(),
17620  IN("propmat_clearsky_agenda",
17621  "water_p_eq_agenda",
17622  "iy_space_agenda",
17623  "iy_surface_agenda",
17624  "iy_cloudbox_agenda",
17625  "stokes_dim",
17626  "f_grid",
17627  "atmosphere_dim",
17628  "p_grid",
17629  "z_field",
17630  "t_field",
17631  "nlte_field",
17632  "vmr_field",
17633  "abs_species",
17634  "wind_u_field",
17635  "wind_v_field",
17636  "wind_w_field",
17637  "mag_u_field",
17638  "mag_v_field",
17639  "mag_w_field",
17640  "z_surface",
17641  "cloudbox_on",
17642  "cloudbox_limits",
17643  "cloudbox_field",
17644  "ppath_lmax",
17645  "rte_alonglos_v",
17646  "surface_props_data",
17647  "za_grid"),
17648  GIN("use_parallel_iy"),
17649  GIN_TYPE("Index"),
17650  GIN_DEFAULT("0"),
17651  GIN_DESC("0: Parallelize over zenith angles\n"
17652  "1: Use more memory intensiv iyEmissionStandardParallel*")));
17653 
17654  md_data_raw.push_back(create_mdrecord(
17655  NAME("specular_losCalc"),
17656  DESCRIPTION(
17657  "Calculates the specular direction of surface reflections.\n"
17658  "\n"
17659  "A help method to set up the surface properties. This method\n"
17660  "calculates *specular_los*, that is required in several methods\n"
17661  "to convert zenith angles to incidence angles.\n"
17662  "\n"
17663  "The method also returns the line-of-sight matching the surface normal.\n"
17664  "\n"
17665  "The default is to consider the surface slope when calculating the\n"
17666  "specular direction. That is, the variation of *z_surface* (as well as\n"
17667  "the geoid radius) is considered and the specular direction is calculated\n"
17668  "including the specified topography. This part can be deactivated by\n"
17669  "setting *ignore_surface_slope* to 1. In this case, the zenith angle of\n"
17670  "the specular direction is simply 180-rtp_los[0]. *ignore_surface_slope*\n"
17671  "has only an effect for 2D and 3D, as 1D implies a constant radius of\n"
17672  "the surface (i.e. no topography).\n"),
17673  AUTHORS("Patrick Eriksson"),
17674  OUT("specular_los", "surface_normal"),
17675  GOUT(),
17676  GOUT_TYPE(),
17677  GOUT_DESC(),
17678  IN("rtp_pos",
17679  "rtp_los",
17680  "atmosphere_dim",
17681  "lat_grid",
17682  "lon_grid",
17683  "refellipsoid",
17684  "z_surface"),
17685  GIN("ignore_surface_slope"),
17686  GIN_TYPE("Index"),
17687  GIN_DEFAULT("0"),
17688  GIN_DESC("Flag to control if surface slope is consdered or not.")));
17689 
17690  md_data_raw.push_back(create_mdrecord(
17691  NAME("specular_losCalcNoTopography"),
17692  DESCRIPTION(
17693  "Calculates the specular direction of surface reflections for horisontal\n"
17694  "surfaces.\n"
17695  "\n"
17696  "In contrast to *specular_losCalc*, this method ignores the topography\n"
17697  "implied by *z_surface*. That is, any slope of the surface is ignored.\n"
17698  "\n"
17699  "The typical application of this WSM should be water surfaces (lakes and\n"
17700  "oceans).\n"),
17701  AUTHORS("Patrick Eriksson"),
17702  OUT("specular_los", "surface_normal"),
17703  GOUT(),
17704  GOUT_TYPE(),
17705  GOUT_DESC(),
17706  IN("rtp_pos", "rtp_los", "atmosphere_dim"),
17707  GIN(),
17708  GIN_TYPE(),
17709  GIN_DEFAULT(),
17710  GIN_DESC()));
17711 
17712  md_data_raw.push_back(create_mdrecord(
17713  NAME("StringJoin"),
17714  DESCRIPTION(
17715  "Concatenate two or more strings.\n"
17716  "\n"
17717  "The output string is overwritten, but is allowed to appear\n"
17718  "in the input list. Up to 10 strings can be concatenated at once.\n"),
17719  AUTHORS("Oliver Lemke"),
17720  OUT(),
17721  GOUT("out"),
17722  GOUT_TYPE("String"),
17723  GOUT_DESC("Concatenated string."),
17724  IN(),
17725  GIN("in1",
17726  "in2",
17727  "in3",
17728  "in4",
17729  "in5",
17730  "in6",
17731  "in7",
17732  "in8",
17733  "in9",
17734  "in10"),
17735  GIN_TYPE("String",
17736  "String",
17737  "String",
17738  "String",
17739  "String",
17740  "String",
17741  "String",
17742  "String",
17743  "String",
17744  "String"),
17745  GIN_DEFAULT(NODEF, NODEF, "", "", "", "", "", "", "", ""),
17746  GIN_DESC("Input text string.",
17747  "Input text string.",
17748  "Input text string.",
17749  "Input text string.",
17750  "Input text string.",
17751  "Input text string.",
17752  "Input text string.",
17753  "Input text string.",
17754  "Input text string.",
17755  "Input text string.")));
17756 
17757  md_data_raw.push_back(
17758  create_mdrecord(NAME("StringSet"),
17759  DESCRIPTION("Sets a String to the given text string.\n"),
17760  AUTHORS("Patrick Eriksson"),
17761  OUT(),
17762  GOUT("out"),
17763  GOUT_TYPE("String"),
17764  GOUT_DESC("Variable to initialize."),
17765  IN(),
17766  GIN("text"),
17767  GIN_TYPE("String"),
17768  GIN_DEFAULT(NODEF),
17769  GIN_DESC("Input text string."),
17770  SETMETHOD(true)));
17771 
17772  md_data_raw.push_back(create_mdrecord(
17773  NAME("z_surfaceFromFileAndGrid"),
17774  DESCRIPTION(
17775  "Sets the surface altitude for a given latitude and longitude grid.\n"),
17776  AUTHORS("Richard Larsson"),
17777  OUT("z_surface"),
17778  GOUT(),
17779  GOUT_TYPE(),
17780  GOUT_DESC(),
17781  IN("lat_grid", "lon_grid"),
17782  GIN("filename", "interp_order", "set_lowest_altitude_to_zero"),
17783  GIN_TYPE("String", "Index", "Index"),
17784  GIN_DEFAULT(NODEF, "1", "0"),
17785  GIN_DESC(
17786  "File of GriddedField2 with surface altitudes gridded",
17787  "Interpolation order",
17788  "Index that sets the lowest altitude to 0 to ignore sub-surface pressures/altitudes")));
17789 
17790  md_data_raw.push_back(create_mdrecord(
17791  NAME("z_surfaceConstantAltitude"),
17792  DESCRIPTION(
17793  "Sets the surface altitude to a constant. Defaults to zero.\n"),
17794  AUTHORS("Richard Larsson"),
17795  OUT("z_surface"),
17796  GOUT(),
17797  GOUT_TYPE(),
17798  GOUT_DESC(),
17799  IN("lat_grid", "lon_grid"),
17800  GIN("altitude"),
17801  GIN_TYPE("Numeric"),
17802  GIN_DEFAULT("0"),
17803  GIN_DESC("The constant altitude.")));
17804 
17805  md_data_raw.push_back(create_mdrecord(
17806  NAME("surfaceBlackbody"),
17807  DESCRIPTION(
17808  "Creates variables to mimic a blackbody surface.\n"
17809  "\n"
17810  "This method sets up *surface_los*, *surface_rmatrix* and\n"
17811  "*surface_emission* for *surface_rtprop_agenda*. Here, *surface_los*\n"
17812  "and *surface_rmatrix* are set to be empty, and *surface_emission*\n"
17813  "to hold blackbody radiation for a temperature of *surface_skin_t*.\n"),
17814  AUTHORS("Patrick Eriksson"),
17815  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17816  GOUT(),
17817  GOUT_TYPE(),
17818  GOUT_DESC(),
17819  IN("atmosphere_dim",
17820  "f_grid",
17821  "stokes_dim",
17822  "rtp_pos",
17823  "rtp_los",
17824  "surface_skin_t"),
17825  GIN(),
17826  GIN_TYPE(),
17827  GIN_DEFAULT(),
17828  GIN_DESC()));
17829 
17830  md_data_raw.push_back(create_mdrecord(
17831  NAME("surfaceFastem"),
17832  DESCRIPTION(
17833  "Usage of FASTEM together with MC and DOIT.\n"
17834  "\n"
17835  "The recommended way to use FASTEM is by *iySurfaceFastem*, but that\n"
17836  "is not always possible, such as when using MC and DOIT. This is the\n"
17837  "case as those scattering methods use *surface_rtprop_agenda*,\n"
17838  "while *iySurfaceFastem* fits with *iy_surface_agenda*. This WSM solves\n"
17839  "this by allowing FASTEM to be used inside *surface_rtprop_agenda*.\n"
17840  "\n"
17841  "However, FASTEM is here used in an approximative way. For a correct\n"
17842  "usage of FASTEM, the atmospheric transmittance shall be calculated\n"
17843  "for the position and direction of concern, but this is not possible\n"
17844  "together with DOIT and MC. Instead, the transmittance is an input\n"
17845  "to the method, and must either be pre-calculated or set to a\n"
17846  "representative value.\n"
17847  "\n"
17848  "See *iySurfaceFastem*, for further details on the special input\n"
17849  "arguments.\n"),
17850  AUTHORS("Patrick Eriksson"),
17851  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17852  GOUT(),
17853  GOUT_TYPE(),
17854  GOUT_DESC(),
17855  IN("atmosphere_dim",
17856  "stokes_dim",
17857  "f_grid",
17858  "rtp_pos",
17859  "rtp_los",
17860  "surface_skin_t"),
17861  GIN("salinity",
17862  "wind_speed",
17863  "wind_direction",
17864  "transmittance",
17865  "fastem_version"),
17866  GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Index"),
17867  GIN_DEFAULT("0.035", NODEF, "0", NODEF, "6"),
17868  GIN_DESC("Salinity, 0-1. That is, 3% is given as 0.03.",
17869  "Wind speed.",
17870  "Wind direction. See futher above.",
17871  "Transmittance along path of downwelling radiation. A vector "
17872  "with the same length as *f_grid*.",
17873  "The version of FASTEM to use.")));
17874 
17875  md_data_raw.push_back(create_mdrecord(
17876  NAME("surfaceTessem"),
17877  DESCRIPTION(
17878  "TESSEM sea surface microwave emissivity parametrization.\n"
17879  "\n"
17880  "This method computes surface emissivity and reflectivity matrices for\n"
17881  "ocean surfaces using the TESSEM emissivity model: Prigent, C., et al.\n"
17882  "Sea‐surface emissivity parametrization from microwaves to millimetre\n"
17883  "waves, QJRMS, 2017, 143.702: 596-605.\n"
17884  "\n"
17885  "The validity range of the parametrization of is 10 to 700 GHz, but for\n"
17886  "some extra flexibility frequencies between 5 and 900 GHz are accepted.\n"
17887  "The accepted temperaute range for *surface_skin_t* is [260.0 K, 373.0 K]\n"
17888  "\n"
17889  "The model itself is represented by the neural networks in\n"
17890  "*tessem_neth* and *tessem_netv*.\n"),
17891  AUTHORS("Simon Pfreundschuh"),
17892  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17893  GOUT(),
17894  GOUT_TYPE(),
17895  GOUT_DESC(),
17896  IN("atmosphere_dim",
17897  "stokes_dim",
17898  "f_grid",
17899  "rtp_pos",
17900  "rtp_los",
17901  "surface_skin_t",
17902  "tessem_neth",
17903  "tessem_netv"),
17904  GIN("salinity", "wind_speed"),
17905  GIN_TYPE("Numeric", "Numeric"),
17906  GIN_DEFAULT("0.035", NODEF),
17907  GIN_DESC("Salinity, 0-1. That is, 3% is given as 0.03.", "Wind speed.")));
17908 
17909  md_data_raw.push_back(create_mdrecord(
17910  NAME("surfaceTelsem"),
17911  DESCRIPTION(
17912  "Compute surface emissivities using the TELSEM 2 model.\n"
17913  "\n"
17914  "This method uses second version of the TELSEM model for calculating\n"
17915  "land surface emissivities (F. Aires et al, \"A Tool to Estimate \n"
17916  " Land‐Surface Emissivities at Microwave frequencies (TELSEM) for use\n"
17917  " in numerical weather prediction\" Quarterly Journal of the Royal\n"
17918  "Meteorological Society, vol. 137, (656), pp. 690-699, 2011.)\n"
17919  "This methods computes land surface emissivities for a given pencil beam\n"
17920  "using a given TELSEM2 atlas.\n"
17921  "The input must satisfy the following conditions, otherwise an error is thrown:\n"
17922  " - The input frequencies (*f_grid*) must be within the range [5 GHz, 900 GHz]\n"
17923  " - The skin temperature (*surface_skin_t*) must be within the range\n"
17924  " [180 K, 360 K]\n"
17925  "\n"
17926  "A TELSEM atlas contains only suface emissivities for locations that are\n"
17927  "classified as land. By default this WSM will throw an error if the\n"
17928  "pencil beam hits the surface at a position that is not contained in the\n"
17929  "given atlas.\n"
17930  "\n"
17931  "The above behavior can be avoided by setting *d_max* to a positive value.\n"
17932  "This enables nearest neighbor interpolation, which assigns the emissivities\n"
17933  "of the nearest found cell in the atlas to the given position. In this case,\n"
17934  "an error is only thrown if the distance of the found neighbor is higher\n"
17935  "than the provided value of *d_max.\n"
17936  "\n"
17937  "You can limit the final reflectivity applied by setting *r_min* and *r_max*.\n"
17938  "\n"
17939  "To extract a land-sea mask from a given telsem atlas see the WSM\n"
17940  "*telsemSurfaceTypeLandSea*.\n"),
17941  AUTHORS("Simon Pfreundschuh"),
17942  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17943  GOUT(),
17944  GOUT_TYPE(),
17945  GOUT_DESC(),
17946  IN("atmosphere_dim",
17947  "stokes_dim",
17948  "f_grid",
17949  "lat_grid",
17950  "lat_true",
17951  "lon_true",
17952  "rtp_pos",
17953  "rtp_los",
17954  "surface_skin_t"),
17955  GIN("atlas", "r_min", "r_max", "d_max"),
17956  GIN_TYPE("TelsemAtlas", "Numeric", "Numeric", "Numeric"),
17957  GIN_DEFAULT(NODEF, "0", "1", "-1.0"),
17958  GIN_DESC("The Telsem atlas to use for the emissivity calculation.",
17959  "Minimum allowed value for reflectivity to apply.",
17960  "Maximum allowed value for reflectivity to apply.",
17961  "Maximum allowed distance in meters for nearest neighbor"
17962  " interpolation in meters. Set to a negative value or zero "
17963  " to disable interpolation.")));
17964 
17965  md_data_raw.push_back(create_mdrecord(
17966  NAME("surfaceFlatRefractiveIndex"),
17967  DESCRIPTION(
17968  "Creates variables to mimic specular reflection by a (flat) surface\n"
17969  "where the complex refractive index is specified.\n"
17970  "\n"
17971  "The dielectric properties of the surface are described by\n"
17972  "*surface_complex_refr_index*. The Fresnel equations are used to\n"
17973  "calculate amplitude reflection coefficients. The method can thus\n"
17974  "result in that the reflection properties differ between frequencies\n"
17975  "and polarisations.\n"
17976  "\n"
17977  "Local thermodynamic equilibrium is assumed, which corresponds to\n"
17978  "that the reflection and emission coefficients add up to 1.\n"),
17979  AUTHORS("Patrick Eriksson"),
17980  OUT("surface_los", "surface_rmatrix", "surface_emission"),
17981  GOUT(),
17982  GOUT_TYPE(),
17983  GOUT_DESC(),
17984  IN("f_grid",
17985  "stokes_dim",
17986  "atmosphere_dim",
17987  "rtp_pos",
17988  "rtp_los",
17989  "specular_los",
17990  "surface_skin_t",
17991  "surface_complex_refr_index"),
17992  GIN(),
17993  GIN_TYPE(),
17994  GIN_DEFAULT(),
17995  GIN_DESC()));
17996 
17997  md_data_raw.push_back(create_mdrecord(
17998  NAME("surfaceFlatReflectivity"),
17999  DESCRIPTION(
18000  "Creates variables to mimic specular reflection by a (flat) surface\n"
18001  "where *surface_reflectivity* is specified.\n"
18002  "\n"
18003  "Works basically as *surfaceFlatScalarReflectivity* but is more\n"
18004  "general as vector radiative transfer is more properly handled. See\n"
18005  "the ARTS theory document (ATD) for details around how\n"
18006  "*surface_emission* is determined. In the nomenclature of ATD,\n"
18007  "*surface_reflectivity* gives R.\n"),
18008  AUTHORS("Patrick Eriksson"),
18009  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18010  GOUT(),
18011  GOUT_TYPE(),
18012  GOUT_DESC(),
18013  IN("f_grid",
18014  "stokes_dim",
18015  "atmosphere_dim",
18016  "rtp_pos",
18017  "rtp_los",
18018  "specular_los",
18019  "surface_skin_t",
18020  "surface_reflectivity"),
18021  GIN(),
18022  GIN_TYPE(),
18023  GIN_DEFAULT(),
18024  GIN_DESC()));
18025 
18026  md_data_raw.push_back(create_mdrecord(
18027  NAME("surfaceFlatRvRh"),
18028  DESCRIPTION(
18029  "Creates variables to mimic specular reflection by a (flat) surface\n"
18030  "where *surface_rv_rh* is specified.\n"
18031  "\n"
18032  "This method assumes that the reflection at vertical and horizontal\n"
18033  "polarisation differs. As power reflection coefficients are provided\n"
18034  "there is no information at hand on phase shifts between polarisations,\n"
18035  "and they are simply assumed to be zero. These assumptions result in\n"
18036  "that *surface_emission* is set to zero for positions corresponding to\n"
18037  "U and V, and that all diagonal elementsof *surface_rmatrix* are equal\n"
18038  "(the mean of rv and rh). Further, all off-diagonal elements of\n"
18039  "*surface_rmatrix* are all zero except for (0,1) and (1,0).\n"),
18040  AUTHORS("Patrick Eriksson"),
18041  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18042  GOUT(),
18043  GOUT_TYPE(),
18044  GOUT_DESC(),
18045  IN("f_grid",
18046  "stokes_dim",
18047  "atmosphere_dim",
18048  "rtp_pos",
18049  "rtp_los",
18050  "specular_los",
18051  "surface_skin_t",
18052  "surface_rv_rh"),
18053  GIN(),
18054  GIN_TYPE(),
18055  GIN_DEFAULT(),
18056  GIN_DESC()));
18057 
18058  md_data_raw.push_back(create_mdrecord(
18059  NAME("surfaceFlatScalarReflectivity"),
18060  DESCRIPTION(
18061  "Creates variables to mimic specular reflection by a (flat) surface\n"
18062  "where *surface_scalar_reflectivity* is specified.\n"
18063  "\n"
18064  "This method assumes that the reflection at vertical and horizontal\n"
18065  "polarisation is identical. This assumption includes that there is no\n"
18066  "phase shift between polarisations. These assumptions result in that\n"
18067  "*surface_emission* is set to zero for positions corresponding to Q,\n"
18068  "U and V, and that *surface_rmatrix* becomes a diagonal matrix (with\n"
18069  "all elements on the diagonal equal to the specified reflectivity).\n"),
18070  AUTHORS("Patrick Eriksson"),
18071  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18072  GOUT(),
18073  GOUT_TYPE(),
18074  GOUT_DESC(),
18075  IN("f_grid",
18076  "stokes_dim",
18077  "atmosphere_dim",
18078  "rtp_pos",
18079  "rtp_los",
18080  "specular_los",
18081  "surface_skin_t",
18082  "surface_scalar_reflectivity"),
18083  GIN(),
18084  GIN_TYPE(),
18085  GIN_DEFAULT(),
18086  GIN_DESC()));
18087 
18088  md_data_raw.push_back(create_mdrecord(
18089  NAME("surfaceLambertianSimple"),
18090  DESCRIPTION(
18091  "Creates variables to mimic a Lambertian surface.\n"
18092  "\n"
18093  "A Lambertian surface can be characterised solely by its\n"
18094  "reflectivity, here taken from *surface_scalar_reflectivity*.\n"
18095  "\n"
18096  "The down-welling radiation field is estimated by making calculations\n"
18097  "for *lambertian_nza* directions. The range of zenith angles ([0,90])\n"
18098  "is divided in an equidistant manner for 1D. For 2D and 3D see below.\n"
18099  "The values for *surface_rmatrix* are assuming a constant radiance\n"
18100  "over each zenith angle range. See AUG.\n"
18101  "\n"
18102  "Default is to select the zenith angles for *sensor_los* to be placed\n"
18103  "centrally in the grid ranges. For example, if *lambertian_nza* is set\n"
18104  "to 9, down-welling radiation will be calculated for zenith angles = \n"
18105  "5, 15, ..., 85. The position of these angles can be shifted by\n"
18106  "*za_pos*. This variable specifies the fractional distance inside the\n"
18107  "ranges. For example, a *za_pos* of 0.7 (np still 9) gives the angles\n"
18108  "7, 17, ..., 87.\n"
18109  "\n"
18110  "Only upper-left diagonal element of the *surface_rmatrix* is\n"
18111  "non-zero. That is, the upwelling radiation is always unpolarised.\n"
18112  "\n"
18113  "Local thermodynamic equilibrium is assumed, which corresponds to\n"
18114  "that the reflection and emission coefficients \"add up to 1\".\n"
18115  "\n"
18116  "For 2D and 3D, the down-welling directions are placed along the\n"
18117  "the viewing direction, e.g. for 3D the azimuth angle is kept constant.\n"
18118  "In 2D and 3D surface topography can exist, and to avoid getting views\n"
18119  "going directly into the surface, angels are not distributed over 90 deg,\n"
18120  "but 90-abs(surface_normal[0]).\n"),
18121  AUTHORS("Patrick Eriksson"),
18122  OUT("surface_los", "surface_rmatrix", "surface_emission"),
18123  GOUT(),
18124  GOUT_TYPE(),
18125  GOUT_DESC(),
18126  IN("f_grid",
18127  "stokes_dim",
18128  "atmosphere_dim",
18129  "rtp_pos",
18130  "rtp_los",
18131  "surface_normal",
18132  "surface_skin_t",
18133  "surface_scalar_reflectivity"),
18134  GIN("lambertian_nza", "za_pos"),
18135  GIN_TYPE("Index", "Numeric"),
18136  GIN_DEFAULT("9", "0.5"),
18137  GIN_DESC("Number of downwelling streams.",
18138  "Position of angle in *surface_los* inside ranges of zenith "
18139  "angle grid. See above.")));
18140 
18141  md_data_raw.push_back(create_mdrecord(
18142  NAME("surfaceSemiSpecularBy3beams"),
18143  DESCRIPTION(
18144  "A simplistic treatment of semi-specular surfaces.\n"
18145  "\n"
18146  "This method has no strong physical basis but could be used for simpler\n"
18147  "testing or as starting point for more advanced methods.\n"
18148  "\n"
18149  "This method assumes that the surface can be treated to have three facets,\n"
18150  "all lacking surface roughness. One facet is assumed to give standard\n"
18151  "specular reflection, while the two other facets are tilted with +dza\n"
18152  "and -dza, respectively. The tilt is assumed to only affect the zenith\n"
18153  "angle of the reflected direction (azimuth same as for specular direction).\n"
18154  "The area ratio of the non-tilted facet is set by *specular_factor*.\n"
18155  "That is, the specular beam is given weight w, while the other two beams\n"
18156  "each get weight (1-w)/2.\n"
18157  "\n"
18158  "If a facet tilts away from the viewing direction in such way that\n"
18159  "the surface is observed from below, the tilt of the facet is decreased\n"
18160  "in steps of 1 degree until a successful calculation is obtained. If this\n"
18161  "turns out to require a tilt of zero, this facete is merged with\n"
18162  "the specular direction.\n"
18163  "\n"
18164  "The pure specular properties of the surface shall be described by\n"
18165  "*surface_rtprop_sub_agenda*. That is, if you have specular surface\n"
18166  "described and you want to make it semi-specular by this method, you\n"
18167  "move the content of the existing *surface_rtprop_agenda* to\n"
18168  "*surface_rtprop_sub_agenda* and instead fill *surface_rtprop_agenda*\n"
18169  "with this method.\n"),
18170  AUTHORS("Patrick Eriksson"),
18171  OUT("surface_skin_t",
18172  "surface_los",
18173  "surface_rmatrix",
18174  "surface_emission"),
18175  GOUT(),
18176  GOUT_TYPE(),
18177  GOUT_DESC(),
18178  IN("atmosphere_dim",
18179  "f_grid",
18180  "rtp_pos",
18181  "rtp_los",
18182  "surface_rtprop_sub_agenda"),
18183  GIN("specular_factor", "dza"),
18184  GIN_TYPE("Numeric", "Numeric"),
18186  GIN_DESC("The weight given to the specular direction. Denoted as w above."
18187  " A value between 1/3 and 1.",
18188  "Zenith angle seperation to each secondary direction. A "
18189  "between 0 and 45 degrees.")));
18190 
18191  md_data_raw.push_back(create_mdrecord(
18192  NAME("surfaceSplitSpecularTo3beams"),
18193  DESCRIPTION(
18194  "A very simple approximation of a semi-specular surface.\n"
18195  "\n"
18196  "This method has no direct physical basis but could be used for simpler\n"
18197  "testing or as starting point for more advanced methods.\n"
18198  "\n"
18199  "The method requires that the surface RT properties (e.g. *surface_los*)\n"
18200  "have been set up to mimic a specular surface. This method splits the down-\n"
18201  "welling radiation into three directions. The specular direction is given\n"
18202  "weight w, while the other two beams each get weight (1-w)/2. The basic\n"
18203  "polarised reflectivity from the specular calculations is maintained\n"
18204  "for each beam. The beams are just separated in zenith angle, with a\n"
18205  "separation of *dza*. The lowermost beam is not allowed to be closer to\n"
18206  "the surface than 1 degree. If there is no room for the lowermost beam,\n"
18207  "it is merged with the main beam.\n"),
18208  AUTHORS("Patrick Eriksson"),
18209  OUT("surface_los", "surface_rmatrix"),
18210  GOUT(),
18211  GOUT_TYPE(),
18212  GOUT_DESC(),
18213  IN("surface_los",
18214  "surface_rmatrix",
18215  "atmosphere_dim",
18216  "rtp_pos",
18217  "rtp_los"),
18218  GIN("specular_factor", "dza"),
18219  GIN_TYPE("Numeric", "Numeric"),
18221  GIN_DESC("The weight given to the specular direction. Denoted as w above."
18222  " A value between 1/3 and 1.",
18223  "Zenith angle seperation to each secondary direction. A "
18224  "between 0 and 45 degrees.")));
18225 
18226  md_data_raw.push_back(create_mdrecord(
18227  NAME("surface_complex_refr_indexFromGriddedField5"),
18228  DESCRIPTION(
18229  "Extracts complex refractive index from a field of such data.\n"
18230  "\n"
18231  "The method allows to obtain *surface_complex_refr_index* by\n"
18232  "interpolation of a geographical field of such data. The position\n"
18233  "for which refraction shall be extracted is given by *rtp_pos*.\n"
18234  "The refractive index field is expected to be stored as:\n"
18235  " GriddedField5:\n"
18236  " Vector f_grid[N_f]\n"
18237  " Vector T_grid[N_T]\n"
18238  " ArrayOfString Complex[2]\n"
18239  " Vector \"Latitude\" [N_lat]\n"
18240  " Vector \"Longitude\" [N_lon]\n"
18241  " Tensor5 data[N_f][N_T][2][N_lat][N_lon]\n"
18242  "\n"
18243  "Definition and treatment of the three first dimensions follows\n"
18244  "*complex_refr_index*, e.g. the temperature grid is allowed\n"
18245  "to have length 1. The grids for latitude and longitude must have\n"
18246  "a length of >= 2 (ie. no automatic expansion).\n"
18247  "\n"
18248  "Hence, this method performs an interpolation only in the lat and\n"
18249  "lon dimensions, to a single point. The remaining GriddedField3 is\n"
18250  "simply returned as *surface_complex_refr_index*.\n"),
18251  AUTHORS("Patrick Eriksson"),
18252  OUT("surface_complex_refr_index"),
18253  GOUT(),
18254  GOUT_TYPE(),
18255  GOUT_DESC(),
18256  IN("atmosphere_dim", "lat_grid", "lat_true", "lon_true", "rtp_pos"),
18257  GIN("complex_refr_index_field"),
18258  GIN_TYPE("GriddedField5"),
18259  GIN_DEFAULT(NODEF),
18260  GIN_DESC("A field of complex refractive index.")));
18261 
18262  md_data_raw.push_back(create_mdrecord(
18263  NAME("surface_reflectivityFromGriddedField6"),
18264  DESCRIPTION(
18265  "Extracts surface reflectivities from a field of such data.\n"
18266  "\n"
18267  "This method allows to specify a field of surface reflectivity for\n"
18268  "automatic interpolation to points of interest. The position and\n"
18269  "direction for which the reflectivity shall be extracted are given\n"
18270  "by *rtp_pos* and *rtp_los*. The reflectivity field is expected to\n"
18271  "be stored as:\n"
18272  " GriddedField6:\n"
18273  " Vector \"Frequency\" [N_f]\n"
18274  " Vector \"Stokes element\" [N_s1]\n"
18275  " Vector \"Stokes_element\" [N_s2]\n"
18276  " Vector \"Incidence angle\" [N_ia]\n"
18277  " Vector \"Latitude\" [N_lat]\n"
18278  " Vector \"Longitude\" [N_lon]\n"
18279  " Tensor6 data[N_f][N_s1][N_s2][N_ia][N_lat][N_lon]\n"
18280  "\n"
18281  "Grids for incidence angle, latitude and longitude must have a\n"
18282  "length of >= 2 (ie. no automatic expansion). If the frequency grid\n"
18283  "has length 1, this is taken as that the reflectivity is constant,\n"
18284  "following the definition of *surface_scalar_reflectivity*.\n"
18285  "The data can cover higher Stokes dimensionalities than set by\n"
18286  "*stokes_dim*. Data for non-used Stokes elements are just cropped.\n"
18287  "The order between the two Stokes dimensions is the same as in\n"
18288  "*surface_reflectivity* and surface_rmatrix*.\n"
18289  "\n"
18290  "The interpolation is done in steps:\n"
18291  " 1: Linear interpolation for lat and lon (std. extrapolation).\n"
18292  " 2: Interpolation in incidence angle (std. extrapolation).\n"
18293  " If the grid has a length of >= 4, cubic interpolation is\n"
18294  " applied. Otherwise linear interpolation.\n"
18295  " 3. Linear interpolation in frequency (if input data have more\n"
18296  " than one frequency).\n"),
18297  AUTHORS("Patrick Eriksson"),
18298  OUT("surface_reflectivity"),
18299  GOUT(),
18300  GOUT_TYPE(),
18301  GOUT_DESC(),
18302  IN("stokes_dim",
18303  "f_grid",
18304  "atmosphere_dim",
18305  "lat_grid",
18306  "lat_true",
18307  "lon_true",
18308  "rtp_pos",
18309  "rtp_los"),
18310  GIN("r_field"),
18311  GIN_TYPE("GriddedField6"),
18312  GIN_DEFAULT(NODEF),
18313  GIN_DESC("A field of surface reflectivities")));
18314 
18315  md_data_raw.push_back(create_mdrecord(
18316  NAME("surface_rtpropCallAgendaX"),
18317  DESCRIPTION(
18318  "Switch between the elements of *surface_rtprop_agenda_array*.\n"
18319  "\n"
18320  "This method simply calls the agenda matching *surface_type* and\n"
18321  "returns the results. That is, the agenda in *surface_rtprop_agenda_array*\n"
18322  "with index *surface_type* (0-based) is called.\n"),
18323  AUTHORS("Patrick Eriksson"),
18324  OUT("surface_skin_t",
18325  "surface_los",
18326  "surface_rmatrix",
18327  "surface_emission"),
18328  GOUT(),
18329  GOUT_TYPE(),
18330  GOUT_DESC(),
18331  IN("f_grid",
18332  "rtp_pos",
18333  "rtp_los",
18334  "surface_rtprop_agenda_array",
18335  "surface_type",
18336  "surface_type_aux"),
18337  GIN(),
18338  GIN_TYPE(),
18339  GIN_DEFAULT(),
18340  GIN_DESC()));
18341 
18342  md_data_raw.push_back(create_mdrecord(
18343  NAME("surface_scalar_reflectivityFromGriddedField4"),
18344  DESCRIPTION(
18345  "Extracts scalar surface reflectivities from a field of such data.\n"
18346  "\n"
18347  "This method allows to specify a field of surface reflectivity for\n"
18348  "automatic interpolation to points of interest. The position and\n"
18349  "direction for which the reflectivity shall be extracted are given\n"
18350  "by *rtp_pos* and *rtp_los*. The reflectivity field is expected to\n"
18351  "be stored as:\n"
18352  " GriddedField4:\n"
18353  " Vector \"Frequency\" [N_f]\n"
18354  " Vector \"Incidence angle\" [N_ia]\n"
18355  " Vector \"Latitude\" [N_lat]\n"
18356  " Vector \"Longitude\" [N_lon]\n"
18357  " Tensor4 data[N_f][N_ia][N_lat][N_lon]\n"
18358  "\n"
18359  "Grids for incidence angle, latitude and longitude must have a\n"
18360  "length of >= 2 (ie. no automatic expansion). If the frequency grid\n"
18361  "has length 1, this is taken as the reflectivity is constant,\n"
18362  "following the definition of *surface_scalar_reflectivity*.\n"
18363  "\n"
18364  "The interpolation is done in steps:\n"
18365  " 1: Linear interpolation for lat and lon (std. extrapolation).\n"
18366  " 2: Interpolation in incidence angle (std. extrapolation).\n"
18367  " If the grid has a length of >= 4, cubic interpolation is\n"
18368  " applied. Otherwise linear interpolation.\n"
18369  " 3. Linear interpolation if frequency (if input data have more\n"
18370  " than one frequency).\n"),
18371  AUTHORS("Patrick Eriksson"),
18372  OUT("surface_scalar_reflectivity"),
18373  GOUT(),
18374  GOUT_TYPE(),
18375  GOUT_DESC(),
18376  IN("stokes_dim",
18377  "f_grid",
18378  "atmosphere_dim",
18379  "lat_grid",
18380  "lat_true",
18381  "lon_true",
18382  "rtp_pos",
18383  "rtp_los"),
18384  GIN("r_field"),
18385  GIN_TYPE("GriddedField4"),
18386  GIN_DEFAULT(NODEF),
18387  GIN_DESC("A field of scalar surface reflectivities")));
18388 
18389  /*
18390  md_data_raw.push_back
18391  ( create_mdrecord
18392  ( NAME( "surface_reflectivityFromSurface_rmatrix" ),
18393  DESCRIPTION
18394  (
18395  "As *surface_scalar_reflectivityFromSurface_rmatrix*, but for (vectorRT)"
18396  "*surface_reflectivity*.\n"
18397  "\n"
18398  "For each frequency f and stokes parameter combi st_in and st_out,"
18399  "*surface_reflectivity* is set to the sum of"
18400  "surface_rmatrix(joker,f,st_in,st_out).\n"
18401  ),
18402  AUTHORS( "Jana Mendrok" ),
18403  OUT( "surface_reflectivity" ),
18404  GOUT(),
18405  GOUT_TYPE(),
18406  GOUT_DESC(),
18407  IN( "surface_rmatrix" ),
18408  GIN(),
18409  GIN_TYPE(),
18410  GIN_DEFAULT(),
18411  GIN_DESC()
18412  ));
18413 */
18414 
18415  md_data_raw.push_back(create_mdrecord(
18416  NAME("surface_scalar_reflectivityFromSurface_rmatrix"),
18417  DESCRIPTION(
18418  "Sets *surface_scalar_reflectivity* based on *surface_rmatrix*.\n"
18419  "\n"
18420  "For each frequency f, *surface_scalar_reflectivity* is set to\n"
18421  "the sum of surface_rmatrix(joker,f,0,0).\n"),
18422  AUTHORS("Patrick Eriksson"),
18423  OUT("surface_scalar_reflectivity"),
18424  GOUT(),
18425  GOUT_TYPE(),
18426  GOUT_DESC(),
18427  IN("surface_rmatrix"),
18428  GIN(),
18429  GIN_TYPE(),
18430  GIN_DEFAULT(),
18431  GIN_DESC()));
18432 
18433  md_data_raw.push_back(create_mdrecord(
18434  NAME("surface_typeInterpTypeMask"),
18435  DESCRIPTION(
18436  "Closest neighbour interpolation of surface type mask.\n"
18437  "\n"
18438  "The method determines the surface type at the position of concern\n"
18439  "(*rtp_pos*) from the provided type mask (*surface_type_mask*).\n"
18440  "The closest point in the mask is selected. The surface type\n"
18441  "is set to the integer part of the value at the found point, while\n"
18442  "*surface_type_aux* is set to the reminder. For example, if the\n"
18443  "mask value at closest point is 2.23, *surface_type* is set to 2\n"
18444  "*surface_type_aux* becomes 0.23.\n"
18445  "\n"
18446  "The altitude in *rtp_pos* is ignored.\n"),
18447  AUTHORS("Patrick Eriksson"),
18448  OUT("surface_type", "surface_type_aux"),
18449  GOUT(),
18450  GOUT_TYPE(),
18451  GOUT_DESC(),
18452  IN("atmosphere_dim",
18453  "lat_grid",
18454  "lat_true",
18455  "lon_true",
18456  "rtp_pos",
18457  "surface_type_mask"),
18458  GIN(),
18459  GIN_TYPE(),
18460  GIN_DEFAULT(),
18461  GIN_DESC()));
18462 
18463  md_data_raw.push_back(create_mdrecord(
18464  NAME("SurfaceDummy"),
18465  DESCRIPTION(
18466  "Dummy method for *iy_surface_agenda*.\n"
18467  "\n"
18468  "If you don't make use of *surface_props_data* and associated\n"
18469  "variables, include this method *iy_surface_agenda*. The method\n"
18470  "just checks that the variables of concern are set to be empty,\n"
18471  "and you don't need to include calls of *Ignore* and *Touch* in\n"
18472  "the agenda.\n"),
18473  AUTHORS("Patrick Eriksson"),
18474  OUT("dsurface_rmatrix_dx", "dsurface_emission_dx"),
18475  GOUT(),
18476  GOUT_TYPE(),
18477  GOUT_DESC(),
18478  IN("dsurface_rmatrix_dx",
18479  "dsurface_emission_dx",
18480  "atmosphere_dim",
18481  "lat_grid",
18482  "lon_grid",
18483  "surface_props_data",
18484  "surface_props_names",
18485  "dsurface_names",
18486  "jacobian_do"),
18487  GIN(),
18488  GIN_TYPE(),
18489  GIN_DEFAULT(),
18490  GIN_DESC()));
18491 
18492  md_data_raw.push_back(create_mdrecord(
18493  NAME("SurfaceFastem"),
18494  DESCRIPTION(
18495  "FASTEM sea surface microwave emissivity parametrization.\n"
18496  "\n"
18497  "The variable *surface_props_data* must contain these data:\n"
18498  " \"Water skin temperature\"\n"
18499  " \"Wind speed\"\n"
18500  " \"Wind direction\"\n"
18501  " \"Salinity\"\n"
18502  "\n"
18503  "For some details and comments see *FastemStandAlone* and *surfaceFastem*.\n"),
18504  AUTHORS("Patrick Eriksson"),
18505  OUT("surface_los",
18506  "surface_rmatrix",
18507  "dsurface_rmatrix_dx",
18508  "surface_emission",
18509  "dsurface_emission_dx"),
18510  GOUT(),
18511  GOUT_TYPE(),
18512  GOUT_DESC(),
18513  IN("dsurface_rmatrix_dx",
18514  "dsurface_emission_dx",
18515  "stokes_dim",
18516  "atmosphere_dim",
18517  "lat_grid",
18518  "lon_grid",
18519  "f_grid",
18520  "rtp_pos",
18521  "rtp_los",
18522  "surface_props_data",
18523  "surface_props_names",
18524  "dsurface_names",
18525  "jacobian_do"),
18526  GIN("transmittance", "fastem_version"),
18527  GIN_TYPE("Vector", "Index"),
18528  GIN_DEFAULT(NODEF, "6"),
18529  GIN_DESC("Transmittance along path of downwelling radiation. A vector "
18530  "with the same length as *f_grid*.",
18531  "The version of FASTEM to use.")));
18532 
18533  md_data_raw.push_back(create_mdrecord(
18534  NAME("SurfaceTessem"),
18535  DESCRIPTION(
18536  "TESSEM sea surface microwave emissivity parametrization.\n"
18537  "\n"
18538  "The variable *surface_props_data* must contain these data:\n"
18539  " \"Water skin temperature\"\n"
18540  " \"Wind speed\"\n"
18541  " \"Salinity\"\n"
18542  "\n"
18543  "This method computes surface emissivity and reflectivity matrices for\n"
18544  "ocean surfaces using the TESSEM emissivity model: Prigent, C., et al.\n"
18545  "Sea-surface emissivity parametrization from microwaves to millimetre\n"
18546  "waves, QJRMS, 2017, 143.702: 596-605.\n"
18547  "\n"
18548  "The validity range of the parametrization of is 10 to 700 GHz, but for\n"
18549  "some extra flexibility frequencies between 5 and 900 GHz are accepted.\n"
18550  "The accepted temperaute range for water skin temperature is\n"
18551  "[260.0 K, 373.0 K]. Salinity shall be in the range [0,1]. That is, a\n"
18552  "salinity of 3% is given as 0.03.\n"
18553  "\n"
18554  "The model itself is represented by the neural networks in\n"
18555  "*tessem_neth* and *tessem_netv*.\n"),
18556  AUTHORS("Simon Pfreundschuh", "Patrick Eriksson"),
18557  OUT("surface_los",
18558  "surface_rmatrix",
18559  "dsurface_rmatrix_dx",
18560  "surface_emission",
18561  "dsurface_emission_dx"),
18562  GOUT(),
18563  GOUT_TYPE(),
18564  GOUT_DESC(),
18565  IN("dsurface_rmatrix_dx",
18566  "dsurface_emission_dx",
18567  "stokes_dim",
18568  "atmosphere_dim",
18569  "lat_grid",
18570  "lon_grid",
18571  "f_grid",
18572  "rtp_pos",
18573  "rtp_los",
18574  "tessem_neth",
18575  "tessem_netv",
18576  "surface_props_data",
18577  "surface_props_names",
18578  "dsurface_names",
18579  "jacobian_do"),
18580  GIN(),
18581  GIN_TYPE(),
18582  GIN_DEFAULT(),
18583  GIN_DESC()));
18584 
18585  md_data_raw.push_back(create_mdrecord(
18586  NAME("TangentPointExtract"),
18587  DESCRIPTION(
18588  "Finds the tangent point of a propagation path.\n"
18589  "\n"
18590  "The tangent point is here defined as the point with the lowest\n"
18591  "altitude (which differes from the definition used in the code\n"
18592  "where it is the point with the lowest radius, or equally the point\n"
18593  "with a zenith angle of 90 deg.)\n"
18594  "\n"
18595  "The tangent point is returned as a vector, with columns matching\n"
18596  "e.g. *rte_pos*. If the propagation path has no tangent point, the\n"
18597  "vector is set to NaN.\n"),
18598  AUTHORS("Patrick Eriksson"),
18599  OUT(),
18600  GOUT("tan_pos"),
18601  GOUT_TYPE("Vector"),
18602  GOUT_DESC("The position vector of the tangent point."),
18603  IN("ppath"),
18604  GIN(),
18605  GIN_TYPE(),
18606  GIN_DEFAULT(),
18607  GIN_DESC()));
18608 
18609  md_data_raw.push_back(create_mdrecord(
18610  NAME("TangentPointPrint"),
18611  DESCRIPTION(
18612  "Prints information about the tangent point of a propagation path.\n"
18613  "\n"
18614  "The tangent point is here defined as the point with the lowest\n"
18615  "altitude (which differes from the definition used in the code\n"
18616  "where it is the point with the lowest radius, or equally the point\n"
18617  "with a zenith angle of 90 deg.)\n"),
18618  AUTHORS("Patrick Eriksson"),
18619  OUT(),
18620  GOUT(),
18621  GOUT_TYPE(),
18622  GOUT_DESC(),
18623  IN("ppath"),
18624  GIN("level"),
18625  GIN_TYPE("Index"),
18626  GIN_DEFAULT("1"),
18627  GIN_DESC("Output level to use.")));
18628 
18629  md_data_raw.push_back(create_mdrecord(
18630  NAME("telsemStandalone"),
18631  DESCRIPTION(
18632  "Stand-alone evaluation of the Telsem model.\n"
18633  "\n"
18634  "This evaluates the Telsem land surface emissivity\n"
18635  "model using the data from the provided atlas.\n"
18636  "\n"
18637  "Since TELSEM atlases do not contain data for all locations\n"
18638  "this function allows for nearest neighbor interpolation, which\n"
18639  "can be enabled by setting the *d_max* GIN to a positive value.\n"
18640  "\n"
18641  "This WSM throws a runtime error if the queried location is not\n"
18642  "contained in the atlas or the distance of the neighboring cell\n"
18643  "exceeds the given *d_max* value.\n"),
18644  AUTHORS("Simon Pfreundschuh"),
18645  OUT(),
18646  GOUT("emissivities"),
18647  GOUT_TYPE("Matrix"),
18648  GOUT_DESC("The computed h and v emissivites"),
18649  IN(),
18650  GIN("lat", "lon", "theta", "f", "ta", "d_max"),
18651  GIN_TYPE(
18652  "Numeric", "Numeric", "Numeric", "Vector", "TelsemAtlas", "Numeric"),
18653  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "-1"),
18654  GIN_DESC("The latitude for which to compute the emissivities.",
18655  "The latitude for which to compute the emissivities.",
18656  "The incidence angle.",
18657  "The frequencies for which to compute the emissivities.",
18658  "The Telsem atlas to use.",
18659  "The maximum allowed distance for nearest neighbor"
18660  " interpolation in meters.")));
18661 
18662  md_data_raw.push_back(create_mdrecord(
18663  NAME("telsemAtlasLookup"),
18664  DESCRIPTION(
18665  "Lookup SSMI emissivities from Telsem Atlas.\n"
18666  "\n"
18667  "This returns the emissivities (indices [0,..,6])\n"
18668  " for the SSMI channels that are contained in\n"
18669  "the Telsem atlas.\n"
18670  "\n"
18671  "If given latitude and longitude are not in the atlas an empty\n"
18672  "vector is returned.\n"),
18673  AUTHORS("Simon Pfreundschuh"),
18674  OUT(),
18675  GOUT("emissivities"),
18676  GOUT_TYPE("Vector"),
18677  GOUT_DESC("The SSMI emissivities from the atlas"),
18678  IN(),
18679  GIN("lat", "lon", "atlas"),
18680  GIN_TYPE("Numeric", "Numeric", "TelsemAtlas"),
18682  GIN_DESC("The latitude for which to compute the emissivities.",
18683  "The latitude for which to compute the emissivities.",
18684  "The Telsem atlas to use.")));
18685 
18686  md_data_raw.push_back(create_mdrecord(
18687  NAME("telsemSurfaceTypeLandSea"),
18688  DESCRIPTION(
18689  "TELSEM based land sea mask.\n"
18690  "\n"
18691  "This method determines whether the position in *rtp_pos* is\n"
18692  "of type ocean or land depending on whether a corresponding\n"
18693  "cell is contained in the provided TELSEM atlas.\n"
18694  "In combination with the WSM *surface_rtpropCallAgendaX* this\n"
18695  "can be used to used different methods to compute surface radiative\n"
18696  "properties.\n"),
18697  AUTHORS("Simon Pfreundschuh"),
18698  OUT("surface_type"),
18699  GOUT(),
18700  GOUT_TYPE(),
18701  GOUT_DESC(),
18702  IN("atmosphere_dim", "lat_grid", "lat_true", "lon_true", "rtp_pos"),
18703  GIN("atlas"),
18704  GIN_TYPE("TelsemAtlas"),
18705  GIN_DEFAULT(NODEF),
18706  GIN_DESC("The telsem atlas from which to lookup the surface type.")));
18707 
18708  md_data_raw.push_back(create_mdrecord(
18709  NAME("telsem_atlasReadAscii"),
18710  DESCRIPTION(
18711  "Reads single TELSEM atlas.\n"
18712  "\n"
18713  "'directory' needs to contain the original 12 Telsem atlas files\n"
18714  "and the correlations file. This WSM reads the atlas for the specified\n"
18715  "month and stores the result in the provided output atlas.\n"),
18716  AUTHORS("Simon Pfreundschuh"),
18717  OUT(),
18718  GOUT("atlas"),
18719  GOUT_TYPE("TelsemAtlas"),
18720  GOUT_DESC("The atlas into which to store the loaded atlas."),
18721  IN(),
18722  GIN("directory", "month", "filename_pattern"),
18723  GIN_TYPE("String", "Index", "String"),
18724  GIN_DEFAULT(NODEF, NODEF, "ssmi_mean_emis_climato_@MM@_cov_interpol_M2"),
18725  GIN_DESC("Directory with TELSEM 2 SSMI atlas files.",
18726  "The month for which the atlas should be read.",
18727  "Filename pattern (@MM@ gets replaced by month number)")));
18728 
18729  md_data_raw.push_back(create_mdrecord(
18730  NAME("telsem_atlasesReadAscii"),
18731  DESCRIPTION(
18732  "Reads TELSEM atlas files.\n"
18733  "\n"
18734  "'directory' needs to contain the original 12 Telsem atlas files\n"
18735  "and the correlations file.\n"
18736  "The whole data is combined into the WSV *telsem_atlases*\n"),
18737  AUTHORS("Oliver Lemke"),
18738  OUT("telsem_atlases"),
18739  GOUT(),
18740  GOUT_TYPE(),
18741  GOUT_DESC(),
18742  IN(),
18743  GIN("directory", "filename_pattern"),
18744  GIN_TYPE("String", "String"),
18745  GIN_DEFAULT(NODEF, "ssmi_mean_emis_climato_@MM@_cov_interpol_M2"),
18746  GIN_DESC("Directory with TELSEM 2 SSMI atlas files.",
18747  "Filename pattern (@MM@ gets replaced by month number)")));
18748 
18749  md_data_raw.push_back(create_mdrecord(
18750  NAME("Tensor3AddScalar"),
18751  DESCRIPTION("Adds a scalar value to all elements of a tensor3.\n"
18752  "\n"
18753  "The result can either be stored in the same or another\n"
18754  "variable.\n"),
18755  AUTHORS("Patrick Eriksson"),
18756  OUT(),
18757  GOUT("out"),
18758  GOUT_TYPE("Tensor3"),
18759  GOUT_DESC("Output tensor."),
18760  IN(),
18761  GIN("in", "value"),
18762  GIN_TYPE("Tensor3", "Numeric"),
18764  GIN_DESC("Input tensor.", "The value to be added to the tensor.")));
18765 
18766  md_data_raw.push_back(create_mdrecord(
18767  NAME("Tensor3ExtractFromTensor4"),
18768  DESCRIPTION(
18769  "Extracts a Tensor3 from a Tensor4.\n"
18770  "\n"
18771  "Copies book, page, row or column with given Index from input Tensor4\n"
18772  "variable to output Tensor3.\n"
18773  "Higher order equivalent of *VectorExtractFromMatrix*.\n"),
18774  AUTHORS("Oliver Lemke"),
18775  OUT(),
18776  GOUT("out"),
18777  GOUT_TYPE("Tensor3"),
18778  GOUT_DESC("Extracted tensor."),
18779  IN(),
18780  GIN("in", "i", "direction"),
18781  GIN_TYPE("Tensor4", "Index", "String"),
18783  GIN_DESC("Input Tensor4.",
18784  "Index of book, page, row or column to extract.",
18785  "Direction. \"book\" or \"page\" or \"row\" or \"column\".")));
18786 
18787  md_data_raw.push_back(create_mdrecord(
18788  NAME("Tensor3Scale"),
18789  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18790  "\n"
18791  "The result can either be stored in the same or another\n"
18792  "variable.\n"),
18793  AUTHORS("Mattias Ekstrom"),
18794  OUT(),
18795  GOUT("out"),
18796  GOUT_TYPE("Tensor3"),
18797  GOUT_DESC("Output tensor."),
18798  IN(),
18799  GIN("in", "value"),
18800  GIN_TYPE("Tensor3", "Numeric"),
18802  GIN_DESC("Input tensor.",
18803  "The value to be multiplied with the tensor.")));
18804 
18805  md_data_raw.push_back(create_mdrecord(
18806  NAME("Tensor3SetConstant"),
18807  DESCRIPTION(
18808  "Creates a tensor and sets all elements to the specified value.\n"
18809  "\n"
18810  "The size is determined by *ncols*, *nrows* etc.\n"),
18811  AUTHORS("Claudia Emde"),
18812  OUT(),
18813  GOUT("out"),
18814  GOUT_TYPE("Tensor3"),
18815  GOUT_DESC("Variable to initialize."),
18816  IN("npages", "nrows", "ncols"),
18817  GIN("value"),
18818  GIN_TYPE("Numeric"),
18819  GIN_DEFAULT(NODEF),
18820  GIN_DESC("Tensor value.")));
18821 
18822  md_data_raw.push_back(create_mdrecord(
18823  NAME("Tensor4AddScalar"),
18824  DESCRIPTION("Adds a scalar value to all elements of a tensor4.\n"
18825  "\n"
18826  "The result can either be stored in the same or another\n"
18827  "variable.\n"),
18828  AUTHORS("Patrick Eriksson"),
18829  OUT(),
18830  GOUT("out"),
18831  GOUT_TYPE("Tensor4"),
18832  GOUT_DESC("Output tensor."),
18833  IN(),
18834  GIN("in", "value"),
18835  GIN_TYPE("Tensor4", "Numeric"),
18837  GIN_DESC("Input tensor.", "The value to be added to the tensor.")));
18838  /*
18839  md_data_raw.push_back
18840  ( create_mdrecord
18841  ( NAME( "Tensor4Clip" ),
18842  DESCRIPTION
18843  (
18844  "Clipping of e.g. *vmr_field* and *particle_bulkprop_field*.\n"
18845  "\n"
18846  "The method allows you to apply hard limits the values of a\n"
18847  "Tensor4. The quantati (book dimension) is specified by *iq*.\n"
18848  "*All values of the quantity below *limit_low*, are simply\n"
18849  "set to *limit_low*. And the same is performed with respect to\n"
18850  "*limit_high*. That is, the data in x for the quantity are\n"
18851  "forced to be inside the range [limit_low,limit_high].\n"
18852  "\n"
18853  "Setting iq=-1, is a shortcut for applying the limits on all\n"
18854  "quantities.\n"
18855  ),
18856  AUTHORS( "Patrick Eriksson" ),
18857  OUT(),
18858  GOUT( "x" ),
18859  GOUT_TYPE( "Tensor4" ),
18860  GOUT_DESC( "A Tensor4 holding data, with quantity as book-dimension,"
18861  "such as *vmr_field*." ),
18862  IN( ),
18863  GIN( "x", "iq", "limit_low", "limit_high" ),
18864  GIN_TYPE( "Tensor4", "Index", "Numeric", "Numeric" ),
18865  GIN_DEFAULT( NODEF, NODEF, "-Inf", "Inf" ),
18866  GIN_DESC( "See GOUT for a defintion.",
18867  "Quantity index (zero-based)",
18868  "Lower limit for clipping.",
18869  "Upper limit for clipping." )
18870  ));
18871  */
18872 
18873  md_data_raw.push_back(create_mdrecord(
18874  NAME("Tensor4Scale"),
18875  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18876  "\n"
18877  "The result can either be stored in the same or another\n"
18878  "variable.\n"),
18879  AUTHORS("Mattias Ekstrom"),
18880  OUT(),
18881  GOUT("out"),
18882  GOUT_TYPE("Tensor4"),
18883  GOUT_DESC("Output tensor."),
18884  IN(),
18885  GIN("in", "value"),
18886  GIN_TYPE("Tensor4", "Numeric"),
18888  GIN_DESC("Input tensor.",
18889  "The value to be multiplied with the tensor.")));
18890 
18891  md_data_raw.push_back(create_mdrecord(
18892  NAME("Tensor4SetConstant"),
18893  DESCRIPTION(
18894  "Creates a tensor and sets all elements to the specified value.\n"
18895  "\n"
18896  "The size is determined by *ncols*, *nrows* etc.\n"),
18897  AUTHORS("Claudia Emde"),
18898  OUT(),
18899  GOUT("out"),
18900  GOUT_TYPE("Tensor4"),
18901  GOUT_DESC("Variable to initialize."),
18902  IN("nbooks", "npages", "nrows", "ncols"),
18903  GIN("value"),
18904  GIN_TYPE("Numeric"),
18905  GIN_DEFAULT(NODEF),
18906  GIN_DESC("Tensor value.")));
18907 
18908  md_data_raw.push_back(create_mdrecord(
18909  NAME("Tensor5Scale"),
18910  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18911  "\n"
18912  "The result can either be stored in the same or another\n"
18913  "variable.\n"),
18914  AUTHORS("Mattias Ekstrom"),
18915  OUT(),
18916  GOUT("out"),
18917  GOUT_TYPE("Tensor5"),
18918  GOUT_DESC("Output tensor."),
18919  IN(),
18920  GIN("in", "value"),
18921  GIN_TYPE("Tensor5", "Numeric"),
18923  GIN_DESC("Input tensor.",
18924  "The value to be multiplied with the tensor.")));
18925 
18926  md_data_raw.push_back(create_mdrecord(
18927  NAME("Tensor5SetConstant"),
18928  DESCRIPTION(
18929  "Creates a tensor and sets all elements to the specified value.\n"
18930  "\n"
18931  "The size is determined by *ncols*, *nrows* etc.\n"),
18932  AUTHORS("Claudia Emde"),
18933  OUT(),
18934  GOUT("out"),
18935  GOUT_TYPE("Tensor5"),
18936  GOUT_DESC("Variable to initialize."),
18937  IN("nshelves", "nbooks", "npages", "nrows", "ncols"),
18938  GIN("value"),
18939  GIN_TYPE("Numeric"),
18940  GIN_DEFAULT(NODEF),
18941  GIN_DESC("Tensor value.")));
18942 
18943  md_data_raw.push_back(create_mdrecord(
18944  NAME("Tensor6Scale"),
18945  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18946  "\n"
18947  "The result can either be stored in the same or another\n"
18948  "variable.\n"),
18949  AUTHORS("Mattias Ekstrom"),
18950  OUT(),
18951  GOUT("out"),
18952  GOUT_TYPE("Tensor6"),
18953  GOUT_DESC("Output tensor."),
18954  IN(),
18955  GIN("in", "value"),
18956  GIN_TYPE("Tensor6", "Numeric"),
18958  GIN_DESC("Input tensor.",
18959  "The value to be multiplied with the tensor.")));
18960 
18961  md_data_raw.push_back(create_mdrecord(
18962  NAME("Tensor6SetConstant"),
18963  DESCRIPTION(
18964  "Creates a tensor and sets all elements to the specified value.\n"
18965  "\n"
18966  "The size is determined by *ncols*, *nrows* etc.\n"),
18967  AUTHORS("Claudia Emde"),
18968  OUT(),
18969  GOUT("out"),
18970  GOUT_TYPE("Tensor6"),
18971  GOUT_DESC("Variable to initialize."),
18972  IN("nvitrines", "nshelves", "nbooks", "npages", "nrows", "ncols"),
18973  GIN("value"),
18974  GIN_TYPE("Numeric"),
18975  GIN_DEFAULT(NODEF),
18976  GIN_DESC("Tensor value.")));
18977 
18978  md_data_raw.push_back(create_mdrecord(
18979  NAME("Tensor7Scale"),
18980  DESCRIPTION("Scales all elements of a tensor with the specified value.\n"
18981  "\n"
18982  "The result can either be stored in the same or another\n"
18983  "variable.\n"),
18984  AUTHORS("Mattias Ekstrom"),
18985  OUT(),
18986  GOUT("out"),
18987  GOUT_TYPE("Tensor7"),
18988  GOUT_DESC("Output tensor."),
18989  IN(),
18990  GIN("in", "value"),
18991  GIN_TYPE("Tensor7", "Numeric"),
18993  GIN_DESC("Input tensor.",
18994  "The value to be multiplied with the tensor.")));
18995 
18996  md_data_raw.push_back(create_mdrecord(
18997  NAME("Tensor7SetConstant"),
18998  DESCRIPTION(
18999  "Creates a tensor and sets all elements to the specified value.\n"
19000  "\n"
19001  "The size is determined by *ncols*, *nrows* etc.\n"),
19002  AUTHORS("Claudia Emde"),
19003  OUT(),
19004  GOUT("out"),
19005  GOUT_TYPE("Tensor7"),
19006  GOUT_DESC("Variable to initialize."),
19007  IN("nlibraries",
19008  "nvitrines",
19009  "nshelves",
19010  "nbooks",
19011  "npages",
19012  "nrows",
19013  "ncols"),
19014  GIN("value"),
19015  GIN_TYPE("Numeric"),
19016  GIN_DEFAULT(NODEF),
19017  GIN_DESC("Tensor value.")));
19018 
19019  md_data_raw.push_back(create_mdrecord(
19020  NAME("TestArrayOfAgenda"),
19021  DESCRIPTION(
19022  "A method that is used for the TestArrayOfAgenda test case.\n"),
19023  AUTHORS("Oliver Lemke"),
19024  OUT(),
19025  GOUT(),
19026  GOUT_TYPE(),
19027  GOUT_DESC(),
19028  IN("test_agenda_array"),
19029  GIN("index"),
19030  GIN_TYPE("Index"),
19031  GIN_DEFAULT("0"),
19032  GIN_DESC("Index of agenda in array to execute.")));
19033 
19034  md_data_raw.push_back(create_mdrecord(
19035  NAME("TessemNNReadAscii"),
19036  DESCRIPTION(
19037  "Reads the initialization data for the TESSEM NeuralNet from an ASCII file.\n"),
19038  AUTHORS("Oliver Lemke"),
19039  OUT(),
19040  GOUT("tessem_nn"),
19041  GOUT_TYPE("TessemNN"),
19042  GOUT_DESC("Tessem NeuralNet configuration."),
19043  IN(),
19044  GIN("filename"),
19045  GIN_TYPE("String"),
19046  GIN_DEFAULT(NODEF),
19047  GIN_DESC(
19048  "NeuralNet parameters file as provided in the TESSEM 2 distribution.")));
19049 
19050  md_data_raw.push_back(create_mdrecord(
19051  NAME("TestTessem"),
19052  DESCRIPTION(
19053  "Example method for TESSEM2.\n"
19054  "\n"
19055  "When using the default neural network parameter files\n"
19056  "from the Tessem 2 distribution, the input Vector should contain\n"
19057  "5 elements:\n"
19058  " - Frequency (10-700) in GHz.\n"
19059  " - Theta (0-90) Incidence angle in degrees.\n"
19060  " - Windspeed (0-25) at 10m (m/s)\n"
19061  " Higher wind speed can be used, but without garantee.\n"
19062  " - Surface skin temperature (270-310) in K.\n"
19063  " - Salinity (0-0.04) in kg/kg\n"),
19064  AUTHORS("Oliver Lemke"),
19065  OUT(),
19066  GOUT("outvalues"),
19067  GOUT_TYPE("Vector"),
19068  GOUT_DESC("Tessem output emissivity."),
19069  IN(),
19070  GIN("net", "invalues"),
19071  GIN_TYPE("TessemNN", "Vector"),
19073  GIN_DESC("Tessem NeuralNet parameters.", "Input data.")));
19074 
19075  md_data_raw.push_back(create_mdrecord(
19076  NAME("Test"),
19077  DESCRIPTION(
19078  "A dummy method that can be used for test purposes.\n"
19079  "\n"
19080  "This method can be used by ARTS developers to quickly test stuff.\n"
19081  "The implementation is in file m_general.cc. This just saves you the\n"
19082  "trouble of adding a dummy method everytime you want to try\n"
19083  "something out quickly.\n"),
19084  AUTHORS("Patrick Eriksson"),
19085  OUT(),
19086  GOUT(),
19087  GOUT_TYPE(),
19088  GOUT_DESC(),
19089  IN(),
19090  GIN(),
19091  GIN_TYPE(),
19092  GIN_DEFAULT(),
19093  GIN_DESC()));
19094 
19095  md_data_raw.push_back(create_mdrecord(
19096  NAME("time_gridOffset"),
19097  DESCRIPTION("Offsets a time grid by some seconds.\n"),
19098  AUTHORS("Richard Larsson"),
19099  OUT("time_grid"),
19100  GOUT(),
19101  GOUT_TYPE(),
19102  GOUT_DESC(),
19103  IN("time_grid"),
19104  GIN("dt"),
19105  GIN_TYPE("Numeric"),
19106  GIN_DEFAULT(NODEF),
19107  GIN_DESC("Time in seconds to add")));
19108 
19109  md_data_raw.push_back(
19110  create_mdrecord(NAME("timerStart"),
19111  DESCRIPTION("Initializes the CPU timer."
19112  "\n"
19113  "Use *timerStop* to stop the timer.\n"
19114  "\n"
19115  "Usage example:\n"
19116  " timerStart\n"
19117  " ReadXML(f_grid,\"frequencies.xml\")\n"
19118  " timerStop\n"
19119  " Print(timer)\n"),
19120  AUTHORS("Oliver Lemke"),
19121  OUT("timer"),
19122  GOUT(),
19123  GOUT_TYPE(),
19124  GOUT_DESC(),
19125  IN(),
19126  GIN(),
19127  GIN_TYPE(),
19128  GIN_DEFAULT(),
19129  GIN_DESC()));
19130 
19131  md_data_raw.push_back(
19132  create_mdrecord(NAME("timerStop"),
19133  DESCRIPTION("Stops the CPU timer."
19134  "\n"
19135  "See *timerStart* for example usage.\n"),
19136  AUTHORS("Oliver Lemke"),
19137  OUT("timer"),
19138  GOUT(),
19139  GOUT_TYPE(),
19140  GOUT_DESC(),
19141  IN("timer"),
19142  GIN(),
19143  GIN_TYPE(),
19144  GIN_DEFAULT(),
19145  GIN_DESC()));
19146 
19147  md_data_raw.push_back(create_mdrecord(
19148  NAME("time_stampsSort"),
19149  DESCRIPTION("Sort *in* by *time_stamps* into *out*.\n"),
19150  AUTHORS("Richard Larsson"),
19151  OUT(),
19152  GOUT("out"),
19153  GOUT_TYPE("ArrayOfTime,ArrayOfVector"),
19154  GOUT_DESC("Array sorted by time"),
19155  IN("time_stamps"),
19156  GIN("in"),
19157  GIN_TYPE("ArrayOfTime,ArrayOfVector"),
19158  GIN_DEFAULT(NODEF),
19159  GIN_DESC("Array to sort of same size as *time_stamps*")));
19160 
19161  md_data_raw.push_back(create_mdrecord(
19162  NAME("TMatrixTest"),
19163  DESCRIPTION(
19164  "T-Matrix validation test.\n"
19165  "\n"
19166  "Executes the standard test included with the T-Matrix Fortran code.\n"
19167  "Should give the same as running the tmatrix_lp executable in\n"
19168  "3rdparty/tmatrix/.\n"),
19169  AUTHORS("Oliver Lemke"),
19170  OUT(),
19171  GOUT(),
19172  GOUT_TYPE(),
19173  GOUT_DESC(),
19174  IN(),
19175  GIN(),
19176  GIN_TYPE(),
19177  GIN_DEFAULT(),
19178  GIN_DESC()));
19179 
19180  md_data_raw.push_back(create_mdrecord(
19181  NAME("Touch"),
19182  DESCRIPTION(
19183  "As *Ignore* but for agenda output.\n"
19184  "\n"
19185  "This method is handy for use in agendas in order to suppress\n"
19186  "warnings about not-produced output workspace variables.\n"
19187  "\n"
19188  "What it does, in case the variable is initialized already, is:\n"
19189  "Nothing!\n"
19190  "In case the variable is not yet initialized, it is set to NaN.\n"),
19191  AUTHORS("Oliver Lemke"),
19192  OUT(),
19193  GOUT("in"),
19194  GOUT_TYPE("Any"),
19195  GOUT_DESC("Variable to do nothing with."),
19196  IN(),
19197  GIN(),
19198  GIN_TYPE(),
19199  GIN_DEFAULT(),
19200  GIN_DESC(),
19201  SETMETHOD(false),
19202  AGENDAMETHOD(false),
19203  USES_TEMPLATES(true)));
19204 
19205  md_data_raw.push_back(create_mdrecord(
19206  NAME("transmittanceFromIy_aux"),
19207  DESCRIPTION(
19208  "Creates a vector of transmittance values.\n"
19209  "\n"
19210  "The transmittances are set based on optical depths in *iy_aux*. That is,\n"
19211  "one of the quantities in *iy_aux* must be \"Optical depth\".\n"
19212  "\n"
19213  "The created vector has a length matching *f_grid* and can e.g. be used\n"
19214  "as input to some of the FASTEM methods.\n"),
19215  AUTHORS("Patrick Eriksson"),
19216  OUT(),
19217  GOUT("transmittance"),
19218  GOUT_TYPE("Vector"),
19219  GOUT_DESC("Created vector of transmittance values."),
19220  IN("iy_aux_vars", "iy_aux"),
19221  GIN(),
19222  GIN_TYPE(),
19223  GIN_DEFAULT(),
19224  GIN_DESC()));
19225 
19226  md_data_raw.push_back(create_mdrecord(
19227  NAME("VectorAddScalar"),
19228  DESCRIPTION(
19229  "Adds a scalar to all elements of a vector.\n"
19230  "\n"
19231  "The result can either be stored in the same or another vector.\n"),
19232  AUTHORS("Patrick Eriksson"),
19233  OUT(),
19234  GOUT("out"),
19235  GOUT_TYPE("Vector"),
19236  GOUT_DESC("Output vector"),
19237  IN(),
19238  GIN("in", "value"),
19239  GIN_TYPE("Vector", "Numeric"),
19241  GIN_DESC("Input vector.", "The value to be added to the vector.")));
19242 
19243  md_data_raw.push_back(create_mdrecord(
19244  NAME("VectorAddVector"),
19245  DESCRIPTION(
19246  "Element-wise addition of two vectors.\n"
19247  "\n"
19248  "The method calculates c = a + b.\n"
19249  "\n"
19250  "The variable *b* is allowed to have length 1, for any length of\n"
19251  "*a*. This single value in *b* is then added to every element of *a*.\n"
19252  "\n"
19253  "The vectors *a* and *c* can be the same WSV, while *b* can not be\n"
19254  "the same WSV as any of the the other vector.\n"),
19255  AUTHORS("Patrick Eriksson"),
19256  OUT(),
19257  GOUT("c"),
19258  GOUT_TYPE("Vector"),
19259  GOUT_DESC("Output vector"),
19260  IN(),
19261  GIN("a", "b"),
19262  GIN_TYPE("Vector", "Vector"),
19264  GIN_DESC("Input vector.", "Vector to be added.")));
19265 
19266  md_data_raw.push_back(create_mdrecord(
19267  NAME("VectorCrop"),
19268  DESCRIPTION(
19269  "Keeps only values of a vector inside the specified range.\n"
19270  "\n"
19271  "All values outside the range [min_value,max-value] are removed.\n"
19272  "Note the default values, that basically should act as -+Inf.\n"
19273  "\n"
19274  "The result can either be stored in the same or another vector.\n"),
19275  AUTHORS("Patrick Eriksson"),
19276  OUT(),
19277  GOUT("out"),
19278  GOUT_TYPE("Vector"),
19279  GOUT_DESC("Cropped vector"),
19280  IN(),
19281  GIN("in", "min_value", "max_value"),
19282  GIN_TYPE("Vector", "Numeric", "Numeric"),
19283  GIN_DEFAULT(NODEF, "-99e99", "99e99"),
19284  GIN_DESC("Original vector",
19285  "Minimum value to keep",
19286  "Maximum value to keep")));
19287 
19288  md_data_raw.push_back(create_mdrecord(
19289  NAME("VectorExtractFromMatrix"),
19290  DESCRIPTION(
19291  "Extracts a Vector from a Matrix.\n"
19292  "\n"
19293  "Copies row or column with given Index from input Matrix variable\n"
19294  "to create output Vector.\n"),
19295  AUTHORS("Patrick Eriksson, Oliver Lemke, Stefan Buehler"),
19296  OUT(),
19297  GOUT("out"),
19298  GOUT_TYPE("Vector"),
19299  GOUT_DESC("Extracted vector."),
19300  IN(),
19301  GIN("in", "i", "direction"),
19302  GIN_TYPE("Matrix", "Index", "String"),
19304  GIN_DESC("Input matrix.",
19305  "Index of row or column.",
19306  "Direction. \"row\" or \"column\".")));
19307 
19308  md_data_raw.push_back(create_mdrecord(
19309  NAME("VectorFlip"),
19310  DESCRIPTION(
19311  "Flips a vector.\n"
19312  "\n"
19313  "The output is the input vector in reversed order. The result can\n"
19314  "either be stored in the same or another vector.\n"),
19315  AUTHORS("Patrick Eriksson"),
19316  OUT(),
19317  GOUT("out"),
19318  GOUT_TYPE("Vector"),
19319  GOUT_DESC("Output vector."),
19320  IN(),
19321  GIN("in"),
19322  GIN_TYPE("Vector"),
19323  GIN_DEFAULT(NODEF),
19324  GIN_DESC("Input vector.")));
19325 
19326  md_data_raw.push_back(create_mdrecord(
19327  NAME("VectorInsertGridPoints"),
19328  DESCRIPTION(
19329  "Insert some additional points into a grid.\n"
19330  "\n"
19331  "This method can for example be used to add line center frequencies to\n"
19332  "a regular frequency grid. If the original grid is [1,2,3], and the\n"
19333  "additional points are [2.2,2.4], the result will be [1,2,2.2,2.4,3].\n"
19334  "\n"
19335  "It is assumed that the original grid is sorted, otherwise a runtime\n"
19336  "error is thrown. The vector with the points to insert does not have to\n"
19337  "be sorted. If some of the input points are already in the grid, these\n"
19338  "points are not inserted again. New points outside the original grid are\n"
19339  "appended at the appropriate end. Input vector and output vector can be\n"
19340  "the same.\n"
19341  "\n"
19342  "Generic output:\n"
19343  " Vector : The new grid vector.\n"
19344  "\n"
19345  "Generic input:\n"
19346  " Vector : The original grid vector.\n"
19347  " Vector : The points to insert.\n"),
19348  AUTHORS("Stefan Buehler"),
19349  OUT(),
19350  GOUT("out"),
19351  GOUT_TYPE("Vector"),
19352  GOUT_DESC("The new grid vector"),
19353  IN(),
19354  GIN("in", "points"),
19355  GIN_TYPE("Vector", "Vector"),
19357  GIN_DESC("The original grid vector", "The points to insert")));
19358 
19359  md_data_raw.push_back(create_mdrecord(
19360  NAME("VectorLinSpace"),
19361  DESCRIPTION(
19362  "Initializes a vector with linear spacing.\n"
19363  "\n"
19364  "The first element equals always the start value, and the spacing\n"
19365  "equals always the step value, but the last value can deviate from\n"
19366  "the stop value. *step* can be both positive and negative.\n"
19367  "\n"
19368  "The created vector is [start, start+step, start+2*step, ...]\n "),
19369  AUTHORS("Patrick Eriksson"),
19370  OUT(),
19371  GOUT("out"),
19372  GOUT_TYPE("Vector"),
19373  GOUT_DESC("Output vector."),
19374  IN(),
19375  GIN("start", "stop", "step"),
19376  GIN_TYPE("Numeric", "Numeric", "Numeric"),
19378  GIN_DESC("Start value.",
19379  "Maximum/minimum value of the end value",
19380  "Spacing of the vector.")));
19381 
19382  md_data_raw.push_back(create_mdrecord(
19383  NAME("VectorLogSpace"),
19384  DESCRIPTION(
19385  "Initializes a vector with logarithmic spacing.\n"
19386  "\n"
19387  "The first element equals always the start value, and the spacing\n"
19388  "equals always the step value, but note that the last value can \n"
19389  "deviate from the stop value. The keyword step can be both positive\n"
19390  "and negative.\n"
19391  "\n"
19392  "Note, that although start has to be given in direct coordinates,\n"
19393  "step has to be given in log coordinates.\n"
19394  "\n"
19395  "Explicitly, the vector is:\n"
19396  " exp([ln(start), ln(start)+step, ln(start)+2*step, ...])\n"),
19397  AUTHORS("Stefan Buehler"),
19398  OUT(),
19399  GOUT("out"),
19400  GOUT_TYPE("Vector"),
19401  GOUT_DESC("Variable to initialize."),
19402  IN(),
19403  GIN("start", "stop", "step"),
19404  GIN_TYPE("Numeric", "Numeric", "Numeric"),
19406  GIN_DESC("The start value. (Direct coordinates!)",
19407  "The maximum value of the end value. (Direct coordinates!)",
19408  "The spacing of the vector. (Log coordinates!)")));
19409 
19410  md_data_raw.push_back(create_mdrecord(
19411  NAME("VectorMatrixMultiply"),
19412  DESCRIPTION(
19413  "Multiply a Vector with a Matrix and store the result in another\n"
19414  "Vector.\n"
19415  "\n"
19416  "This just computes the normal Matrix-Vector product, y=M*x. It is ok\n"
19417  "if input and output Vector are the same. This function is handy for\n"
19418  "multiplying the H Matrix to spectra.\n"),
19419  AUTHORS("Stefan Buehler"),
19420  OUT(),
19421  GOUT("out"),
19422  GOUT_TYPE("Vector"),
19423  GOUT_DESC("The result of the multiplication (dimension m)."),
19424  IN(),
19425  GIN("m", "v"),
19426  GIN_TYPE("Matrix", "Vector"),
19428  GIN_DESC("The Matrix to multiply (dimension mxn).",
19429  "The original Vector (dimension n).")));
19430 
19431  md_data_raw.push_back(create_mdrecord(
19432  NAME("VectorNLinSpace"),
19433  DESCRIPTION(
19434  "Creates a vector with length *nelem*, equally spaced between the\n"
19435  "given end values.\n"
19436  "\n"
19437  "The length (*nelem*) must be larger than 1.\n"),
19438  AUTHORS("Patrick Eriksson"),
19439  OUT(),
19440  GOUT("out"),
19441  GOUT_TYPE("Vector"),
19442  GOUT_DESC("Variable to initialize."),
19443  IN("nelem"),
19444  GIN("start", "stop"),
19445  GIN_TYPE("Numeric", "Numeric"),
19447  GIN_DESC("Start value.", "End value.")));
19448 
19449  md_data_raw.push_back(create_mdrecord(
19450  NAME("VectorNLogSpace"),
19451  DESCRIPTION(
19452  "Creates a vector with length *nelem*, equally logarithmically\n"
19453  "spaced between the given end values.\n"
19454  "\n"
19455  "The length (*nelem*) must be larger than 1.\n"),
19456  AUTHORS("Patrick Eriksson"),
19457  OUT(),
19458  GOUT("out"),
19459  GOUT_TYPE("Vector"),
19460  GOUT_DESC("Variable to initialize."),
19461  IN("nelem"),
19462  GIN("start", "stop"),
19463  GIN_TYPE("Numeric", "Numeric"),
19465  GIN_DESC("Start value.", "End value.")));
19466 
19467  md_data_raw.push_back(create_mdrecord(
19468  NAME("VectorReshapeMatrix"),
19469  DESCRIPTION(
19470  "Converts a Matrix to a Vector.\n"
19471  "\n"
19472  "The matrix is reshaped into a vector. That is, all elements of the matrix\n"
19473  "are kept. The elements can be extracted both in column (default) and row\n"
19474  "order. The ouput vector has the same length for both options.\n"),
19475  AUTHORS("Patrick Eriksson"),
19476  OUT(),
19477  GOUT("out"),
19478  GOUT_TYPE("Vector"),
19479  GOUT_DESC("Created vector."),
19480  IN(),
19481  GIN("in", "direction"),
19482  GIN_TYPE("Matrix", "String"),
19483  GIN_DEFAULT(NODEF, "column"),
19484  GIN_DESC("Input matrix.", "Direction. \"row\" or \"column\".")));
19485 
19486  md_data_raw.push_back(create_mdrecord(
19487  NAME("VectorScale"),
19488  DESCRIPTION(
19489  "Scales all elements of a vector with the same value.\n"
19490  "\n"
19491  "The result can either be stored in the same or another vector.\n"),
19492  AUTHORS("Patrick Eriksson"),
19493  OUT(),
19494  GOUT("out"),
19495  GOUT_TYPE("Vector"),
19496  GOUT_DESC("Output vector."),
19497  IN(),
19498  GIN("in", "value"),
19499  GIN_TYPE("Vector", "Numeric"),
19501  GIN_DESC("Input vector.", "Scaling value.")));
19502 
19503  md_data_raw.push_back(create_mdrecord(
19504  NAME("VectorSetConstant"),
19505  DESCRIPTION(
19506  "Creates a vector and sets all elements to the specified value.\n"
19507  "\n"
19508  "The vector length is determined by *nelem*.\n"),
19509  AUTHORS("Patrick Eriksson"),
19510  OUT(),
19511  GOUT("out"),
19512  GOUT_TYPE("Vector"),
19513  GOUT_DESC("Variable to initialize."),
19514  IN("nelem"),
19515  GIN("value"),
19516  GIN_TYPE("Numeric"),
19517  GIN_DEFAULT(NODEF),
19518  GIN_DESC("Vector value.")));
19519 
19520  md_data_raw.push_back(create_mdrecord(
19521  NAME("VectorSet"),
19522  DESCRIPTION(
19523  "Create a vector from the given list of numbers.\n"
19524  "\n"
19525  " VectorSet(p_grid, [1000, 100, 10] )\n"
19526  " Will create a p_grid vector with these three elements.\n"),
19527  AUTHORS("Stefan Buehler"),
19528  OUT(),
19529  GOUT("out"),
19530  GOUT_TYPE("Vector"),
19531  GOUT_DESC("Variable to initialize."),
19532  IN(),
19533  GIN("value"),
19534  GIN_TYPE("Vector"),
19535  GIN_DEFAULT(NODEF),
19536  GIN_DESC("The vector elements."),
19537  SETMETHOD(true)));
19538 
19539  md_data_raw.push_back(create_mdrecord(
19540  NAME("VectorSubtractVector"),
19541  DESCRIPTION(
19542  "Element-wise subtraction of two vectors.\n"
19543  "\n"
19544  "The method calculates c = a - b.\n"
19545  "\n"
19546  "The variable *b* is allowed to have length 1, for any length of\n"
19547  "*a*. This single value in *b* is then added to every element of *a*.\n"
19548  "\n"
19549  "The vectors *a* and *c* can be the same WSV, while *b* can not be\n"
19550  "the same WSV as any of the the other vector.\n"),
19551  AUTHORS("Patrick Eriksson"),
19552  OUT(),
19553  GOUT("c"),
19554  GOUT_TYPE("Vector"),
19555  GOUT_DESC("Output vector"),
19556  IN(),
19557  GIN("a", "b"),
19558  GIN_TYPE("Vector", "Vector"),
19560  GIN_DESC("Input vector.", "Vector to be subtracted.")));
19561 
19562  md_data_raw.push_back(create_mdrecord(
19563  NAME("VectorVectorMultiply"),
19564  DESCRIPTION(
19565  "Multiply a Vector with another Vector and store result in a third one.\n"
19566  "\n"
19567  "This is an element-wise multiplication. It is ok if output Vector is\n"
19568  "the same as any of the input Vectors.\n"),
19569  AUTHORS("Jana Mendrok"),
19570  OUT(),
19571  GOUT("out"),
19572  GOUT_TYPE("Vector"),
19573  GOUT_DESC("The result of the multiplication (dimension m)."),
19574  IN(),
19575  GIN("v1", "v2"),
19576  GIN_TYPE("Vector", "Vector"),
19578  GIN_DESC("Original Vector #1 (dimension m).",
19579  "Original Vector #2 (dimension m).")));
19580 
19581  md_data_raw.push_back(create_mdrecord(
19582  NAME("VectorZtanToZaRefr1D"),
19583  DESCRIPTION(
19584  "Converts a set of true tangent altitudes to zenith angles.\n"
19585  "\n"
19586  "The tangent altitudes are given to the function as a vector, which\n"
19587  "are converted to a generic vector of zenith angles. The position of\n"
19588  "the sensor is given by the WSV *sensor_pos*. The function works\n"
19589  "only for 1D. The zenith angles are always set to be positive.\n"),
19590  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
19591  OUT(),
19592  GOUT("v_za"),
19593  GOUT_TYPE("Vector"),
19594  GOUT_DESC("Vector with zenith angles."),
19595  IN("refr_index_air_agenda",
19596  "sensor_pos",
19597  "p_grid",
19598  "t_field",
19599  "z_field",
19600  "vmr_field",
19601  "refellipsoid",
19602  "atmosphere_dim",
19603  "f_grid"),
19604  GIN("v_ztan"),
19605  GIN_TYPE("Vector"),
19606  GIN_DEFAULT(NODEF),
19607  GIN_DESC("Vector with tangent altitudes.")));
19608 
19609  md_data_raw.push_back(create_mdrecord(
19610  NAME("VectorZtanToZa1D"),
19611  DESCRIPTION(
19612  "Converts a set of geometrical tangent altitudes to zenith angles.\n"
19613  "\n"
19614  "The tangent altitudes are given to the function as a vector, which\n"
19615  "are converted to a generic vector of zenith angles. The position of\n"
19616  "the sensor is given by the WSV *sensor_pos*. The function works\n"
19617  "only for 1D. The zenith angles are always set to be positive.\n"),
19618  AUTHORS("Patrick Eriksson", "Mattias Ekstrom"),
19619  OUT(),
19620  GOUT("v_za"),
19621  GOUT_TYPE("Vector"),
19622  GOUT_DESC("Vector with zenith angles."),
19623  IN("sensor_pos", "refellipsoid", "atmosphere_dim"),
19624  GIN("v_ztan"),
19625  GIN_TYPE("Vector"),
19626  GIN_DEFAULT(NODEF),
19627  GIN_DESC("Vector with tangent altitudes.")));
19628 
19629  md_data_raw.push_back(create_mdrecord(
19630  NAME("verbosityInit"),
19631  DESCRIPTION(
19632  "Initializes the verbosity levels.\n"
19633  "\n"
19634  "Sets verbosity to defaults or the levels specified by -r on the command line.\n"),
19635  AUTHORS("Oliver Lemke"),
19636  OUT("verbosity"),
19637  GOUT(),
19638  GOUT_TYPE(),
19639  GOUT_DESC(),
19640  IN("verbosity"),
19641  GIN(),
19642  GIN_TYPE(),
19643  GIN_DEFAULT(),
19644  GIN_DESC()));
19645 
19646  md_data_raw.push_back(create_mdrecord(
19647  NAME("verbositySet"),
19648  DESCRIPTION(
19649  "Sets the verbosity levels.\n"
19650  "\n"
19651  "Sets the reporting level for agenda calls, screen and file.\n"
19652  "All reporting levels can reach from 0 (only error messages)\n"
19653  "to 3 (everything). The agenda setting applies in addition\n"
19654  "to both screen and file output.\n"),
19655  AUTHORS("Oliver Lemke"),
19656  OUT("verbosity"),
19657  GOUT(),
19658  GOUT_TYPE(),
19659  GOUT_DESC(),
19660  IN("verbosity"),
19661  GIN("agenda", "screen", "file"),
19662  GIN_TYPE("Index", "Index", "Index"),
19664  GIN_DESC("Agenda verbosity level",
19665  "Screen verbosity level",
19666  "Report file verbosity level")));
19667 
19668  md_data_raw.push_back(
19669  create_mdrecord(NAME("verbositySetAgenda"),
19670  DESCRIPTION("Sets the verbosity level for agenda output.\n"
19671  "\n"
19672  "See *verbositySet*\n"),
19673  AUTHORS("Oliver Lemke"),
19674  OUT("verbosity"),
19675  GOUT(),
19676  GOUT_TYPE(),
19677  GOUT_DESC(),
19678  IN("verbosity"),
19679  GIN("level"),
19680  GIN_TYPE("Index"),
19681  GIN_DEFAULT(NODEF),
19682  GIN_DESC("Agenda verbosity level")));
19683 
19684  md_data_raw.push_back(
19685  create_mdrecord(NAME("verbositySetFile"),
19686  DESCRIPTION("Sets the verbosity level for report file output.\n"
19687  "\n"
19688  "See *verbositySet*\n"),
19689  AUTHORS("Oliver Lemke"),
19690  OUT("verbosity"),
19691  GOUT(),
19692  GOUT_TYPE(),
19693  GOUT_DESC(),
19694  IN("verbosity"),
19695  GIN("level"),
19696  GIN_TYPE("Index"),
19697  GIN_DEFAULT(NODEF),
19698  GIN_DESC("Report file verbosity level")));
19699 
19700  md_data_raw.push_back(
19701  create_mdrecord(NAME("verbositySetScreen"),
19702  DESCRIPTION("Sets the verbosity level for screen output.\n"
19703  "\n"
19704  "See *verbositySet*\n"),
19705  AUTHORS("Oliver Lemke"),
19706  OUT("verbosity"),
19707  GOUT(),
19708  GOUT_TYPE(),
19709  GOUT_DESC(),
19710  IN("verbosity"),
19711  GIN("level"),
19712  GIN_TYPE("Index"),
19713  GIN_DEFAULT(NODEF),
19714  GIN_DESC("Screen verbosity level")));
19715 
19716  md_data_raw.push_back(create_mdrecord(
19717  NAME("vmr_fieldClip"),
19718  DESCRIPTION(
19719  "Clipping of *vmr_field*.\n"
19720  "\n"
19721  "The method allows you to apply hard limits the values of *vmr_field*.\n"
19722  "All values, of the species selected, below *limit_low*, are simply\n"
19723  "set to *limit_low*. And the same is performed with respect to\n"
19724  "*limit_high*. That is, the data in x for the retrieval quantity are\n"
19725  "forced to be inside the range [limit_low,limit_high].\n"
19726  "\n"
19727  "Setting species=\"ALL\", is a shortcut for applying the limits on all\n"
19728  "species.\n"),
19729  AUTHORS("Patrick Eriksson"),
19730  OUT("vmr_field"),
19731  GOUT(),
19732  GOUT_TYPE(),
19733  GOUT_DESC(),
19734  IN("vmr_field", "abs_species"),
19735  GIN("species", "limit_low", "limit_high"),
19736  GIN_TYPE("String", "Numeric", "Numeric"),
19737  GIN_DEFAULT(NODEF, "-Inf", "Inf"),
19738  GIN_DESC("Name of species to consider, or \"ALL\".",
19739  "Lower limit for clipping.",
19740  "Upper limit for clipping.")));
19741 
19742  md_data_raw.push_back(create_mdrecord(
19743  NAME("vmr_fieldPerturb"),
19744  DESCRIPTION("Adds a perturbation to *vmr_field*.\n"
19745  "\n"
19746  "Works as *AtmFieldPerturb* but acts on *vmr_field*.\n"),
19747  AUTHORS("Patrick Eriksson"),
19748  OUT("vmr_field"),
19749  GOUT(),
19750  GOUT_TYPE(),
19751  GOUT_DESC(),
19752  IN("vmr_field",
19753  "atmosphere_dim",
19754  "p_grid",
19755  "lat_grid",
19756  "lon_grid",
19757  "abs_species"),
19758  GIN("species",
19759  "p_ret_grid",
19760  "lat_ret_grid",
19761  "lon_ret_grid",
19762  "pert_index",
19763  "pert_size",
19764  "pert_mode"),
19765  GIN_TYPE(
19766  "String", "Vector", "Vector", "Vector", "Index", "Numeric", "String"),
19767  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
19768  GIN_DESC("Name of species to perturb.",
19769  "Pressure retrieval grid.",
19770  "Latitude retrieval grid.",
19771  "Longitude retrieval grid.",
19772  "Index of position where the perturbation shall be performed.",
19773  "Size of perturbation.",
19774  "Type of perturbation, "
19775  "ansolute"
19776  " or "
19777  "relative"
19778  ".")));
19779 
19780  md_data_raw.push_back(create_mdrecord(
19781  NAME("vmr_fieldPerturbAtmGrids"),
19782  DESCRIPTION(
19783  "Adds a perturbation to *vmr_field*.\n"
19784  "\n"
19785  "Works as *AtmFieldPerturbAtmGrids* but acts on *vmr_field*.\n"),
19786  AUTHORS("Patrick Eriksson"),
19787  OUT("vmr_field"),
19788  GOUT(),
19789  GOUT_TYPE(),
19790  GOUT_DESC(),
19791  IN("vmr_field",
19792  "atmosphere_dim",
19793  "p_grid",
19794  "lat_grid",
19795  "lon_grid",
19796  "abs_species"),
19797  GIN("species", "pert_index", "pert_size", "pert_mode"),
19798  GIN_TYPE("String", "Index", "Numeric", "String"),
19799  GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
19800  GIN_DESC("Name of species to perturb.",
19801  "Index of position where the perturbation shall be performed.",
19802  "Size of perturbation.",
19803  "Type of perturbation, "
19804  "ansolute"
19805  " or "
19806  "relative"
19807  ".")));
19808 
19809  md_data_raw.push_back(create_mdrecord(
19810  NAME("vmr_fieldSetAllConstant"),
19811  DESCRIPTION(
19812  "Sets the VMR of all species to a select constant value.\n"
19813  "\n"
19814  "The *vmr_field* WSM must have a correct size before calling this method.\n"
19815  "The length of vmr_values and of abs_species must match.\n"),
19816  AUTHORS("Richard Larsson"),
19817  OUT("vmr_field"),
19818  GOUT(),
19819  GOUT_TYPE(),
19820  GOUT_DESC(),
19821  IN("vmr_field", "abs_species"),
19822  GIN("vmr_values"),
19823  GIN_TYPE("Vector"),
19824  GIN_DEFAULT(NODEF),
19825  GIN_DESC("VMR value to apply for each abs_species.")));
19826 
19827  md_data_raw.push_back(create_mdrecord(
19828  NAME("water_p_eq_fieldMK05"),
19829  DESCRIPTION(
19830  "Calculates *water_p_eq_field* according to Murphy and Koop, 2005.\n"
19831  "\n"
19832  "The saturation pressure is set to the one with respect to water at\n"
19833  "temperatures >= 0C, and to the one with respect to ice for <0C.\n"
19834  "\n"
19835  "The saturation pressure with respect to liquid and ice water is\n"
19836  "calculated according to Eq. 10 and 7, respectively, of:\n"
19837  "Murphy, D. M., & Koop, T. (2005). Review of the vapour pressures of\n"
19838  "ice and supercooled water for atmospheric applications. Quarterly\n"
19839  "Journal of the Royal Meteorological Society, 131(608), 1539-1565.\n"),
19840  AUTHORS("Patrick Eriksson"),
19841  OUT("water_p_eq_field"),
19842  GOUT(),
19843  GOUT_TYPE(),
19844  GOUT_DESC(),
19845  IN("t_field"),
19846  GIN(),
19847  GIN_TYPE(),
19848  GIN_DEFAULT(),
19849  GIN_DESC()));
19850 
19851  md_data_raw.push_back(create_mdrecord(
19852  NAME("vmr_fieldSetConstant"),
19853  DESCRIPTION(
19854  "Sets the VMR of a species to a constant value.\n"
19855  "\n"
19856  "The *vmr_field* WSM must have a correct size before calling this method.\n"),
19857  AUTHORS("Patrick Eriksson"),
19858  OUT("vmr_field"),
19859  GOUT(),
19860  GOUT_TYPE(),
19861  GOUT_DESC(),
19862  IN("vmr_field", "abs_species"),
19863  GIN("species", "vmr_value"),
19864  GIN_TYPE("String", "Numeric"),
19866  GIN_DESC("Species to set.",
19867  "VMR value to apply for the selected species.")));
19868 
19869  md_data_raw.push_back(create_mdrecord(
19870  NAME("Wigner6Init"),
19871  DESCRIPTION("Initialize the wigner 3 and 6 tables\n"
19872  "\n"
19873  "The default values take about 1 Gb memory.\n"),
19874  AUTHORS("Richard Larsson"),
19875  OUT("wigner_initialized"),
19876  GOUT(),
19877  GOUT_TYPE(),
19878  GOUT_DESC(),
19879  IN(),
19880  GIN("fast_wigner_stored_symbols", "largest_wigner_symbol_parameter"),
19881  GIN_TYPE("Index", "Index"),
19882  GIN_DEFAULT("20000000", "250"),
19883  GIN_DESC(
19884  "Number of stored symbols possible before replacements",
19885  "Largest symbol used for initializing factorials (e.g., largest J or L)")));
19886 
19887  md_data_raw.push_back(create_mdrecord(
19888  NAME("Wigner3Init"),
19889  DESCRIPTION("Initialize the wigner 3 tables\n"
19890  "\n"
19891  "The default values take about 400 Mb memory.\n"),
19892  AUTHORS("Richard Larsson"),
19893  OUT("wigner_initialized"),
19894  GOUT(),
19895  GOUT_TYPE(),
19896  GOUT_DESC(),
19897  IN(),
19898  GIN("fast_wigner_stored_symbols", "largest_wigner_symbol_parameter"),
19899  GIN_TYPE("Index", "Index"),
19900  GIN_DEFAULT("20000000", "250"),
19901  GIN_DESC(
19902  "Number of stored symbols possible before replacements",
19903  "Largest symbol used for initializing factorials (e.g., largest J or L)")));
19904 
19905  md_data_raw.push_back(
19906  create_mdrecord(NAME("Wigner6Unload"),
19907  DESCRIPTION("Unloads the wigner 3 and 6 tables\n"),
19908  AUTHORS("Richard Larsson"),
19909  OUT("wigner_initialized"),
19910  GOUT(),
19911  GOUT_TYPE(),
19912  GOUT_DESC(),
19913  IN("wigner_initialized"),
19914  GIN(),
19915  GIN_TYPE(),
19916  GIN_DEFAULT(),
19917  GIN_DESC()));
19918 
19919  md_data_raw.push_back(create_mdrecord(NAME("Wigner3Unload"),
19920  DESCRIPTION("Unloads the wigner 3 tables\n"),
19921  AUTHORS("Richard Larsson"),
19922  OUT("wigner_initialized"),
19923  GOUT(),
19924  GOUT_TYPE(),
19925  GOUT_DESC(),
19926  IN("wigner_initialized"),
19927  GIN(),
19928  GIN_TYPE(),
19929  GIN_DEFAULT(),
19930  GIN_DESC()));
19931 
19932  md_data_raw.push_back(create_mdrecord(
19933  NAME("WignerFastInfoPrint"),
19934  DESCRIPTION(
19935  "Prints the fast wigner table information if compiled with this option\n"),
19936  AUTHORS("Richard Larsson"),
19937  OUT(),
19938  GOUT(),
19939  GOUT_TYPE(),
19940  GOUT_DESC(),
19941  IN("wigner_initialized"),
19942  GIN(),
19943  GIN_TYPE(),
19944  GIN_DEFAULT(),
19945  GIN_DESC()));
19946 
19947  md_data_raw.push_back(create_mdrecord(
19948  NAME("WindFieldsCalc"),
19949  DESCRIPTION(
19950  "Interpolation of raw wind fields to calculation grids.\n"
19951  "Heritage from *AtmFieldsCalc*\n"
19952  "\n"
19953  "Internally, *WindFieldsCalc* applies *GriddedFieldPRegrid* and\n"
19954  "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
19955  "is allowed and applied.\n"),
19956  AUTHORS("Richard Larsson"),
19957  OUT("wind_u_field", "wind_v_field", "wind_w_field"),
19958  GOUT(),
19959  GOUT_TYPE(),
19960  GOUT_DESC(),
19961  IN("p_grid",
19962  "lat_grid",
19963  "lon_grid",
19964  "wind_u_field_raw",
19965  "wind_v_field_raw",
19966  "wind_w_field_raw",
19967  "atmosphere_dim"),
19968  GIN("interp_order"),
19969  GIN_TYPE("Index"),
19970  GIN_DEFAULT("1"),
19971  GIN_DESC("Interpolation order (1=linear interpolation).")));
19972 
19973  md_data_raw.push_back(create_mdrecord(
19974  NAME("WindFieldsCalcExpand1D"),
19975  DESCRIPTION(
19976  "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
19977  "homogeneous wind fields. Derived from *AtmFieldsCalcExpand1D*\n"
19978  "\n"
19979  "The method works as *WindFieldsCalc*, but accepts only raw 1D\n"
19980  "wind fields. The raw data is interpolated to *p_grid* and\n"
19981  "the obtained values are applied for all latitudes, and also\n"
19982  "longitudes for 3D, to create a homogeneous atmosphere.\n"),
19983  AUTHORS("Richard Larsson"),
19984  OUT("wind_u_field", "wind_v_field", "wind_w_field"),
19985  GOUT(),
19986  GOUT_TYPE(),
19987  GOUT_DESC(),
19988  IN("p_grid",
19989  "lat_grid",
19990  "lon_grid",
19991  "wind_u_field_raw",
19992  "wind_v_field_raw",
19993  "wind_w_field_raw",
19994  "atmosphere_dim"),
19995  GIN("interp_order"),
19996  GIN_TYPE("Index"),
19997  GIN_DEFAULT("1"),
19998  GIN_DESC("Interpolation order (1=linear interpolation).")));
19999 
20000  md_data_raw.push_back(create_mdrecord(
20001  NAME("WindRawRead"),
20002  DESCRIPTION(
20003  "Reads wind field data from a scenario.\n"
20004  "\n"
20005  "A full set of field components is read (NOTE: fails if scenario\n"
20006  "only contains selected field components). The files can be\n"
20007  "anywhere, but must all be in the same directory specified by\n"
20008  "'basename'. Naming convention for the field component files is\n"
20009  "basename.wind_u.xml for the u-component, v- and w-components\n"
20010  "accordingly.\n"),
20011  AUTHORS("Richard Larsson"),
20012  OUT("wind_u_field_raw", "wind_v_field_raw", "wind_w_field_raw"),
20013  GOUT(),
20014  GOUT_TYPE(),
20015  GOUT_DESC(),
20016  IN(),
20017  GIN("basename"),
20018  GIN_TYPE("String"),
20019  GIN_DEFAULT(NODEF),
20020  GIN_DESC("Name of scenario, probably including the full path. For "
20021  "example: \"/data/wind_field\"")));
20022 
20023  md_data_raw.push_back(create_mdrecord(
20024  NAME("wind_u_fieldIncludePlanetRotation"),
20025  DESCRIPTION(
20026  "Maps the planet's rotation to an imaginary wind.\n"
20027  "\n"
20028  "This method is of relevance if the observation platform is not\n"
20029  "following the planet's rotation, and Doppler effects must be\n"
20030  "considered. Examples include full disk observations from another\n"
20031  "planet or a satellite not in orbit of the observed planet.\n"
20032  "\n"
20033  "The rotation of the planet is not causing any Doppler shift for\n"
20034  "1D and 2D simulations, and the method can only be used for 3D.\n"),
20035  AUTHORS("Patrick Eriksson"),
20036  OUT("wind_u_field"),
20037  GOUT(),
20038  GOUT_TYPE(),
20039  GOUT_DESC(),
20040  IN("wind_u_field",
20041  "atmosphere_dim",
20042  "p_grid",
20043  "lat_grid",
20044  "lon_grid",
20045  "refellipsoid",
20046  "z_field",
20047  "planet_rotation_period"),
20048  GIN(),
20049  GIN_TYPE(),
20050  GIN_DEFAULT(),
20051  GIN_DESC()));
20052 
20053  md_data_raw.push_back(create_mdrecord(
20054  NAME("WMRFSelectChannels"),
20055  DESCRIPTION(
20056  "Select some channels for WMRF calculation.\n"
20057  "\n"
20058  "The HIRS fast setup consists of a precalculated frequency grid\n"
20059  "covering all HIRS channels, and associated weights for each channel,\n"
20060  "stored in a weight matrix. (A *sensor_response* matrix.)\n"
20061  "\n"
20062  "If not all channels are requested for\n"
20063  "simulation, then this method can be used to remove the unwanted\n"
20064  "channels. It changes a number of variables in consistent fashion:\n"
20065  "\n"
20066  "- Unwanted channels are removed from f_backend. \n"
20067  "- Unwanted channels are removed from wmrf_weights.\n"
20068  "- Unnecessary frequencies are removed from f_grid.\n"
20069  "- Unnecessary frequencies are removed from wmrf_weights.\n"),
20070  AUTHORS("Stefan Buehler"),
20071  OUT("f_grid", "wmrf_weights", "f_backend"),
20072  GOUT(),
20073  GOUT_TYPE(),
20074  GOUT_DESC(),
20075  IN("f_grid", "f_backend", "wmrf_weights", "wmrf_channels"),
20076  GIN(),
20077  GIN_TYPE(),
20078  GIN_DEFAULT(),
20079  GIN_DESC()));
20080 
20081  md_data_raw.push_back(create_mdrecord(
20082  NAME("WriteMolTau"),
20083  DESCRIPTION(
20084  "Writes a 'molecular_tau_file' as required for libRadtran.\n"
20085  "\n"
20086  "The libRadtran (www.libradtran.org) radiative transfer package is a \n"
20087  "comprehensive package for various applications, it can be used to \n"
20088  "compute radiances, irradiances, actinic fluxes, ... for the solar \n"
20089  "and the thermal spectral ranges. Absorption is usually treated using \n"
20090  "k-distributions or other parameterizations. For calculations with high \n"
20091  "spectral resolution it requires absorption coefficients from an external \n"
20092  "line-by-line model. Using this method, arts generates a file that can be \n"
20093  "used by libRadtran (option molecular_tau_file)."
20094  "\n"),
20095  AUTHORS("Claudia Emde"),
20096  OUT(),
20097  GOUT(),
20098  GOUT_TYPE(),
20099  GOUT_DESC(),
20100  IN("f_grid", "z_field", "propmat_clearsky_field", "atmosphere_dim"),
20101  GIN("filename"),
20102  GIN_TYPE("String"),
20103  GIN_DEFAULT(NODEF),
20104  GIN_DESC("Name of the *molecular_tau_file*.")));
20105 
20106  md_data_raw.push_back(create_mdrecord(
20107  NAME("WriteNetCDF"),
20108  DESCRIPTION("Writes a workspace variable to a NetCDF file.\n"
20109  "\n"
20110  "This method can write variables of limited groups.\n"
20111  "\n"
20112  "If the filename is omitted, the variable is written\n"
20113  "to <basename>.<variable_name>.nc.\n"),
20114  AUTHORS("Oliver Lemke"),
20115  OUT(),
20116  GOUT(),
20117  GOUT_TYPE(),
20118  GOUT_DESC(),
20119  IN(),
20120  GIN("in", "filename"),
20121  GIN_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, ArrayOfVector,"
20122  "ArrayOfMatrix, GasAbsLookup",
20123  "String"),
20124  GIN_DEFAULT(NODEF, ""),
20125  GIN_DESC("Variable to be saved.", "Name of the NetCDF file."),
20126  SETMETHOD(false),
20127  AGENDAMETHOD(false),
20128  USES_TEMPLATES(true),
20129  PASSWORKSPACE(false),
20130  PASSWSVNAMES(true)));
20131 
20132  md_data_raw.push_back(create_mdrecord(
20133  NAME("WriteNetCDFIndexed"),
20134  DESCRIPTION("As *WriteNetCDF*, but creates indexed file names.\n"
20135  "\n"
20136  "This method can write variables of any group.\n"
20137  "\n"
20138  "If the filename is omitted, the variable is written\n"
20139  "to <basename>.<variable_name>.nc.\n"),
20140  AUTHORS("Oliver Lemke"),
20141  OUT(),
20142  GOUT(),
20143  GOUT_TYPE(),
20144  GOUT_DESC(),
20145  IN("file_index"),
20146  GIN("in", "filename"),
20147  GIN_TYPE("Vector, Matrix, Tensor3, Tensor4, Tensor5, ArrayOfVector,"
20148  "ArrayOfMatrix, GasAbsLookup",
20149  "String"),
20150  GIN_DEFAULT(NODEF, ""),
20151  GIN_DESC("Variable to be saved.", "Name of the NetCDF file."),
20152  SETMETHOD(false),
20153  AGENDAMETHOD(false),
20154  USES_TEMPLATES(true),
20155  PASSWORKSPACE(false),
20156  PASSWSVNAMES(true)));
20157 
20158  md_data_raw.push_back(create_mdrecord(
20159  NAME("WriteXML"),
20160  DESCRIPTION("Writes a workspace variable to an XML file.\n"
20161  "\n"
20162  "This method can write variables of any group.\n"
20163  "\n"
20164  "If the filename is omitted, the variable is written\n"
20165  "to <basename>.<variable_name>.xml.\n"
20166  "If no_clobber is set to 1, an increasing number will be\n"
20167  "appended to the filename if the file already exists.\n"),
20168  AUTHORS("Oliver Lemke"),
20169  OUT(),
20170  GOUT(),
20171  GOUT_TYPE(),
20172  GOUT_DESC(),
20173  IN("output_file_format"),
20174  GIN("in", "filename", "no_clobber"),
20175  GIN_TYPE("Any", "String", "Index"),
20176  GIN_DEFAULT(NODEF, "", "0"),
20177  GIN_DESC("Variable to be saved.",
20178  "Name of the XML file.",
20179  "0: Overwrite existing files, 1: Use unique filenames"),
20180  SETMETHOD(false),
20181  AGENDAMETHOD(false),
20182  USES_TEMPLATES(true),
20183  PASSWORKSPACE(false),
20184  PASSWSVNAMES(true)));
20185 
20186  md_data_raw.push_back(create_mdrecord(
20187  NAME("WriteXMLIndexed"),
20188  DESCRIPTION("As *WriteXML*, but creates indexed file names.\n"
20189  "\n"
20190  "The variable is written to a file with name:\n"
20191  " <filename>.<file_index>.xml.\n"
20192  "where <file_index> is the value of *file_index*.\n"
20193  "\n"
20194  "This means that *filename* shall here not include the .xml\n"
20195  "extension. Omitting filename works as for *WriteXML*.\n"),
20196  AUTHORS("Patrick Eriksson, Oliver Lemke"),
20197  OUT(),
20198  GOUT(),
20199  GOUT_TYPE(),
20200  GOUT_DESC(),
20201  IN("output_file_format", "file_index"),
20202  GIN("in", "filename", "digits"),
20203  GIN_TYPE("Any", "String", "Index"),
20204  GIN_DEFAULT(NODEF, "", "0"),
20205  GIN_DESC(
20206  "Workspace variable to be saved.",
20207  "File name. See above.",
20208  "Equalize the widths of all numbers by padding with zeros as necessary.\n"
20209  "0 means no padding (default)."),
20210  SETMETHOD(false),
20211  AGENDAMETHOD(false),
20212  USES_TEMPLATES(true),
20213  PASSWORKSPACE(false),
20214  PASSWSVNAMES(true)));
20215 
20216  md_data_raw.push_back(create_mdrecord(
20217  NAME("xaStandard"),
20218  DESCRIPTION(
20219  "Standard function for creating *xa*.\n"
20220  "\n"
20221  "The method creates *xa* based on *jacobian_quantities* and the various\n"
20222  "atmospheric fields. In the case of scattering species, the data are\n"
20223  "taken from *particle_bulkprop_field*. The following retrieval quantities\n"
20224  "are handled:\n"
20225  " Temperature\n"
20226  " Absorption species\n"
20227  " Scattering species\n"
20228  " Pointing\n"
20229  " Polynomial baseline fit\n"
20230  " Sinusoidal baseline fit\n"),
20231  AUTHORS("Patrick Eriksson"),
20232  OUT("xa"),
20233  GOUT(),
20234  GOUT_TYPE(),
20235  GOUT_DESC(),
20236  IN("jacobian_quantities",
20237  "atmfields_checked",
20238  "atmgeom_checked",
20239  "atmosphere_dim",
20240  "p_grid",
20241  "lat_grid",
20242  "lon_grid",
20243  "t_field",
20244  "vmr_field",
20245  "abs_species",
20246  "cloudbox_on",
20247  "cloudbox_checked",
20248  "particle_bulkprop_field",
20249  "particle_bulkprop_names",
20250  "wind_u_field",
20251  "wind_v_field",
20252  "wind_w_field",
20253  "mag_u_field",
20254  "mag_v_field",
20255  "mag_w_field",
20256  "surface_props_data",
20257  "surface_props_names",
20258  "water_p_eq_agenda"),
20259  GIN(),
20260  GIN_TYPE(),
20261  GIN_DEFAULT(),
20262  GIN_DESC()));
20263 
20264  md_data_raw.push_back(create_mdrecord(
20265  NAME("xClip"),
20266  DESCRIPTION(
20267  "Clipping of the state vector.\n"
20268  "\n"
20269  "The method allows you to apply hard limits the values of a\n"
20270  "retrieval quantity. The retrieval quantity is specified by\n"
20271  "*ijq*. All values of the quantity below *limit_low*, are simply\n"
20272  "set to *limit_low*. And the same is performed with respect to\n"
20273  "*limit_high*. That is, the data in x for the retrieval quantity\n"
20274  "are forced to be inside the range [limit_low,limit_high].\n"
20275  "\n"
20276  "Setting ijq=-1, is a shortcut for applying the limits on all\n"
20277  "retrieval quantities.\n"
20278  "\n"
20279  "Notice that limits must be specified in the unit used in *x*.\n"),
20280  AUTHORS("Patrick Eriksson"),
20281  OUT("x"),
20282  GOUT(),
20283  GOUT_TYPE(),
20284  GOUT_DESC(),
20285  IN("x", "jacobian_quantities"),
20286  GIN("ijq", "limit_low", "limit_high"),
20287  GIN_TYPE("Index", "Numeric", "Numeric"),
20288  GIN_DEFAULT(NODEF, "-Inf", "Inf"),
20289  GIN_DESC("Retrieval quantity index (zero-based)",
20290  "Lower limit for clipping.",
20291  "Upper limit for clipping.")));
20292 
20293  md_data_raw.push_back(create_mdrecord(
20294  NAME("x2artsAtmAndSurf"),
20295  DESCRIPTION(
20296  "Maps *x* to atmospheric and surface variables.\n"
20297  "\n"
20298  "Maps OEM's state vector, *x*, to the matching ARTS variables. This\n"
20299  "method handles atmospheric and surface variables. If you retrieve\n"
20300  "other variables, make sure that you also call *x2artsSensor* and/or\n"
20301  "*x2artsSpectroscopy*.\n"
20302  "\n"
20303  "The following retrieval quantities are handled by this method:\n"
20304  " Temperature\n"
20305  " Absorption species\n"
20306  " Scattering species\n"
20307  " Winds\n"
20308  " Surface variables\n"
20309  "\n"
20310  "Should only be used inside *inversion_iterate_agenda*.\n"),
20311  AUTHORS("Patrick Eriksson"),
20312  OUT("vmr_field",
20313  "t_field",
20314  "particle_bulkprop_field",
20315  "wind_u_field",
20316  "wind_v_field",
20317  "wind_w_field",
20318  "mag_u_field",
20319  "mag_v_field",
20320  "mag_w_field",
20321  "surface_props_data"),
20322  GOUT(),
20323  GOUT_TYPE(),
20324  GOUT_DESC(),
20325  IN("vmr_field",
20326  "t_field",
20327  "particle_bulkprop_field",
20328  "wind_u_field",
20329  "wind_v_field",
20330  "wind_w_field",
20331  "mag_u_field",
20332  "mag_v_field",
20333  "mag_w_field",
20334  "surface_props_data",
20335  "jacobian_quantities",
20336  "x",
20337  "atmfields_checked",
20338  "atmgeom_checked",
20339  "atmosphere_dim",
20340  "p_grid",
20341  "lat_grid",
20342  "lon_grid",
20343  "abs_species",
20344  "cloudbox_on",
20345  "cloudbox_checked",
20346  "particle_bulkprop_names",
20347  "surface_props_names",
20348  "water_p_eq_agenda"),
20349  GIN(),
20350  GIN_TYPE(),
20351  GIN_DEFAULT(),
20352  GIN_DESC()));
20353 
20354  md_data_raw.push_back(create_mdrecord(
20355  NAME("x2artsSensor"),
20356  DESCRIPTION(
20357  "Maps *x* to sensor variables.\n"
20358  "\n"
20359  "Maps OEM's state vector, *x*, to the matching ARTS variables. This\n"
20360  "method handles variables associated with the sensor. If you retrieve\n"
20361  "other variables, make sure that you also call *x2artsAtmAndSurf*\n"
20362  " and/or *x2artsSpectroscopy*.\n"
20363  "\n"
20364  "The following retrieval quantities are handled by this method:\n"
20365  " Pointing\n"
20366  " Frequency shift and stretch\n"
20367  " Baseline fits\n"
20368  "\n"
20369  "Should only be used inside *inversion_iterate_agenda*.\n"
20370  "\n"
20371  "Elements in *x* representing pointing corrections are mapped to\n"
20372  "*sensor_los*. Elements representing frequency corrections are mapped\n"
20373  "to *f_backend*. Baseline variables are mapped to *y_baseline*.\n"
20374  "\n"
20375  "The sensor response is recalculated if there is any non-zero frequency\n"
20376  "correction.\n"),
20377  AUTHORS("Patrick Eriksson"),
20378  OUT("sensor_los",
20379  "f_backend",
20380  "y_baseline",
20381  "sensor_response",
20382  "sensor_response_f",
20383  "sensor_response_pol",
20384  "sensor_response_dlos",
20385  "sensor_response_f_grid",
20386  "sensor_response_pol_grid",
20387  "sensor_response_dlos_grid",
20388  "mblock_dlos_grid"),
20389  GOUT(),
20390  GOUT_TYPE(),
20391  GOUT_DESC(),
20392  IN("sensor_los",
20393  "f_backend",
20394  "sensor_response",
20395  "sensor_response_f",
20396  "sensor_response_pol",
20397  "sensor_response_dlos",
20398  "sensor_response_f_grid",
20399  "sensor_response_pol_grid",
20400  "sensor_response_dlos_grid",
20401  "mblock_dlos_grid",
20402  "jacobian_quantities",
20403  "x",
20404  "sensor_response_agenda",
20405  "sensor_checked",
20406  "sensor_time"),
20407  GIN(),
20408  GIN_TYPE(),
20409  GIN_DEFAULT(),
20410  GIN_DESC()));
20411 
20412  md_data_raw.push_back(create_mdrecord(
20413  NAME("x2artsSpectroscopy"),
20414  DESCRIPTION("Just defined to indicate a future extensiom.\n"
20415  "\n"
20416  "Don't call the method, it will just generate an error.\n"),
20417  AUTHORS("Patrick Eriksson"),
20418  OUT(),
20419  GOUT(),
20420  GOUT_TYPE(),
20421  GOUT_DESC(),
20422  IN(),
20423  GIN(),
20424  GIN_TYPE(),
20425  GIN_DEFAULT(),
20426  GIN_DESC()));
20427 
20428  md_data_raw.push_back(create_mdrecord(
20429  NAME("yApplySensorPol"),
20430  DESCRIPTION(
20431  "Extraction of arbitrary linear polarisation.\n"
20432  "\n"
20433  "This method shall be called after *yCalc* and then applies *sensor_pol*\n"
20434  "on the outout of *yCalc*. See *sensor_pol* for definition of the\n"
20435  "polarisation responses. THe *sensor_response* give to *yCalc* can not\n"
20436  "contain any polarisation response, it must maintain original Stokes\n"
20437  "elelemnts. The value of *stokes_dim* muist be >= 3.\n"
20438  "\n"
20439  "The values in *sensor_pol* are applied on *y*, and *jacobian* if relevant.\n"
20440  "*y_pol* is set following the values in *sensor_pol* but is rounded to\n"
20441  "an integer value. Remaining data associated with *y* (e.g. y_pos) are\n"
20442  "set to the value matching the first Stokes element.\n"),
20443  AUTHORS("Patrick Eriksson"),
20444  OUT("y", "y_f", "y_pol", "y_pos", "y_los", "y_aux", "y_geo", "jacobian"),
20445  GOUT(),
20446  GOUT_TYPE(),
20447  GOUT_DESC(),
20448  IN("y",
20449  "y_f",
20450  "y_pol",
20451  "y_pos",
20452  "y_los",
20453  "y_aux",
20454  "y_geo",
20455  "jacobian",
20456  "stokes_dim",
20457  "jacobian_do",
20458  "sensor_pos",
20459  "sensor_pol"),
20460  GIN(),
20461  GIN_TYPE(),
20462  GIN_DEFAULT(),
20463  GIN_DESC()));
20464 
20465  md_data_raw.push_back(create_mdrecord(
20466  NAME("yApplyUnit"),
20467  DESCRIPTION(
20468  "Conversion of *y* to other spectral units.\n"
20469  "\n"
20470  "Any conversion to brightness temperature is normally made inside\n"
20471  "*yCalc*. This method makes it possible to also make this conversion\n"
20472  "after *yCalc*, but with restrictions for *jacobian* and with.\n"
20473  "respect to the n2-law of radiance.\n"
20474  "\n"
20475  "The conversion made inside *iyEmissionStandard* is mimiced\n"
20476  "and see that method for constraints and selection of output units.\n"
20477  "This with the restriction that the n2-law can be ignored. The later\n"
20478  "is the case if the sensor is placed in space, or if the refractive\n"
20479  "only devaites slightly from unity.\n"
20480  "\n"
20481  "The method handles *y* and *jacobian* in parallel, where\n"
20482  "the last variable is only considered if it is set. The\n"
20483  "input data must be in original radiance units. A completely\n"
20484  "stringent check of this can not be performed.\n"
20485  "\n"
20486  "The method can not be used with jacobian quantities that are not\n"
20487  "obtained through radiative transfer calculations. One example on\n"
20488  "quantity that can not be handled is *jacobianAddPolyfit*. There\n"
20489  "are no automatic checks warning for incorrect usage!\n"
20490  "\n"
20491  "If you are using this method, *iy_unit* should be set to \"1\" when\n"
20492  "calling *yCalc*, and be changed before calling this method.\n"
20493  "\n"
20494  "Conversion of *y_aux* is not supported.\n"),
20495  AUTHORS("Patrick Eriksson"),
20496  OUT("y", "jacobian"),
20497  GOUT(),
20498  GOUT_TYPE(),
20499  GOUT_DESC(),
20500  IN("y", "jacobian", "y_f", "y_pol", "iy_unit"),
20501  GIN(),
20502  GIN_TYPE(),
20503  GIN_DEFAULT(),
20504  GIN_DESC()));
20505 
20506  md_data_raw.push_back(create_mdrecord(
20507  NAME("ybatchCalc"),
20508  DESCRIPTION(
20509  "Performs batch calculations for the measurement vector y.\n"
20510  "\n"
20511  "We perform *ybatch_n* jobs, starting at index *ybatch_start*. (Zero\n"
20512  "based indexing, as usual.) The output array *ybatch* will have\n"
20513  "ybatch_n elements. Indices in the output array start\n"
20514  "with zero, independent of *ybatch_start*.\n"
20515  "\n"
20516  "The method performs the following:\n"
20517  " 1. Sets *ybatch_index* = *ybatch_start*.\n"
20518  " 2. Performs a-d until\n"
20519  " *ybatch_index* = *ybatch_start* + *ybatch_n*.\n"
20520  " a. Executes *ybatch_calc_agenda*.\n"
20521  " b. If *ybatch_index* = *ybatch_start*, resizes *ybatch*\n"
20522  " based on *ybatch_n* and length of *y*.\n"
20523  " c. Copies *y* to *ybatch_index* - *ybatch_start*\n"
20524  " of *ybatch*.\n"
20525  " d. Adds 1 to *ybatch_index*.\n"
20526  "\n"
20527  "Beside the *ybatch_calc_agenda*, the WSVs *ybatch_start*\n"
20528  "and *ybatch_n* must be set before calling this method.\n"
20529  "Further, *ybatch_calc_agenda* is expected to produce a\n"
20530  "spectrum and should accordingly include a call of *yCalc*\n"
20531  "(or asimilar method).\n"
20532  "\n"
20533  "The input variable *ybatch_start* is set to a default of zero in\n"
20534  "*general.arts*.\n"
20535  "\n"
20536  "An agenda that calculates spectra for different temperature profiles\n"
20537  "could look like this:\n"
20538  "\n"
20539  " AgendaSet(ybatch_calc_agenda){\n"
20540  " Extract(t_field,tensor4_1,ybatch_index)\n"
20541  " yCalc\n"
20542  " }\n"
20543  "\n"
20544  "Jacobians are also collected, and stored in output variable *ybatch_jacobians*. \n"
20545  "(This will be empty if yCalc produces empty Jacobians.)\n"
20546  "\n"
20547  "See the user guide for further practical examples.\n"),
20548  AUTHORS("Stefan Buehler"),
20549  OUT("ybatch", "ybatch_aux", "ybatch_jacobians"),
20550  GOUT(),
20551  GOUT_TYPE(),
20552  GOUT_DESC(),
20553  IN("ybatch_start", "ybatch_n", "ybatch_calc_agenda"),
20554  GIN("robust"),
20555  GIN_TYPE("Index"),
20556  GIN_DEFAULT("0"),
20557  GIN_DESC("A flag with value 1 or 0. If set to one, the batch\n"
20558  "calculation will continue, even if individual jobs fail. In\n"
20559  "that case, a warning message is written to screen and file\n"
20560  "(out1 output stream), and the *y* Vector entry for the\n"
20561  "failed job in *ybatch* is left empty.")));
20562 
20563  md_data_raw.push_back(create_mdrecord(
20564  NAME("yColdAtmHot"),
20565  DESCRIPTION(
20566  "Computes *y* from input using standard calibration scheme of cold-atm-hot observations\n"
20567  "\n"
20568  "If calib evaluates as true:\n"
20569  " y = cold_temp + (hot_temp - cold_temp) * (atm - cold) / (hot - cold)\n"
20570  "\n"
20571  "If calib evaluates as false:\n"
20572  " y = (hot_temp * cold - cold_temp * hot) / (hot - cold)\n"),
20573  AUTHORS("Richard Larsson"),
20574  OUT("y"),
20575  GOUT(),
20576  GOUT_TYPE(),
20577  GOUT_DESC(),
20578  IN(),
20579  GIN("cold", "atm", "hot", "cold_temp", "hot_temp", "calib"),
20580  GIN_TYPE("Vector", "Vector", "Vector", "Numeric", "Numeric", "Index"),
20581  GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, "1"),
20582  GIN_DESC("N-elem Vector of cold load linear power",
20583  "N-elem Vector of atmosphere linear power",
20584  "N-elem Vector of hot load linear power",
20585  "Cold load temperature",
20586  "Hot load temperature",
20587  "Flag for calibration scheme, false means system temperature is computed")));
20588 
20589  md_data_raw.push_back(create_mdrecord(
20590  NAME("ybatchMetProfiles"),
20591  DESCRIPTION(
20592  "This method is used for simulating ARTS for metoffice model fields"
20593  "\n"
20594  "This method reads in *met_amsu_data* which contains the\n"
20595  "lat-lon of the metoffice profile files as a Matrix. It then\n"
20596  "loops over the number of profiles and corresponding to each\n"
20597  "longitude create the appropriate profile basename. Then,\n"
20598  "corresponding to each basename we have temperature field, altitude\n"
20599  "field, humidity field, and particle number density field. The\n"
20600  "temperature field and altitude field are stored in the same dimensions\n"
20601  "as *t_field_raw* and *z_field_raw*. The oxygen and nitrogen VMRs are\n"
20602  "set to constant values of 0.209 and 0.782, respectively and are used\n"
20603  "along with humidity field to generate *vmr_field_raw*. \n"
20604  "\n"
20605  "The three fields *t_field_raw*, *z_field_raw*, and *vmr_field_raw* are\n"
20606  "given as input to *met_profile_calc_agenda* which is called in this\n"
20607  "method. See documentation of WSM *met_profile_calc_agenda* for more\n"
20608  "information on this agenda. \n"
20609  "\n"
20610  "The method also converts satellite zenith angle to appropriate\n"
20611  "*sensor_los*. It also sets the *p_grid* and *cloudbox_limits*\n"
20612  "from the profiles inside the function\n"),
20613  AUTHORS("Sreerekha T.R."),
20614  OUT("ybatch"),
20615  GOUT(),
20616  GOUT_TYPE(),
20617  GOUT_DESC(),
20618  IN("abs_species",
20619  "met_profile_calc_agenda",
20620  "f_grid",
20621  "met_amsu_data",
20622  "sensor_pos",
20623  "refellipsoid",
20624  "lat_grid",
20625  "lon_grid",
20626  "atmosphere_dim",
20627  "scat_data"),
20628  GIN("nelem_p_grid", "met_profile_path", "met_profile_pnd_path"),
20629  GIN_TYPE("Index", "String", "String"),
20631  GIN_DESC("FIXME DOC", "FIXME DOC", "FIXME DOC")));
20632 
20633  md_data_raw.push_back(create_mdrecord(
20634  NAME("ybatchMetProfilesClear"),
20635  DESCRIPTION(
20636  "This method is used for simulating ARTS for metoffice model fields\n"
20637  "for clear sky conditions.\n"
20638  "\n"
20639  "This method reads in *met_amsu_data* which contains the\n"
20640  "lat-lon of the metoffice profile files as a Matrix. It then\n"
20641  "loops over the number of profiles and corresponding to each\n"
20642  "longitude create the appropriate profile basename. Then,\n"
20643  "Corresponding to each basename we have temperature field, altitude\n"
20644  "field, humidity field, and particle number density field. The\n"
20645  "temperature field and altitude field are stored in the same dimensions\n"
20646  "as *t_field_raw* and *z_field_raw*. The oxygen and nitrogen VMRs are\n"
20647  "set to constant values of 0.209 and 0.782, respectively and are used\n"
20648  "along with humidity field to generate *vmr_field_raw*. \n"
20649  "\n"
20650  "The three fields *t_field_raw*, *z_field_raw*, and *vmr_field_raw* are\n"
20651  "given as input to *met_profile_calc_agenda* which is called in this\n"
20652  "method. See documentation of WSM *met_profile_calc_agenda* for more\n"
20653  "information on this agenda. \n"
20654  "\n"
20655  "The method also converts satellite zenith angle to appropriate\n"
20656  "*sensor_los*. It also sets the *p_grid* and *cloudbox_limits*\n"
20657  "from the profiles inside the function\n"),
20658  AUTHORS("Seerekha T.R."),
20659  OUT("ybatch"),
20660  GOUT(),
20661  GOUT_TYPE(),
20662  GOUT_DESC(),
20663  IN("abs_species",
20664  "met_profile_calc_agenda",
20665  "f_grid",
20666  "met_amsu_data",
20667  "sensor_pos",
20668  "refellipsoid"),
20669  GIN("nelem_p_grid", "met_profile_path"),
20670  GIN_TYPE("Index", "String"),
20672  GIN_DESC("FIXME DOC", "FIXME DOC")));
20673 
20674 
20675  md_data_raw.push_back(create_mdrecord(
20676  NAME("ybatchTimeAveraging"),
20677  DESCRIPTION(
20678  "Time average of *ybatch* and *time_grid*\n"
20679  "\n"
20680  "Computes the internal covariance matrix in *covmat_sepsbatch*, and\n"
20681  "stores the number of elements per averaging in *counts*\n"),
20682  AUTHORS("Richard Larsson"),
20683  OUT("ybatch", "time_grid", "covmat_sepsbatch", "counts"),
20684  GOUT(),
20685  GOUT_TYPE(),
20686  GOUT_DESC(),
20687  IN("ybatch", "time_grid"),
20688  GIN("time_step", "disregard_first", "disregard_last"),
20689  GIN_TYPE("String", "Index", "Index"),
20690  GIN_DEFAULT(NODEF, "0", "0"),
20691  GIN_DESC("Time step in the form \"INDEX SCALE\", where SCALE is \"h\", \"min\", or \"s\" for hours, minutes or seconds",
20692  "Flag to remove first time step (e.g., if it is an incomplete step)",
20693  "Flag to remove last time step (e.g., if it is an incomplete step)")));
20694 
20695  md_data_raw.push_back(create_mdrecord(
20696  NAME("ybatchTroposphericCorrectionNaiveMedianForward"),
20697  DESCRIPTION(
20698  "Performs naive tropospheric corrections on *ybatch*\n"
20699  "\n"
20700  "Sets *ybatch_corr* to be able to perform the inverse of the corrections,\n"
20701  "each array-element with 3 entries as [median, part_trans, trop_temp]\n"),
20702  AUTHORS("Richard Larsson"),
20703  OUT("ybatch_corr", "ybatch"),
20704  GOUT(),
20705  GOUT_TYPE(),
20706  GOUT_DESC(),
20707  IN("ybatch"),
20708  GIN("range", "trop_temp", "targ_temp"),
20709  GIN_TYPE("ArrayOfIndex", "Vector", "Numeric"),
20710  GIN_DEFAULT(NODEF, NODEF, "2.73"),
20711  GIN_DESC("Positions where the median of the baseline is computed, if empty all is used",
20712  "Radiative temperature of the troposphere",
20713  "Temperature target of the baseline")));
20714 
20715  md_data_raw.push_back(create_mdrecord(
20716  NAME("ybatchTroposphericCorrectionNaiveMedianInverse"),
20717  DESCRIPTION(
20718  "Performs inverse of naive tropospheric corrections on *ybatch*\n"),
20719  AUTHORS("Richard Larsson"),
20720  OUT("ybatch"),
20721  GOUT(),
20722  GOUT_TYPE(),
20723  GOUT_DESC(),
20724  IN("ybatch", "ybatch_corr"),
20725  GIN(),
20726  GIN_TYPE(),
20727  GIN_DEFAULT(),
20728  GIN_DESC()));
20729 
20730  md_data_raw.push_back(create_mdrecord(
20731  NAME("yCalc"),
20732  DESCRIPTION(
20733  "Calculation of complete measurement vectors (y).\n"
20734  "\n"
20735  "The method performs radiative transfer calculations from a sensor\n"
20736  "perspective. Radiative transfer calculations are performed for\n"
20737  "monochromatic pencil beams, following *iy_main_agenda* and\n"
20738  "associated agendas. Obtained radiances are weighted together by\n"
20739  "*sensor_response*, to include the characteristics of the sensor.\n"
20740  "The measurement vector obtained can contain anything from a single\n"
20741  "frequency value to a series of measurement scans (each consisting\n"
20742  "of a series of spectra), all depending on the settings. Spectra\n"
20743  "and jacobians are calculated in parallel.\n"
20744  "\n"
20745  "The frequency, polarisation etc. for each measurement value is\n"
20746  "given by *y_f*, *y_pol*, *y_pos* and *y_los*.\n"
20747  "\n"
20748  "The content of *y_aux* follows *iy_aux_vars. See the method selected\n"
20749  "for *iy_main_agenda* for allowed choices.\n"
20750  "\n"
20751  "The geo-positions (*y_geo*) are set based on *sensor_response*. When\n"
20752  "an antenna pattern is considered, there are several pencil beams,\n"
20753  "and thus also several goe-positions, associated with each value of *y*.\n"
20754  "The geo-position assigned to a value in *y* is the *geo_pos* of the pencil\n"
20755  "beam related to the highest value in *sensor_response*. This means that\n"
20756  "*mblock_dlos_grid* must contain the bore-sight direction (0,0), if you\n"
20757  "want *y_geo* to exactly match the bore-sight direction.\n"
20758  "\n"
20759  "The Jacobian provided (*jacobian*) is adopted to selected retrieval\n"
20760  "units, but no transformations are applied. Transformations are\n"
20761  "included by calling *jacobianAdjustAndTransform*.\n"),
20762  AUTHORS("Patrick Eriksson"),
20763  OUT("y", "y_f", "y_pol", "y_pos", "y_los", "y_aux", "y_geo", "jacobian"),
20764  GOUT(),
20765  GOUT_TYPE(),
20766  GOUT_DESC(),
20767  IN("atmgeom_checked",
20768  "atmfields_checked",
20769  "atmosphere_dim",
20770  "nlte_field",
20771  "cloudbox_on",
20772  "cloudbox_checked",
20773  "scat_data_checked",
20774  "sensor_checked",
20775  "stokes_dim",
20776  "f_grid",
20777  "sensor_pos",
20778  "sensor_los",
20779  "transmitter_pos",
20780  "mblock_dlos_grid",
20781  "sensor_response",
20782  "sensor_response_f",
20783  "sensor_response_pol",
20784  "sensor_response_dlos",
20785  "iy_unit",
20786  "iy_main_agenda",
20787  "geo_pos_agenda",
20788  "jacobian_agenda",
20789  "jacobian_do",
20790  "jacobian_quantities",
20791  "iy_aux_vars"),
20792  GIN(),
20793  GIN_TYPE(),
20794  GIN_DEFAULT(),
20795  GIN_DESC()));
20796 
20797  md_data_raw.push_back(create_mdrecord(
20798  NAME("yCalcAppend"),
20799  DESCRIPTION(
20800  "Replaces *yCalc* if a measurement shall be appended to an\n"
20801  "existing one.\n"
20802  "\n"
20803  "The method works basically as *yCalc* but appends the results to\n"
20804  "existing data, instead of creating completely new *y* and its\n"
20805  "associated variables. This method is required if your measurement\n"
20806  "consists of data from two instruments using different observation\n"
20807  "techniques (corresponding to different iyCalc-methods). One such\n"
20808  "example is if emission and transmission data are combined into a\n"
20809  "joint retrieval. The method can also be used to get around the\n"
20810  "constrain that *sensor_response* is required to be the same for\n"
20811  "all data.\n"
20812  "\n"
20813  "The new measurement is simply appended to the input *y*, and the\n"
20814  "other output variables are treated correspondingly. Data are\n"
20815  "appended \"blindly\" in *y_aux*. That is, data of different type\n"
20816  "are appended if *iy_aux_vars* differs between the two measurements,\n"
20817  "the data are appended strictly following the order. First variable\n"
20818  "of second measurement is appended to first variable of first\n"
20819  "measurement, and so on. The number of auxiliary variables can differ\n"
20820  "between the measurements. Missing data are set to zero.\n"
20821  "\n"
20822  "The set of retrieval quantities can differ between the two\n"
20823  "calculations. If an atmospheric quantity is part of both Jacobians,\n"
20824  "the same retrieval grids must be used in both cases.\n"
20825  "The treatment of instrument related Jacobians (baseline fits,\n"
20826  "pointing ...) follows the *append_instrument_wfs* argument.\n"
20827  "\n"
20828  "A difference to *yCalc* is that *jacobian_quantities* is both in-\n"
20829  "and output variable. The input version shall match the measurement\n"
20830  "to be calculated, while the output version matches the output *y*,\n"
20831  "the combined, measurements. A copies of *jacobian_quantities* of the\n"
20832  "first measurement must be made and shall be provided to the method\n"
20833  "as *jacobian_quantities_copy*.\n"
20834  "\n"
20835  "As for *yCalc* Jacobian transformations are not handled, and the\n"
20836  "the input Jacobian shall not contain transformations. That is\n"
20837  "*jacobianAdjustAndTransform* shall be called after this method,\n"
20838  "when the complete Jacobian is at hand.\n"),
20839  AUTHORS("Patrick Eriksson"),
20840  OUT("y",
20841  "y_f",
20842  "y_pol",
20843  "y_pos",
20844  "y_los",
20845  "y_aux",
20846  "y_geo",
20847  "jacobian",
20848  "jacobian_quantities"),
20849  GOUT(),
20850  GOUT_TYPE(),
20851  GOUT_DESC(),
20852  IN("y",
20853  "y_f",
20854  "y_pol",
20855  "y_pos",
20856  "y_los",
20857  "y_aux",
20858  "y_geo",
20859  "jacobian",
20860  "atmgeom_checked",
20861  "atmfields_checked",
20862  "atmosphere_dim",
20863  "nlte_field",
20864  "cloudbox_on",
20865  "cloudbox_checked",
20866  "scat_data_checked",
20867  "sensor_checked",
20868  "stokes_dim",
20869  "f_grid",
20870  "sensor_pos",
20871  "sensor_los",
20872  "transmitter_pos",
20873  "mblock_dlos_grid",
20874  "sensor_response",
20875  "sensor_response_f",
20876  "sensor_response_pol",
20877  "sensor_response_dlos",
20878  "iy_unit",
20879  "iy_main_agenda",
20880  "geo_pos_agenda",
20881  "jacobian_agenda",
20882  "jacobian_do",
20883  "jacobian_quantities",
20884  "iy_aux_vars"),
20885  GIN("jacobian_quantities_copy", "append_instrument_wfs"),
20886  GIN_TYPE("ArrayOfRetrievalQuantity", "Index"),
20887  GIN_DEFAULT(NODEF, "0"),
20888  GIN_DESC("Copy of *jacobian_quantities* of first measurement.",
20889  "Flag controlling if instrumental weighting functions are "
20890  "appended or treated as different retrieval quantities.")));
20891 
20892  md_data_raw.push_back(create_mdrecord(
20893  NAME("yActive"),
20894  DESCRIPTION(
20895  "Replaces *yCalc* for radar/lidar calculations.\n"
20896  "\n"
20897  "The output format for *iy* when simulating radars and lidars differs\n"
20898  "from the standard one, and *yCalc* can not be used for such simulations.\n"
20899  "This method works largely as *yCalc*, but is tailored to handle the\n"
20900  "output from *iyActiveSingleScat*.\n"
20901  "\n"
20902  "The method requires additional information about the sensor,\n"
20903  "regarding its recieving properties. First of all, recieved\n"
20904  "polarisation states are taken from *instrument_pol_array*. Note\n"
20905  "that this WSV allows to define several measured polarisations\n"
20906  "for each transmitted signal. For example, it is possible to\n"
20907  "simulate transmission of V and measuring backsacttered V and H.\n"
20908  "\n"
20909  "Secondly, the range averaging is described by *range_bins*. These\n"
20910  "bins can either be specified in altitude or two-way travel time.\n"
20911  "In both case, the edges of the range bins shall be specified.\n"
20912  "All data (including auxiliary variables) are returned as the\n"
20913  "average inside the bins. If a bin is totally outside the model\n"
20914  "atmosphere, NaN is returned.\n"
20915  "\n"
20916  "The options for *iy_unit* are:\n"
20917  " \"1\" : Backscatter coefficient. Unit is 1/(m*sr). At zero\n"
20918  " attenuation, this equals the scattering matrix value for\n"
20919  " the backward direction. See further AUG.\n"
20920  " \"Ze\" : Equivalent reflectivity. Unit is mm^6/m^3. Conversion\n"
20921  " formula is given below.\n"
20922  " \"dBZe\": 10*log10(Ze/Z0), where Z0 is 1 mm^6/m^3.\n"
20923  "\n"
20924  "The conversion from backscatter coefficient to Ze is:\n"
20925  " Ze = 1e18 * lambda^4 / (k2 * pi^5) * sum(sigma),\n"
20926  "where sum(sigma) = 4 * pi * b, and b is the backscatter coefficient.\n"
20927  "\n"
20928  "The reference dielectric factor can either specified directly by\n"
20929  "the argument *k2*. For example, to mimic the CloudSat data, *k2*\n"
20930  "shall be set to 0.75 (citaion needed). If *k2* is set to be \n"
20931  "negative (which is defualt), k2 is calculated as:\n"
20932  " k2 = abs( (n^2-1)/(n^2+2) )^2,\n"
20933  "where n is the refractive index of liquid water at temperature\n"
20934  "*ze_tref* and the frequency of the radar, calculated by the MPM93\n"
20935  "parameterization.\n"
20936  "\n"
20937  "A lower limit for dBZe is applied (*dbze_min*). The main reason is to\n"
20938  "handle the fact dBZe is not defined for Ze=0, and dBZe is set to the\n"
20939  "clip value when Ze < 10^(dbze_min/10).\n"),
20940  AUTHORS("Patrick Eriksson"),
20941  OUT("y", "y_f", "y_pol", "y_pos", "y_los", "y_aux", "y_geo", "jacobian"),
20942  GOUT(),
20943  GOUT_TYPE(),
20944  GOUT_DESC(),
20945  IN("atmgeom_checked",
20946  "atmfields_checked",
20947  "iy_unit",
20948  "iy_aux_vars",
20949  "stokes_dim",
20950  "f_grid",
20951  "atmosphere_dim",
20952  "nlte_field",
20953  "cloudbox_on",
20954  "cloudbox_checked",
20955  "sensor_pos",
20956  "sensor_los",
20957  "sensor_checked",
20958  "jacobian_do",
20959  "jacobian_quantities",
20960  "iy_main_agenda",
20961  "geo_pos_agenda",
20962  "instrument_pol_array",
20963  "range_bins"),
20964  GIN("ze_tref", "k2", "dbze_min"),
20965  GIN_TYPE("Numeric", "Numeric", "Numeric"),
20966  GIN_DEFAULT("273.15", "-1", "-99"),
20967  GIN_DESC("Reference temperature for conversion to Ze.",
20968  "Reference dielectric factor.",
20969  "Clip value for dBZe.")));
20970 
20971  md_data_raw.push_back(create_mdrecord(
20972  NAME("ySimpleSpectrometer"),
20973  DESCRIPTION(
20974  "Converts *iy* to *y* assuming a fixed frequency resolution.\n"
20975  "\n"
20976  "This is a short-cut, avoiding *yCalc*, that can be used to convert\n"
20977  "monochromatic pencil beam data to spectra with a fixed resolution.\n"
20978  "\n"
20979  "The method mimics a spectrometer with rectangular response\n"
20980  "functions, all having the same width (*df*). The position of\n"
20981  "the first spectrometer channel is set to f_grid[0]+df/2.\n"
20982  "The centre frequency of channels are returned as *y_f*.\n"
20983  "\n"
20984  "Auxiliary variables and *jacobian*s are not handled.\n"),
20985  AUTHORS("Patrick Eriksson"),
20986  OUT("y", "y_f"),
20987  GOUT(),
20988  GOUT_TYPE(),
20989  GOUT_DESC(),
20990  IN("iy", "stokes_dim", "f_grid"),
20991  GIN("df"),
20992  GIN_TYPE("Numeric"),
20993  GIN_DEFAULT(NODEF),
20994  GIN_DESC("Selected frequency resolution.")));
20995 
20996  md_data_raw.push_back(create_mdrecord(
20997  NAME("z_fieldFromHSE"),
20998  DESCRIPTION(
20999  "Force altitudes to fulfil hydrostatic equilibrium.\n"
21000  "\n"
21001  "The method applies hydrostatic equilibrium. A mixture of \"dry\n"
21002  "air\" and water vapour (if present as *abs_species* tag) is assumed.\n"
21003  "That is, the air is assumed to be well mixed and its weight, apart\n"
21004  "from the water vapour, is constant (*molarmass_dry_air*). In\n"
21005  "addition, the effect of any particles (including liquid and ice\n"
21006  "particles) is neglected.\n"
21007  "\n"
21008  "The output is an update of *z_field*. This variable is expected to\n"
21009  "contain approximative altitudes when calling the function. The\n"
21010  "altitude matching *p_hse* is kept constant. Other input altitudes can\n"
21011  "basically be arbitrary, but good estimates give quicker calculations.\n"
21012  "\n"
21013  "The calculations are repeated until the change in altitude is below\n"
21014  "*z_hse_accuracy*. An iterative process is needed as gravity varies\n"
21015  "with altitude.\n"
21016  "\n"
21017  "For 1D and 2D, the geographical position is taken from *lat_true*\n"
21018  "and *lon_true*.\n"),
21019  AUTHORS("Patrick Eriksson"),
21020  OUT("z_field"),
21021  GOUT(),
21022  GOUT_TYPE(),
21023  GOUT_DESC(),
21024  IN("atmosphere_dim",
21025  "p_grid",
21026  "lat_grid",
21027  "lon_grid",
21028  "lat_true",
21029  "lon_true",
21030  "abs_species",
21031  "t_field",
21032  "z_field",
21033  "vmr_field",
21034  "refellipsoid",
21035  "z_surface",
21036  "atmfields_checked",
21037  "g0_agenda",
21038  "molarmass_dry_air",
21039  "p_hse",
21040  "z_hse_accuracy"),
21041  GIN(),
21042  GIN_TYPE(),
21043  GIN_DEFAULT(),
21044  GIN_DESC()));
21045 }
#define GOUT_DESC(...)
Definition: methods.cc:112
#define GIN_DESC(...)
Definition: methods.cc:122
MdRecord create_mdrecord(const char(&name) [LEN_OF_NAME], const char(&description) [LEN_OF_DESCRIPTION], const std::array< String, NUM_OF_AUTHORS > &authors, const std::array< String, NUM_OF_OUTPUTS > &output, const std::array< String, NUM_OF_GOUT_ARGS > &gout, const std::array< String, NUM_OF_GOUT_TYPES > &gouttype, const std::array< String, NUM_OF_GOUT_DESCRIPTIONS > &goutdesc, const std::array< String, NUM_OF_INPUTS > &input, const std::array< String, NUM_OF_GIN_ARGS > &gin, const std::array< String, NUM_OF_GIN_TYPES > &gintype, const std::array< String, NUM_OF_GIN_DEFAULTS > &gindefault, const std::array< String, NUM_OF_GIN_DESCRIPTIONS > &gindesc, Ts ... flags)
Definition: methods.cc:62
All information for one workspace method.
Definition: methods.h:41
String get_array_groups_as_string(bool basetype_is_group, bool return_basetype_only)
Return string list of array types.
Definition: groups.cc:232
#define IN(...)
Definition: methods.cc:114
#define GIN_TYPE(...)
Definition: methods.cc:118
The global header file for ARTS.
#define NODEF
Definition: methods.h:35
#define AGENDAMETHOD(x)
Definition: methods.cc:125
#define PASSWORKSPACE(x)
Definition: methods.cc:127
#define OUT(...)
Definition: methods.cc:106
#define SETMETHOD(x)
Definition: methods.cc:124
#define AUTHORS(...)
Definition: methods.cc:104
#define USES_TEMPLATES(x)
Definition: methods.cc:126
#define GIN_DEFAULT(...)
Definition: methods.cc:120
#define NAME(x)
Definition: methods.cc:102
Array< String > ArrayOfString
An array of Strings.
Definition: mystring.h:283
#define GOUT_TYPE(...)
Definition: methods.cc:110
This can be used to make arrays out of anything.
Definition: array.h:40
const ArrayOfString wsv_group_names
The names associated with Wsv groups as Strings.
Definition: global_data.h:93
#define GOUT(...)
Definition: methods.cc:108
void define_md_data_raw()
Definition: methods.cc:191
#define PASSWSVNAMES(x)
Definition: methods.cc:128
#define GIN(...)
Definition: methods.cc:116
Declaration of the class MdRecord.
#define DESCRIPTION(x)
Definition: methods.cc:103
my_basic_string< char > String
The String type for ARTS.
Definition: mystring.h:280
std::array< String, sizeof...(T)> string_array(const T &... input)
Definition: methods.cc:44
const Array< MdRecord > md_data_raw
Lookup information for workspace methods.
Definition: methods.cc:39
Auxiliary header stuff related to workspace variable groups.