ARTS 2.5.0 (git: 9ee3ac6c)
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
38namespace global_data {
41} // namespace global_data
42
43template <typename ... T>
44std::array<String, sizeof...(T)> string_array(const T&... input)
45{
46 return {String(input)...};
47}
48
49template <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()),
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")),
222 ArrayOfString(GOUT("out")),
223 ArrayOfString(GOUT_TYPE((*it).c_str())),
224 ArrayOfString(GOUT_DESC("Variable to create.")),
225 ArrayOfString(IN()),
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
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
259 NAME("abs_cia_dataAddCIARecord"),
261 "Takes CIARecord as input and appends the results in the appropriate place.\n"
262 "\n"
263 "If CIARecord has same species as species in *abs_cia_data*, then the array\n"
264 "position is used to append all of the CIARecord into the array. If clobber\n"
265 "evaluates as true, cia_record overwrites the appropriate *abs_cia_data*. If\n"
266 "species in cia_record are not in *abs_cia_data*, the CIARecord is pushed back.\n"),
267 AUTHORS("Richard Larsson"),
268 OUT("abs_cia_data"),
269 GOUT(),
270 GOUT_TYPE(),
271 GOUT_DESC(),
272 IN("abs_cia_data"),
273 GIN("cia_record", "clobber"),
274 GIN_TYPE("CIARecord", "Index"),
275 GIN_DEFAULT(NODEF, "0"),
276 GIN_DESC("CIA record to append to *abs_cia_data*.",
277 "If true, the new input clobbers the old cia data.")));
278
280 NAME("abs_cia_dataReadFromCIA"),
282 "Read data from a CIA data file for all CIA molecules defined\n"
283 "in *abs_species*.\n"
284 "\n"
285 "The units in the HITRAN file are:\n"
286 "Frequency: cm^(-1)\n"
287 "Binary absorption cross-section: cm^5 molec^(-2)\n"
288 "\n"
289 "Upon reading we convert this to the ARTS internal SI units \n"
290 "of Hz and m^5 molec^(-2).\n"),
291 AUTHORS("Oliver Lemke"),
292 OUT("abs_cia_data"),
293 GOUT(),
294 GOUT_TYPE(),
295 GOUT_DESC(),
296 IN("abs_species"),
297 GIN("catalogpath"),
298 GIN_TYPE("String"),
300 GIN_DESC("Path to the CIA catalog directory.")));
301
303 NAME("abs_cia_dataReadFromXML"),
305 "Read data from a CIA XML file and check that all CIA tags defined\n"
306 "in *abs_species* are present in the file.\n"
307 "\n"
308 "The units of the data are described in *abs_cia_dataReadFromCIA*.\n"),
309 AUTHORS("Oliver Lemke"),
310 OUT("abs_cia_data"),
311 GOUT(),
312 GOUT_TYPE(),
313 GOUT_DESC(),
314 IN("abs_species"),
315 GIN("filename"),
316 GIN_TYPE("String"),
317 GIN_DEFAULT(""),
318 GIN_DESC("Name of the XML file.")));
319
321 NAME("abs_cont_descriptionAppend"),
323 "Appends the description of a continuum model or a complete absorption\n"
324 "model to *abs_cont_names* and *abs_cont_parameters*.\n"
325 "\n"
326 "See online documentation for *abs_cont_names* for a list of\n"
327 "allowed models and for information what parameters they require. See\n"
328 "file includes/continua.arts for default parameters for the various models.\n"),
329 AUTHORS("Thomas Kuhn", "Stefan Buehler"),
330 OUT("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
331 GOUT(),
332 GOUT_TYPE(),
333 GOUT_DESC(),
334 IN("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
335 GIN("tagname", "model", "userparam"),
336 GIN_TYPE("String", "String", "Vector"),
337 GIN_DEFAULT(NODEF, NODEF, "[]"),
338 GIN_DESC(
339 "The name (species tag) of a continuum model. Must match one\n"
340 "of the models implemented in ARTS.\n",
341 "A string selecting a particular continuum/full model under this\n"
342 "species tag.\n",
343 "A Vector containing the required parameters for the selected model.\n"
344 "The meaning of the parameters and how many parameters are required\n"
345 "depends on the model.\n")));
346
348 NAME("abs_cont_descriptionInit"),
350 "Initializes the two workspace variables for the continuum description,\n"
351 "*abs_cont_names* and *abs_cont_parameters*.\n"
352 "\n"
353 "This method does not really do anything, except setting the two\n"
354 "variables to empty Arrays. It is just necessary because the method\n"
355 "*abs_cont_descriptionAppend* wants to append to the variables.\n"
356 "\n"
357 "Formally, the continuum description workspace variables are required\n"
358 "by the absorption calculation methods (e.g., *abs_xsec_per_speciesAddConts*).\n"
359 "Therefore you always have to call at least *abs_cont_descriptionInit*, even\n"
360 "if you do not want to use any continua.\n"),
361 AUTHORS("Thomas Kuhn", "Stefan Buehler"),
362 OUT("abs_cont_names", "abs_cont_models", "abs_cont_parameters"),
363 GOUT(),
364 GOUT_TYPE(),
365 GOUT_DESC(),
366 IN(),
367 GIN(),
368 GIN_TYPE(),
369 GIN_DEFAULT(),
370 GIN_DESC()));
371
373 NAME("abs_hitran_relmat_dataReadHitranRelmatDataAndLines"),
374 DESCRIPTION("Reads HITRAN line mixing data from a basedir\n"
375 "The basedir must point at line mixing data as provided by HITRAN.\n"
376 "The lines will be changed such that ALL CO2 lines are truncated\n"
377 "before adding the HITRAN line mixing lines.\n"
378 "\n"
379 "The available modes are such that \"VP*\" uses Voigt profiles and\n"
380 "\"SDVP*\" uses speed-dependent Voigt profiles, where the \"_Y\"\n"
381 "signifies if Rosenkranz-style line mixing is considered or not, and\n"
382 "the \"W\" at the end signifies that full calculations are used. At\n"
383 "the line mixing limit, line mixing is simply turned off.\n"
384 "\n"
385 "The \"FullW\" mode uses Lorentzian calculations with the full relaxation\n"
386 "matrix until the line mixing limit is reached and it switches to Voigt.\n"
387 "\n"
388 "The HITRAN LM data is available for download at:\n"
389 "https://hitran.org/supplementary/\n"
390 ),
391 AUTHORS("Richard Larsson"),
392 OUT("abs_hitran_relmat_data", "abs_lines_per_species"),
393 GOUT(),
394 GOUT_TYPE(),
395 GOUT_DESC(),
396 IN("abs_lines_per_species", "abs_species"),
397 GIN("basedir", "linemixinglimit", "fmin", "fmax", "stot", "mode", "hitran_type"),
398 GIN_TYPE("String", "Numeric", "Numeric", "Numeric", "Numeric", "String", "String"),
399 GIN_DEFAULT(NODEF, "-1", "-1e99", "1e99", "0", "VP_W", "Newest"),
400 GIN_DESC("Direcory where the linemixing data is to be found",
401 "Line mixing limit as defined by *AbsorptionLines*",
402 "Minimum frequency to read from",
403 "Maximum frequency to read until",
404 "Minimum integrated band strength to consider",
405 "Mode of calculations. The options are: \"VP\", \"VP_Y\", \"SDVP\", \"SDVP_Y\", \"FullW\", and \"VP_W\"",
406 "Type of HITRAN catalog used (to scale line strengths)"
407 )));
408
410 NAME("abs_lines_per_speciesAdaptHitranLineMixing"),
411 DESCRIPTION("Adapts the line-catalog from using HITRAN data to.\n"
412 "instead fit ordered parameters to imitate the line mxixing\n"
413 "\n"
414 "The order should be 1 or 2. It will compute at 3 as well, but\n"
415 "there's no support in current ARTS LBL to make use of it so it\n"
416 "will crash at some point\n"
417 ),
418 AUTHORS("Richard Larsson"),
419 OUT("abs_lines_per_species"),
420 GOUT(),
421 GOUT_TYPE(),
422 GOUT_DESC(),
423 IN("abs_lines_per_species", "abs_hitran_relmat_data"),
424 GIN("t_grid", "pressure", "order"),
425 GIN_TYPE("Vector", "Numeric", "Index"),
427 GIN_DESC("The sorted temperature grid",
428 "The pressure at which the adaptation is made",
429 "The order of the parameters in adaptation")));
430
432 NAME("abs_lines_per_speciesHitranLineMixingAdaptationData"),
433 DESCRIPTION("Calls underlying functions to get adaptation data\n"
434 ),
435 AUTHORS("Richard Larsson"),
436 OUT(),
437 GOUT("lm_data"),
438 GOUT_TYPE("ArrayOfTensor5"),
439 GOUT_DESC("Underlying LM data in order of appearance"),
440 IN("abs_lines_per_species", "abs_hitran_relmat_data"),
441 GIN("t_grid", "p_grid"),
442 GIN_TYPE("Vector", "Vector"),
444 GIN_DESC("The temperature grid",
445 "The pressure grid")));
446
448 NAME("abs_linesKeepBand"),
449 DESCRIPTION("Keep only *qid*-match band lines in *abs_lines*\n"
450 "\n"
451 "Note that other bands are technically kept but have zero lines\n"),
452 AUTHORS("Richard Larsson"),
453 OUT("abs_lines"),
454 GOUT(),
455 GOUT_TYPE(),
456 GOUT_DESC(),
457 IN("abs_lines"),
458 GIN("qid"),
459 GIN_TYPE("QuantumIdentifier"),
461 GIN_DESC("Band ID")));
462
464 NAME("abs_linesRemoveBand"),
465 DESCRIPTION("Removes *qid* band from *abs_lines*\n"),
466 AUTHORS("Richard Larsson"),
467 OUT("abs_lines"),
468 GOUT(),
469 GOUT_TYPE(),
470 GOUT_DESC(),
471 IN("abs_lines"),
472 GIN("qid"),
473 GIN_TYPE("QuantumIdentifier"),
475 GIN_DESC("Band ID")));
476
478 NAME("abs_linesRemoveLines"),
479 DESCRIPTION("Remove lines *abs_lines* outside of specifications\n"
480 "\n"
481 "The specifications are:\n"
482 "\tThe lower frequency bound (all lines of this frequency or higher may be kept)\n"
483 "\tThe upper frequency bound (all lines of this frequency or lower may be kept)\n"
484 "\tThe lower intensity bound (all lines with lower intensity may be removed)\n"
485 "\n"
486 "If safe evaluates true, all lines in an absorption band must fail the above tests to be removed\n"
487 ),
488 AUTHORS("Richard Larsson"),
489 OUT("abs_lines"),
490 GOUT(),
491 GOUT_TYPE(),
492 GOUT_DESC(),
493 IN("abs_lines"),
494 GIN("lower_frequency", "upper_frequency", "lower_intensity", "safe"),
495 GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
496 GIN_DEFAULT("-1e99", "1e99", "0", "1"),
497 GIN_DESC("The lower frequency bound",
498 "The upper frequency bound",
499 "The lower intensity bound",
500 "Remove only lines from a band if all lines of a band fail")));
501
503 NAME("abs_lines_per_speciesRemoveLines"),
504 DESCRIPTION("Repeats *abs_linesRemoveLines* for all inner arrays\n"
505 ),
506 AUTHORS("Richard Larsson"),
507 OUT("abs_lines_per_species"),
508 GOUT(),
509 GOUT_TYPE(),
510 GOUT_DESC(),
511 IN("abs_lines_per_species"),
512 GIN("lower_frequency", "upper_frequency", "lower_intensity", "safe"),
513 GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
514 GIN_DEFAULT("-1e99", "1e99", "0", "1"),
515 GIN_DESC("The lower frequency bound",
516 "The upper frequency bound",
517 "The lower intensity bound",
518 "Remove only lines from a band if all lines of a band fail")));
519
521 NAME("abs_linesRemoveLinesFromSpecies"),
522 DESCRIPTION("As *abs_linesRemoveLines* but only for bands of the given species\n"
523 "\n"
524 "species must be a single entry, and must specify the isotopologue\n"
525 ),
526 AUTHORS("Richard Larsson"),
527 OUT("abs_lines"),
528 GOUT(),
529 GOUT_TYPE(),
530 GOUT_DESC(),
531 IN("abs_lines"),
532 GIN("species", "lower_frequency", "upper_frequency", "lower_intensity", "safe"),
533 GIN_TYPE("ArrayOfSpeciesTag", "Numeric", "Numeric", "Numeric", "Index"),
534 GIN_DEFAULT(NODEF, "-1e99", "1e99", "0", "1"),
535 GIN_DESC("Species to be removed",
536 "The lower frequency bound",
537 "The upper frequency bound",
538 "The lower intensity bound",
539 "Remove only lines from a band if all lines of a band fail")));
540
542 NAME("abs_lines_per_speciesRemoveLinesFromSpecies"),
543 DESCRIPTION("Repeats *abs_linesRemoveLinesFromSpecies* for all inner arrays\n"
544 ),
545 AUTHORS("Richard Larsson"),
546 OUT("abs_lines_per_species"),
547 GOUT(),
548 GOUT_TYPE(),
549 GOUT_DESC(),
550 IN("abs_lines_per_species"),
551 GIN("species", "lower_frequency", "upper_frequency", "lower_intensity", "safe"),
552 GIN_TYPE("ArrayOfSpeciesTag", "Numeric", "Numeric", "Numeric", "Index"),
553 GIN_DEFAULT(NODEF, "-1e99", "1e99", "0", "1"),
554 GIN_DESC("Species to be removed",
555 "The lower frequency bound",
556 "The upper frequency bound",
557 "The lower intensity bound",
558 "Remove only lines from a band if all lines of a band fail")));
559
561 NAME("abs_linesRemoveEmptyBands"),
562 DESCRIPTION("Removes emtpy bands from *abs_lines*\n"),
563 AUTHORS("Richard Larsson"),
564 OUT("abs_lines"),
565 GOUT(),
566 GOUT_TYPE(),
567 GOUT_DESC(),
568 IN("abs_lines"),
569 GIN(),
570 GIN_TYPE(),
571 GIN_DEFAULT(),
572 GIN_DESC()));
573
575 NAME("abs_linesFlatten"),
576 DESCRIPTION("Makes *abs_lines* with the same ID share lines\n"),
577 AUTHORS("Richard Larsson"),
578 OUT("abs_lines"),
579 GOUT(),
580 GOUT_TYPE(),
581 GOUT_DESC(),
582 IN("abs_lines"),
583 GIN(),
584 GIN_TYPE(),
585 GIN_DEFAULT(),
586 GIN_DESC()));
587
589 NAME("abs_lines_per_speciesFlatten"),
590 DESCRIPTION("Calls *abs_linesFlatten* per internal set of bands\n"),
591 AUTHORS("Richard Larsson"),
592 OUT("abs_lines_per_species"),
593 GOUT(),
594 GOUT_TYPE(),
595 GOUT_DESC(),
596 IN("abs_lines_per_species"),
597 GIN(),
598 GIN_TYPE(),
599 GIN_DEFAULT(),
600 GIN_DESC()));
601
603 NAME("abs_linesRemoveUnusedLocalQuantumNumbers"),
605 "Removes unused quantums from local values in the line lists\n"),
606 AUTHORS("Richard Larsson"),
607 OUT("abs_lines"),
608 GOUT(),
609 GOUT_TYPE(),
610 GOUT_DESC(),
611 IN("abs_lines"),
612 GIN(),
613 GIN_TYPE(),
614 GIN_DEFAULT(),
615 GIN_DESC()));
616
618 NAME("abs_linesReplaceWithLines"),
620 "Replace all lines in *abs_lines* that match with lines in replacement_lines.\n"
621 "\n"
622 "Each replacement_lines must match excatly a single line in *abs_lines*.\n"
623 "\n"
624 "The matching required identical quantum number signatures to work\n"
625 "\n"
626 "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers.\n"),
627 AUTHORS("Richard Larsson"),
628 OUT("abs_lines"),
629 GOUT(),
630 GOUT_TYPE(),
631 GOUT_DESC(),
632 IN("abs_lines"),
633 GIN("replacing_lines"),
634 GIN_TYPE("ArrayOfAbsorptionLines"),
636 GIN_DESC("Line-array that replace lines in *abs_lines*.")));
637
639 NAME("abs_linesAppendWithLines"),
641 "Appends all lines in *abs_lines* that match with lines in replacement_lines if *safe*.\n"
642 "If not *safe*, appends all lines.\n"
643 "\n"
644 "No appended line is allowed to match any line in *abs_lines* if *safe*\n"
645 "\n"
646 "Conditional behavior if *safe*:\n"
647 "\tIf the AbosorptionLines to be appended match no AbsorptionLines\n"
648 "\tin *abs_lines*, then the entire AbsorptionLines is appended.\n"
649 "\tOtherwise, only a single AbsorptionLines can be matched and is not\n"
650 "\tallowed to have any internal matches\n"
651 "\n"
652 "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers\n"
653 "in *safe* mode.\n"),
654 AUTHORS("Richard Larsson"),
655 OUT("abs_lines"),
656 GOUT(),
657 GOUT_TYPE(),
658 GOUT_DESC(),
659 IN("abs_lines"),
660 GIN("appending_lines", "safe"),
661 GIN_TYPE("ArrayOfAbsorptionLines", "Index"),
662 GIN_DEFAULT(NODEF, "1"),
663 GIN_DESC("Line-array that appends lines in *abs_lines*.",
664 "Flag whether to check quantum numbers or not")));
665
667 NAME("abs_linesDeleteWithLines"),
669 "Deletes all lines in *abs_lines* that match with lines in replacement_lines.\n"
670 "\n"
671 "If a deleted line has no match, then nothing happens.\n"
672 "\n"
673 "Note that lines are identified by their AbsorptionLines tags and by their quantum numbers.\n"
674 "There is no need to have all values correct.\n"),
675 AUTHORS("Richard Larsson"),
676 OUT("abs_lines"),
677 GOUT(),
678 GOUT_TYPE(),
679 GOUT_DESC(),
680 IN("abs_lines"),
681 GIN("deleting_lines"),
682 GIN_TYPE("ArrayOfAbsorptionLines"),
684 GIN_DESC("Line-array that removes lines from *abs_lines*.")));
685
687 NAME("abs_linesDeleteBadF0"),
689 "Deletes all lines in *abs_lines* that have bad central frequencies\n"
690 "\n"
691 "If lower evaluates as true, deletes all lines with a frequency below f0.\n"
692 "Otherwise deletes all lines with a frequency above f0.\n"),
693 AUTHORS("Richard Larsson"),
694 OUT("abs_lines"),
695 GOUT(),
696 GOUT_TYPE(),
697 GOUT_DESC(),
698 IN("abs_lines"),
699 GIN("f0", "lower"),
700 GIN_TYPE("Numeric", "Index"),
701 GIN_DEFAULT(NODEF, "1"),
702 GIN_DESC("Target frequency",
703 "Lower or upper flag (eval as boolean)")));
704
706 NAME("abs_linesDeleteLinesWithUndefinedLocalQuanta"),
708 "Deletes all lines in *abs_lines* that have undefined local quanta\n"),
709 AUTHORS("Richard Larsson"),
710 OUT("abs_lines"),
711 GOUT(),
712 GOUT_TYPE(),
713 GOUT_DESC(),
714 IN("abs_lines"),
715 GIN(),
716 GIN_TYPE(),
717 GIN_DEFAULT(),
718 GIN_DESC()));
719
721 NAME("abs_linesDeleteLinesWithBadOrHighChangingJs"),
722 DESCRIPTION("Deletes all lines in *abs_lines* that have undefined Js or Js\n"
723 "that change more than 1 between energy levels\n"),
724 AUTHORS("Richard Larsson"),
725 OUT("abs_lines"),
726 GOUT(),
727 GOUT_TYPE(),
728 GOUT_DESC(),
729 IN("abs_lines"),
730 GIN(),
731 GIN_TYPE(),
732 GIN_DEFAULT(),
733 GIN_DESC()));
734
736 NAME("abs_linesDeleteLinesWithQuantumNumberAbove"),
737 DESCRIPTION("Deletes all lines in *abs_lines* that have too large quantum number\n"),
738 AUTHORS("Richard Larsson"),
739 OUT("abs_lines"),
740 GOUT(),
741 GOUT_TYPE(),
742 GOUT_DESC(),
743 IN("abs_lines"),
744 GIN("quantumnumber", "quantumnumber_value"),
745 GIN_TYPE("String", "Index"),
747 GIN_DESC("Quantum number identified", "Value")));
748
750 NAME("abs_linesPrintDefinedQuantumNumbers"),
751 DESCRIPTION("Print the count of defined quantum numbers in the catalog\n"),
752 AUTHORS("Richard Larsson"),
753 OUT(),
754 GOUT(),
755 GOUT_TYPE(),
756 GOUT_DESC(),
757 IN("abs_lines"),
758 GIN(),
759 GIN_TYPE(),
760 GIN_DEFAULT(),
761 GIN_DESC()));
762
764 NAME("abs_lines_per_speciesReadSplitCatalog"),
765 DESCRIPTION("Reads *abs_lines_per_species* split by\n"
766 "*abs_linesWriteSplitXML* or *abs_lines_per_speciesWriteSplitXML*\n"
767 "\n"
768 "Note that this will sort the isotopologue\n"),
769 AUTHORS("Richard Larsson"),
770 OUT("abs_lines_per_species"),
771 GOUT(),
772 GOUT_TYPE(),
773 GOUT_DESC(),
774 IN("abs_species"),
775 GIN("basename"),
776 GIN_TYPE("String"),
778 GIN_DESC("The path to the split catalog files")));
779
781 NAME("abs_linesReadSpeciesSplitCatalog"),
782 DESCRIPTION("Reads a catalog of absorption lines files in a directory\n"),
783 AUTHORS("Richard Larsson"),
784 OUT("abs_lines"),
785 GOUT(),
786 GOUT_TYPE(),
787 GOUT_DESC(),
788 IN(),
789 GIN("basename", "robust"),
790 GIN_TYPE("String", "Index"),
791 GIN_DEFAULT(NODEF, "0"),
792 GIN_DESC("The path to the split catalog files",
793 "Flag to continue in case nothing is found [0 throws, 1 continues]")));
794
796 NAME("abs_lines_per_speciesReadSpeciesSplitCatalog"),
797 DESCRIPTION("See *abs_lines_per_speciesReadSplitCatalog* but expects\n"
798 "a single file per species of *ArrayOfAbsorptionLines*\n"),
799 AUTHORS("Richard Larsson"),
800 OUT("abs_lines_per_species"),
801 GOUT(),
802 GOUT_TYPE(),
803 GOUT_DESC(),
804 IN("abs_species"),
805 GIN("basename", "robust"),
806 GIN_TYPE("String", "Index"),
807 GIN_DEFAULT(NODEF, "0"),
808 GIN_DESC("The path to the split catalog files",
809 "Flag to continue in case nothing is found [0 throws, 1 continues]")));
810
812 NAME("abs_lines_per_speciesSetEmpty"),
813 DESCRIPTION("Empties *abs_lines_per_species* at the correct size.\n"),
814 AUTHORS("Richard Larsson"),
815 OUT("abs_lines_per_species"),
816 GOUT(),
817 GOUT_TYPE(),
818 GOUT_DESC(),
819 IN("abs_species"),
820 GIN(),
821 GIN_TYPE(),
822 GIN_DEFAULT(),
823 GIN_DESC()));
824
825 md_data_raw.push_back(
826 create_mdrecord(NAME("abs_linesSetEmptyBroadeningParametersToEmpty"),
827 DESCRIPTION("Sets a broadening parameter to empty if it is efficiently empty\n"
828 "\n"
829 "This will not save RAM but it will save disk space (reading time),\n"
830 "and computational time by not doing unecessary calculations\n"),
831 AUTHORS("Richard Larsson"),
832 OUT("abs_lines"),
833 GOUT(),
834 GOUT_TYPE(),
835 GOUT_DESC(),
836 IN("abs_lines"),
837 GIN(),
838 GIN_TYPE(),
839 GIN_DEFAULT(),
840 GIN_DESC()));
841
842 md_data_raw.push_back(
843 create_mdrecord(NAME("abs_linesSetNormalization"),
844 DESCRIPTION("Sets normalization type for all lines.\n"
845 "\n"
846 "Available options:\n"
847 "\t\"VVH\" \t - \t Van Vleck and Huber\n"
848 "\t\"VVW\" \t - \t Van Vleck and Weisskopf\n"
849 "\t\"RQ\" \t - \t Rosenkranz quadratic\n"
850 "\t\"None\" \t - \t No extra normalization\n"
851 "\n"
852 "See the theory guide for more details.\n"),
853 AUTHORS("Richard Larsson"),
854 OUT("abs_lines"),
855 GOUT(),
856 GOUT_TYPE(),
857 GOUT_DESC(),
858 IN("abs_lines"),
859 GIN("option"),
860 GIN_TYPE("String"),
862 GIN_DESC("Method of line normalizations")));
863
864 md_data_raw.push_back(
865 create_mdrecord(NAME("abs_lines_per_speciesSetNormalization"),
866 DESCRIPTION("See *abs_linesSetNormalization*\n"),
867 AUTHORS("Richard Larsson"),
868 OUT("abs_lines_per_species"),
869 GOUT(),
870 GOUT_TYPE(),
871 GOUT_DESC(),
872 IN("abs_lines_per_species"),
873 GIN("option"),
874 GIN_TYPE("String"),
876 GIN_DESC("Method of line normalizations")));
877
878 md_data_raw.push_back(
879 create_mdrecord(NAME("abs_linesSetNormalizationForMatch"),
880 DESCRIPTION("See *abs_linesSetNormalization* for options\n"
881 "\n"
882 "This function only acts on matches between the bands and input ID\n"),
883 AUTHORS("Richard Larsson"),
884 OUT("abs_lines"),
885 GOUT(),
886 GOUT_TYPE(),
887 GOUT_DESC(),
888 IN("abs_lines"),
889 GIN("option", "ID"),
890 GIN_TYPE("String", "QuantumIdentifier"),
892 GIN_DESC("Method of line normalizations",
893 "ID of one or more bands")));
894
895 md_data_raw.push_back(
896 create_mdrecord(NAME("abs_lines_per_speciesSetNormalizationForMatch"),
897 DESCRIPTION("See *abs_linesSetNormalization* for options\n"
898 "\n"
899 "This function only acts on matches between the bands and input ID\n"),
900 AUTHORS("Richard Larsson"),
901 OUT("abs_lines_per_species"),
902 GOUT(),
903 GOUT_TYPE(),
904 GOUT_DESC(),
905 IN("abs_lines_per_species"),
906 GIN("option", "ID"),
907 GIN_TYPE("String", "QuantumIdentifier"),
909 GIN_DESC("Method of line normalizations",
910 "ID of one or more bands")));
911
912 md_data_raw.push_back(
913 create_mdrecord(NAME("abs_lines_per_speciesSetNormalizationForSpecies"),
914 DESCRIPTION("See *abs_linesSetNormalization* but for single species\n"),
915 AUTHORS("Richard Larsson"),
916 OUT("abs_lines_per_species"),
917 GOUT(),
918 GOUT_TYPE(),
919 GOUT_DESC(),
920 IN("abs_lines_per_species", "abs_species"),
921 GIN("option", "species_tag"),
922 GIN_TYPE("String", "String"),
924 GIN_DESC("Method of line normalizations",
925 "The species tag from *abs_species* to change")));
926
927 md_data_raw.push_back(
928 create_mdrecord(NAME("abs_linesSetMirroring"),
929 DESCRIPTION("Sets mirroring type for all lines.\n"
930 "\n"
931 "Available options:\n"
932 "\t\"None\" \t - \t No mirrored line\n"
933 "\t\"SameAsLineShape\"\t - \t Mirrored line broadened by line shape\n"
934 "\t\"Manual\" \t - \t Manually mirrored line (be careful; allows all frequencies)\n"
935 "\t\"Lorentz\" \t - \t Mirrored line broadened by Lorentz\n"
936 "\n"
937 "Note that mirroring is never applied for DP line shape\n"
938 "Also note that Lorentz profile is approached by most line shapes at high frequency offset.\n"
939 "Also note that Manual settings are potentially dangerous as other frequency\n"
940 "offsets might not work as hoped.\n"),
941 AUTHORS("Richard Larsson"),
942 OUT("abs_lines"),
943 GOUT(),
944 GOUT_TYPE(),
945 GOUT_DESC(),
946 IN("abs_lines"),
947 GIN("option"),
948 GIN_TYPE("String"),
950 GIN_DESC("Method of line mirroring")));
951
952 md_data_raw.push_back(
953 create_mdrecord(NAME("abs_lines_per_speciesSetMirroring"),
954 DESCRIPTION("See *abs_linesSetMirroring*\n"),
955 AUTHORS("Richard Larsson"),
956 OUT("abs_lines_per_species"),
957 GOUT(),
958 GOUT_TYPE(),
959 GOUT_DESC(),
960 IN("abs_lines_per_species"),
961 GIN("option"),
962 GIN_TYPE("String"),
964 GIN_DESC("Method of line mirroring")));
965
966 md_data_raw.push_back(
967 create_mdrecord(NAME("abs_linesSetMirroringForMatch"),
968 DESCRIPTION("See *abs_linesSetMirroring* for options\n"
969 "\n"
970 "This function only acts on matches between the bands and input ID\n"),
971 AUTHORS("Richard Larsson"),
972 OUT("abs_lines"),
973 GOUT(),
974 GOUT_TYPE(),
975 GOUT_DESC(),
976 IN("abs_lines"),
977 GIN("option", "ID"),
978 GIN_TYPE("String", "QuantumIdentifier"),
980 GIN_DESC("Method of line mirroring",
981 "ID of one or more bands")));
982
983 md_data_raw.push_back(
984 create_mdrecord(NAME("abs_lines_per_speciesSetMirroringForMatch"),
985 DESCRIPTION("See *abs_linesSetMirroring* for options\n"
986 "\n"
987 "This function only acts on matches between the bands and input ID\n"),
988 AUTHORS("Richard Larsson"),
989 OUT("abs_lines_per_species"),
990 GOUT(),
991 GOUT_TYPE(),
992 GOUT_DESC(),
993 IN("abs_lines_per_species"),
994 GIN("option", "ID"),
995 GIN_TYPE("String", "QuantumIdentifier"),
997 GIN_DESC("Method of line mirroring",
998 "ID of one or more bands")));
999
1000 md_data_raw.push_back(
1001 create_mdrecord(NAME("abs_lines_per_speciesSetMirroringForSpecies"),
1002 DESCRIPTION("See *abs_linesSetMirroring* but for single species\n"),
1003 AUTHORS("Richard Larsson"),
1004 OUT("abs_lines_per_species"),
1005 GOUT(),
1006 GOUT_TYPE(),
1007 GOUT_DESC(),
1008 IN("abs_lines_per_species", "abs_species"),
1009 GIN("option", "species_tag"),
1010 GIN_TYPE("String", "String"),
1012 GIN_DESC("Method of line mirroring",
1013 "The species tag from *abs_species* to change")));
1014
1015 md_data_raw.push_back(
1016 create_mdrecord(NAME("abs_linesMakeManualMirroring"),
1017 DESCRIPTION("Makes a copy of all lines at negative frequency setting them.\n"
1018 "to manual mirroring mode\n"),
1019 AUTHORS("Richard Larsson"),
1020 OUT("abs_lines"),
1021 GOUT(),
1022 GOUT_TYPE(),
1023 GOUT_DESC(),
1024 IN("abs_lines"),
1025 GIN(),
1026 GIN_TYPE(),
1027 GIN_DEFAULT(),
1028 GIN_DESC()));
1029
1030 md_data_raw.push_back(
1031 create_mdrecord(NAME("abs_lines_per_speciesMakeManualMirroring"),
1032 DESCRIPTION("See *abs_linesMakeManualMirroring*\n"),
1033 AUTHORS("Richard Larsson"),
1034 OUT("abs_lines_per_species"),
1035 GOUT(),
1036 GOUT_TYPE(),
1037 GOUT_DESC(),
1038 IN("abs_lines_per_species"),
1039 GIN(),
1040 GIN_TYPE(),
1041 GIN_DEFAULT(),
1042 GIN_DESC()));
1043
1044 md_data_raw.push_back(
1045 create_mdrecord(NAME("abs_lines_per_speciesMakeManualMirroringSpecies"),
1046 DESCRIPTION("Calls *abs_linesMakeManualMirroring* for given species in *abs_species*\n"),
1047 AUTHORS("Richard Larsson"),
1048 OUT("abs_lines_per_species"),
1049 GOUT(),
1050 GOUT_TYPE(),
1051 GOUT_DESC(),
1052 IN("abs_lines_per_species", "abs_species"),
1053 GIN("species"),
1054 GIN_TYPE("ArrayOfSpeciesTag"),
1056 GIN_DESC("Species to mirror")));
1057
1058 md_data_raw.push_back(
1059 create_mdrecord(NAME("abs_linesSetPopulation"),
1060 DESCRIPTION("Sets population type for all lines.\n"
1061 "\n"
1062 "Available options:\n"
1063 "\t\"LTE\" \t - \t Standard distribution by temperature\n"
1064 "\t\"NLTE-VibrationalTemperatures\" \t - \t LTE but with vibrational temperatures\n"
1065 "\t\"NLTE\" \t - \t Distribution is given as input\n"
1066 "\n"
1067 "You must have set *nlte_field* and/or its ilk to use the NLTE methods.\n"),
1068 AUTHORS("Richard Larsson"),
1069 OUT("abs_lines"),
1070 GOUT(),
1071 GOUT_TYPE(),
1072 GOUT_DESC(),
1073 IN("abs_lines"),
1074 GIN("option"),
1075 GIN_TYPE("String"),
1077 GIN_DESC("Method of line population")));
1078
1079 md_data_raw.push_back(
1080 create_mdrecord(NAME("abs_lines_per_speciesSetPopulation"),
1081 DESCRIPTION("See *abs_linesSetPopulation*\n"),
1082 AUTHORS("Richard Larsson"),
1083 OUT("abs_lines_per_species"),
1084 GOUT(),
1085 GOUT_TYPE(),
1086 GOUT_DESC(),
1087 IN("abs_lines_per_species"),
1088 GIN("option"),
1089 GIN_TYPE("String"),
1091 GIN_DESC("Method of line population")));
1092
1093 md_data_raw.push_back(
1094 create_mdrecord(NAME("abs_linesSetPopulationForMatch"),
1095 DESCRIPTION("See *abs_linesSetPopulation* for options\n"
1096 "\n"
1097 "This function only acts on matches between the bands and input ID\n"),
1098 AUTHORS("Richard Larsson"),
1099 OUT("abs_lines"),
1100 GOUT(),
1101 GOUT_TYPE(),
1102 GOUT_DESC(),
1103 IN("abs_lines"),
1104 GIN("option", "ID"),
1105 GIN_TYPE("String", "QuantumIdentifier"),
1107 GIN_DESC("Method of line population",
1108 "ID of one or more bands")));
1109
1110 md_data_raw.push_back(
1111 create_mdrecord(NAME("abs_lines_per_speciesSetPopulationForMatch"),
1112 DESCRIPTION("See *abs_linesSetPopulation* for options\n"
1113 "\n"
1114 "This function only acts on matches between the bands and input ID\n"),
1115 AUTHORS("Richard Larsson"),
1116 OUT("abs_lines_per_species"),
1117 GOUT(),
1118 GOUT_TYPE(),
1119 GOUT_DESC(),
1120 IN("abs_lines_per_species"),
1121 GIN("option", "ID"),
1122 GIN_TYPE("String", "QuantumIdentifier"),
1124 GIN_DESC("Method of line population",
1125 "ID of one or more bands")));
1126
1127 md_data_raw.push_back(
1128 create_mdrecord(NAME("abs_lines_per_speciesSetPopulationForSpecies"),
1129 DESCRIPTION("See *abs_linesSetPopulation* but for single species\n"),
1130 AUTHORS("Richard Larsson"),
1131 OUT("abs_lines_per_species"),
1132 GOUT(),
1133 GOUT_TYPE(),
1134 GOUT_DESC(),
1135 IN("abs_lines_per_species", "abs_species"),
1136 GIN("option", "species_tag"),
1137 GIN_TYPE("String", "String"),
1139 GIN_DESC("Method of line population",
1140 "The species tag from *abs_species* to change")));
1141
1142 md_data_raw.push_back(
1143 create_mdrecord(NAME("abs_linesSetLineShapeType"),
1144 DESCRIPTION("Sets shape calculations type for all lines.\n"
1145 "\n"
1146 "Available options:\n"
1147 "\t\"DP\" \t - \t Doppler profile\n"
1148 "\t\"LP\" \t - \t Lorentz profile\n"
1149 "\t\"VP\" \t - \t Voigt profile\n"
1150 "\t\"SDVP\" \t - \t Speed-dependent Voigt profile\n"
1151 "\t\"HTP\" \t - \t Hartman-Tran profile\n"
1152 "\n"
1153 "See the theory guide for more details.\n"),
1154 AUTHORS("Richard Larsson"),
1155 OUT("abs_lines"),
1156 GOUT(),
1157 GOUT_TYPE(),
1158 GOUT_DESC(),
1159 IN("abs_lines"),
1160 GIN("option"),
1161 GIN_TYPE("String"),
1163 GIN_DESC("Method of line shape calculations")));
1164
1165 md_data_raw.push_back(
1166 create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeType"),
1167 DESCRIPTION("See *abs_linesSetLineShapeType*\n"),
1168 AUTHORS("Richard Larsson"),
1169 OUT("abs_lines_per_species"),
1170 GOUT(),
1171 GOUT_TYPE(),
1172 GOUT_DESC(),
1173 IN("abs_lines_per_species"),
1174 GIN("option"),
1175 GIN_TYPE("String"),
1177 GIN_DESC("Method of line shape calculations")));
1178
1179 md_data_raw.push_back(
1180 create_mdrecord(NAME("abs_linesSetLineShapeTypeForMatch"),
1181 DESCRIPTION("See *abs_linesSetLineShapeType* for options\n"
1182 "\n"
1183 "This function only acts on matches between the bands and input ID\n"),
1184 AUTHORS("Richard Larsson"),
1185 OUT("abs_lines"),
1186 GOUT(),
1187 GOUT_TYPE(),
1188 GOUT_DESC(),
1189 IN("abs_lines"),
1190 GIN("option", "ID"),
1191 GIN_TYPE("String", "QuantumIdentifier"),
1193 GIN_DESC("Method of line shape calculations",
1194 "ID of one or more bands")));
1195
1196 md_data_raw.push_back(
1197 create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeTypeForMatch"),
1198 DESCRIPTION("See *abs_linesSetLineShapeType* for options\n"
1199 "\n"
1200 "This function only acts on matches between the bands and input ID\n"),
1201 AUTHORS("Richard Larsson"),
1202 OUT("abs_lines_per_species"),
1203 GOUT(),
1204 GOUT_TYPE(),
1205 GOUT_DESC(),
1206 IN("abs_lines_per_species"),
1207 GIN("option", "ID"),
1208 GIN_TYPE("String", "QuantumIdentifier"),
1210 GIN_DESC("Method of line shape calculations",
1211 "ID of one or more bands")));
1212
1213 md_data_raw.push_back(
1214 create_mdrecord(NAME("abs_lines_per_speciesSetLineShapeTypeForSpecies"),
1215 DESCRIPTION("See *abs_linesSetLineShapeType* but for single species\n"),
1216 AUTHORS("Richard Larsson"),
1217 OUT("abs_lines_per_species"),
1218 GOUT(),
1219 GOUT_TYPE(),
1220 GOUT_DESC(),
1221 IN("abs_lines_per_species", "abs_species"),
1222 GIN("option", "species_tag"),
1223 GIN_TYPE("String", "String"),
1225 GIN_DESC("Method of line shape calculations",
1226 "The species tag from *abs_species* to change")));
1227
1228 md_data_raw.push_back(
1229 create_mdrecord(NAME("abs_linesSetCutoff"),
1230 DESCRIPTION("Sets cutoff type and magnitude for all lines.\n"
1231 "\n"
1232 "The line is cut off when this is active at the given frequency.\n"
1233 "The only non-zero range is from this range to its negative equivalent\n"
1234 "\n"
1235 "Available options:\n"
1236 "\t\"None\" \t - \t No cutoff\n"
1237 "\t\"ByLine\" \t - \t Cutoff relative to a speed-independent shifted line center, highest frequency: F0+cutoff+D0\n"
1238 "\n"
1239 "For \"ByLine\", the negative frequency is at F0-cutoff-D0\n"),
1240 AUTHORS("Richard Larsson"),
1241 OUT("abs_lines"),
1242 GOUT(),
1243 GOUT_TYPE(),
1244 GOUT_DESC(),
1245 IN("abs_lines"),
1246 GIN("option", "value"),
1247 GIN_TYPE("String", "Numeric"),
1249 GIN_DESC("Method of line shape calculations",
1250 "Value of cutoff")));
1251
1252 md_data_raw.push_back(
1253 create_mdrecord(NAME("abs_lines_per_speciesSetCutoff"),
1254 DESCRIPTION("See *abs_linesSetCutoff*\n"),
1255 AUTHORS("Richard Larsson"),
1256 OUT("abs_lines_per_species"),
1257 GOUT(),
1258 GOUT_TYPE(),
1259 GOUT_DESC(),
1260 IN("abs_lines_per_species"),
1261 GIN("option", "value"),
1262 GIN_TYPE("String", "Numeric"),
1264 GIN_DESC("Method of line shape calculations",
1265 "Value of cutoff")));
1266
1267 md_data_raw.push_back(
1268 create_mdrecord(NAME("abs_linesSetCutoffForMatch"),
1269 DESCRIPTION("See *abs_linesSetCutoff* for more options.\n"
1270 "\n"
1271 "This function only acts on matches between the bands and input ID\n"),
1272 AUTHORS("Richard Larsson"),
1273 OUT("abs_lines"),
1274 GOUT(),
1275 GOUT_TYPE(),
1276 GOUT_DESC(),
1277 IN("abs_lines"),
1278 GIN("option", "value", "ID"),
1279 GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1281 GIN_DESC("Method of line shape calculations",
1282 "Value of cutoff",
1283 "ID of one or more bands")));
1284
1285 md_data_raw.push_back(
1286 create_mdrecord(NAME("abs_lines_per_speciesSetCutoffForMatch"),
1287 DESCRIPTION("See *abs_linesSetCutoff* for more options.\n"
1288 "\n"
1289 "This function only acts on matches between the bands and input ID\n"),
1290 AUTHORS("Richard Larsson"),
1291 OUT("abs_lines_per_species"),
1292 GOUT(),
1293 GOUT_TYPE(),
1294 GOUT_DESC(),
1295 IN("abs_lines_per_species"),
1296 GIN("option", "value", "ID"),
1297 GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1299 GIN_DESC("Method of line shape calculations",
1300 "Value of cutoff",
1301 "ID of one or more bands")));
1302
1303 md_data_raw.push_back(
1304 create_mdrecord(NAME("abs_lines_per_speciesSetCutoffForSpecies"),
1305 DESCRIPTION("See *abs_linesSetCutoff* but for single species\n"),
1306 AUTHORS("Richard Larsson"),
1307 OUT("abs_lines_per_species"),
1308 GOUT(),
1309 GOUT_TYPE(),
1310 GOUT_DESC(),
1311 IN("abs_lines_per_species", "abs_species"),
1312 GIN("option", "value", "species_tag"),
1313 GIN_TYPE("String", "Numeric", "String"),
1315 GIN_DESC("Method of line shape calculations",
1316 "Value of cutoff",
1317 "The species tag from *abs_species* to change")));
1318
1319 md_data_raw.push_back(
1320 create_mdrecord(NAME("abs_linesSetLinemixingLimit"),
1321 DESCRIPTION("Sets line mixing limit for all lines.\n"
1322 "\n"
1323 "If value is less than 0, no limit is applied and line mixing is active.\n"
1324 "Otherwise, line mixing is inactive if the pressure is below the limit.\n"),
1325 AUTHORS("Richard Larsson"),
1326 OUT("abs_lines"),
1327 GOUT(),
1328 GOUT_TYPE(),
1329 GOUT_DESC(),
1330 IN("abs_lines"),
1331 GIN("value"),
1332 GIN_TYPE("Numeric"),
1334 GIN_DESC("Value of limit")));
1335
1336 md_data_raw.push_back(
1337 create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimit"),
1338 DESCRIPTION("See *abs_linesSetLinemixingLimit*\n"),
1339 AUTHORS("Richard Larsson"),
1340 OUT("abs_lines_per_species"),
1341 GOUT(),
1342 GOUT_TYPE(),
1343 GOUT_DESC(),
1344 IN("abs_lines_per_species"),
1345 GIN("value"),
1346 GIN_TYPE("Numeric"),
1348 GIN_DESC("Value of limit")));
1349
1350 md_data_raw.push_back(
1351 create_mdrecord(NAME("abs_linesSetLinemixingLimitForMatch"),
1352 DESCRIPTION("See *abs_linesSetLinemixingLimit* for values\n"
1353 "\n"
1354 "This function only acts on matches between the bands and input ID\n"),
1355 AUTHORS("Richard Larsson"),
1356 OUT("abs_lines"),
1357 GOUT(),
1358 GOUT_TYPE(),
1359 GOUT_DESC(),
1360 IN("abs_lines"),
1361 GIN("value","ID"),
1362 GIN_TYPE("Numeric", "QuantumIdentifier"),
1364 GIN_DESC("Value of limit",
1365 "ID of one or more bands")));
1366
1367 md_data_raw.push_back(
1368 create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimitForMatch"),
1369 DESCRIPTION("See *abs_linesSetLinemixingLimit* for values\n"
1370 "\n"
1371 "This function only acts on matches between the bands and input ID\n"),
1372 AUTHORS("Richard Larsson"),
1373 OUT("abs_lines_per_species"),
1374 GOUT(),
1375 GOUT_TYPE(),
1376 GOUT_DESC(),
1377 IN("abs_lines_per_species"),
1378 GIN("value","ID"),
1379 GIN_TYPE("Numeric", "QuantumIdentifier"),
1381 GIN_DESC("Value of limit",
1382 "ID of one or more bands")));
1383
1384 md_data_raw.push_back(
1385 create_mdrecord(NAME("abs_lines_per_speciesSetLinemixingLimitForSpecies"),
1386 DESCRIPTION("See *abs_linesSetLinemixingLimit* but for single species\n"),
1387 AUTHORS("Richard Larsson"),
1388 OUT("abs_lines_per_species"),
1389 GOUT(),
1390 GOUT_TYPE(),
1391 GOUT_DESC(),
1392 IN("abs_lines_per_species", "abs_species"),
1393 GIN("value", "species_tag"),
1394 GIN_TYPE("Numeric", "String"),
1396 GIN_DESC("Value of limit",
1397 "The species tag from *abs_species* to change")));
1398
1399 md_data_raw.push_back(
1400 create_mdrecord(NAME("abs_linesSetT0"),
1401 DESCRIPTION("Sets reference temperature for all lines.\n"),
1402 AUTHORS("Richard Larsson"),
1403 OUT("abs_lines"),
1404 GOUT(),
1405 GOUT_TYPE(),
1406 GOUT_DESC(),
1407 IN("abs_lines"),
1408 GIN("value"),
1409 GIN_TYPE("Numeric"),
1411 GIN_DESC("Value of T0")));
1412
1413 md_data_raw.push_back(
1414 create_mdrecord(NAME("abs_lines_per_speciesSetT0"),
1415 DESCRIPTION("See *abs_linesSetT0*\n"),
1416 AUTHORS("Richard Larsson"),
1417 OUT("abs_lines_per_species"),
1418 GOUT(),
1419 GOUT_TYPE(),
1420 GOUT_DESC(),
1421 IN("abs_lines_per_species"),
1422 GIN("value"),
1423 GIN_TYPE("Numeric"),
1425 GIN_DESC("Value of T0")));
1426
1427 md_data_raw.push_back(
1428 create_mdrecord(NAME("abs_linesSetT0ForMatch"),
1429 DESCRIPTION("Sets reference temperature\n"
1430 "\n"
1431 "This function only acts on matches between the bands and input ID\n"),
1432 AUTHORS("Richard Larsson"),
1433 OUT("abs_lines"),
1434 GOUT(),
1435 GOUT_TYPE(),
1436 GOUT_DESC(),
1437 IN("abs_lines"),
1438 GIN("value", "ID"),
1439 GIN_TYPE("Numeric", "QuantumIdentifier"),
1441 GIN_DESC("Value of T0",
1442 "ID of one or more bands")));
1443
1444 md_data_raw.push_back(
1445 create_mdrecord(NAME("abs_lines_per_speciesSetT0ForMatch"),
1446 DESCRIPTION("Sets reference temperature\n"
1447 "\n"
1448 "This function only acts on matches between the bands and input ID\n"),
1449 AUTHORS("Richard Larsson"),
1450 OUT("abs_lines_per_species"),
1451 GOUT(),
1452 GOUT_TYPE(),
1453 GOUT_DESC(),
1454 IN("abs_lines_per_species"),
1455 GIN("value", "ID"),
1456 GIN_TYPE("Numeric", "QuantumIdentifier"),
1458 GIN_DESC("Value of T0",
1459 "ID of one or more bands")));
1460
1461 md_data_raw.push_back(
1462 create_mdrecord(NAME("abs_lines_per_speciesSetT0ForSpecies"),
1463 DESCRIPTION("See *abs_linesSetT0* but for single species\n"),
1464 AUTHORS("Richard Larsson"),
1465 OUT("abs_lines_per_species"),
1466 GOUT(),
1467 GOUT_TYPE(),
1468 GOUT_DESC(),
1469 IN("abs_lines_per_species", "abs_species"),
1470 GIN("value", "species_tag"),
1471 GIN_TYPE("Numeric", "String"),
1473 GIN_DESC("Value of T0",
1474 "The species tag from *abs_species* to change")));
1475
1476 md_data_raw.push_back(
1477 create_mdrecord(NAME("abs_linesSetQuantumNumberForMatch"),
1478 DESCRIPTION("Sets a quantum number to a new value\n"
1479 "\n"
1480 "This function only acts on matches between the bands and input ID\n"),
1481 AUTHORS("Richard Larsson"),
1482 OUT("abs_lines"),
1483 GOUT(),
1484 GOUT_TYPE(),
1485 GOUT_DESC(),
1486 IN("abs_lines"),
1487 GIN("quantum_number", "value", "ID"),
1488 GIN_TYPE("String", "Rational", "QuantumIdentifier"),
1490 GIN_DESC("Quantum number key",
1491 "Value of quantum number",
1492 "ID of one or more bands")));
1493
1494 md_data_raw.push_back(
1495 create_mdrecord(NAME("abs_lines_per_speciesSetQuantumNumberForMatch"),
1496 DESCRIPTION("See *abs_linesSetQuantumNumberForMatch*\n"),
1497 AUTHORS("Richard Larsson"),
1498 OUT("abs_lines_per_species"),
1499 GOUT(),
1500 GOUT_TYPE(),
1501 GOUT_DESC(),
1502 IN("abs_lines_per_species"),
1503 GIN("quantum_number", "value", "ID"),
1504 GIN_TYPE("String", "Rational", "QuantumIdentifier"),
1506 GIN_DESC("Quantum number key",
1507 "Value of quantum number",
1508 "ID of one or more bands")));
1509
1510 md_data_raw.push_back(create_mdrecord(
1511 NAME("abs_linesChangeBaseParameterForMatchingLevel"),
1513 "Change parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1514 "Only works for these parameters:\n"
1515 "parameter_name = \"Statistical Weight\"\n"
1516 "parameter_name = \"Zeeman Coefficient\"\n"),
1517 AUTHORS("Richard Larsson"),
1518 OUT("abs_lines"),
1519 GOUT(),
1520 GOUT_TYPE(),
1521 GOUT_DESC(),
1522 IN("abs_lines"),
1523 GIN("QI", "parameter_name", "change", "relative"),
1524 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1525 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1526 GIN_DESC("Information to match the level.",
1527 "Name of parameter to be replaced",
1528 "Value with which to change matching level's value",
1529 "Flag for relative change (0 is absolute change)")));
1530
1531 md_data_raw.push_back(create_mdrecord(
1532 NAME("abs_linesChangeBaseParameterForMatchingLevels"),
1533 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1534 AUTHORS("Richard Larsson"),
1535 OUT("abs_lines"),
1536 GOUT(),
1537 GOUT_TYPE(),
1538 GOUT_DESC(),
1539 IN("abs_lines"),
1540 GIN("QI", "parameter_name", "change", "relative"),
1541 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1542 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1543 GIN_DESC("Information to match the level.",
1544 "Name of parameter to be replaced",
1545 "Value with which to change matching level's value",
1546 "Flag for relative change (0 is absolute change)")));
1547
1548 md_data_raw.push_back(create_mdrecord(
1549 NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevel"),
1550 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1551 AUTHORS("Richard Larsson"),
1552 OUT("abs_lines_per_species"),
1553 GOUT(),
1554 GOUT_TYPE(),
1555 GOUT_DESC(),
1556 IN("abs_lines_per_species"),
1557 GIN("QI", "parameter_name", "change", "relative"),
1558 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1559 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1560 GIN_DESC("Information to match the level.",
1561 "Name of parameter to be replaced",
1562 "Value with which to change matching level's value",
1563 "Flag for relative change (0 is absolute change)")));
1564
1565 md_data_raw.push_back(create_mdrecord(
1566 NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevels"),
1567 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1568 AUTHORS("Richard Larsson"),
1569 OUT("abs_lines_per_species"),
1570 GOUT(),
1571 GOUT_TYPE(),
1572 GOUT_DESC(),
1573 IN("abs_lines_per_species"),
1574 GIN("QI", "parameter_name", "change", "relative"),
1575 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1576 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1577 GIN_DESC("Information to match the level.",
1578 "Name of parameter to be replaced",
1579 "Value with which to change matching level's value",
1580 "Flag for relative change (0 is absolute change)")));
1581
1582 md_data_raw.push_back(create_mdrecord(
1583 NAME("abs_linesSetBaseParameterForMatchingLevel"),
1585 "Set parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1586 "Only works for these parameters:\n"
1587 "parameter_name = \"Statistical Weight\"\n"
1588 "parameter_name = \"Zeeman Coefficient\"\n"),
1589 AUTHORS("Richard Larsson"),
1590 OUT("abs_lines"),
1591 GOUT(),
1592 GOUT_TYPE(),
1593 GOUT_DESC(),
1594 IN("abs_lines"),
1595 GIN("QI", "parameter_name", "change"),
1596 GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1598 GIN_DESC("Information to match the level.",
1599 "Name of parameter to be replaced",
1600 "Value with which to set matching level's value")));
1601
1602 md_data_raw.push_back(create_mdrecord(
1603 NAME("abs_linesSetBaseParameterForMatchingLevels"),
1604 DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1605 AUTHORS("Richard Larsson"),
1606 OUT("abs_lines"),
1607 GOUT(),
1608 GOUT_TYPE(),
1609 GOUT_DESC(),
1610 IN("abs_lines"),
1611 GIN("QI", "parameter_name", "change"),
1612 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1614 GIN_DESC("Information to match the level.",
1615 "Name of parameter to be replaced",
1616 "Value with which to set matching level's value")));
1617
1618 md_data_raw.push_back(create_mdrecord(
1619 NAME("abs_lines_per_speciesSetBaseParameterForMatchingLevel"),
1620 DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1621 AUTHORS("Richard Larsson"),
1622 OUT("abs_lines_per_species"),
1623 GOUT(),
1624 GOUT_TYPE(),
1625 GOUT_DESC(),
1626 IN("abs_lines_per_species"),
1627 GIN("QI", "parameter_name", "change"),
1628 GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1630 GIN_DESC("Information to match the level.",
1631 "Name of parameter to be replaced",
1632 "Value with which to set matching level's value")));
1633
1634 md_data_raw.push_back(create_mdrecord(
1635 NAME("abs_lines_per_speciesSetBaseParameterForMatchingLevels"),
1636 DESCRIPTION("See *abs_linesSetBaseParameterForMatchingLevel*\n"),
1637 AUTHORS("Richard Larsson"),
1638 OUT("abs_lines_per_species"),
1639 GOUT(),
1640 GOUT_TYPE(),
1641 GOUT_DESC(),
1642 IN("abs_lines_per_species"),
1643 GIN("QI", "parameter_name", "change"),
1644 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1646 GIN_DESC("Information to match the level.",
1647 "Name of parameter to be replaced",
1648 "Value with which to set matching level's value")));
1649
1650 md_data_raw.push_back(create_mdrecord(
1651 NAME("abs_linesChangeBaseParameterForMatchingLines"),
1653 "Change parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1654 "Only works for these parameters:\n"
1655 "parameter_name = \"Central Frequency\"\n"
1656 "parameter_name = \"Line Strength\"\n"
1657 "parameter_name = \"Lower State Energy\"\n"
1658 "parameter_name = \"Einstein Coefficient\"\n"
1659 "parameter_name = \"Lower Statistical Weight\"\n"
1660 "parameter_name = \"Upper Statistical Weight\"\n"
1661 "parameter_name = \"Lower Zeeman Coefficient\"\n"
1662 "parameter_name = \"Upper Zeeman Coefficient\"\n"
1663 "\n"
1664 "Note that band_matching:=0 means only identical quantum identifiers are accepted,\n"
1665 "otherwise the numbers in QI must just be contained in the band identifier\n"),
1666 AUTHORS("Richard Larsson"),
1667 OUT("abs_lines"),
1668 GOUT(),
1669 GOUT_TYPE(),
1670 GOUT_DESC(),
1671 IN("abs_lines"),
1672 GIN("QI", "parameter_name", "change", "relative", "band_matching"),
1673 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index"),
1674 GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0"),
1675 GIN_DESC("Information to match the line/band.",
1676 "Name of parameter to be replaced",
1677 "Value with which to change matching line's value",
1678 "Flag for relative change (0 is absolute change)",
1679 "Flag for band match (0 means only line matches)")));
1680
1681 md_data_raw.push_back(create_mdrecord(
1682 NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLines"),
1683 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines*\n"),
1684 AUTHORS("Richard Larsson"),
1685 OUT("abs_lines_per_species"),
1686 GOUT(),
1687 GOUT_TYPE(),
1688 GOUT_DESC(),
1689 IN("abs_lines_per_species"),
1690 GIN("QI", "parameter_name", "change", "relative", "band_matching"),
1691 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index"),
1692 GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0"),
1693 GIN_DESC("Information to match the line/band.",
1694 "Name of parameter to be replaced",
1695 "Value with which to change matching line's value",
1696 "Flag for relative change (0 is absolute change)",
1697 "Flag for band match (0 means only line matches)")));
1698
1699 md_data_raw.push_back(create_mdrecord(
1700 NAME("abs_lines_per_speciesChangeBaseParameterForSpecies"),
1701 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines* but for single species\n"),
1702 AUTHORS("Richard Larsson"),
1703 OUT("abs_lines_per_species"),
1704 GOUT(),
1705 GOUT_TYPE(),
1706 GOUT_DESC(),
1707 IN("abs_lines_per_species", "abs_species"),
1708 GIN("QI", "parameter_name", "change", "relative", "band_matching", "species_tag"),
1709 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "Index", "String"),
1710 GIN_DEFAULT(NODEF, NODEF, NODEF, "0", "0", NODEF),
1711 GIN_DESC("Information to match the line/band.",
1712 "Name of parameter to be replaced",
1713 "Value with which to change matching line's value",
1714 "Flag for relative change (0 is absolute change)",
1715 "Flag for band match (0 means only band matches)",
1716 "The species tag from *abs_species* to change")));
1717
1718 md_data_raw.push_back(create_mdrecord(
1719 NAME("abs_linesSetBaseParameterForMatchingLines"),
1721 "Set parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1722 "Only works for these parameters:\n"
1723 "parameter_name = \"Central Frequency\"\n"
1724 "parameter_name = \"Line Strength\"\n"
1725 "parameter_name = \"Lower State Energy\"\n"
1726 "parameter_name = \"Einstein Coefficient\"\n"
1727 "parameter_name = \"Lower Statistical Weight\"\n"
1728 "parameter_name = \"Upper Statistical Weight\"\n"
1729 "parameter_name = \"Lower Zeeman Coefficient\"\n"
1730 "parameter_name = \"Upper Zeeman Coefficient\"\n"
1731 "\n"
1732 "Note that band_matching:=0 means only identical quantum identifiers are accepted,\n"
1733 "otherwise the numbers in QI must just be contained in the line identifier\n"),
1734 AUTHORS("Richard Larsson"),
1735 OUT("abs_lines"),
1736 GOUT(),
1737 GOUT_TYPE(),
1738 GOUT_DESC(),
1739 IN("abs_lines"),
1740 GIN("QI", "parameter_name", "change", "band_matching"),
1741 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1742 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1743 GIN_DESC("Information to match the line/band.",
1744 "Name of parameter to be replaced",
1745 "Value with which to change matching line's value",
1746 "Flag for band match (0 means only line matches)")));
1747
1748 md_data_raw.push_back(create_mdrecord(
1749 NAME("abs_linesSetLineShapeModelParametersForMatchingLines"),
1750 DESCRIPTION("Sets line shape model data parameter in matching lines.\n"
1751 "\n"
1752 "The matching is done so that QI must be in the line identifier\n"
1753 "\n"
1754 "Acceptable parameter(s) are:\n"
1755 "\t\"G0\"\n"
1756 "\t\"D0\"\n"
1757 "\t\"G2\"\n"
1758 "\t\"D2\"\n"
1759 "\t\"FVC\"\n"
1760 "\t\"ETA\"\n"
1761 "\t\"Y\"\n"
1762 "\t\"G\"\n"
1763 "\t\"DV\"\n"
1764 "\n"
1765 "Acceptable temperaturemodel(s) are:\n"
1766 "\tNone,\n"
1767 "\t\"T0\"\n"
1768 "\t\"T1\"\n"
1769 "\t\"T2\"\n"
1770 "\t\"T3\"\n"
1771 "\t\"T4\"\n"
1772 "\t\"T5\"\n"
1773 "\t\"LM_AER\"\n"
1774 "\t\"DPL\"\n"
1775 "\n"
1776 "Acceptable species are:\n"
1777 "\t\"AIR\" (so long as it is the broadening species list)\n"
1778 "\t\"SELF\" (so long as it is the broadening species list)\n"
1779 "\tAny species in the line broadening species\n"
1780 "\n"
1781 "See the user guide for the meanings of all of these keywords\n"
1782 ),
1783 AUTHORS("Richard Larsson"),
1784 OUT("abs_lines"),
1785 GOUT(),
1786 GOUT_TYPE(),
1787 GOUT_DESC(),
1788 IN("abs_lines"),
1789 GIN("QI", "parameter", "species", "temperaturemodel", "new_values"),
1790 GIN_TYPE("QuantumIdentifier",
1791 "String",
1792 "String",
1793 "String",
1794 "Vector"),
1796 GIN_DESC("Information to match the line.",
1797 "Name of parameter to be replaced",
1798 "Species of parameter to be changed",
1799 "Temperature model for the new values",
1800 "Sets the values found")));
1801
1802 md_data_raw.push_back(create_mdrecord(
1803 NAME("abs_lines_per_speciesSetLineShapeModelParametersForMatchingLines"),
1804 DESCRIPTION("See *abs_linesSetLineShapeModelParametersForMatchingLines*\n"
1805 ),
1806 AUTHORS("Richard Larsson"),
1807 OUT("abs_lines_per_species"),
1808 GOUT(),
1809 GOUT_TYPE(),
1810 GOUT_DESC(),
1811 IN("abs_lines_per_species"),
1812 GIN("QI", "parameter", "species", "temperaturemodel", "new_values"),
1813 GIN_TYPE("QuantumIdentifier",
1814 "String",
1815 "String",
1816 "String",
1817 "Vector"),
1819 GIN_DESC("Information to match the line.",
1820 "Name of parameter to be replaced",
1821 "Species of parameter to be changed",
1822 "Temperature model for the new values",
1823 "Sets the values found")));
1824
1825 md_data_raw.push_back(create_mdrecord(
1826 NAME("abs_linesSetZeemanCoefficients"),
1827 DESCRIPTION("Sets the Zeeman coefficients of the lines by user input\n"
1828 "\n"
1829 "The matching is permissive, all in qid must just match. If there\n"
1830 "are multiple matches, the last match rules\n"),
1831 AUTHORS("Richard Larsson"),
1832 OUT("abs_lines"),
1833 GOUT(),
1834 GOUT_TYPE(),
1835 GOUT_DESC(),
1836 IN("abs_lines"),
1837 GIN("qid", "gs"),
1838 GIN_TYPE("ArrayOfQuantumIdentifier", "Vector"),
1840 GIN_DESC("Information to match an energy level of a/many lines.",
1841 "Corresponding value to set as Zeeman coefficient")));
1842
1843 md_data_raw.push_back(create_mdrecord(
1844 NAME("abs_lines_per_speciesSetZeemanCoefficients"),
1845 DESCRIPTION("See *abs_linesSetZeemanCoefficients*\n"),
1846 AUTHORS("Richard Larsson"),
1847 OUT("abs_lines_per_species"),
1848 GOUT(),
1849 GOUT_TYPE(),
1850 GOUT_DESC(),
1851 IN("abs_lines_per_species"),
1852 GIN("qid", "gs"),
1853 GIN_TYPE("ArrayOfQuantumIdentifier", "Vector"),
1855 GIN_DESC("Information to match an energy level of a/many lines.",
1856 "Corresponding value to set as Zeeman coefficient")));
1857
1858 md_data_raw.push_back(create_mdrecord(
1859 NAME("abs_linesCompact"),
1860 DESCRIPTION("Removes lines that are unimportant because of their\n"
1861 "cutoff frequency range\n"),
1862 AUTHORS("Stefan Buehler", "Richard Larsson"),
1863 OUT("abs_lines"),
1864 GOUT(),
1865 GOUT_TYPE(),
1866 GOUT_DESC(),
1867 IN("abs_lines", "f_grid"),
1868 GIN(),
1869 GIN_TYPE(),
1870 GIN_DEFAULT(),
1871 GIN_DESC()));
1872
1873 md_data_raw.push_back(create_mdrecord(
1874 NAME("abs_lines_per_speciesCompact"),
1875 DESCRIPTION("See *abs_linesCompact*\n"),
1876 AUTHORS("Stefan Buehler", "Richard Larsson"),
1877 OUT("abs_lines_per_species"),
1878 GOUT(),
1879 GOUT_TYPE(),
1880 GOUT_DESC(),
1881 IN("abs_lines_per_species", "f_grid"),
1882 GIN(),
1883 GIN_TYPE(),
1884 GIN_DEFAULT(),
1885 GIN_DESC()));
1886
1887 md_data_raw.push_back(create_mdrecord(
1888 NAME("abs_lines_per_speciesCreateFromLines"),
1890 "Split lines up into the different species.\n"
1891 "\n"
1892 "The order of the splitting will match the outer layer of *abs_species*\n"
1893 "There will be no respect for the internal layer of *abs_species*\n"),
1894 AUTHORS("Stefan Buehler"),
1895 OUT("abs_lines_per_species"),
1896 GOUT(),
1897 GOUT_TYPE(),
1898 GOUT_DESC(),
1899 IN("abs_lines", "abs_species"),
1900 GIN(),
1901 GIN_TYPE(),
1902 GIN_DEFAULT(),
1903 GIN_DESC()));
1904
1905 md_data_raw.push_back(create_mdrecord(
1906 NAME("abs_lookupAdapt"),
1908 "Adapts a gas absorption lookup table to the current calculation.\n"
1909 "\n"
1910 "The lookup table can contain more species and more frequencies than\n"
1911 "are needed for the current calculation. This method cuts down the\n"
1912 "table in memory, so that it contains just what is needed. Also, the\n"
1913 "species in the table are brought in the same order as the species in\n"
1914 "the current calculation.\n"
1915 "\n"
1916 "Of course, the method also performs quite a lot of checks on the\n"
1917 "table. If something is not ok, a runtime error is thrown.\n"
1918 "\n"
1919 "The method sets a flag *abs_lookup_is_adapted* to indicate that the\n"
1920 "table has been checked and that it is ok. Never set this by hand,\n"
1921 "always use this method to set it!\n"),
1922 AUTHORS("Stefan Buehler"),
1923 OUT("abs_lookup", "abs_lookup_is_adapted"),
1924 GOUT(),
1925 GOUT_TYPE(),
1926 GOUT_DESC(),
1927 IN("abs_lookup", "abs_species", "f_grid"),
1928 GIN(),
1929 GIN_TYPE(),
1930 GIN_DEFAULT(),
1931 GIN_DESC()));
1932
1933 md_data_raw.push_back(create_mdrecord(
1934 NAME("abs_lookupCalc"),
1936 "Creates a gas absorption lookup table.\n"
1937 "\n"
1938 "The lookup table stores absorption cross-sections as a function of\n"
1939 "pressure. Additionally, absorption can be stored as a function of\n"
1940 "temperature for temperature perturbations from a reference\n"
1941 "profile.\n"
1942 "\n"
1943 "Additionally, absorption can be stored as a function of water vapor\n"
1944 "VMR perturbations from a reference profile. The variable *abs_nls*\n"
1945 "specifies, for which species water vapor perturbations should be\n"
1946 "generated.\n"
1947 "\n"
1948 "Note, that the absorbing gas can be any gas, but the perturbing gas is\n"
1949 "always H2O.\n"),
1950 AUTHORS("Stefan Buehler"),
1951 OUT("abs_lookup", "abs_lookup_is_adapted"),
1952 GOUT(),
1953 GOUT_TYPE(),
1954 GOUT_DESC(),
1955 IN("abs_species",
1956 "abs_nls",
1957 "f_grid",
1958 "abs_p",
1959 "abs_vmrs",
1960 "abs_t",
1961 "abs_t_pert",
1962 "abs_nls_pert",
1963 "abs_xsec_agenda"),
1964 GIN(),
1965 GIN_TYPE(),
1966 GIN_DEFAULT(),
1967 GIN_DESC()));
1968
1969 md_data_raw.push_back(create_mdrecord(
1970 NAME("abs_lookupInit"),
1972 "Creates an empty gas absorption lookup table.\n"
1973 "\n"
1974 "This is mainly there to help developers. For example, you can write\n"
1975 "the empty table to an XML file, to see the file format.\n"),
1976 AUTHORS("Stefan Buehler"),
1977 OUT("abs_lookup"),
1978 GOUT(),
1979 GOUT_TYPE(),
1980 GOUT_DESC(),
1981 IN(),
1982 GIN(),
1983 GIN_TYPE(),
1984 GIN_DEFAULT(),
1985 GIN_DESC()));
1986
1987 md_data_raw.push_back(create_mdrecord(
1988 NAME("abs_lookupSetup"),
1990 "Set up input parameters for abs_lookupCalc.\n"
1991 "\n"
1992 "More information can be found in the documentation for method\n"
1993 "*abs_lookupSetupBatch*\n"
1994 "\n"
1995 "Max and min values of H2O and temperature are adjusted to allow for\n"
1996 "numerical perturbations in Jacobian calculation.\n"
1997 "\n"
1998 "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
1999 "are used to make sure that there are enough points in *abs_nls_pert*\n"
2000 "and *abs_t_pert* for the chosen interpolation order.\n"
2001 "\n"
2002 "Note: For homogeneous 1D cases, it can be advantageous to calculate\n"
2003 "*abs_lookup* from the 1D atmosphere, and to expand the atmosphere\n"
2004 "to 3D only after that. This particularly if nonlinear species\n"
2005 "(i.e., H2O) are involved."
2006 "\n"
2007 "See also:\n"
2008 " *abs_lookupSetupBatch*\n"),
2009 AUTHORS("Stefan Buehler"),
2010 OUT("abs_p",
2011 "abs_t",
2012 "abs_t_pert",
2013 "abs_vmrs",
2014 "abs_nls",
2015 "abs_nls_pert"),
2016 GOUT(),
2017 GOUT_TYPE(),
2018 GOUT_DESC(),
2019 IN("atmosphere_dim",
2020 "p_grid",
2021 // "lat_grid",
2022 // "lon_grid",
2023 "t_field",
2024 "vmr_field",
2025 "atmfields_checked",
2026 "abs_species",
2027 "abs_p_interp_order",
2028 "abs_t_interp_order",
2029 "abs_nls_interp_order"),
2030 GIN("p_step", "t_step", "h2o_step"),
2031 GIN_TYPE("Numeric", "Numeric", "Numeric"),
2032 GIN_DEFAULT("0.05", "100", "100"),
2033 GIN_DESC(/* p_step */
2034 "Maximum step in log10(p[Pa]). If the pressure grid is "
2035 "coarser than this, additional points are added until each "
2036 "log step is smaller than this.",
2037 /* t_step */
2038 "The temperature variation grid step in Kelvin, "
2039 "for a 2D or 3D atmosphere. For a 1D atmosphere this "
2040 "parameter is not used.",
2041 /* h2o_step */
2042 "The H2O variation grid step [fractional], if "
2043 "H2O variations are done (which is determined automatically, "
2044 "based on abs_species and the atmospheric dimension). For a "
2045 "1D atmosphere this parameter is not used.")));
2046
2047 md_data_raw.push_back(create_mdrecord(
2048 NAME("abs_lookupSetupBatch"),
2050 "Set up input parameters for abs_lookupCalc for batch calculations.\n"
2051 "\n"
2052 "This method performs a similar task as *abs_lookupSetup*, with the\n"
2053 "difference that the lookup table setup is not for a single\n"
2054 "atmospheric state, but for a whole batch of them, stored in\n"
2055 "*batch_atm_fields_compact*.\n"
2056 "\n"
2057 "The method checks *abs_species* to decide which species require\n"
2058 "nonlinear treatment in the lookup table.\n"
2059 "\n"
2060 "The method also checks which range of pressures, temperatures, and\n"
2061 "VMRs occurs, and sets *abs_p*, *abs_t*, *abs_t_pert*, and *abs_vmrs*\n"
2062 "accordingly.\n"
2063 "\n"
2064 "If nonlinear species are present, *abs_nls* and *abs_nls_pert* are also\n"
2065 "generated.\n"
2066 "\n"
2067 "Max and min values of H2O and temperature are adjusted to allow for\n"
2068 "numerical perturbations in Jacobian calculation.\n"
2069 "\n"
2070 "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
2071 "are used to make sure that there are enough points in *abs_nls_pert*\n"
2072 "and *abs_t_pert* for the chosen interpolation order.\n"
2073 "\n"
2074 "The method checks each given field using *atmfields_checkedCalc*.\n"
2075 "If a field does not pass the check, a run-time error is thrown.\n"
2076 "To prevent this, the parameter *robust* can be set to one: Invalid \n"
2077 "atmospheres are skipped, but the run continues. This matches the \n"
2078 "robust behaviour of *ybatchCalc*.\n"
2079 "\n"
2080 "See also:\n"
2081 " *abs_lookupSetup*\n"),
2082 AUTHORS("Stefan Buehler"),
2083 OUT("abs_p",
2084 "abs_t",
2085 "abs_t_pert",
2086 "abs_vmrs",
2087 "abs_nls",
2088 "abs_nls_pert"),
2089 GOUT(),
2090 GOUT_TYPE(),
2091 GOUT_DESC(),
2092 IN("abs_species",
2093 "batch_atm_fields_compact",
2094 "abs_p_interp_order",
2095 "abs_t_interp_order",
2096 "abs_nls_interp_order",
2097 "atmosphere_dim"),
2098 GIN("p_step",
2099 "t_step",
2100 "h2o_step",
2101 "extremes",
2102 "robust",
2103 "check_gridnames"),
2104 GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Index", "Index"),
2105 GIN_DEFAULT("0.05", "20", "100", "[]", "0", "0"),
2106 GIN_DESC(/* p_step */
2107 "Grid step in log10(p[Pa]) (base 10 logarithm).",
2108 /* t_step */
2109 "The temperature variation grid step in Kelvin. The true "
2110 "step can become finer than this, if required by the "
2111 "interpolation order.",
2112 /* h2o_step */
2113 "The H2O variation grid step [fractional], if H2O variations "
2114 "are done (which is determined automatically, based on "
2115 "abs_species and the atmospheric dimension). As for T, the true "
2116 "step can turn out finer if required by the interpolation order.",
2117 /* extremes */
2118 "You can give here explicit extreme values to add to "
2119 "abs_t_pert and abs_nls_pert. The order is [t_pert_min, "
2120 "t_pert_max, nls_pert_min, nls_pert_max].",
2121 /* robust */
2122 "A flag with value 1 or 0. If set to one, the batch\n"
2123 "setup will continue, even if individual fields are invalid.\n"
2124 "This is consistent with the behaviour of *ybatchCalc*.",
2125 /* check_gridnames */
2126 "A flag with value 1 or 0. If set to one, the gridnames of \n"
2127 " every *atm_fields_compact* are checked.")));
2128
2129 md_data_raw.push_back(create_mdrecord(
2130 NAME("abs_lookupSetupWide"),
2132 "Set up input parameters for abs_lookupCalc for a wide range of\n"
2133 "atmospheric conditions.\n"
2134 "\n"
2135 "This method can be used to set up parameters for a lookup table that\n"
2136 "really covers all reasonable atmospheric conditions.\n"
2137 "\n"
2138 "Reference profiles of T and H2O will be constant, so that the\n"
2139 "different dimensions in the lookup table are actually \"orthogonal\",\n"
2140 "unlike the traditional case where we have pressure dependent reference\n"
2141 "profiles. This makes the table numerically somewhat more robust then\n"
2142 "the traditional ones, and it makes it straightforward to calculate the\n"
2143 "accuracy for the different interpolations with abs_lookupTestAccuracy.\n"
2144 "\n"
2145 "You can give min an max values for the atmospheric conditions. The\n"
2146 "default values are chosen such that they cover the value range over\n"
2147 "the complete Chevallier91L data set, and a bit more. The statistics\n"
2148 "of the Chevallier91L data are:\n"
2149 "\n"
2150 "min(p) / max(p) [Pa]: 1 / 104960\n"
2151 "min(T) / max(T) [K]: 158.21 / 320.39\n"
2152 "min(H2O) / max(H2O) [VMR]: -5.52e-07 / 0.049\n"),
2153 AUTHORS("Stefan Buehler"),
2154 OUT("abs_p",
2155 "abs_t",
2156 "abs_t_pert",
2157 "abs_vmrs",
2158 "abs_nls",
2159 "abs_nls_pert"),
2160 GOUT(),
2161 GOUT_TYPE(),
2162 GOUT_DESC(),
2163 IN("abs_species",
2164 "abs_p_interp_order",
2165 "abs_t_interp_order",
2166 "abs_nls_interp_order"),
2167 GIN("p_min", "p_max", "p_step", "t_min", "t_max", "h2o_min", "h2o_max"),
2168 GIN_TYPE("Numeric",
2169 "Numeric",
2170 "Numeric",
2171 "Numeric",
2172 "Numeric",
2173 "Numeric",
2174 "Numeric"),
2175 GIN_DEFAULT("0.5", "110000", "0.05", "100", "400", "0", "0.05"),
2176 GIN_DESC("Pressure grid minimum [Pa].",
2177 "Pressure grid maximum [Pa].",
2178 "Pressure grid step in log10(p[Pa]) (base 10 logarithm).",
2179 "Temperature grid minimum [K].",
2180 "Temperature grid maximum [K].",
2181 "Humidity grid minimum [fractional].",
2182 "Humidity grid maximum [fractional].")));
2183
2184 md_data_raw.push_back(create_mdrecord(
2185 NAME("abs_lookupTestAccuracy"),
2187 "Test accuracy of absorption lookup table.\n"
2188 "\n"
2189 "Explicitly compare absorption from the lookup table with line-by-line\n"
2190 "calculations for strategically selected conditions (in-between the\n"
2191 "lookup table grid points).\n"
2192 "\n"
2193 "For error units see *abs_lookupTestAccMC*\n"
2194 "\n"
2195 "Produces no workspace output, only output to the output streams.\n"),
2196 AUTHORS("Stefan Buehler"),
2197 OUT(),
2198 GOUT(),
2199 GOUT_TYPE(),
2200 GOUT_DESC(),
2201 IN("abs_lookup",
2202 "abs_lookup_is_adapted",
2203 "abs_p_interp_order",
2204 "abs_t_interp_order",
2205 "abs_nls_interp_order",
2206 "abs_xsec_agenda"),
2207 GIN(),
2208 GIN_TYPE(),
2209 GIN_DEFAULT(),
2210 GIN_DESC()));
2211
2212 md_data_raw.push_back(create_mdrecord(
2213 NAME("abs_lookupTestAccMC"),
2215 "Test accuracy of absorption lookup table with Monte Carlo Algorithm.\n"
2216 "\n"
2217 "Explicitly compare absorption from the lookup table with line-by-line\n"
2218 "calculations for random conditions.\n"
2219 "\n"
2220 "The quantities returned are the mean value and standard deviation of\n"
2221 "the absolute value of the relative error in percent.\n"
2222 "The relative error itself is computed for a large number of cases\n"
2223 "(pressure, temperature, and H2O VMR combinations). In the frequency\n"
2224 "dimension the maximum value is taken for each case.\n"
2225 "\n"
2226 "Produces no workspace output, only output to the output streams.\n"),
2227 AUTHORS("Stefan Buehler"),
2228 OUT(),
2229 GOUT(),
2230 GOUT_TYPE(),
2231 GOUT_DESC(),
2232 IN("abs_lookup",
2233 "abs_lookup_is_adapted",
2234 "abs_p_interp_order",
2235 "abs_t_interp_order",
2236 "abs_nls_interp_order",
2237 "mc_seed",
2238 "abs_xsec_agenda"),
2239 GIN(),
2240 GIN_TYPE(),
2241 GIN_DEFAULT(),
2242 GIN_DESC()));
2243
2244 md_data_raw.push_back(create_mdrecord(
2245 NAME("abs_nlteFromRaw"),
2246 DESCRIPTION("Sets NLTE values manually\n"
2247 "\n"
2248 "Touch\n"),
2249 AUTHORS("Richard Larsson"),
2250 OUT("abs_nlte"),
2251 GOUT(),
2252 GOUT_TYPE(),
2253 GOUT_DESC(),
2254 IN("nlte_level_identifiers",
2255 "nlte_vibrational_energies"),
2256 GIN("data"),
2257 GIN_TYPE("Matrix"),
2259 GIN_DESC("Vibrational data [nlevels, np]")));
2260
2261 md_data_raw.push_back(create_mdrecord(
2262 NAME("abs_speciesAdd"),
2264 "Adds species tag groups to the list of absorption species.\n"
2265 "\n"
2266 "This WSM is similar to *abs_speciesSet*, the only difference is that\n"
2267 "this method appends species to an existing list of absorption species instead\n"
2268 "of creating the whole list.\n"
2269 "\n"
2270 "See *abs_speciesSet* for details on how tags are defined and examples of\n"
2271 "how to input them in the control file.\n"),
2272 AUTHORS("Stefan Buehler"),
2273 OUT("abs_species",
2274 "propmat_clearsky_agenda_checked",
2275 "abs_xsec_agenda_checked"),
2276 GOUT(),
2277 GOUT_TYPE(),
2278 GOUT_DESC(),
2279 IN("abs_species"),
2280 GIN("species"),
2281 GIN_TYPE("ArrayOfString"),
2283 GIN_DESC("Specify one String for each tag group that you want to\n"
2284 "add. Inside the String, separate the tags by commas\n"
2285 "(plus optional blanks).\n")));
2286
2287 md_data_raw.push_back(create_mdrecord(
2288 NAME("abs_speciesAdd2"),
2290 "Adds a species tag group to the list of absorption species and\n"
2291 "jacobian quantities.\n"
2292 "\n"
2293 "The method is basically a combined call of *abs_speciesAdd* and\n"
2294 "*jacobianAddAbsSpecies*. In this way it is not needed to specify a\n"
2295 "tag group in two different places.\n"
2296 "\n"
2297 "Arguments exactly as for *jacobianAddAbsSpecies*. Note that this\n"
2298 "method only handles a single tag group, in contrast to\n"
2299 "*abs_speciesAdd*.\n"),
2300 AUTHORS("Patrick Eriksson"),
2301 OUT("abs_species",
2302 "jacobian_quantities",
2303 "jacobian_agenda",
2304 "propmat_clearsky_agenda_checked",
2305 "abs_xsec_agenda_checked"),
2306 GOUT(),
2307 GOUT_TYPE(),
2308 GOUT_DESC(),
2309 IN("abs_species", "atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
2310 GIN("gin1", "gin2", "gin3", "species", "unit"),
2311 GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
2312 GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "vmr"),
2313 GIN_DESC("Pressure retrieval grid.",
2314 "Latitude retrieval grid.",
2315 "Longitude retreival grid.",
2316 "The species tag of the retrieval quantity.",
2317 "Retrieval unit. See above."),
2318 SETMETHOD(false),
2319 AGENDAMETHOD(false),
2320 USES_TEMPLATES(false),
2321 PASSWORKSPACE(true)));
2322
2323 md_data_raw.push_back(create_mdrecord(
2324 NAME("abs_speciesDefineAllInScenario"),
2326 "Define one tag group for each species known to ARTS and included in an\n"
2327 "atmospheric scenario.\n"
2328 "\n"
2329 "You can use this as an alternative to *abs_speciesSet* if you want to make an\n"
2330 "absorption calculation that is as complete as possible. The method\n"
2331 "goes through all defined species and tries to open the VMR file. If\n"
2332 "this works the tag is included, otherwise it is skipped.\n"),
2333 AUTHORS("Stefan Buehler"),
2334 OUT("abs_species",
2335 "propmat_clearsky_agenda_checked",
2336 "abs_xsec_agenda_checked"),
2337 GOUT(),
2338 GOUT_TYPE(),
2339 GOUT_DESC(),
2340 IN(),
2341 GIN("basename"),
2342 GIN_TYPE("String"),
2344 GIN_DESC(
2345 "The name and path of a particular atmospheric scenario.\n"
2346 "For example: /pool/lookup2/arts-data/atmosphere/fascod/tropical")));
2347
2348 md_data_raw.push_back(create_mdrecord(
2349 NAME("abs_speciesDefineAll"),
2350 DESCRIPTION("Sets *abs_species*[i][0] to all species in ARTS\n"),
2351 AUTHORS("Richard Larsson"),
2352 OUT("abs_species",
2353 "propmat_clearsky_agenda_checked",
2354 "abs_xsec_agenda_checked"),
2355 GOUT(),
2356 GOUT_TYPE(),
2357 GOUT_DESC(),
2358 IN(),
2359 GIN(),
2360 GIN_TYPE(),
2361 GIN_DEFAULT(),
2362 GIN_DESC()));
2363
2364 md_data_raw.push_back(
2365 create_mdrecord(NAME("abs_speciesInit"),
2366 DESCRIPTION("Sets *abs_species* to be empty.\n"),
2367 AUTHORS("Stefan Buehler"),
2368 OUT("abs_species"),
2369 GOUT(),
2370 GOUT_TYPE(),
2371 GOUT_DESC(),
2372 IN(),
2373 GIN(),
2374 GIN_TYPE(),
2375 GIN_DEFAULT(),
2376 GIN_DESC()));
2377
2378 md_data_raw.push_back(create_mdrecord(
2379 NAME("abs_speciesSet"),
2381 "Set up a list of absorption species tag groups.\n"
2382 "\n"
2383 "Workspace variables like *abs_species* contain several tag\n"
2384 "groups. Each tag group contains one or more tags. This method converts\n"
2385 "descriptions of tag groups given in the keyword to the ARTS internal\n"
2386 "representation (an *ArrayOfArrayOfSpeciesTag*). A tag group selects\n"
2387 "spectral features which belong to the same species.\n"
2388 "\n"
2389 "A tag is defined in terms of the name of the species, isotopologue, and a\n"
2390 "range of frequencies. Species are named after the standard chemical\n"
2391 "names, e.g., \"O3\". Isotopologues are given by the last digit of the atomic\n"
2392 "weight, i.g., \"O3-668\" for the asymmetric ozone molecule including an\n"
2393 "oxygen 18 atom. Groups of transitions are specified by giving a lower\n"
2394 "and upper limit of a frequency range, e.g., \"O3-666-500e9-501e9\".\n"
2395 "\n"
2396 "To turn on Zeeman calculation for a species, \"-Z\" may be appended\n"
2397 "to its name: \"O2-Z\" or \"O2-Z-66\"\n"
2398 "\n"
2399 "To turn on line mixing calculation for a species, \"-LM\" may be appended\n"
2400 "to its name (or after the Zeeman tag): \"O2-LM\" or \"O2-Z-LM-66\"\n"
2401 "\n"
2402 "The symbol \"*\" acts as a wild card. Furthermore, frequency range or\n"
2403 "frequency range and isotopologue may be omitted.\n"
2404 "\n"
2405 "Finally, instead of the isotopologue the special letter \"nl\" may be given,\n"
2406 "e.g., \"H2O-nl\". This means that no absorption at all is associated\n"
2407 "with this tag. (It is not quite clear if this feature is useful for\n"
2408 "anything right now.)\n"
2409 "\n"
2410 "Example:\n"
2411 "\n"
2412 " species = [ \"O3-666-500e9-501e9, O3-686\",\n"
2413 " \"O3\",\n"
2414 " \"H2O-PWR98\" ]\n"
2415 "\n"
2416 " The first tag group selects all O3-666 lines between 500 and\n"
2417 " 501 GHz plus all O3-686 lines. \n"
2418 "\n"
2419 " The second tag group selects all remaining O3 transitions.\n"
2420 "\n"
2421 " The third tag group selects H2O, with one of the complete\n"
2422 " absorption models (Rosenkranz 98). No spectrocopic line catalogue\n"
2423 " data will be used for that third tag group.\n"
2424 "\n"
2425 " Note that order of tag groups in the species list matters. In our\n"
2426 " example, changing the order of the first two tag group will give\n"
2427 " different results: as \"O3\" already selects all O3 transitions,\n"
2428 " no lines will remain to be selected by the\n"
2429 " \"O3-666-500e9-501e9, O3-686\" tag.\n"
2430 "\n"
2431 "For CIA species the tag consists of the two involved species and\n"
2432 "a dataset index. CIA species can be defined for multiple regions\n"
2433 "The dataset index determines which region to use from the corresponding\n"
2434 "CIARecord in *abs_cia_data*.\n"
2435 "\n"
2436 "Example\n"
2437 "\n"
2438 "species = [ \"N2-CIA-N2-0, N2-CIA-N2-1\" ]\n"
2439 "\n"
2440 "For Hitran cross section species the tag consists of the species and\n"
2441 "the tagtype HXSEC, e.g. CFC11-HXSEC. The data for the species must be\n"
2442 "available in the *hitran_xsec_data* variable."
2443 "\n"
2444 "*abs_xsec_agenda_checked* and *propmat_clearsky_agenda_checked*\n"
2445 "are set to be false.\n"),
2446 AUTHORS("Stefan Buehler"),
2447 OUT("abs_species",
2448 "abs_xsec_agenda_checked",
2449 "propmat_clearsky_agenda_checked"),
2450 GOUT(),
2451 GOUT_TYPE(),
2452 GOUT_DESC(),
2453 IN(),
2454 GIN("species"),
2455 GIN_TYPE("ArrayOfString"),
2457 GIN_DESC("Specify one String for each tag group that you want to\n"
2458 "create. Inside the String, separate the tags by commas\n"
2459 "(plus optional blanks).\n")));
2460
2461 md_data_raw.push_back(create_mdrecord(
2462 NAME("abs_vecAddGas"),
2464 "Add gas absorption to first element of absorption vector.\n"
2465 "\n"
2466 "The task of this method is to sum up the gas absorption of the\n"
2467 "different gas species and add the result to the first element of the\n"
2468 "absorption vector.\n"),
2469 AUTHORS("Stefan Buehler"),
2470 OUT("abs_vec"),
2471 GOUT(),
2472 GOUT_TYPE(),
2473 GOUT_DESC(),
2474 IN("abs_vec", "propmat_clearsky"),
2475 GIN(),
2476 GIN_TYPE(),
2477 GIN_DEFAULT(),
2478 GIN_DESC()));
2479
2480 md_data_raw.push_back(create_mdrecord(
2481 NAME("abs_xsec_agenda_checkedCalc"),
2483 "Checks if the *abs_xsec_agenda* contains all necessary\n"
2484 "methods to calculate all the species in *abs_species*.\n"
2485 "\n"
2486 "This method should be called just before the *abs_xsec_agenda*\n"
2487 "is used, e.g. *abs_lookupCalc*, *ybatchCalc*, *yCalc*\n"),
2488 AUTHORS("Oliver Lemke"),
2489 OUT("abs_xsec_agenda_checked"),
2490 GOUT(),
2491 GOUT_TYPE(),
2492 GOUT_DESC(),
2493 IN("abs_species", "abs_xsec_agenda"),
2494 GIN(),
2495 GIN_TYPE(),
2496 GIN_DEFAULT(),
2497 GIN_DESC()));
2498
2499 md_data_raw.push_back(create_mdrecord(
2500 NAME("abs_xsec_per_speciesAddCIA"),
2502 "Calculate absorption cross sections per tag group for HITRAN CIA continua.\n"
2503 "\n"
2504 "This interpolates the cross sections from *abs_cia_data*.\n"
2505 "\n"
2506 "The robust option is intended only for testing. Do not use for normal\n"
2507 "runs, since subsequent functions will not be able to deal with NAN values.\n"),
2508 AUTHORS("Stefan Buehler"),
2509 OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2510 GOUT(),
2511 GOUT_TYPE(),
2512 GOUT_DESC(),
2513 IN("abs_xsec_per_species",
2514 "dabs_xsec_per_species_dx",
2515 "abs_species",
2516 "jacobian_quantities",
2517 "abs_species_active",
2518 "f_grid",
2519 "abs_p",
2520 "abs_t",
2521 "abs_vmrs",
2522 "abs_cia_data"),
2523 GIN("T_extrapolfac", "robust"),
2524 GIN_TYPE("Numeric", "Index"),
2525 GIN_DEFAULT("0.5", "0"),
2526 GIN_DESC(
2527 "Temperature extrapolation factor (relative to grid spacing).",
2528 "Set to 1 to suppress runtime errors (and return NAN values instead).")));
2529
2530 md_data_raw.push_back(create_mdrecord(
2531 NAME("abs_xsec_per_speciesAddHitranXsec"),
2533 "Calculate absorption cross sections per tag group for HITRAN xsec species.\n"
2534 "\n"
2535 "This broadens the cross section data from *hitran_xsec_data* and\n"
2536 "interpolates it onto the current f_grid.\n"
2537 "\n"
2538 "apply_tfit turns of the temperature fit. It is only meant for testing\n"
2539 "and should alwasy be kept on for real calculations.\n"
2540 "\n"
2541 "This method depends on the FFTW-3 library.\n"),
2542 AUTHORS("Oliver Lemke"),
2543 OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2544 GOUT(),
2545 GOUT_TYPE(),
2546 GOUT_DESC(),
2547 IN("abs_xsec_per_species",
2548 "dabs_xsec_per_species_dx",
2549 "abs_species",
2550 "jacobian_quantities",
2551 "abs_species_active",
2552 "f_grid",
2553 "abs_p",
2554 "abs_t",
2555 "hitran_xsec_data"),
2556 GIN("apply_tfit", "force_p", "force_t"),
2557 GIN_TYPE("Index", "Numeric", "Numeric"),
2558 GIN_DEFAULT("1", "-1", "-1"),
2559 GIN_DESC("Apply temperature fit.",
2560 "Positive value forces constant pressure [Pa].",
2561 "Positive value forces constant temperature [K].")));
2562
2563 md_data_raw.push_back(create_mdrecord(
2564 NAME("abs_xsec_per_speciesAddConts"),
2566 "Calculate absorption cross sections per tag group for continua.\n"),
2567 AUTHORS("Stefan Buehler"),
2568 OUT("abs_xsec_per_species", "dabs_xsec_per_species_dx"),
2569 GOUT(),
2570 GOUT_TYPE(),
2571 GOUT_DESC(),
2572 IN("abs_xsec_per_species",
2573 "dabs_xsec_per_species_dx",
2574 "abs_species",
2575 "jacobian_quantities",
2576 "abs_species_active",
2577 "f_grid",
2578 "abs_p",
2579 "abs_t",
2580 "abs_vmrs",
2581 "abs_cont_names",
2582 "abs_cont_parameters",
2583 "abs_cont_models"),
2584 GIN(),
2585 GIN_TYPE(),
2586 GIN_DEFAULT(),
2587 GIN_DESC()));
2588
2589 md_data_raw.push_back(create_mdrecord(
2590 NAME("abs_xsec_per_speciesAddLines"),
2592 "Calculates the line spectrum for both attenuation and phase\n"
2593 "for each tag group and adds it to abs_xsec_per_species.\n"),
2594 AUTHORS("Richard Larsson"),
2595 OUT("abs_xsec_per_species",
2596 "dabs_xsec_per_species_dx"),
2597 GOUT(),
2598 GOUT_TYPE(),
2599 GOUT_DESC(),
2600 IN("abs_xsec_per_species",
2601 "dabs_xsec_per_species_dx",
2602 "abs_species",
2603 "jacobian_quantities",
2604 "abs_species_active",
2605 "f_grid",
2606 "abs_p",
2607 "abs_t",
2608 "abs_vmrs",
2609 "abs_lines_per_species",
2610 "isotopologue_ratios",
2611 "lbl_checked"),
2612 GIN(),
2613 GIN_TYPE(),
2614 GIN_DEFAULT(),
2615 GIN_DESC()));
2616
2617 md_data_raw.push_back(create_mdrecord(
2618 NAME("propmat_clearskyAddPredefinedO2MPM2020"),
2619 DESCRIPTION("Reimplementation of published O2 absorption algorithm\n"
2620 "\n"
2621 "Based on:\n"
2622 "\tDmitriy S. Makarov, Mikhail Yu. Tretyakov, Philip W. Rosenkranz, JQSRT 243, 2020,\n"
2623 "\tRevision of the 60-GHz atmospheric oxygen absorption band models for practical use,\n"
2624 "\thttps://doi.org/10.1016/j.jqsrt.2019.106798\n"
2625 "\n"
2626 "Note that this is only really applicable to Earth and at lower altitudes.\n"
2627 "The only two tested derivatives are for frequency (wind) and for temperature.\n"
2628 "Several other derivatives are included and possible by the calculations but they\n"
2629 "are not tested, so it is not recommended to use this method with any other type(s)\n"
2630 "of derivatives\n"
2631 ),
2632 AUTHORS("Richard Larsson"),
2633 OUT("propmat_clearsky",
2634 "dpropmat_clearsky_dx"),
2635 GOUT(),
2636 GOUT_TYPE(),
2637 GOUT_DESC(),
2638 IN("propmat_clearsky",
2639 "dpropmat_clearsky_dx",
2640 "abs_species",
2641 "jacobian_quantities",
2642 "f_grid",
2643 "rtp_pressure",
2644 "rtp_temperature",
2645 "rtp_vmr"),
2646 GIN(),
2647 GIN_TYPE(),
2648 GIN_DEFAULT(),
2649 GIN_DESC()));
2650
2651 md_data_raw.push_back(create_mdrecord(
2652 NAME("abs_xsec_per_speciesInit"),
2654 "Initialize *abs_xsec_per_species* and *dabs_xsec_per_species_dx*.\n"
2655 "\n"
2656 "The initialization is necessary because all computational methods\n"
2657 "requires pre-allocated output variables, and they all add to the\n"
2658 "output so the 'start'-value has to be zeroes per level\n"
2659 "\n"
2660 "The size is determined from *abs_species*.\n"),
2661 AUTHORS("Stefan Buehler"),
2662 OUT("abs_xsec_per_species",
2663 "dabs_xsec_per_species_dx"),
2664 GOUT(),
2665 GOUT_TYPE(),
2666 GOUT_DESC(),
2667 IN("abs_species",
2668 "jacobian_quantities",
2669 "abs_species_active",
2670 "f_grid",
2671 "abs_p",
2672 "abs_xsec_agenda_checked"),
2673 GIN(),
2674 GIN_TYPE(),
2675 GIN_DEFAULT(),
2676 GIN_DESC()));
2677
2678 md_data_raw.push_back(create_mdrecord(
2679 NAME("AddZaAa"),
2681 "Adds zenith and azimuth angles.\n"
2682 "\n"
2683 "Adds up line-of-sights (LOS). In short, *dlos* is added to *ref_los*,\n"
2684 "assuming that a unit changes in zenith and azimuth are equal where\n"
2685 "dlos=(0,0).\n"),
2686 AUTHORS("Patrick Eriksson"),
2687 OUT(),
2688 GOUT("new_los"),
2689 GOUT_TYPE("Matrix"),
2690 GOUT_DESC("End line-of-sights."),
2691 IN(),
2692 GIN("ref_los", "dlos"),
2693 GIN_TYPE("Vector", "Matrix"),
2695 GIN_DESC("Reference line-of-sight (a single LOS).",
2696 "Change in line-of-sight (can be multiple LOS).")));
2697
2698 md_data_raw.push_back(create_mdrecord(
2699 NAME("AgendaAppend"),
2701 "Append methods to an agenda.\n"
2702 "\n"
2703 "An agenda is used to store a list of methods that are meant to be\n"
2704 "executed sequentially.\n"
2705 "\n"
2706 "This method takes the methods given in the body (in the curly braces)\n"
2707 "and appends them to the agenda given by the output argument (in the round\n"
2708 "braces).\n"
2709 "\n"
2710 "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
2711 "check, whether the given methods use the right input WSVs and produce\n"
2712 "the right output WSVs.\n"),
2713 AUTHORS("Oliver Lemke"),
2714 OUT(),
2715 GOUT("out"),
2716 GOUT_TYPE("Agenda"),
2717 GOUT_DESC("Target agenda."),
2718 IN(),
2719 GIN("in"),
2720 GIN_TYPE("Agenda"),
2722 GIN_DESC("Source agenda."),
2723 SETMETHOD(false),
2724 AGENDAMETHOD(true),
2725 USES_TEMPLATES(false),
2726 PASSWORKSPACE(false),
2727 PASSWSVNAMES(true)));
2728
2729 md_data_raw.push_back(create_mdrecord(NAME("AgendaExecute"),
2730 DESCRIPTION("Execute an agenda.\n"),
2731 AUTHORS("Oliver Lemke"),
2732 OUT(),
2733 GOUT(),
2734 GOUT_TYPE(),
2735 GOUT_DESC(),
2736 IN(),
2737 GIN("a"),
2738 GIN_TYPE("Agenda"),
2740 GIN_DESC("Agenda to be executed."),
2741 SETMETHOD(false),
2742 AGENDAMETHOD(false)));
2743
2744 md_data_raw.push_back(create_mdrecord(
2745 NAME("AgendaExecuteExclusive"),
2747 "Execute an agenda exclusively.\n"
2748 "\n"
2749 "Only one call to *AgendaExecuteExclusive* is executed at a time.\n"
2750 "Other calls to this function are blocked until the current one\n"
2751 "finishes. WARNING: Can cause deadlocks! Use with care.\n"),
2752 AUTHORS("Oliver Lemke"),
2753 OUT(),
2754 GOUT(),
2755 GOUT_TYPE(),
2756 GOUT_DESC(),
2757 IN(),
2758 GIN("a"),
2759 GIN_TYPE("Agenda"),
2761 GIN_DESC("Agenda to be executed."),
2762 SETMETHOD(false),
2763 AGENDAMETHOD(false)));
2764
2765 md_data_raw.push_back(create_mdrecord(
2766 NAME("AgendaSet"),
2768 "Set up an agenda.\n"
2769 "\n"
2770 "An agenda is used to store a list of methods that are meant to be\n"
2771 "executed sequentially.\n"
2772 "\n"
2773 "This method takes the methods given in the body (in the curly braces)\n"
2774 "and puts them in the agenda given by the output argument (in the round\n"
2775 "braces).\n"
2776 "\n"
2777 "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
2778 "check, whether the given methods use the right input WSVs and\n"
2779 "produce the right output WSVs.\n"),
2780 AUTHORS("Oliver Lemke"),
2781 OUT(),
2782 GOUT("out"),
2783 GOUT_TYPE("Agenda"),
2784 GOUT_DESC("The new agenda."),
2785 IN(),
2786 GIN(),
2787 GIN_TYPE(),
2788 GIN_DEFAULT(),
2789 GIN_DESC(),
2790 SETMETHOD(false),
2791 AGENDAMETHOD(true),
2792 USES_TEMPLATES(false),
2793 PASSWORKSPACE(false),
2794 PASSWSVNAMES(true)));
2795
2796 md_data_raw.push_back(create_mdrecord(
2797 NAME("AngularGridsSetFluxCalc"),
2799 "Sets the angular grids for the calculation of radiation fluxes. \n"
2800 "\n"
2801 "This method sets the angular grids for the radiation fluxes type\n"
2802 "calculations and calculates the integration weights *za_grid_weights*\n"
2803 "for the zenith angle integration. For down- und up-looking geometries\n"
2804 "it suffices to use the default values of N_za_grid and N_aa_grid.\n"
2805 "From N_aa_grid an equally spaced grid is created and stored in the\n"
2806 "WSV *aa_grid*.\n"
2807 "Depending on the desired za_grid_type *za_grid* will be\n"
2808 "equally spaced ('linear') or unequally ('linear_mu','double_gauss')\n"
2809 "Important, N_za_grid must be an even number because for the \n"
2810 "integration over each hemisphere N_za_grid / 2 zenith angles are needed.\n"
2811 "\n"
2812 "Possible zenith angle grid types are:\n"
2813 "double_gauss: The zenith grid and the integration weights are set according\n"
2814 " to a gauss-legendre integration for each hemispheres.\n"
2815 "linear: Equally space grid between 0 deg and 180 deg including the poles\n"
2816 "linear_mu: Similar to 'linear' but equally spaced for cos(180 deg) to cos(0 deg),\n"
2817 " which results a unequally spaced angular grid\n"
2818
2819 ),
2820 AUTHORS("Manfred Brath"),
2821 OUT("za_grid", "aa_grid", "za_grid_weights"),
2822 GOUT(),
2823 GOUT_TYPE(),
2824 GOUT_DESC(),
2825 IN(),
2826 GIN("N_za_grid", "N_aa_grid", "za_grid_type"),
2827 GIN_TYPE("Index", "Index", "String"),
2828 GIN_DEFAULT("2", "1", "linear_mu"),
2829 GIN_DESC("Number of zenith angles",
2830 "Number of azimuth angles",
2831 "Zenith angle grid type")));
2832
2833 md_data_raw.push_back(create_mdrecord(
2834 NAME("ArrayOfAgendaAppend"),
2835 DESCRIPTION("Set up an agenda and append it to the array of agendas.\n"
2836 "\n"
2837 "See *AgendaSet* for details.\n"),
2838 AUTHORS("Oliver Lemke"),
2839 OUT(),
2840 GOUT("out"),
2841 GOUT_TYPE("ArrayOfAgenda"),
2842 GOUT_DESC("The new agenda."),
2843 IN(),
2844 GIN(),
2845 GIN_TYPE(),
2846 GIN_DEFAULT(),
2847 GIN_DESC(),
2848 SETMETHOD(false),
2849 AGENDAMETHOD(true),
2850 USES_TEMPLATES(false),
2851 PASSWORKSPACE(false),
2852 PASSWSVNAMES(true)));
2853
2854 md_data_raw.push_back(
2855 create_mdrecord(NAME("ArrayOfAgendaExecute"),
2856 DESCRIPTION("Execute an agenda from an ArrayOfAgenda.\n"),
2857 AUTHORS("Oliver Lemke"),
2858 OUT(),
2859 GOUT(),
2860 GOUT_TYPE(),
2861 GOUT_DESC(),
2862 IN("agenda_array_index"),
2863 GIN("agendas"),
2864 GIN_TYPE("ArrayOfAgenda"),
2866 GIN_DESC("Array of agendas."),
2867 SETMETHOD(false),
2868 AGENDAMETHOD(false)));
2869
2870 md_data_raw.push_back(create_mdrecord(
2871 NAME("AntennaConstantGaussian1D"),
2873 "Sets up a 1D gaussian antenna response and a matching\n"
2874 "*mblock_dlos_grid*.\n"
2875 "\n"
2876 "As *antenna_responseGaussian*, but also creates *mblock_dlos_grid*.\n"
2877 "For returned antenna response, see *antenna_responseGaussian*.\n"
2878 "\n"
2879 "The size of *mblock_dlos_grid* is determined by *n_za_grid*.\n"
2880 "The end points of the grid are set to be the same as for the\n"
2881 "antenna response. The spacing of the grid follows the magnitude of\n"
2882 "the response; the spacing is smaller where the response is high.\n"
2883 "More precisely, the grid points are determined by dividing\n"
2884 "the cumulative sum of the response in equal steps. This makes sense\n"
2885 "if the representation error of the radiance (as a function of\n"
2886 "zenith angle) increases linearly with the grid spacing.\n"
2887 "\n"
2888 "The WSV *antenna_dlos* is set to [0].\n"
2889 "\n"
2890 "The antenna repsonse is not normalised.\n"),
2891 AUTHORS("Patrick Eriksson"),
2892 OUT("antenna_dim",
2893 "mblock_dlos_grid",
2894 "antenna_response",
2895 "antenna_dlos"),
2896 GOUT(),
2897 GOUT_TYPE(),
2898 GOUT_DESC(),
2899 IN(),
2900 GIN("n_za_grid", "fwhm", "xwidth_si", "dx_si"),
2901 GIN_TYPE("Index", "Numeric", "Numeric", "Numeric"),
2902 GIN_DEFAULT(NODEF, NODEF, "3", "0.1"),
2903 GIN_DESC("Number of points to include in *mblock_dlos_grid*.",
2904 "Full width at half-maximum of antenna beam [deg].",
2905 "Half-width of response, in terms of std. dev.",
2906 "Grid spacing, in terms of std. dev.")));
2907
2908 md_data_raw.push_back(create_mdrecord(
2909 NAME("AntennaMultiBeamsToPencilBeams"),
2911 "Maps a multi-beam case to a matching pencil beam case.\n"
2912 "\n"
2913 "Cases with overlapping beams are most efficiently handled by\n"
2914 "letting *antenna_dlos* have several rows. That is, there are\n"
2915 "multiple beams for each measurement block. The drawback is that\n"
2916 "many variables must be adjusted if the corresponding pencil beam\n"
2917 "spectra shall be calculated. This method makes this adjustment.\n"
2918 "That is, if you have a control file for a multiple beam case and\n"
2919 "for some reason want to avoid the antenna weighting, you add this\n"
2920 "method before *sensor_responseInit*, and remove the call of\n"
2921 "*sensor_responseAntenna* and you will get the matching pencil beam\n"
2922 "spectra.\n"),
2923 AUTHORS("Patrick Eriksson"),
2924 OUT("sensor_pos",
2925 "sensor_los",
2926 "antenna_dlos",
2927 "antenna_dim",
2928 "mblock_dlos_grid"),
2929 GOUT(),
2930 GOUT_TYPE(),
2931 GOUT_DESC(),
2932 IN("sensor_pos",
2933 "sensor_los",
2934 "antenna_dlos",
2935 "antenna_dim",
2936 "mblock_dlos_grid",
2937 "atmosphere_dim"),
2938 GIN(),
2939 GIN_TYPE(),
2940 GIN_DEFAULT(),
2941 GIN_DESC()));
2942
2943 md_data_raw.push_back(create_mdrecord(
2944 NAME("AntennaOff"),
2946 "Sets some antenna related variables\n"
2947 "\n"
2948 "Use this method to set *antenna_dim* and *mblock_dlos_grid* to\n"
2949 "suitable values (1 and [0], respectively) for cases when a\n"
2950 "sensor is included, but the antenna pattern is neglected.\n"),
2951 AUTHORS("Patrick Eriksson"),
2952 OUT("antenna_dim", "mblock_dlos_grid"),
2953 GOUT(),
2954 GOUT_TYPE(),
2955 GOUT_DESC(),
2956 IN(),
2957 GIN(),
2958 GIN_TYPE(),
2959 GIN_DEFAULT(),
2960 GIN_DESC()));
2961
2962 md_data_raw.push_back(create_mdrecord(
2963 NAME("antenna_responseGaussian"),
2965 "Sets up a gaussian antenna response.\n"
2966 "\n"
2967 "The method assumes that the response is the same for all\n"
2968 "frequencies and polarisations, and that it can be modelled as\n"
2969 "gaussian.\n"
2970 "\n"
2971 "The grid generated is approximately\n"
2972 " si * [-xwidth_si:dx_si:xwidth_si]\n"
2973 "where si is the standard deviation corresponding to the FWHM.\n"
2974 "That is, width and spacing of the grid is specified in terms of\n"
2975 "number of standard deviations. If xwidth_si is set to 2, the\n"
2976 "response will cover about 95% the complete response. For\n"
2977 "xwidth_si=3, about 99% is covered. If xwidth_si/dx_si is not\n"
2978 "an integer, the end points of the grid are kept and the spacing\n"
2979 "of the grid is reduced (ie. spacing is equal or smaller *dx_si*).\n"
2980 "\n"
2981 "If the 2D option is selected (*do_2d*), a circular antenna is\n"
2982 "assumed and the response is any direction follows the 1D case.\n"
2983 "\n"
2984 "The antenna repsonse is not normalised.\n"),
2985 AUTHORS("Patrick Eriksson"),
2986 OUT("antenna_response"),
2987 GOUT(),
2988 GOUT_TYPE(),
2989 GOUT_DESC(),
2990 IN(),
2991 GIN("fwhm", "xwidth_si", "dx_si", "do_2d"),
2992 GIN_TYPE("Numeric", "Numeric", "Numeric", "Index"),
2993 GIN_DEFAULT(NODEF, "3", "0.1", "0"),
2994 GIN_DESC("Full width at half-maximum",
2995 "Half-width of response, in terms of std. dev.",
2996 "Grid spacing, in terms of std. dev.",
2997 "Set to 1 to create a 2D antenna pattern.")));
2998
2999 md_data_raw.push_back(create_mdrecord(
3000 NAME("antenna_responseVaryingGaussian"),
3002 "Sets up gaussian antenna responses.\n"
3003 "\n"
3004 "Similar to *antenna_responseGaussian* but allows to set up\n"
3005 "responses that varies with frequency. That is, the method assumes\n"
3006 "that the response is the same for all polarisations, and that it\n"
3007 "can be modelled as a gaussian function varying with frequency.\n"
3008 "\n"
3009 "The full width at half maximum (FWHM in radians) is calculated as:\n"
3010 " fwhm = lambda / leff\n"
3011 "where lambda is the wavelength and *leff* is the effective size of\n"
3012 "the antenna. Normally, *leff* is smaller than the physical antenna\n"
3013 "size.\n"
3014 "\n"
3015 "Antenna responses are created for *nf* frequencies spanning the\n"
3016 "range [*fstart*,*fstop*], with a logarithmic spacing. That is, the\n"
3017 "frequency grid of the responses is taken from *VectorNLogSpace*.\n"
3018 "\n"
3019 "The responses have a common angular grid. The width, determined by\n"
3020 "*xwidth_si*, is set for the lowest frequency, while the spacing\n"
3021 "(*dx_si*) is set for the highest frequency. This ensures that both\n"
3022 "the width and spacing are equal or better than *xwidth_si* and\n"
3023 "*dx_si*, respectively, for all frequencies.\n"
3024 "\n"
3025 "If the 2D option is selected (*do_2d*), a circular antenna is\n"
3026 "assumed and the response is any direction follows the 1D case.\n"
3027 "\n"
3028 "The antenna repsonse is not normalised.\n"),
3029 AUTHORS("Patrick Eriksson"),
3030 OUT("antenna_response"),
3031 GOUT(),
3032 GOUT_TYPE(),
3033 GOUT_DESC(),
3034 IN(),
3035 GIN("leff", "xwidth_si", "dx_si", "nf", "fstart", "fstop", "do_2d"),
3036 GIN_TYPE("Numeric",
3037 "Numeric",
3038 "Numeric",
3039 "Index",
3040 "Numeric",
3041 "Numeric",
3042 "Index"),
3043 GIN_DEFAULT(NODEF, "3", "0.1", NODEF, NODEF, NODEF, "0"),
3044 GIN_DESC("Effective size of the antenna",
3045 "Half-width of response, in terms of std. dev.",
3046 "Grid spacing, in terms of std. dev.",
3047 "Number of points in frequency grid (must be >= 2)",
3048 "Start point of frequency grid",
3049 "End point of frequency grid",
3050 "Set to 1 to create a 2D antenna pattern.")));
3051
3052 md_data_raw.push_back(create_mdrecord(
3053 NAME("Append"),
3055 "Append one workspace variable to another.\n"
3056 "\n"
3057 "This method can append an array to another array of the same type,\n"
3058 "e.g. ArrayOfIndex to ArrayOfIndex. Or a single element to an array\n"
3059 "such as a Tensor3 to an ArrayOfTensor3.\n"
3060 "\n"
3061 "Appending two vectors or a numeric to a vector works as for array\n"
3062 "variables.\n"
3063 "\n"
3064 "Both another matrix or a vector can be appended to a matrix. In\n"
3065 "addition, for matrices, the 'append dimension' can be selected.\n"
3066 "The third argument, *dimension*, indicates how to append, where\n"
3067 "\"leading\" means to append row-wise, and \"trailing\" means\n"
3068 "column-wise.\n"
3069 "\n"
3070 "Other types (TensorX) are currently only implemented for\n"
3071 "appending to the leading dimension.\n"
3072 "\n"
3073 "This method is not implemented for all types, just for those that\n"
3074 "were thought or found to be useful. (See variable list below.).\n"),
3075 AUTHORS("Stefan Buehler, Oliver Lemke"),
3076 OUT(),
3077 GOUT("out"),
3078 GOUT_TYPE("Vector, Vector,"
3079 "Matrix, Matrix,"
3080 "Tensor3, Tensor3,"
3081 "Tensor4, Tensor4,"
3082 "String, " +
3083 ARRAY_GROUPS + ", " + ARRAY_GROUPS_WITH_BASETYPE),
3084 GOUT_DESC("The variable to append to."),
3085 IN(),
3086 GIN("in", "dimension"),
3087 GIN_TYPE("Numeric, Vector,"
3088 "Matrix, Vector,"
3089 "Matrix, Tensor3,"
3090 "Tensor3, Tensor4,"
3091 "String, " +
3092 ARRAY_GROUPS + "," + GROUPS_WITH_ARRAY_TYPE,
3093 "String"),
3094 GIN_DEFAULT(NODEF, "leading"),
3095 GIN_DESC(
3096 "The variable to append.",
3097 "Where to append. Could be either the \"leading\" or \"trailing\" dimension."),
3098 SETMETHOD(false),
3099 AGENDAMETHOD(false),
3100 USES_TEMPLATES(true),
3101 PASSWORKSPACE(false),
3102 PASSWSVNAMES(true)));
3103
3104 md_data_raw.push_back(create_mdrecord(
3105 NAME("ArrayOfGriddedFieldGetNames"),
3106 DESCRIPTION("Get the names of all GriddedFields stored in an Array.\n"
3107 "\n"
3108 "See *GriddedFieldGetName*.\n"),
3109 AUTHORS("Lukas Kluft"),
3110 OUT(),
3111 GOUT("names"),
3112 GOUT_TYPE("ArrayOfString"),
3113 GOUT_DESC("Names of the GriddedFields in the ArrayOfGriddedField."),
3114 IN(),
3115 GIN("griddedfields"),
3116 GIN_TYPE("ArrayOfGriddedField1, ArrayOfGriddedField2,"
3117 "ArrayOfGriddedField3, ArrayOfGriddedField4"),
3119 GIN_DESC("Array of GriddedFields."),
3120 SETMETHOD(false),
3121 AGENDAMETHOD(false),
3122 USES_TEMPLATES(true)));
3123
3124 md_data_raw.push_back(create_mdrecord(
3125 NAME("ArrayOfIndexLinSpace"),
3127 "Initializes an ArrayOfIndex with linear spacing.\n"
3128 "\n"
3129 "The first element equals always the start value, and the spacing\n"
3130 "equals always the step value, but the last value can deviate from\n"
3131 "the stop value. *step* can be both positive and negative.\n"
3132 "\n"
3133 "The created array is [start, start+step, start+2*step, ...]\n "),
3134 AUTHORS("Oliver Lemke"),
3135 OUT(),
3136 GOUT("out"),
3137 GOUT_TYPE("ArrayOfIndex"),
3138 GOUT_DESC("Output array."),
3139 IN(),
3140 GIN("start", "stop", "step"),
3141 GIN_TYPE("Index", "Index", "Index"),
3143 GIN_DESC("Start value.",
3144 "Maximum/minimum value of the end value",
3145 "Spacing of the array.")));
3146
3147 md_data_raw.push_back(create_mdrecord(
3148 NAME("ArrayOfIndexSet"),
3149 DESCRIPTION("Creates an ArrayOfIndex from the given list of numbers.\n"),
3150 AUTHORS("Oliver Lemke"),
3151 OUT(),
3152 GOUT("out"),
3153 GOUT_TYPE("ArrayOfIndex"),
3154 GOUT_DESC("Variable to initialize."),
3155 IN(),
3156 GIN("value"),
3157 GIN_TYPE("ArrayOfIndex"),
3159 GIN_DESC("Indexes for initializiation."),
3160 SETMETHOD(true)));
3161
3162 md_data_raw.push_back(create_mdrecord(
3163 NAME("ArrayOfSpeciesTagSet"),
3164 DESCRIPTION("Creates an ArrayOfSpeciesTag from the given ArrayOfSpeciesTag.\n"),
3165 AUTHORS("Richard Larsson"),
3166 OUT(),
3167 GOUT("out"),
3168 GOUT_TYPE("ArrayOfSpeciesTag"),
3169 GOUT_DESC("Variable to initialize."),
3170 IN(),
3171 GIN("value"),
3172 GIN_TYPE("ArrayOfSpeciesTag"),
3174 GIN_DESC("List of SpeciesTag for initializiation."),
3175 SETMETHOD(true)));
3176
3177 md_data_raw.push_back(create_mdrecord(
3178 NAME("ArrayOfIndexSetConstant"),
3179 DESCRIPTION("Creates an ArrayOfIndex of length *nelem*, with all values\n"
3180 "identical.\n"),
3181 AUTHORS("Patrick Eriksson"),
3182 OUT(),
3183 GOUT("out"),
3184 GOUT_TYPE("ArrayOfIndex"),
3185 GOUT_DESC("Variable to initialize."),
3186 IN("nelem"),
3187 GIN("value"),
3188 GIN_TYPE("Index"),
3190 GIN_DESC("Array value.."),
3191 SETMETHOD(true)));
3192
3193 md_data_raw.push_back(create_mdrecord(
3194 NAME("ArrayOfStringSet"),
3195 DESCRIPTION("Sets a String array according the given text.\n"
3196 "The format is text = [\"String1\",\"String2\",...]\n"),
3197 AUTHORS("Oliver Lemke"),
3198 OUT(),
3199 GOUT("out"),
3200 GOUT_TYPE("ArrayOfString"),
3201 GOUT_DESC("Variable to initialize."),
3202 IN(),
3203 GIN("value"),
3204 GIN_TYPE("ArrayOfString"),
3206 GIN_DESC("Strings for initialization."),
3207 SETMETHOD(true)));
3208
3209 md_data_raw.push_back(create_mdrecord(
3210 NAME("ArrayOfTimeNLinSpace"),
3212 "Creates a time array with length *nelem*, equally spaced between the\n"
3213 "given end values.\n"
3214 "\n"
3215 "The length (*nelem*) must be larger than 1.\n"),
3216 AUTHORS("Richard Larsson"),
3217 OUT(),
3218 GOUT("out"),
3219 GOUT_TYPE("ArrayOfTime"),
3220 GOUT_DESC("Variable to initialize."),
3221 IN("nelem"),
3222 GIN("start", "stop"),
3223 GIN_TYPE("String", "String"),
3225 GIN_DESC("Start value.", "End value.")));
3226
3227 md_data_raw.push_back(create_mdrecord(
3228 NAME("ArrayOfTimeSetConstant"),
3230 "Creates an ArrayOfTime and sets all elements to the specified value.\n"
3231 "\n"
3232 "The vector length is determined by *nelem*.\n"),
3233 AUTHORS("Patrick Eriksson"),
3234 OUT(),
3235 GOUT("out"),
3236 GOUT_TYPE("ArrayOfTime"),
3237 GOUT_DESC("Variable to initialize."),
3238 IN("nelem"),
3239 GIN("value"),
3240 GIN_TYPE("Time"),
3242 GIN_DESC("Time value.")));
3243
3244 md_data_raw.push_back(create_mdrecord(
3245 NAME("Arts"),
3247 "Runs the agenda that is specified inside the curly braces. ARTS\n"
3248 "controlfiles must define this method. It is executed automatically\n"
3249 "when ARTS is run on the controlfile and cannot be called by the user.\n"
3250 "This methods was used for Arts 1 controlfiles and is now obsolete.\n"
3251 "See *Arts2*\n"),
3252 AUTHORS("Stefan Buehler"),
3253 OUT(),
3254 GOUT(),
3255 GOUT_TYPE(),
3256 GOUT_DESC(),
3257 IN(),
3258 GIN(),
3259 GIN_TYPE(),
3260 GIN_DEFAULT(),
3261 GIN_DESC(),
3262 SETMETHOD(false),
3263 AGENDAMETHOD(true)));
3264
3265 md_data_raw.push_back(create_mdrecord(
3266 NAME("Arts2"),
3268 "Runs the agenda that is specified inside the curly braces. ARTS\n"
3269 "controlfiles must define this method. It is executed automatically\n"
3270 "when ARTS is run on the controlfile and cannot be called by the user.\n"),
3271 AUTHORS("Oliver Lemke"),
3272 OUT(),
3273 GOUT(),
3274 GOUT_TYPE(),
3275 GOUT_DESC(),
3276 IN(),
3277 GIN(),
3278 GIN_TYPE(),
3279 GIN_DEFAULT(),
3280 GIN_DESC(),
3281 SETMETHOD(false),
3282 AGENDAMETHOD(true)));
3283
3284 md_data_raw.push_back(create_mdrecord(
3285 NAME("AtmFieldPerturb"),
3287 "Adds a perturbation to an atmospheric field.\n"
3288 "\n"
3289 "The shape and position of the perturbation follow the retrieval grids.\n"
3290 "That is, the shape of the perturbation has a traingular shape, \n"
3291 "with breake points at the retrieval grid points. The position is\n"
3292 "given as an index. This index matches the column in the Jacobian\n"
3293 "for the selected grid position.\n"
3294 "\n"
3295 "If the retrieval grids fully match the atmospheric grids, you can\n"
3296 "use *AtmFieldPerturbAtmGrids*, that is faster. The description of\n"
3297 "that method can help to understand this method.\n"),
3298 AUTHORS("Patrick Eriksson"),
3299 OUT(),
3300 GOUT("perturbed_field"),
3301 GOUT_TYPE("Tensor3"),
3302 GOUT_DESC("Perturbed/modified field."),
3303 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3304 GIN("original_field",
3305 "p_ret_grid",
3306 "lat_ret_grid",
3307 "lon_ret_grid",
3308 "pert_index",
3309 "pert_size",
3310 "pert_mode"),
3311 GIN_TYPE("Tensor3",
3312 "Vector",
3313 "Vector",
3314 "Vector",
3315 "Index",
3316 "Numeric",
3317 "String"),
3318 GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
3319 GIN_DESC("Original field, e.g. *t_field*.",
3320 "Pressure retrieval grid.",
3321 "Latitude retrieval grid.",
3322 "Longitude retrieval grid.",
3323 "Index of position where the perturbation shall be performed.",
3324 "Size of perturbation.",
3325 "Type of perturbation, "
3326 "absolute"
3327 " or "
3328 "relative"
3329 ".")));
3330
3331 md_data_raw.push_back(create_mdrecord(
3332 NAME("AtmFieldPerturbAtmGrids"),
3334 "As *AtmFieldPerturb*, but perturbation follows the atmospheric grids.\n"
3335 "\n"
3336 "The method effectively performs this\n"
3337 " perturbed_field = original_field\n"
3338 " perturbed_field(p_index,lat_index,lon_index) += pert_size\n"
3339 "if not *pert_mode* is set to "
3340 "relative"
3341 " when this is done\n"
3342 " perturbed_field = original_field\n"
3343 " perturbed_field(p_index,lat_index,lon_index) *= 1*pert_size\n"
3344 "where p_index etc. are derived from *pert_index*.\n"),
3345 AUTHORS("Patrick Eriksson"),
3346 OUT(),
3347 GOUT("perturbed_field"),
3348 GOUT_TYPE("Tensor3"),
3349 GOUT_DESC("Perturbed/modified field."),
3350 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3351 GIN("original_field", "pert_index", "pert_size", "pert_mode"),
3352 GIN_TYPE("Tensor3", "Index", "Numeric", "String"),
3353 GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
3354 GIN_DESC("Original field, e.g. *t_field*.",
3355 "Index of position where the perturbation shall be performed.",
3356 "Size of perturbation.",
3357 "Type of perturbation, "
3358 "absolute"
3359 " or "
3360 "relative"
3361 ".")));
3362
3363 md_data_raw.push_back(create_mdrecord(
3364 NAME("AtmFieldPRegrid"),
3366 "Interpolates the input field along the pressure dimension from\n"
3367 "*p_grid_old* to to *p_grid_new*.\n"
3368 "\n"
3369 "Extrapolation is allowed within the common 0.5grid-step margin.\n"
3370 "in and out fields can be the same variable.\n"),
3371 AUTHORS("Jana Mendrok"),
3372 OUT(),
3373 GOUT("out"),
3374 GOUT_TYPE("Tensor3, Tensor4"),
3375 GOUT_DESC("Regridded atmospheric field."),
3376 IN(),
3377 GIN("in", "p_grid_new", "p_grid_old", "interp_order"),
3378 GIN_TYPE("Tensor3, Tensor4", "Vector", "Vector", "Index"),
3379 GIN_DEFAULT(NODEF, NODEF, NODEF, "1"),
3380 GIN_DESC("Input atmospheric field.",
3381 "Pressure grid to regrid to",
3382 "Pressure grid of input field",
3383 "Interpolation order.")));
3384
3385 md_data_raw.push_back(create_mdrecord(
3386 NAME("AtmFieldsCalc"),
3388 "Interpolation of raw atmospheric T, z, VMR, and NLTE T/r fields to\n"
3389 "calculation grids.\n"
3390 "\n"
3391 "An atmospheric scenario includes the following data for each\n"
3392 "position (pressure, latitude, longitude) in the atmosphere:\n"
3393 " 1. temperature field\n"
3394 " 2. the corresponding altitude field\n"
3395 " 3. vmr fields for the gaseous species\n"
3396 "This method interpolates the fields of raw data (*t_field_raw*,\n"
3397 "*z_field_raw*, *vmr_field_raw*) which can be stored on arbitrary\n"
3398 "grids to the calculation grids (*p_grid*, *lat_grid*, *lon_grid*).\n"
3399 "If *nlte_field_raw* is empty, it is assumed to be so because LTE is\n"
3400 "assumed by the user and *nlte_field* will be empty.\n"
3401 "\n"
3402 "Internally, *AtmFieldsCalc* applies *GriddedFieldPRegrid* and\n"
3403 "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
3404 "is allowed and applied. However, if *vmr_zeropadding*=1 then VMRs at\n"
3405 "*p_grid* levels exceeding the raw VMRs' pressure grid are set to 0\n"
3406 "(applying the *vmr_zeropadding* option of *GriddedFieldPRegrid*).\n"
3407 "\n"
3408 "Default is to just accept obtained VMRs. If you want to enforce\n"
3409 "that all VMR created are >= 0, set *vmr_nonegative* to 1. Negative\n"
3410 "values are then set 0. Beside being present in input data, negative\n"
3411 "VMR can be generated from the interpolation if *interp_order* is\n"
3412 "above 1.\n"),
3413 AUTHORS("Claudia Emde", "Stefan Buehler"),
3414 OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3415 GOUT(),
3416 GOUT_TYPE(),
3417 GOUT_DESC(),
3418 IN("p_grid",
3419 "lat_grid",
3420 "lon_grid",
3421 "t_field_raw",
3422 "z_field_raw",
3423 "vmr_field_raw",
3424 "nlte_field_raw",
3425 "nlte_level_identifiers",
3426 "nlte_vibrational_energies",
3427 "atmosphere_dim"),
3428 GIN("interp_order",
3429 "vmr_zeropadding",
3430 "vmr_nonegative",
3431 "nlte_when_negative"),
3432 GIN_TYPE("Index", "Index", "Index", "Index"),
3433 GIN_DEFAULT("1", "0", "0", "0"),
3434 GIN_DESC("Interpolation order (1=linear interpolation).",
3435 "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3436 "If set to 1, negative VMRs are set to 0.",
3437 "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3438
3439 md_data_raw.push_back(create_mdrecord(
3440 NAME("AtmFieldsCalcExpand1D"),
3442 "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
3443 "homogeneous atmospheric fields.\n"
3444 "\n"
3445 "The method works as *AtmFieldsCalc*, but accepts only raw 1D\n"
3446 "atmospheres. The raw atmosphere is interpolated to *p_grid* and\n"
3447 "the obtained values are applied for all latitudes, and also\n"
3448 "longitudes for 3D, to create a homogeneous atmosphere.\n"
3449 "\n"
3450 "The method deals only with the atmospheric fields, and to create\n"
3451 "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3452 "ellipsoid is set to be a sphere.\n"),
3453 AUTHORS("Patrick Eriksson", "Claudia Emde", "Stefan Buehler"),
3454 OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3455 GOUT(),
3456 GOUT_TYPE(),
3457 GOUT_DESC(),
3458 IN("p_grid",
3459 "lat_grid",
3460 "lon_grid",
3461 "t_field_raw",
3462 "z_field_raw",
3463 "vmr_field_raw",
3464 "nlte_field_raw",
3465 "nlte_level_identifiers",
3466 "nlte_vibrational_energies",
3467 "atmosphere_dim"),
3468 GIN("interp_order",
3469 "vmr_zeropadding",
3470 "vmr_nonegative",
3471 "nlte_when_negative"),
3472 GIN_TYPE("Index", "Index", "Index", "Index"),
3473 GIN_DEFAULT("1", "0", "0", "0"),
3474 GIN_DESC("Interpolation order (1=linear interpolation).",
3475 "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3476 "If set to 1, negative VMRs are set to 0.",
3477 "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3478
3479 md_data_raw.push_back(create_mdrecord(
3480 NAME("AtmFieldsExpand1D"),
3482 "Maps a 1D case to 2D or 3D homogeneous atmospheric fields.\n"
3483 "\n"
3484 "This method takes a 1D atmospheric case and converts it to the\n"
3485 "corresponding case for 2D or 3D. The atmospheric fields (t_field,\n"
3486 "z_field and vmr_field) must be 1D and match *p_grid*. The size of\n"
3487 "the new data is determined by *atmosphere_dim*, *lat_grid* and\n"
3488 "*lon_grid*. That is, these later variables have been changed since\n"
3489 "the original fields were created.\n"
3490 "\n"
3491 "The method deals only with the atmospheric fields, and to create\n"
3492 "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3493 "ellipsoid is set to be a sphere.\n"),
3494 AUTHORS("Patrick Eriksson"),
3495 OUT("t_field", "z_field", "vmr_field"),
3496 GOUT(),
3497 GOUT_TYPE(),
3498 GOUT_DESC(),
3499 IN("t_field",
3500 "z_field",
3501 "vmr_field",
3502 "p_grid",
3503 "lat_grid",
3504 "lon_grid",
3505 "atmosphere_dim"),
3506 GIN("chk_vmr_nan"),
3507 GIN_TYPE("Index"),
3508 GIN_DEFAULT("1"),
3509 GIN_DESC(
3510 "Flag to determine if a search for NaN shall be performed or not.")));
3511
3512 md_data_raw.push_back(create_mdrecord(
3513 NAME("AtmFieldsExtract1D"),
3515 "Converts 2D or 3D homogeneous atmospheric fields to a 1D case.\n"
3516 "\n"
3517 "The method extracts data for given latitude and longitude index\n"
3518 "to create a 1D atmosphere. *AtmosphereSet1D* is called to set\n"
3519 "output values of *atmosphere_dim*, *lat_grid* and *lon_grid*.\n"
3520 "Nothing is done if *atmosphere_dim* alöready is 1.\n"),
3521 AUTHORS("Patrick Eriksson"),
3522 OUT("atmosphere_dim",
3523 "lat_grid",
3524 "lon_grid",
3525 "t_field",
3526 "z_field",
3527 "vmr_field"),
3528 GOUT(),
3529 GOUT_TYPE(),
3530 GOUT_DESC(),
3531 IN("atmosphere_dim",
3532 "lat_grid",
3533 "lon_grid",
3534 "t_field",
3535 "z_field",
3536 "vmr_field"),
3537 GIN("ilat", "ilon"),
3538 GIN_TYPE("Index", "Index"),
3539 GIN_DEFAULT("0", "0"),
3540 GIN_DESC("Pick data having this latitude index (0-based).",
3541 "Pick data having this longitude index (0-based).")));
3542
3543 md_data_raw.push_back(create_mdrecord(
3544 NAME("AtmFieldsRefinePgrid"),
3546 "Refines the pressure grid and regrids the clearsky atmospheric\n"
3547 "fields accordingly.\n"
3548 "\n"
3549 "This method is, e.g., used for absorption lookup table testing. It\n"
3550 "can also be used to refine the *p_grid* and atmospheric fields from\n"
3551 "compact state atmospheres.\n"
3552 "\n"
3553 "It adds additional vertical grid points to the atmospheric fields, by\n"
3554 "interpolating them in the usual ARTS way (linear in log pressure).\n"
3555 "\n"
3556 "How fine the new grid will be is determined by the keyword parameter\n"
3557 "p_step. The definition of p_step, and the default interpolation\n"
3558 "behavior, is consistent with *abs_lookupSetup* and\n"
3559 "*abs_lookupSetupBatch* (new points are added between the original\n"
3560 "ones, so that the spacing is always below p_step.)\n"
3561 "\n"
3562 "Internally, *AtmFieldsRefinePgrid* applies *p_gridRefine* and\n"
3563 "*AtmFieldPRegrid* to the clearsky atmospheric fields (T, z, vmr).\n"
3564 "\n"
3565 "Atmospheric field related check WSV are reset to 0 (unchecked),\n"
3566 "i.e., the corresponding checkedCalc methods have to be performed\n"
3567 "(again) before *yCalc* or similar methods can be executed.\n"),
3568 AUTHORS("Stefan Buehler"),
3569 OUT("p_grid",
3570 "t_field",
3571 "z_field",
3572 "vmr_field",
3573 "atmfields_checked",
3574 "atmgeom_checked",
3575 "cloudbox_checked"),
3576 GOUT(),
3577 GOUT_TYPE(),
3578 GOUT_DESC(),
3579 IN("p_grid",
3580 "lat_grid",
3581 "lon_grid",
3582 "t_field",
3583 "z_field",
3584 "vmr_field",
3585 "atmosphere_dim"),
3586 GIN("p_step", "interp_order"),
3587 GIN_TYPE("Numeric", "Index"),
3588 GIN_DEFAULT(NODEF, "1"),
3589 GIN_DESC("Maximum step in log(p[Pa]) (natural logarithm, as always). If\n"
3590 "the pressure grid is coarser than this, additional points\n"
3591 "are added until each log step is smaller than this.\n",
3592 "Interpolation order.")));
3593
3594 md_data_raw.push_back(create_mdrecord(
3595 NAME("AtmFieldsAndParticleBulkPropFieldFromCompact"),
3597 "Extract pressure grid and atmospheric fields from\n"
3598 "*atm_fields_compact*.\n"
3599 "\n"
3600 "An atmospheric scenario includes the following data for each\n"
3601 "position (pressure, latitude, longitude) in the atmosphere:\n"
3602 " 1. temperature field\n"
3603 " 2. the corresponding altitude field\n"
3604 " 3. vmr fields for the gaseous species\n"
3605 " 4. scattering species fields\n"
3606 "\n"
3607 "This method splits up the data found in *atm_fields_compact* to\n"
3608 "p_grid, lat_grid, lon_grid, vmr_field, particle_bulkprop_field,\n"
3609 "and particle_bulkprop_names.\n"
3610 "See documentation of *atm_fields_compact* for a definition of the\n"
3611 "data.\n"
3612 "\n"
3613 "Compact states are characterized by having all atmospheric fields\n"
3614 "already given on identical grids. That is, no interpolation needs\n"
3615 "to be and is performed. Keyword *p_min* allows to remove atmospheric\n"
3616 "levels with pressures lower than the given value (default: no\n"
3617 "removal). This reduces computational burden and is useful when\n"
3618 "upper atmospheric contributions are negligible.\n"
3619 "\n"
3620 "Possible future extensions: Add a keyword parameter to refine the\n"
3621 "pressure grid if it is too coarse. Or a version that interpolates\n"
3622 "onto given grids, instead of using and returning the original grids.\n"),
3623 AUTHORS("Jana Mendrok, Manfred Brath"),
3624 OUT("p_grid",
3625 "lat_grid",
3626 "lon_grid",
3627 "t_field",
3628 "z_field",
3629 "vmr_field",
3630 "particle_bulkprop_field",
3631 "particle_bulkprop_names"),
3632 GOUT(),
3633 GOUT_TYPE(),
3634 GOUT_DESC(),
3635 IN("abs_species", "atm_fields_compact", "atmosphere_dim"),
3636 GIN("delim", "p_min", "check_gridnames"),
3637 GIN_TYPE("String", "Numeric", "Index"),
3638 GIN_DEFAULT("-", "0", "0"),
3639 GIN_DESC(/* delim */
3640 "Delimiter string of *scat_species* elements.",
3641 /* p_min */
3642 "Minimum-pressure level to consider (for TOA).",
3643 /* check_gridnames */
3644 "A flag with value 1 or 0. If set to one, the gridnames of \n"
3645 " the *atm_fields_compact* are checked.")));
3646
3647 md_data_raw.push_back(create_mdrecord(
3648 NAME("atmfields_checkedCalc"),
3650 "Checks consistency of (clear sky) atmospheric fields.\n"
3651 "\n"
3652 "The following WSVs are treated: *p_grid*, *lat_grid*, *lon_grid*,\n"
3653 "*t_field*, *vmr_field*, wind_u/v/w_field and mag_u/v/w_field.\n"
3654 "\n"
3655 "If any of the variables above is changed, then this method shall be\n"
3656 "called again (no automatic check that this is fulfilled!).\n"
3657 "\n"
3658 "The tests include that:\n"
3659 " 1. Atmospheric grids (p/lat/lon_grid) are OK with respect to\n"
3660 " *atmosphere_dim* (and vmr_field also regarding *abs_species*).\n"
3661 " 2. Atmospheric fields have sizes consistent with the atmospheric\n"
3662 " grids.\n"
3663 " 3. *abs_f_interp_order* is not zero if any wind is nonzero.\n"
3664 " 4. All values in *t_field* are > 0.\n"
3665 "\n"
3666 "Default is that values in *vmr_field* are demanded to be >= 0\n"
3667 "(ie. zero allowed, in contrast to *t_field*), but this\n"
3668 "requirement can be removed by the *negative_vmr_ok* argument.\n"
3669 "\n"
3670 "If any test fails, there is an error. Otherwise,\n"
3671 "*atmfields_checked* is set to 1.\n"
3672 "\n"
3673 "The cloudbox is covered by *cloudbox_checked*, *z_field* is\n"
3674 "part of the checks done around *atmgeom_checked*.\n"),
3675 AUTHORS("Patrick Eriksson"),
3676 OUT("atmfields_checked"),
3677 GOUT(),
3678 GOUT_TYPE(),
3679 GOUT_DESC(),
3680 IN("atmosphere_dim",
3681 "p_grid",
3682 "lat_grid",
3683 "lon_grid",
3684 "abs_species",
3685 "t_field",
3686 "vmr_field",
3687 "wind_u_field",
3688 "wind_v_field",
3689 "wind_w_field",
3690 "mag_u_field",
3691 "mag_v_field",
3692 "mag_w_field",
3693 "abs_f_interp_order"),
3694 GIN("negative_vmr_ok"),
3695 GIN_TYPE("Index"),
3696 GIN_DEFAULT("0"),
3697 GIN_DESC("Flag whether to accept vmr_field < 0."
3698 )));
3699
3700 md_data_raw.push_back(create_mdrecord(
3701 NAME("atmgeom_checkedCalc"),
3703 "Checks consistency of geometric considerations of the atmosphere.\n"
3704 "\n"
3705 "The following WSVs are checked: *z_field*, *refellipsoid*, *z_surface*,\n"
3706 "*lat_true* and *lon_true*. If any of the variables above is changed,\n"
3707 "then this method shall be called again (no automatic check that this is\n"
3708 "fulfilled!).\n"
3709 "\n"
3710 "The tests include that:\n"
3711 " 1. *refellipsoid* has correct size, and that eccentricity is\n"
3712 " set to zero if 1D atmosphere.\n"
3713 " 2. *z_field* and *z_surface* have sizes consistent with the\n"
3714 " atmospheric grids.\n"
3715 " 3. There is no gap between *z_surface* and *z_field*.\n"
3716 " 4. A rough search of maximum gradient of the altitude of the pressure\n"
3717 " level closest to 500 hPa is made. If this value exceeds the GIN\n"
3718 " *max500hpa_gradient* an error is issued. Please note that the unit\n"
3719 " of this GIN is m per 100km. For normal conditions on Earth, large\n"
3720 " scale gradients of the 500 hPa level is in the order of 20m/100km.\n"
3721 "\n"
3722 "*lat_true* and *lon_true* are allowed to be empty.\n"
3723 "\n"
3724 "If any test fails, there is an error. Otherwise, *atmgeom_checked*\n"
3725 "is set to 1.\n"
3726 "\n"
3727 "See further *atmgeom_checkedCalc*.\n"),
3728 AUTHORS("Patrick Eriksson"),
3729 OUT("atmgeom_checked"),
3730 GOUT(),
3731 GOUT_TYPE(),
3732 GOUT_DESC(),
3733 IN("atmosphere_dim",
3734 "p_grid",
3735 "lat_grid",
3736 "lon_grid",
3737 "z_field",
3738 "refellipsoid",
3739 "z_surface",
3740 "lat_true",
3741 "lon_true"),
3742 GIN("max500hpa_gradient"),
3743 GIN_TYPE("Numeric"),
3744 GIN_DEFAULT("100"),
3745 GIN_DESC("The maximum allowed gradient of 500 hPa pressure level [m/100km].")));
3746
3747 md_data_raw.push_back(create_mdrecord(
3748 NAME("AtmosphereSet1D"),
3750 "Sets the atmospheric dimension to 1D.\n"
3751 "\n"
3752 "Sets *atmosphere_dim* to 1, and the latitude and longitude grids\n"
3753 "are set to be empty.\n"),
3754 AUTHORS("Patrick Eriksson"),
3755 OUT("atmosphere_dim", "lat_grid", "lon_grid"),
3756 GOUT(),
3757 GOUT_TYPE(),
3758 GOUT_DESC(),
3759 IN(),
3760 GIN(),
3761 GIN_TYPE(),
3762 GIN_DEFAULT(),
3763 GIN_DESC()));
3764
3765 md_data_raw.push_back(create_mdrecord(
3766 NAME("AtmosphereSet2D"),
3768 "Sets the atmospheric dimension to be 2D.\n"
3769 "\n"
3770 "Sets *atmosphere_dim* to 2 and the longitude grid to be empty.\n"),
3771 AUTHORS("Patrick Eriksson"),
3772 OUT("atmosphere_dim", "lon_grid"),
3773 GOUT(),
3774 GOUT_TYPE(),
3775 GOUT_DESC(),
3776 IN(),
3777 GIN(),
3778 GIN_TYPE(),
3779 GIN_DEFAULT(),
3780 GIN_DESC()));
3781
3782 md_data_raw.push_back(create_mdrecord(
3783 NAME("AtmosphereSet3D"),
3785 "Sets the atmospheric dimension to 3D.\n"
3786 "\n"
3787 "Sets *atmosphere_dim* to 3, and *lat_true* and *lon_true* are\n"
3788 "set to be empty.\n"),
3789 AUTHORS("Patrick Eriksson"),
3790 OUT("atmosphere_dim", "lat_true", "lon_true"),
3791 GOUT(),
3792 GOUT_TYPE(),
3793 GOUT_DESC(),
3794 IN(),
3795 GIN(),
3796 GIN_TYPE(),
3797 GIN_DEFAULT(),
3798 GIN_DESC()));
3799
3800 md_data_raw.push_back(create_mdrecord(
3801 NAME("AtmRawRead"),
3803 "Reads atmospheric data from a scenario.\n"
3804 "\n"
3805 "An atmospheric scenario includes the following data for each\n"
3806 "position (pressure, latitude, longitude) in the atmosphere:\n"
3807 " 1. temperature field\n"
3808 " 2. the corresponding altitude field\n"
3809 " 3. vmr fields for the absorption species\n"
3810 "The vmr fields read are governed by the species given in\n"
3811 "*abs_species*. Beside gaseous species, these can also contain\n"
3812 "purely absorbing particulate matter. In the latter case the\n"
3813 "profiles are supposed to provide the mass content (unit kg/m3) for\n"
3814 "clouds and precipitation rate (unit kg/m2/s) for precipitation\n"
3815 "instead of the vmr.\n"
3816 "\n"
3817 "The data is stored in different files. This methods reads all\n"
3818 "files and creates the variables *t_field_raw*, *z_field_raw* and\n"
3819 "*vmr_field_raw*. *nlte_field_raw* is set to empty.\n"
3820 "\n"
3821 "Files in a scenarios should be named matching the pattern of:\n"
3822 "basename.speciesname.xml\n (for temperature and altitude the\n"
3823 "expected 'speciesname' are 't' and'z', respectivly)."
3824 "\n"
3825 "The files can be anywhere, but they must all be in the same\n"
3826 "directory, selected by 'basename'. The files are chosen by the\n"
3827 "species name. If you have more than one tag group for the same\n"
3828 "species, the same profile will be used.\n"),
3829 AUTHORS("Claudia Emde"),
3830 OUT("t_field_raw",
3831 "z_field_raw",
3832 "vmr_field_raw",
3833 "nlte_field_raw",
3834 "nlte_level_identifiers",
3835 "nlte_vibrational_energies"),
3836 GOUT(),
3837 GOUT_TYPE(),
3838 GOUT_DESC(),
3839 IN("abs_species"),
3840 GIN("basename"),
3841 GIN_TYPE("String"),
3843 GIN_DESC("Name of scenario, probably including the full path. For "
3844 "example: \"/smiles_local/arts-data/atmosphere/fascod/"
3845 "tropical\"")));
3846
3847 md_data_raw.push_back(create_mdrecord(
3848 NAME("AtmWithNLTERawRead"),
3850 "Reads atmospheric data from a scenario.\n"
3851 "\n"
3852 "An atmospheric scenario includes the following data for each\n"
3853 "position (pressure, latitude, longitude) in the atmosphere:\n"
3854 " 1. temperature field\n"
3855 " 2. the corresponding altitude field\n"
3856 " 3. vmr fields for the gaseous species\n"
3857 " 4. Non-LTE temperature fields and matching identifiers\n"
3858 "The data is stored in different files. This method reads all\n"
3859 "files and creates the variables *t_field_raw*, *z_field_raw*,\n"
3860 "*vmr_field_raw*, *nlte_field_raw*, and *nlte_level_identifiers*.\n"
3861 "\n"
3862 "Files in a scenarios should be named matching the pattern of:\n"
3863 "tropical.H2O.xml\n"
3864 "\n"
3865 "The files can be anywhere, but they must be all in the same\n"
3866 "directory, selected by 'basename'. The files are chosen by the\n"
3867 "species name. If you have more than one tag group for the same\n"
3868 "species, the same profile will be used.\n"),
3869 AUTHORS("Claudia Emde", "Richard Larsson"),
3870 OUT("t_field_raw",
3871 "z_field_raw",
3872 "vmr_field_raw",
3873 "nlte_field_raw",
3874 "nlte_level_identifiers",
3875 "nlte_vibrational_energies"),
3876 GOUT(),
3877 GOUT_TYPE(),
3878 GOUT_DESC(),
3879 IN("abs_species"),
3880 GIN("basename", "expect_vibrational_energies"),
3881 GIN_TYPE("String", "Index"),
3882 GIN_DEFAULT(NODEF, "0"),
3883 GIN_DESC("Name of scenario, probably including the full path. For "
3884 "example: \"/smiles_local/arts-data/atmosphere/fascod/"
3885 "tropical\"",
3886 "Should ev.xml be read?")));
3887
3888 md_data_raw.push_back(create_mdrecord(
3889 NAME("atm_fields_compactAddConstant"),
3891 "Adds a constant field to atm_fields_compact.\n"
3892 "\n"
3893 "This is handy, e.g., for nitrogen or oxygen. The constant value can\n"
3894 "be appended or prepended as an additional field to the already\n"
3895 "existing collection of fields. All dimensions (pressure, latitude,\n"
3896 "longitude) are filled up, so this works for 1D, 2D, or 3D\n"
3897 "atmospheres.\n"
3898 "\n"
3899 "The passed *name* of the field has to be in accordance with the\n"
3900 "tagging structure described for *atm_fields_compact*.\n"
3901 "\n"
3902 "A list of condensibles can be optionally specified if the VMR of\n"
3903 "the added species is assuming dry air. The VMR of the added species\n"
3904 "is then scaled down by the sum of the condensibles' VMR:\n"
3905 "VMR * (1 - VMR_sum_of_condensibles).\n"
3906 "For Earth this should be set to [\"abs_species-H2O\"]\n"),
3907 AUTHORS("Stefan Buehler, Oliver Lemke"),
3908 OUT("atm_fields_compact"),
3909 GOUT(),
3910 GOUT_TYPE(),
3911 GOUT_DESC(),
3912 IN("atm_fields_compact"),
3913 GIN("name", "value", "prepend", "condensibles"),
3914 GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
3915 GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
3916 GIN_DESC(
3917 "Name of additional atmospheric field, with constant value.",
3918 "Constant value of additional field.",
3919 "0 = Append to the end, 1 = insert at the beginning.",
3920 "List of condensibles used to scale down the VMR of the added species.")));
3921
3922 md_data_raw.push_back(create_mdrecord(
3923 NAME("atm_fields_compactAddSpecies"),
3925 "Adds a field to atm_fields_compact, with interpolation.\n"
3926 "\n"
3927 "This method appends or prepends a *GriddedField3* to *atm_fields_compact*.\n"
3928 "The *GriddedField3* is interpolated upon the grid of\n"
3929 "*atm_fields_compact*. A typical use case for this method may be to\n"
3930 "add a climatology of some gas when this gas is needed for radiative\n"
3931 "transfer calculations, but not yet present in *atm_fields_compact*.\n"
3932 "One case where this happens is when using the Chevalier91L dataset\n"
3933 "for infrared simulations.\n"
3934 "\n"
3935 "The grids in *atm_fields_compact* must fully encompass the grids in\n"
3936 "the *GriddedField3* to be added, for interpolation to succeed. If\n"
3937 "this is not the case, a RuntimeError is thrown.\n"
3938 "\n"
3939 "The passed *name* of the field has to be in accordance with the\n"
3940 "tagging structure described for *atm_fields_compact*.\n"),
3941 AUTHORS("Gerrit Holl"),
3942 OUT("atm_fields_compact"),
3943 GOUT(),
3944 GOUT_TYPE(),
3945 GOUT_DESC(),
3946 IN("atm_fields_compact"),
3947 GIN("name", "value", "prepend"),
3948 GIN_TYPE("String", "GriddedField3", "Index"),
3949 GIN_DEFAULT(NODEF, NODEF, "0"),
3950 GIN_DESC("Name of additional atmospheric field.",
3951 "Value of additional atmospheric field.",
3952 "0 = Append to the end, 1 = insert at the beginning.")));
3953
3954 md_data_raw.push_back(create_mdrecord(
3955 NAME("atm_fields_compactCleanup"),
3957 "Removes unrealistically small or erroneous data from\n"
3958 "*atm_fields_compact* (or other GriddedField4 data)\n"
3959 "\n"
3960 "This WSM checks if the data in *atm_fields_compact* contains\n"
3961 "values smaller than the given *threshold*. In this case, these\n"
3962 "values will be set to zero.\n"
3963 "\n"
3964 "The method should be applied if *atm_fields_compact* contains\n"
3965 "unrealistically small or erroneous data (NWP/GCM model data\n"
3966 "occassionally contains negative values, which are numerical\n"
3967 "artefacts rather than physical values.)\n"),
3968 AUTHORS("Jana Mendrok"),
3969 OUT("atm_fields_compact"),
3970 GOUT(),
3971 GOUT_TYPE(),
3972 GOUT_DESC(),
3973 IN("atm_fields_compact"),
3974 GIN("threshold"),
3975 GIN_TYPE("Numeric"),
3977 GIN_DESC(
3978 "Threshold below which *atm_fields_compact* values are set to zero.")));
3979
3980 md_data_raw.push_back(create_mdrecord(
3981 NAME("atm_fields_compactCreateFromField"),
3983 "Initiates *atm_fields_compact* from a field.\n"
3984 "\n"
3985 "*atm_fields_compact* will have the same size and grids as the GriddedField3,\n"
3986 "but with one dimension as length 1.\n"),
3987 AUTHORS("Richard Larsson"),
3988 OUT("atm_fields_compact"),
3989 GOUT(),
3990 GOUT_TYPE(),
3991 GOUT_DESC(),
3992 IN(),
3993 GIN("name", "field"),
3994 GIN_TYPE("String", "GriddedField3"),
3996 GIN_DESC("Name atmospheric field.", "The atmospheric field.")));
3997
3998 md_data_raw.push_back(create_mdrecord(
3999 NAME("atm_fields_compactFromMatrix"),
4001 "Sets *atm_fields_compact* from 1D fields given in form of a matrix.\n"
4002 "\n"
4003 "For batch calculations it is handy to store atmospheric\n"
4004 "profiles in an array of matrix. We take such a matrix, and create\n"
4005 "*atm_fields_compact* from it.\n"
4006 "\n"
4007 "The matrix must contain one row for each pressure level.\n"
4008 "\n"
4009 "Not all fields contained in the matrix must be selected into\n"
4010 "*atm_fields_compact*, but the selection must at least contain\n"
4011 "fields of pressure, temperature, altitude and one absorption\n"
4012 "species.\n"
4013 "The matrix can contain some additional fields which are not\n"
4014 "directly used by ARTS for calculations but can be required for\n"
4015 "further processing, e.g. wind speed and direction. These fields do\n"
4016 "not need to be transfered into the *atm_fields_compact* variable.\n"
4017 "\n"
4018 "Selection of fields into *atm_fields_compact* works by providing a\n"
4019 "field name tag in *field_names* for the selected fields, while\n"
4020 "unselected fields are tagged by 'ignore'. Order of tags in\n"
4021 "*field_names* is strictly taken as corresponding to column order in\n"
4022 "the matrix.\n"
4023 "The pressure fields are by convention the first column of the\n"
4024 "matrix, hence must not be tagged. That is, there must be given one\n"
4025 "field name tag less than matrix columns.\n"
4026 "\n"
4027 "For detailed tagging conventions see *atm_fields_compact*.\n"
4028 "\n"
4029 "Works only for *atmosphere_dim==1.*\n"),
4030 AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4031 OUT("atm_fields_compact"),
4032 GOUT(),
4033 GOUT_TYPE(),
4034 GOUT_DESC(),
4035 IN("atmosphere_dim"),
4036 GIN("gin1", "field_names"),
4037 GIN_TYPE("Matrix", "ArrayOfString"),
4039 GIN_DESC("One atmosphere matrix from batch input ArrayOfMatrix.",
4040 "Order/names of atmospheric fields.")));
4041
4042 md_data_raw.push_back(create_mdrecord(
4043 NAME("backend_channel_responseFlat"),
4045 "Sets up a rectangular channel response.\n"
4046 "\n"
4047 "The response of the backend channels is hee assumed to be constant\n"
4048 "inside the resolution width, and zero outside.\n"
4049 "\n"
4050 "The method assumes that all channels have the same response.\n"),
4051 AUTHORS("Patrick Eriksson"),
4052 OUT("backend_channel_response"),
4053 GOUT(),
4054 GOUT_TYPE(),
4055 GOUT_DESC(),
4056 IN(),
4057 GIN("resolution"),
4058 GIN_TYPE("Numeric"),
4060 GIN_DESC("The spectrometer resolution.")));
4061
4062 md_data_raw.push_back(create_mdrecord(
4063 NAME("backend_channel_responseGaussian"),
4065 "Sets up a gaussian backend channel response.\n"
4066 "\n"
4067 "The method assumes that all channels can be modelled as gaussian.\n"
4068 "\n"
4069 "If *fwhm* has only one element, all channels are assumed to be equal.\n"
4070 "If *fwhm* has multiple elements, *xwidth_si* and *dx_si* must have one\n"
4071 "element or the same number of elements as *fwhm*. If one element is given,\n"
4072 "this value will be used for all channels.\n"
4073 "\n"
4074 "The grid generated can be written as\n"
4075 " si * [-xwidth_si:dx_si:xwidth_si]\n"
4076 "where si is the standard deviation corresponding to the FWHM.\n"
4077 "That is, width and spacing of the grid is specified in terms of\n"
4078 "number of standard deviations. If xwidth_si is set to 2, the\n"
4079 "response will cover about 95% the complete response. For\n"
4080 "xwidth_si=3, about 99% is covered. If xwidth_si/dx_si is not\n"
4081 "an integer, the end points of the grid are kept and the spacing\n"
4082 "if the grid is adjusted in the downward direction (ie. spacing is.\n"
4083 "is max *dx_si*).\n"),
4084 AUTHORS("Patrick Eriksson, Oliver Lemke"),
4085 OUT("backend_channel_response"),
4086 GOUT(),
4087 GOUT_TYPE(),
4088 GOUT_DESC(),
4089 IN(),
4090 GIN("fwhm", "xwidth_si", "dx_si"),
4091 GIN_TYPE("Vector", "Vector", "Vector"),
4092 GIN_DEFAULT(NODEF, "[3]", "[0.1]"),
4093 GIN_DESC("Full width at half-maximum",
4094 "Half-width of response, in terms of std. dev.",
4095 "Grid spacing, in terms of std. dev.")));
4096
4097 md_data_raw.push_back(create_mdrecord(
4098 NAME("batch_atm_fields_compactAddConstant"),
4099 DESCRIPTION("Adds a constant field to batch_atm_fields_compact.\n"
4100 "\n"
4101 "Applies *atm_fields_compactAddConstant* to each batch.\n"
4102 "The format is equal to that WSM.\n"),
4103 AUTHORS("Gerrit Holl"),
4104 OUT("batch_atm_fields_compact"),
4105 GOUT(),
4106 GOUT_TYPE(),
4107 GOUT_DESC(),
4108 IN("batch_atm_fields_compact"),
4109 GIN("name", "value", "prepend", "condensibles"),
4110 GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
4111 GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
4112 GIN_DESC(
4113 "Name of additional atmospheric field, with constant value.",
4114 "Constant value of additional field.",
4115 "0 = Append to the end, 1 = insert at the beginning.",
4116 "List of condensibles used to scale down the VMR of the added species.")));
4117
4118 md_data_raw.push_back(create_mdrecord(
4119 NAME("batch_atm_fields_compactAddSpecies"),
4121 "Adds a field to *batch_atm_fields_compact*, with interpolation.\n"
4122 "\n"
4123 "This method appends or prepends a *GriddedField3* to each *atm_fields_compact*.\n"
4124 "in *batch_atm_fields_compact*. For details, see *atm_fields_compactAddSpecies*.\n"),
4125 AUTHORS("Gerrit Holl"),
4126 OUT("batch_atm_fields_compact"),
4127 GOUT(),
4128 GOUT_TYPE(),
4129 GOUT_DESC(),
4130 IN("batch_atm_fields_compact"),
4131 GIN("name", "value", "prepend"),
4132 GIN_TYPE("String", "GriddedField3", "Index"),
4133 GIN_DEFAULT(NODEF, NODEF, "0"),
4134 GIN_DESC(
4135 "Name of additional atmospheric field. Use, e.g., vmr_ch4 for methane VMR",
4136 "Value of additional atmospheric field.",
4137 "0 = Append to the end, 1 = insert at the beginning.")));
4138
4139 md_data_raw.push_back(create_mdrecord(
4140 NAME("batch_atm_fields_compactCleanup"),
4142 "Removes unrealistically small or erroneous data from each data field\n"
4143 "of *batch_atm_fields_compact* (or other AerrayOfGriddedField4 data)\n"
4144 "\n"
4145 "This WSM checks if the data in *batch_atm_fields_compact* contains\n"
4146 "values smaller than the given *threshold*. In this case, these\n"
4147 "values will be set to zero.\n"
4148 "\n"
4149 "The method should be applied if *batch_atm_fields_compact* contains\n"
4150 "unrealistically small or erroneous data (NWP/GCM model data\n"
4151 "occassionally contains negative values, which are numerical\n"
4152 "artefacts rather than physical values.)\n"),
4153 AUTHORS("Jana Mendrok"),
4154 OUT("batch_atm_fields_compact"),
4155 GOUT(),
4156 GOUT_TYPE(),
4157 GOUT_DESC(),
4158 IN("batch_atm_fields_compact"),
4159 GIN("threshold"),
4160 GIN_TYPE("Numeric"),
4162 GIN_DESC(
4163 "Threshold below which *atm_fields_compact* values are set to zero.")));
4164
4165 md_data_raw.push_back(create_mdrecord(
4166 NAME("batch_atm_fields_compactFromArrayOfMatrix"),
4168 "Expand batch of 1D atmospheric state matrices to batch_atm_fields_compact.\n"
4169 "\n"
4170 "This is used to handle 1D batch cases, e.g. from NWP/GCM model like\n"
4171 "the Chevallier91L data set, stored in a matrix (it is preferred,\n"
4172 "though, to immediatedly store the model fields as\n"
4173 "*ArrayOfGriddedField4* and use *ReadXML* to load them directly into\n"
4174 "*batch_atm_fields_compact*).\n"
4175 "\n"
4176 "Works only for *atmosphere_dim==1.*\n"
4177 "\n"
4178 "See *atm_fields_compactFromMatrix* for basic documentation.\n"
4179 "\n"
4180 "See *batch_atm_fields_compactAddConstant* and\n"
4181 "batch_atm_fields_compactAddSpecies* for adding additional fields.\n"),
4182 AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4183 OUT("batch_atm_fields_compact"),
4184 GOUT(),
4185 GOUT_TYPE(),
4186 GOUT_DESC(),
4187 IN("atmosphere_dim"),
4188 GIN("atmospheres_fields", "field_names"),
4189 GIN_TYPE("ArrayOfMatrix", "ArrayOfString"),
4191 GIN_DESC("Batch of atmospheres stored in one array of matrix",
4192 "Order/names of atmospheric fields.")));
4193
4194 md_data_raw.push_back(create_mdrecord(
4195 NAME("CIAInfo"),
4197 "Display information about the given CIA tags.\n"
4198 "The CIA tags shown are in the same format as needed by *abs_speciesSet*.\n"),
4199 AUTHORS("Oliver Lemke"),
4200 OUT(),
4201 GOUT(),
4202 GOUT_TYPE(),
4203 GOUT_DESC(),
4204 IN(),
4205 GIN("catalogpath", "cia_tags"),
4206 GIN_TYPE("String", "ArrayOfString"),
4208 GIN_DESC("Path to the CIA catalog directory.",
4209 "Array of CIA tags to view, e.g. [ \"N2-N2\", \"H2-H2\" ]")));
4210
4211 md_data_raw.push_back(create_mdrecord(
4212 NAME("CIARecordReadFromFile"),
4213 DESCRIPTION("Reads CIARecord from Hitran-style file.\n"),
4214 AUTHORS("Richard Larsson"),
4215 OUT(),
4216 GOUT("cia_record"),
4217 GOUT_TYPE("CIARecord"),
4218 GOUT_DESC("CIARecord type variable for input and output."),
4219 IN(),
4220 GIN("species_tag", "filename"),
4221 GIN_TYPE("String", "String"),
4223 GIN_DESC("SpeciesTag string to associate with this CIARecord. See "
4224 "*abs_speciesSet* for correct format.",
4225 "Filename of HITRAN CIA data file.")));
4226
4227 md_data_raw.push_back(create_mdrecord(
4228 NAME("cloudboxOff"),
4230 "Deactivates the cloud box.\n"
4231 "\n"
4232 "Use this method if no scattering calculations shall be performed.\n"
4233 "\n"
4234 "The function sets *cloudbox_on* to 0, *cloudbox_limits*,\n"
4235 "*pnd_field*, *scat_data*, *scat_data_raw*, *iy_cloudbox_agenda*\n"
4236 "and *particle_masses* to be empty and sizes *dpnd_field_dx* to be\n"
4237 "consitent with *jacobian_quantities*.\n"),
4238 AUTHORS("Patrick Eriksson"),
4239 OUT("cloudbox_on",
4240 "ppath_inside_cloudbox_do",
4241 "cloudbox_limits",
4242 "iy_cloudbox_agenda",
4243 "pnd_field",
4244 "dpnd_field_dx",
4245 "scat_species",
4246 "scat_data",
4247 "scat_data_raw",
4248 "scat_data_checked",
4249 "particle_masses"),
4250 GOUT(),
4251 GOUT_TYPE(),
4252 GOUT_DESC(),
4253 IN("jacobian_quantities"),
4254 GIN(),
4255 GIN_TYPE(),
4256 GIN_DEFAULT(),
4257 GIN_DESC()));
4258
4259 md_data_raw.push_back(create_mdrecord(
4260 NAME("cloudboxSetAutomatically"),
4262 "Sets the cloud box to encompass the cloud given by the entries\n"
4263 "in *particle_field*.\n"
4264 "\n"
4265 "This WSM handles one *Tensor4* type *particle_field* at a time. It can\n"
4266 "be used to determine the cloudbox from *particle_bulkprop_field*\n"
4267 "\n"
4268 "The function must be called before executing any WSM that applies\n"
4269 "*cloudbox_limits*.\n"
4270 "\n"
4271 "The function iterates over all 3D fields in *particle_field* (which\n"
4272 "might correspond to different particle bulk properties as in\n"
4273 "*particle_bulkprop_field*). Each field is searched for the first\n"
4274 "and last pressure index, where the value is unequal to zero. This\n"
4275 "index is then copied to *cloudbox_limits*.\n"
4276 "If *particle_field* is empty, the cloudbox is switched off\n"
4277 "(*cloudbox_on*=0).\n"
4278 "\n"
4279 "Additionaly the lower cloudbox_limit is altered by *cloudbox_margin*.\n"
4280 "The margin is given as a height difference in meters and transformed\n"
4281 "into a pressure (via isothermal barometric height formula). This\n"
4282 "alteration is to ensure covering photons that leave the cloud, but\n"
4283 "reenter through a limb path.\n"
4284 "If *cloudbox_margin* is set to -1 (default), the cloudbox will extend\n"
4285 "to the surface. Hence, the lower cloudbox_limit is set to 0 (index\n"
4286 "of first pressure level).\n"
4287 "*cloudbox_margin* will be applied on each call of the WSM.\n"
4288 "\n"
4289 "Works only for *atmosphere_dim==1.*\n"),
4290 AUTHORS("Jana Mendrok, Daniel Kreyling"),
4291 OUT("cloudbox_on", "cloudbox_limits"),
4292 GOUT(),
4293 GOUT_TYPE(),
4294 GOUT_DESC(),
4295 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4296 GIN("particle_field", "cloudbox_margin"),
4297 GIN_TYPE("Tensor4", "Numeric"),
4298 GIN_DEFAULT(NODEF, "-1"),
4299 GIN_DESC("A collection of particle property fields (e.g."
4300 " *particle_bulkprop_field*).",
4301 "Minimum distance [m] between lowest 'cloudy' level and"
4302 " cloudbox lower limit. If set to *-1* (default), the"
4303 " cloudbox lower limit is fixed to 0, i.e., corresponds to"
4304 " the lowest atmospheric level (or the surface).")));
4305
4306 md_data_raw.push_back(
4307 create_mdrecord(NAME("cloudboxSetFullAtm"),
4308 DESCRIPTION("Sets the cloudbox to cover the full atmosphere.\n"),
4309 AUTHORS("Claudia Emde, Jana Mendrok"),
4310 OUT("cloudbox_on", "cloudbox_limits"),
4311 GOUT(),
4312 GOUT_TYPE(),
4313 GOUT_DESC(),
4314 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4315 GIN(),
4316 GIN_TYPE(),
4317 GIN_DEFAULT(),
4318 GIN_DESC()));
4319
4320 md_data_raw.push_back(create_mdrecord(
4321 NAME("cloudboxSetManually"),
4323 "Sets the cloud box to encompass the given positions.\n"
4324 "\n"
4325 "The function sets *cloudbox_on* to 1 and sets *cloudbox_limits*\n"
4326 "following the given pressure, latitude and longitude positions.\n"
4327 "The index limits in *cloudbox_limits* are selected to give the\n"
4328 "smallest possible cloud box that encompass the given points.\n"
4329 "\n"
4330 "The points must be given in the same order as used in\n"
4331 "*cloudbox_limits*. That means that the first keyword argument\n"
4332 "shall be a higher pressure than argument two, while the latitude\n"
4333 "and longitude points are given in increasing order. Positions\n"
4334 "given for dimensions not used by the selected atmospheric\n"
4335 "dimensionality are ignored.\n"
4336 "\n"
4337 "The given pressure points can be outside the range of *p_grid*.\n"
4338 "The pressure limit is then set to the end point of *p_grid*.\n"
4339 "The given latitude and longitude points must be inside the range\n"
4340 "of the corresponding grid. In addition, the latitude and longitude\n"
4341 "points cannot be inside the outermost grid ranges as the latitude\n"
4342 "and longitude limits in *cloudbox_limits* are not allowed to be\n"
4343 "grid end points.\n"),
4344 AUTHORS("Patrick Eriksson"),
4345 OUT("cloudbox_on", "cloudbox_limits"),
4346 GOUT(),
4347 GOUT_TYPE(),
4348 GOUT_DESC(),
4349 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4350 GIN("p1", "p2", "lat1", "lat2", "lon1", "lon2"),
4351 GIN_TYPE(
4352 "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4354 GIN_DESC("Upper pressure point.",
4355 "Lower pressure point.",
4356 "Lower latitude point.",
4357 "Upper latitude point.",
4358 "Lower longitude point.",
4359 "Upper longitude point.")));
4360
4361 md_data_raw.push_back(create_mdrecord(
4362 NAME("cloudboxSetManuallyAltitude"),
4364 "Sets the cloud box to encompass the given positions.\n"
4365 "\n"
4366 "As *cloudboxSetManually* but uses altitudes instead of pressure.\n"
4367 "The given altitude points can be outside the range of *z_field*.\n"
4368 "The altitude limit is then set to the end point of *p_grid*.\n"),
4369 AUTHORS("Claudia Emde"),
4370 OUT("cloudbox_on", "cloudbox_limits"),
4371 GOUT(),
4372 GOUT_TYPE(),
4373 GOUT_DESC(),
4374 IN("atmosphere_dim", "z_field", "lat_grid", "lon_grid"),
4375 GIN("z1", "z2", "lat1", "lat2", "lon1", "lon2"),
4376 GIN_TYPE(
4377 "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4379 GIN_DESC("Lower altitude point.",
4380 "Upper altitude point.",
4381 "Lower latitude point.",
4382 "Upper latitude point.",
4383 "Lower longitude point.",
4384 "Upper longitude point.")));
4385
4386 md_data_raw.push_back(create_mdrecord(
4387 NAME("cloudbox_checkedCalc"),
4389 "Checks consistency and validity of the cloudbox governing variables.\n"
4390 "\n"
4391 "The following WSVs are treated: *cloudbox_on*, *cloudbox_limits*,\n"
4392 "*pnd_field*, *scat_data*, *scat_species*, *abs_species*, *particle_masses*\n"
4393 "*particle_bulkprop_field*, *particle_bulkprop_names* and wind_u/v/w_field.\n"
4394 "\n"
4395 "If any of these variables is changed, then this method shall be\n"
4396 "called again (no automatic check that this is fulfilled!).\n"
4397 "\n"
4398 "The main checks are if the cloudbox limits are OK with respect to\n"
4399 "the atmospheric dimensionality and the limits of the atmosphere,\n"
4400 "and that the scattering element variables *pnd_field* and\n"
4401 "*scat_data* match in size.\n"
4402 "\n"
4403 "Further checks on *scat_data* are performed in *scat_data_checkedCalc*\n"
4404 "\n"
4405 "*scat_species* and *particle_masses* must either be empty or have a\n"
4406 "size that matches the other data. If non-empty, some check of these\n"
4407 "variables are performed.\n"
4408 "\n"
4409 "If any test fails, there is an error. Otherwise, *cloudbox_checked*\n"
4410 "is set to 1.\n"),
4411 AUTHORS("Patrick Eriksson, Jana Mendrok"),
4412 OUT("cloudbox_checked"),
4413 GOUT(),
4414 GOUT_TYPE(),
4415 GOUT_DESC(),
4416 IN("atmfields_checked",
4417 "atmosphere_dim",
4418 "p_grid",
4419 "lat_grid",
4420 "lon_grid",
4421 "z_field",
4422 "z_surface",
4423 "wind_u_field",
4424 "wind_v_field",
4425 "wind_w_field",
4426 "cloudbox_on",
4427 "cloudbox_limits",
4428 "pnd_field",
4429 "dpnd_field_dx",
4430 "jacobian_quantities",
4431 "scat_data",
4432 "scat_species",
4433 "particle_masses",
4434 "abs_species"),
4435 GIN("negative_pnd_ok"),
4436 GIN_TYPE("Index"),
4437 GIN_DEFAULT("0"),
4438 GIN_DESC("Flag whether to accept pnd_field < 0.")));
4439
4440 md_data_raw.push_back(create_mdrecord(
4441 NAME("cloudbox_field_monoIterate"),
4443 "Iterative solution of the VRTE (DOIT method).\n"
4444 "\n"
4445 "A solution for the RTE with scattering is found using the\n"
4446 "DOIT method:\n"
4447 " 1. Calculate scattering integral using *doit_scat_field_agenda*.\n"
4448 " 2. Calculate RT with fixed scattered field using\n"
4449 " *doit_rte_agenda*.\n"
4450 " 3. Convergence test using *doit_conv_test_agenda*.\n"
4451 "\n"
4452 "Note: The atmospheric dimensionality *atmosphere_dim* can be\n"
4453 " either 1 or 3. To these dimensions the method adapts\n"
4454 " automatically. 2D scattering calculations are not\n"
4455 " supported.\n"),
4456 AUTHORS("Claudia Emde, Jakob Doerr"),
4457 OUT("cloudbox_field_mono"),
4458 GOUT(),
4459 GOUT_TYPE(),
4460 GOUT_DESC(),
4461 IN("cloudbox_field_mono",
4462 "doit_scat_field_agenda",
4463 "doit_rte_agenda",
4464 "doit_conv_test_agenda"),
4465 GIN("accelerated"),
4466 GIN_TYPE("Index"),
4467 GIN_DEFAULT("0"),
4468 GIN_DESC(
4469 "Index wether to accelerate only the intensity (1) or the whole Stokes Vector (4)")));
4470
4471 md_data_raw.push_back(create_mdrecord(
4472 NAME("cloudbox_fieldCrop"),
4474 "Extracts a part of an existing *cloudbox_field*.\n"
4475 "\n"
4476 "The cropping is defined by defining new cloudbox limits. Note that\n"
4477 "*new_limit0* is an index with respect to *p_grid*, etc.\n"
4478 "\n"
4479 "The following must be valid:\n"
4480 " new_limit0 >= cloudbox_limits[0]\n"
4481 " new_limit1 <= cloudbox_limits[1]\n"
4482 " new_limit2 >= cloudbox_limits[2]\n"
4483 " new_limit3 <= cloudbox_limits[3]\n"
4484 " new_limit4 >= cloudbox_limits[4]\n"
4485 " new_limit5 <= cloudbox_limits[5]\n"
4486 "\n"
4487 "Indexes for dimensions not used are ignored.\n"),
4488 AUTHORS("Patrick Eriksson"),
4489 OUT("cloudbox_field", "cloudbox_limits"),
4490 GOUT(),
4491 GOUT_TYPE(),
4492 GOUT_DESC(),
4493 IN("atmosphere_dim", "cloudbox_on", "cloudbox_limits", "cloudbox_field"),
4494 GIN("new_limit0",
4495 "new_limit1",
4496 "new_limit2",
4497 "new_limit3",
4498 "new_limit4",
4499 "new_limit5"),
4500 GIN_TYPE("Index", "Index", "Index", "Index", "Index", "Index"),
4501 GIN_DEFAULT("0", "0", "0", "0", "0", "0"),
4502 GIN_DESC("New value for cloudbox_limits[0].",
4503 "New value for cloudbox_limits[1].",
4504 "New value for cloudbox_limits[2].",
4505 "New value for cloudbox_limits[3].",
4506 "New value for cloudbox_limits[4].",
4507 "New value for cloudbox_limits[5].")));
4508
4509 md_data_raw.push_back(create_mdrecord(
4510 NAME("cloudbox_fieldSetFromPrecalc"),
4512 "Sets the initial cloudbox intensity field *cloudbox_field* from a\n"
4513 "precalculated field.\n"
4514 "\n"
4515 "This method sets the (monochromatic) first guess radiation field\n"
4516 "inside the cloudbox from a precalculated *cloudbox_field_precalc*,\n"
4517 "e.g., from the solution of a similar atmospheric scenario. The\n"
4518 "dimensions of *cloudbox_field_precalc* have to be consistent with\n"
4519 "the DOIT setup in terms of frequencies, pressure levels inside the\n"
4520 "cloudbox, polar angles used as well as the stokes dimension.\n"
4521 "Incoming field on the cloudbox boundaries is adapted to the actual\n"
4522 "clearsky incoming field as, e.g., calculated by *DoitGetIncoming*.\n"),
4523 AUTHORS("Jana Mendrok"),
4524 OUT("cloudbox_field"),
4525 GOUT(),
4526 GOUT_TYPE(),
4527 GOUT_DESC(),
4528 IN("cloudbox_field",
4529 "za_grid",
4530 "f_grid",
4531 "atmosphere_dim",
4532 "stokes_dim",
4533 "cloudbox_limits",
4534 "doit_is_initialized"),
4535 GIN("cloudbox_field_precalc"),
4536 GIN_TYPE("Tensor7"),
4538 GIN_DESC("Precalculated radiation field (of type *cloudbox_field*)")));
4539
4540 md_data_raw.push_back(create_mdrecord(
4541 NAME("cloudbox_fieldSetClearsky"),
4543 "Interpolate clearsky field on all gridpoints in cloudbox.\n"
4544 "\n"
4545 "This method uses a linear 1D/3D interpolation scheme to obtain the\n"
4546 "radiation field on all grid points inside the cloud box from the\n"
4547 "clear sky field on the cloudbox boundary. This radiation field\n"
4548 "is taken as the first guess radiation field in the DOIT module.\n"
4549 "\n"
4550 "Set the *all_frequencies* to 1 if the clearsky field shall be used\n"
4551 "as initial field for all frequencies. Set it to 0 if the clear sky\n"
4552 "field shall be used only for the first frequency in *f_grid*. For\n"
4553 "later frequencies, *cloudbox_field* of the previous frequency is then\n"
4554 "used.\n"),
4555 AUTHORS("Sreerekha T.R. and Claudia Emde"),
4556 OUT("cloudbox_field"),
4557 GOUT(),
4558 GOUT_TYPE(),
4559 GOUT_DESC(),
4560 IN("cloudbox_field",
4561 "p_grid",
4562 "lat_grid",
4563 "lon_grid",
4564 "cloudbox_limits",
4565 "atmosphere_dim",
4566 "cloudbox_on",
4567 "doit_is_initialized"),
4568 GIN("all_frequencies"),
4569 GIN_TYPE("Index"),
4570 GIN_DEFAULT("1"),
4571 GIN_DESC("See above.")));
4572
4573 md_data_raw.push_back(create_mdrecord(
4574 NAME("cloudbox_field_monoSetConst"),
4576 "This method sets the initial field inside the cloudbox to a\n"
4577 "constant value. The method works only for monochromatic\n"
4578 "calculations (number of elements in f_grid=1).\n"
4579 "\n"
4580 "The user can specify a value for each Stokes dimension in the\n"
4581 "control file by *value*.\n"),
4582 AUTHORS("Claudia Emde"),
4583 OUT("cloudbox_field_mono"),
4584 GOUT(),
4585 GOUT_TYPE(),
4586 GOUT_DESC(),
4587 IN("cloudbox_field_mono",
4588 "p_grid",
4589 "lat_grid",
4590 "lon_grid",
4591 "cloudbox_limits",
4592 "atmosphere_dim",
4593 "stokes_dim"),
4594 GIN("value"),
4595 GIN_TYPE("Vector"),
4597 GIN_DESC("A vector containing 4 elements with the value of the "
4598 "initial field for each Stokes dimension.")));
4599
4600 md_data_raw.push_back(create_mdrecord(
4601 NAME("cloudbox_fieldSetConst"),
4603 "This method sets the initial field inside the cloudbox to a\n"
4604 "constant value.\n"
4605 "\n"
4606 "The user has to specify a value for each Stokes dimension in the\n"
4607 "control file by *value*.\n"),
4608 AUTHORS("Claudia Emde"),
4609 OUT("cloudbox_field"),
4610 GOUT(),
4611 GOUT_TYPE(),
4612 GOUT_DESC(),
4613 IN("cloudbox_field",
4614 "p_grid",
4615 "lat_grid",
4616 "lon_grid",
4617 "cloudbox_limits",
4618 "atmosphere_dim",
4619 "stokes_dim"),
4620 GIN("value"),
4621 GIN_TYPE("Vector"),
4623 GIN_DESC("A vector containing *stokes_dim* elements with the value of"
4624 " the initial field for each Stokes dimension.")));
4625
4626 md_data_raw.push_back(create_mdrecord(
4627 NAME("cloudbox_fieldSetConstPerFreq"),
4629 "This method sets the initial field inside the cloudbox to a\n"
4630 "constant value per frequency slice.\n"
4631 "\n"
4632 "The user has specify a value for each frequency and Stokes\n"
4633 "dimension in the control file by *value*.\n"),
4634 AUTHORS("Jana Mendrok"),
4635 OUT("cloudbox_field"),
4636 GOUT(),
4637 GOUT_TYPE(),
4638 GOUT_DESC(),
4639 IN("cloudbox_field",
4640 "p_grid",
4641 "lat_grid",
4642 "lon_grid",
4643 "cloudbox_limits",
4644 "atmosphere_dim",
4645 "stokes_dim"),
4646 GIN("value"),
4647 GIN_TYPE("Matrix"),
4649 GIN_DESC("A matrix containing *stokes_dim* elements per frequency"
4650 " (row) with the value of the initial field for each"
4651 " frequency and Stokes dimension.")));
4652
4653 md_data_raw.push_back(create_mdrecord(
4654 NAME("cloudbox_fieldUpdate1D"),
4656 "RT calculation in cloudbox with fixed scattering integral (1D).\n"
4657 "\n"
4658 "Updates the radiation field (DOIT method). The method loops\n"
4659 "through the cloudbox to update the radiation field for all\n"
4660 "positions and directions in the 1D cloudbox.\n"
4661 "\n"
4662 "Note: This method is very inefficient, because the number of\n"
4663 "iterations scales with the number of cloudbox pressure levels.\n"
4664 "It is recommended to use *cloudbox_fieldUpdateSeq1D*.\n"),
4665 AUTHORS("Claudia Emde"),
4666 OUT("cloudbox_field_mono"),
4667 GOUT(),
4668 GOUT_TYPE(),
4669 GOUT_DESC(),
4670 IN("cloudbox_field_mono",
4671 "doit_scat_field",
4672 "cloudbox_limits",
4673 "propmat_clearsky_agenda",
4674 "vmr_field",
4675 "spt_calc_agenda",
4676 "za_grid",
4677 "pnd_field",
4678 "ppath_step_agenda",
4679 "ppath_lmax",
4680 "ppath_lraytrace",
4681 "p_grid",
4682 "z_field",
4683 "refellipsoid",
4684 "t_field",
4685 "f_grid",
4686 "f_index",
4687 "surface_rtprop_agenda",
4688 "doit_za_interp"),
4689 GIN(),
4690 GIN_TYPE(),
4691 GIN_DEFAULT(),
4692 GIN_DESC()));
4693
4694 md_data_raw.push_back(create_mdrecord(
4695 NAME("cloudbox_fieldUpdateSeq1D"),
4697 "RT calculation in cloudbox with fixed scattering integral.\n"
4698 "\n"
4699 "Updates radiation field (*cloudbox_field*) in DOIT module.\n"
4700 "This method loops through the cloudbox to update the\n"
4701 "radiation field for all positions and directions in the 1D\n"
4702 "cloudbox. The method applies the sequential update. For more\n"
4703 "information refer to AUG.\n"),
4704 AUTHORS("Claudia Emde"),
4705 OUT("cloudbox_field_mono", "doit_scat_field"),
4706 GOUT(),
4707 GOUT_TYPE(),
4708 GOUT_DESC(),
4709 IN("cloudbox_field_mono",
4710 "doit_scat_field",
4711 "cloudbox_limits",
4712 "propmat_clearsky_agenda",
4713 "vmr_field",
4714 "spt_calc_agenda",
4715 "za_grid",
4716 "aa_grid",
4717 "pnd_field",
4718 "ppath_step_agenda",
4719 "ppath_lmax",
4720 "ppath_lraytrace",
4721 "p_grid",
4722 "z_field",
4723 "refellipsoid",
4724 "t_field",
4725 "f_grid",
4726 "f_index",
4727 "surface_rtprop_agenda",
4728 "doit_za_interp"),
4729 GIN("normalize", "norm_error_threshold", "norm_debug"),
4730 GIN_TYPE("Index", "Numeric", "Index"),
4731