ARTS 2.5.11 (git: 6827797f)
methods.cc
Go to the documentation of this file.
1
13#include "methods.h"
14#include "arts.h"
15#include "groups.h"
16#include "wsv_aux.h"
17#include <algorithm>
18#include <array>
19#include <string>
20
21namespace global_data {
24} // namespace global_data
25
26template <typename ... T>
27std::array<const char *, sizeof...(T)> string_array(const T*... input)
28{
29 return {input...};
30}
31
32template <size_t NUM_OF_AUTHORS,
33 size_t NUM_OF_OUTPUTS,
34 size_t NUM_OF_GOUT_ARGS,
35 size_t NUM_OF_GOUT_TYPES,
36 size_t NUM_OF_GOUT_DESCRIPTIONS,
37 size_t NUM_OF_INPUTS,
38 size_t NUM_OF_GIN_ARGS,
39 size_t NUM_OF_GIN_TYPES,
40 size_t NUM_OF_GIN_DEFAULTS,
41 size_t NUM_OF_GIN_DESCRIPTIONS,
42 typename ... Ts>
44 const char *name,
45 const char *description,
46 const std::array<const char *, NUM_OF_AUTHORS>& authors,
47 const std::array<const char *, NUM_OF_OUTPUTS>& output,
48 const std::array<const char *, NUM_OF_GOUT_ARGS>& gout,
49 const std::array<const char *, NUM_OF_GOUT_TYPES>& gouttype,
50 const std::array<const char *, NUM_OF_GOUT_DESCRIPTIONS>& goutdesc,
51 const std::array<const char *, NUM_OF_INPUTS>& input,
52 const std::array<const char *, NUM_OF_GIN_ARGS>& gin,
53 const std::array<const char *, NUM_OF_GIN_TYPES>& gintype,
54 const std::array<const char *, NUM_OF_GIN_DEFAULTS>& gindefault,
55 const std::array<const char *, NUM_OF_GIN_DESCRIPTIONS>& gindesc,
56 Ts ... flags)
57{
58 static_assert(NUM_OF_AUTHORS not_eq 0, "Must have at least one author");
59 static_assert(NUM_OF_GOUT_ARGS == NUM_OF_GOUT_TYPES, "GOUT type(s) count does not match number of GOUT");
60 static_assert(NUM_OF_GOUT_ARGS == NUM_OF_GOUT_DESCRIPTIONS, "GOUT description(s) count does not match number of GOUT");
61 static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_TYPES, "GIN type(s) count does not match number of GIN");
62 static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_DEFAULTS, "GIN default(s) count does not match number of GIN");
63 static_assert(NUM_OF_GIN_ARGS == NUM_OF_GIN_DESCRIPTIONS, "GIN description(s) count does not match number of GIN");
64
65 return MdRecord(name,
66 description,
67 ArrayOfString(authors),
68 ArrayOfString(output),
69 ArrayOfString(gout),
70 ArrayOfString(gouttype),
71 ArrayOfString(goutdesc),
72 ArrayOfString(input),
73 ArrayOfString(gin),
74 ArrayOfString(gintype),
75 ArrayOfString(gindefault),
76 ArrayOfString(gindesc),
77 bool(flags) ...);
78}
79
80// Some #defines and typedefs to make the records better readable:
81#define NAME(x) x
82#define DESCRIPTION(x) x
83#define AUTHORS(...) \
84 string_array( __VA_ARGS__ )
85#define OUT(...) \
86 string_array( __VA_ARGS__ )
87#define GOUT(...) \
88 string_array( __VA_ARGS__ )
89#define GOUT_TYPE(...) \
90 string_array( __VA_ARGS__ )
91#define GOUT_DESC(...) \
92 string_array( __VA_ARGS__ )
93#define IN(...) \
94 string_array( __VA_ARGS__ )
95#define GIN(...) \
96 string_array( __VA_ARGS__ )
97#define GIN_TYPE(...) \
98 string_array( __VA_ARGS__ )
99#define GIN_DEFAULT(...) \
100 string_array( __VA_ARGS__ )
101#define GIN_DESC(...) \
102 string_array( __VA_ARGS__ )
103#define SETMETHOD(x) x
104#define AGENDAMETHOD(x) x
105#define USES_TEMPLATES(x) x
106#define PASSWORKSPACE(x) x
107#define PASSWSVNAMES(x) x
108
109/* Here's a template record entry: (PE 2008-09-20)
110
111 md_data_raw.push_back
112 ( create_mdrecord
113 ( NAME( "MethodName" ),
114 DESCRIPTION
115 (
116 "A concise summary of the method.\n"
117 "\n"
118 "A more detailed description of the method. Try to describe the\n"
119 "purpose of the method and important considerations. Try to avoid\n"
120 "references to other WSMs as they might change. Refer to the user\n"
121 "guide for more complex information (as long as it exists, or that\n"
122 "you add it to AUG!).\n"
123 "\n"
124 "You do not need to describe workspace variables used. That\n"
125 "information is found in workspace.cc. Generic\n"
126 "output and input variables must be described in GIN_DESC and\n"
127 "GOUT_DESC below.\n"
128 ),
129 AUTHORS( "Your Name" ),
130 OUT(),
131 GOUT(),
132 GOUT_TYPE(),
133 GOUT_DESC(),
134 IN(),
135 GIN( "descriptive_name_for_generic_input1" ),
136 GIN_TYPE( "GenericInput1Type" ),
137 GIN_DEFAULT( NODEF ),
138 GIN_DESC( "Description for Generic Input Variable 1" )
139 ));
140
141 For variable descriptions longer than one line, use the following format.
142 Don't forget to remove the space in '/ *' and '* /' if you copy this template.
143 I had to put it in there because C++ doesn't allow nested comments.
144
145 md_data_raw.push_back
146 ( create_mdrecord
147 ( NAME( "MethodName" ),
148 ...
149 ...
150 ...
151 GIN( gin_var1, gin_var2, gin_var3 )
152 GIN_TYPE( "GInput1Type", "GInput2Type", "GInput3Type" ),
153 GIN_DEFAULT( NODEF ),
154 GIN_DESC( / * gin_var1 * /
155 "Long description for Generic Input Variable 1 "
156 "which can span multiple lines like for example "
157 "this one. Don't put any \n in the variable descriptions.",
158 / * gin_var2 * /
159 "Long description for Generic Input Variable 2 "
160 "which can span multiple lines like for example "
161 "this one. Don't put any \n in the variable descriptions.",
162 / * gin_var3 * /
163 "Long description for Generic Input Variable 3 "
164 "which can span multiple lines like for example "
165 "this one. Don't put any \n in the variable descriptions."
166 )
167
168*/
169
171 // The variable md_data is defined in file methods_aux.cc.
173
174 // Initialise to zero, just in case:
175 md_data_raw.resize(0);
176
177 // String with all array groups
178 const String ARRAY_GROUPS = get_array_groups_as_string();
179 // String with all groups that also exist as an array type
180 const String GROUPS_WITH_ARRAY_TYPE = get_array_groups_as_string(true, true);
181 // String with all array types whose element type is also available as a group
182 const String ARRAY_GROUPS_WITH_BASETYPE =
183 get_array_groups_as_string(true, false);
184
186
187 for (const auto & wsv_group : wsv_groups) {
188 if (wsv_group != "Any") {
189 md_data_raw.push_back(MdRecord(
190 NAME(String(wsv_group.name + "Create").c_str()),
192 String("Creates a variable of group " + wsv_group.name +
193 ".\n"
194 "\n"
195 "After being created, the variable is uninitialized.\n")
196 .c_str()),
197 ArrayOfString(AUTHORS("Oliver Lemke")),
199 ArrayOfString(GOUT("out")),
200 ArrayOfString(GOUT_TYPE(wsv_group.name.c_str())),
201 ArrayOfString(GOUT_DESC("Variable to create.")),
202 ArrayOfString(IN()),
207 SETMETHOD(false),
208 AGENDAMETHOD(false),
209 USES_TEMPLATES(false),
210 PASSWORKSPACE(wsv_group == "Agenda"),
211 PASSWSVNAMES(false)));
212
213 if (wsv_group not_eq "Agenda" and wsv_group not_eq "ArrayOfAgenda") {
214 md_data_raw.push_back(MdRecord(
215 NAME(String(wsv_group.name + "Set").c_str()),
216 DESCRIPTION("Sets a workspace variable to the given value.\n"),
217 ArrayOfString(AUTHORS("Richard Larsson")),
219 ArrayOfString(GOUT("out")),
220 ArrayOfString(GOUT_TYPE(wsv_group.name.c_str())),
221 ArrayOfString(GOUT_DESC("Variable to initialize.")),
222 ArrayOfString(IN()),
223 ArrayOfString(GIN("value")),
224 ArrayOfString(GIN_TYPE(wsv_group.name.c_str())),
226 ArrayOfString(GIN_DESC("The value.")),
227 SETMETHOD(true)));
228 }
229 }
230 }
231
233 // Let's put in the functions in alphabetical order. This gives a clear rule
234 // for where to place a new function and this gives a nicer results when
235 // the functions are listed by "arts -m all".
236 // No distinction is made between uppercase and lowercase letters.
237 // Patrick Eriksson 2002-05-08
239
240 md_data_raw.push_back(create_mdrecord(
241 NAME("AbsInputFromAtmFields"),
242 DESCRIPTION("Initialises the WSVs *abs_p*, *abs_t* and *abs_vmrs* from\n"
243 "*p_grid, *t_field* and *vmr_field*.\n"
244 "\n"
245 "This only works for a 1D atmosphere!\n"),
246 AUTHORS("Stefan Buehler"),
247 OUT("abs_p", "abs_t", "abs_vmrs"),
248 GOUT(),
249 GOUT_TYPE(),
250 GOUT_DESC(),
251 IN("atmosphere_dim", "p_grid", "t_field", "vmr_field"),
252 GIN(),
253 GIN_TYPE(),
254 GIN_DEFAULT(),
255 GIN_DESC()));
256
257 md_data_raw.push_back(create_mdrecord(
258 NAME("abs_cia_dataAddCIARecord"),
260 "Takes CIARecord as input and appends the results in the appropriate place.\n"
261 "\n"
262 "If CIARecord has same species as species in *abs_cia_data*, then the array\n"
263 "position is used to append all of the CIARecord into the array. If clobber\n"
264 "evaluates as true, cia_record overwrites the appropriate *abs_cia_data*. If\n"
265 "species in cia_record are not in *abs_cia_data*, the CIARecord is pushed back.\n"),
266 AUTHORS("Richard Larsson"),
267 OUT("abs_cia_data"),
268 GOUT(),
269 GOUT_TYPE(),
270 GOUT_DESC(),
271 IN("abs_cia_data"),
272 GIN("cia_record", "clobber"),
273 GIN_TYPE("CIARecord", "Index"),
274 GIN_DEFAULT(NODEF, "0"),
275 GIN_DESC("CIA record to append to *abs_cia_data*.",
276 "If true, the new input clobbers the old cia data.")));
277
278 md_data_raw.push_back(create_mdrecord(
279 NAME("abs_cia_dataReadSpeciesSplitCatalog"),
281 "Reads a species split CIA dataset.\n"),
282 AUTHORS("Richard Larsson"),
283 OUT("abs_cia_data"),
284 GOUT(),
285 GOUT_TYPE(),
286 GOUT_DESC(),
287 IN("abs_species"),
288 GIN("basename", "robust"),
289 GIN_TYPE("String", "Index"),
290 GIN_DEFAULT(NODEF, "0"),
291 GIN_DESC("The path to the split catalog files",
292 "Flag to continue in case nothing is found [0 throws, 1 continues]")));
293
294 md_data_raw.push_back(create_mdrecord(
295 NAME("abs_cia_dataReadFromCIA"),
297 "Read data from a CIA data file for all CIA molecules defined\n"
298 "in *abs_species*.\n"
299 "\n"
300 "The units in the HITRAN file are:\n"
301 "Frequency: cm^(-1)\n"
302 "Binary absorption cross-section: cm^5 molec^(-2)\n"
303 "\n"
304 "Upon reading we convert this to the ARTS internal SI units \n"
305 "of Hz and m^5 molec^(-2).\n"),
306 AUTHORS("Oliver Lemke"),
307 OUT("abs_cia_data"),
308 GOUT(),
309 GOUT_TYPE(),
310 GOUT_DESC(),
311 IN("abs_species"),
312 GIN("catalogpath"),
313 GIN_TYPE("String"),
315 GIN_DESC("Path to the CIA catalog directory.")));
316
317 md_data_raw.push_back(create_mdrecord(
318 NAME("abs_cia_dataReadFromXML"),
320 "Read data from a CIA XML file and check that all CIA tags defined\n"
321 "in *abs_species* are present in the file.\n"
322 "\n"
323 "The units of the data are described in *abs_cia_dataReadFromCIA*.\n"),
324 AUTHORS("Oliver Lemke"),
325 OUT("abs_cia_data"),
326 GOUT(),
327 GOUT_TYPE(),
328 GOUT_DESC(),
329 IN("abs_species"),
330 GIN("filename"),
331 GIN_TYPE("String"),
332 GIN_DEFAULT(""),
333 GIN_DESC("Name of the XML file.")));
334
335 md_data_raw.push_back(create_mdrecord(
336 NAME("abs_hitran_relmat_dataReadHitranRelmatDataAndLines"),
337 DESCRIPTION("Reads HITRAN line mixing data from a basedir\n"
338 "The basedir must point at line mixing data as provided by HITRAN.\n"
339 "The lines will be changed such that ALL CO2 lines are truncated\n"
340 "before adding the HITRAN line mixing lines.\n"
341 "\n"
342 "The available modes are such that \"VP*\" uses Voigt profiles and\n"
343 "\"SDVP*\" uses speed-dependent Voigt profiles, where the \"_Y\"\n"
344 "signifies if Rosenkranz-style line mixing is considered or not, and\n"
345 "the \"W\" at the end signifies that full calculations are used. At\n"
346 "the line mixing limit, line mixing is simply turned off.\n"
347 "\n"
348 "The \"FullW\" mode uses Lorentzian calculations with the full relaxation\n"
349 "matrix until the line mixing limit is reached and it switches to Voigt.\n"
350 "\n"
351 "The HITRAN LM data is available for download at:\n"
352 "https://hitran.org/supplementary/\n"
353 ),
354 AUTHORS("Richard Larsson"),
355 OUT("abs_hitran_relmat_data", "abs_lines_per_species"),
356 GOUT(),
357 GOUT_TYPE(),
358 GOUT_DESC(),
359 IN("abs_lines_per_species", "abs_species"),
360 GIN("basedir", "linemixinglimit", "fmin", "fmax", "stot", "mode"),
361 GIN_TYPE("String", "Numeric", "Numeric", "Numeric", "Numeric", "String"),
362 GIN_DEFAULT(NODEF, "-1", "-1e99", "1e99", "0", "VP_W"),
363 GIN_DESC("Direcory where the linemixing data is to be found",
364 "Line mixing limit as defined by *AbsorptionLines*",
365 "Minimum frequency to read from",
366 "Maximum frequency to read until",
367 "Minimum integrated band strength to consider",
368 "Mode of calculations. The options are: \"VP\", \"VP_Y\", \"SDVP\", \"SDVP_Y\", \"FullW\", and \"VP_W\""
369 )));
370
371 md_data_raw.push_back(create_mdrecord(
372 NAME("abs_linesAdaptOnTheFlyLineMixing"),
373 DESCRIPTION("Adapts the line-catalog from using *ecs_data* data to.\n"
374 "instead fit ordered parameters to imitate the line mxixing\n"
375 "\n"
376 "The order should be 1 or 2. It will compute at 3 as well, but\n"
377 "there's no support in current ARTS LBL to make use of it so it\n"
378 "will crash at some point\n"
379 ),
380 AUTHORS("Richard Larsson"),
381 OUT("abs_lines"),
382 GOUT(),
383 GOUT_TYPE(),
384 GOUT_DESC(),
385 IN("abs_lines", "ecs_data"),
386 GIN("t_grid", "pressure", "order", "robust", "rosenkranz_adaptation"),
387 GIN_TYPE("Vector", "Numeric", "Index", "Index", "Index"),
388 GIN_DEFAULT(NODEF, NODEF, NODEF, "1", "0"),
389 GIN_DESC("The sorted temperature grid",
390 "The pressure at which the adaptation is made",
391 "The order of the parameters in adaptation",
392 "Boolean for failed band adaptation behavior. 0: throw exception. not 0: conversion to line-by-line calculations",
393 "Apply direct Rosenkranz adaptation instead of computing the Eigenvalues")));
394
395 md_data_raw.push_back(create_mdrecord(
396 NAME("abs_lines_per_speciesAdaptOnTheFlyLineMixing"),
397 DESCRIPTION("Calls *abs_linesAdaptOnTheFlyLineMixing* for each internal array\n"
398 ),
399 AUTHORS("Richard Larsson"),
400 OUT("abs_lines_per_species"),
401 GOUT(),
402 GOUT_TYPE(),
403 GOUT_DESC(),
404 IN("abs_lines_per_species", "ecs_data"),
405 GIN("t_grid", "pressure", "order", "robust", "rosenkranz_adaptation"),
406 GIN_TYPE("Vector", "Numeric", "Index", "Index", "Index"),
407 GIN_DEFAULT(NODEF, NODEF, NODEF, "1", "0"),
408 GIN_DESC("The sorted temperature grid",
409 "The pressure at which the adaptation is made",
410 "The order of the parameters in adaptation",
411 "Boolean for failed band adaptation behavior. 0: throw exception. not 0: conversion to line-by-line calculations",
412 "Apply direct Rosenkranz adaptation instead of computing the Eigenvalues")));
413
414 md_data_raw.push_back(create_mdrecord(
415 NAME("abs_lines_per_speciesAdaptHitranLineMixing"),
416 DESCRIPTION("Adapts the line-catalog from using *abs_hitran_relmat_data* to.\n"
417 "instead fit ordered parameters to imitate the line mxixing\n"
418 "\n"
419 "The order should be 1 or 2. It will compute at 3 as well, but\n"
420 "there's no support in current ARTS LBL to make use of it so it\n"
421 "will crash at some point\n"
422 ),
423 AUTHORS("Richard Larsson"),
424 OUT("abs_lines_per_species"),
425 GOUT(),
426 GOUT_TYPE(),
427 GOUT_DESC(),
428 IN("abs_lines_per_species", "abs_hitran_relmat_data"),
429 GIN("t_grid", "pressure", "order"),
430 GIN_TYPE("Vector", "Numeric", "Index"),
432 GIN_DESC("The sorted temperature grid",
433 "The pressure at which the adaptation is made",
434 "The order of the parameters in adaptation")));
435
436 md_data_raw.push_back(create_mdrecord(
437 NAME("abs_linesKeepBand"),
438 DESCRIPTION("Keep only *qid*-match band lines in *abs_lines*\n"
439 "\n"
440 "Note that other bands are technically kept but have zero lines\n"),
441 AUTHORS("Richard Larsson"),
442 OUT("abs_lines"),
443 GOUT(),
444 GOUT_TYPE(),
445 GOUT_DESC(),
446 IN("abs_lines"),
447 GIN("qid"),
448 GIN_TYPE("QuantumIdentifier"),
450 GIN_DESC("Band ID")));
451
452 md_data_raw.push_back(create_mdrecord(
453 NAME("abs_linesRemoveBand"),
454 DESCRIPTION("Removes *qid* band from *abs_lines*\n"),
455 AUTHORS("Richard Larsson"),
456 OUT("abs_lines"),
457 GOUT(),
458 GOUT_TYPE(),
459 GOUT_DESC(),
460 IN("abs_lines"),
461 GIN("qid"),
462 GIN_TYPE("QuantumIdentifier"),
464 GIN_DESC("Band ID")));
465
466 md_data_raw.push_back(create_mdrecord(
467 NAME("abs_linesRemoveLines"),
468 DESCRIPTION("Remove lines *abs_lines* outside of specifications\n"
469 "\n"
470 "The specifications are:\n"
471 "\tThe lower frequency bound (all lines of this frequency or higher may be kept)\n"
472 "\tThe upper frequency bound (all lines of this frequency or lower may be kept)\n"
473 "\tThe lower intensity bound (all lines with lower intensity may be removed)\n"
474 "\n"
475 "If safe evaluates true, all lines in an absorption band must fail the above\n"
476 "tests to be removed\n"
477 "\n"
478 "The frequency filtering can be reversed, from keeping upper_frequency to\n"
479 "lower_frequency, to instead remove lines inside the range by setting\n"
480 "*flip_flims* to 1.\n"
481 "\n"
482 "The method *abs_linesRemoveEmptyBands* is internally applied after the\n"
483 "filtering.\n"
484 ),
485 AUTHORS("Richard Larsson"),
486 OUT("abs_lines"),
487 GOUT(),
488 GOUT_TYPE(),
489 GOUT_DESC(),
490 IN("abs_lines"),
491 GIN("lower_frequency", "upper_frequency", "lower_intensity", "safe", "flip_flims"),
492 GIN_TYPE("Numeric", "Numeric", "Numeric", "Index", "Index"),
493 GIN_DEFAULT("-1e99", "1e99", "0", "1", "0"),
494 GIN_DESC("The lower frequency bound",
495 "The upper frequency bound",
496 "The lower intensity bound",
497 "Remove only lines from a band if all lines of a band fail",
498 "Reverse the frequecy filtering, see above")));
499
500 md_data_raw.push_back(create_mdrecord(
501 NAME("abs_lines_per_speciesRemoveLines"),
502 DESCRIPTION("Repeats *abs_linesRemoveLines* for all inner arrays\n"
503 ),
504 AUTHORS("Richard Larsson"),
505 OUT("abs_lines_per_species"),
506 GOUT(),
507 GOUT_TYPE(),
508 GOUT_DESC(),
509 IN("abs_lines_per_species"),
510 GIN("lower_frequency", "upper_frequency", "lower_intensity", "safe", "flip_flims"),
511 GIN_TYPE("Numeric", "Numeric", "Numeric", "Index", "Index"),
512 GIN_DEFAULT("-1e99", "1e99", "0", "1", "0"),
513 GIN_DESC("The lower frequency bound",
514 "The upper frequency bound",
515 "The lower intensity bound",
516 "Remove only lines from a band if all lines of a band fail",
517 "Reverse the frequecy filtering")));
518
519 md_data_raw.push_back(create_mdrecord(
520 NAME("abs_linesRemoveLinesFromSpecies"),
521 DESCRIPTION("As *abs_linesRemoveLines* but only for bands of the given species\n"
522 "\n"
523 "species must be a single entry, and must specify the isotopologue\n"
524 ),
525 AUTHORS("Richard Larsson"),
526 OUT("abs_lines"),
527 GOUT(),
528 GOUT_TYPE(),
529 GOUT_DESC(),
530 IN("abs_lines"),
531 GIN("species", "lower_frequency", "upper_frequency", "lower_intensity",
532 "safe", "flip_flims"),
533 GIN_TYPE("ArrayOfSpeciesTag", "Numeric", "Numeric", "Numeric", "Index", "Index"),
534 GIN_DEFAULT(NODEF, "-1e99", "1e99", "0", "1", "0"),
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 "Reverse the frequecy filtering")));
541
542 md_data_raw.push_back(create_mdrecord(
543 NAME("abs_lines_per_speciesRemoveLinesFromSpecies"),
544 DESCRIPTION("Repeats *abs_linesRemoveLinesFromSpecies* for all inner arrays\n"
545 ),
546 AUTHORS("Richard Larsson"),
547 OUT("abs_lines_per_species"),
548 GOUT(),
549 GOUT_TYPE(),
550 GOUT_DESC(),
551 IN("abs_lines_per_species"),
552 GIN("species", "lower_frequency", "upper_frequency", "lower_intensity",
553 "safe", "flip_flims"),
554 GIN_TYPE("ArrayOfSpeciesTag", "Numeric", "Numeric", "Numeric", "Index", "Index"),
555 GIN_DEFAULT(NODEF, "-1e99", "1e99", "0", "1", "0"),
556 GIN_DESC("Species to be removed",
557 "The lower frequency bound",
558 "The upper frequency bound",
559 "The lower intensity bound",
560 "Remove only lines from a band if all lines of a band fail",
561 "Reverse the frequecy filtering")));
562
563 md_data_raw.push_back(create_mdrecord(
564 NAME("abs_linesRemoveEmptyBands"),
565 DESCRIPTION("Removes emtpy bands from *abs_lines*\n"),
566 AUTHORS("Richard Larsson"),
567 OUT("abs_lines"),
568 GOUT(),
569 GOUT_TYPE(),
570 GOUT_DESC(),
571 IN("abs_lines"),
572 GIN(),
573 GIN_TYPE(),
574 GIN_DEFAULT(),
575 GIN_DESC()));
576
577 md_data_raw.push_back(create_mdrecord(
578 NAME("abs_linesFlatten"),
579 DESCRIPTION("Makes *abs_lines* with the same ID share lines\n"),
580 AUTHORS("Richard Larsson"),
581 OUT("abs_lines"),
582 GOUT(),
583 GOUT_TYPE(),
584 GOUT_DESC(),
585 IN("abs_lines"),
586 GIN(),
587 GIN_TYPE(),
588 GIN_DEFAULT(),
589 GIN_DESC()));
590
591 md_data_raw.push_back(create_mdrecord(
592 NAME("abs_lines_per_speciesFlatten"),
593 DESCRIPTION("Calls *abs_linesFlatten* per internal set of bands\n"),
594 AUTHORS("Richard Larsson"),
595 OUT("abs_lines_per_species"),
596 GOUT(),
597 GOUT_TYPE(),
598 GOUT_DESC(),
599 IN("abs_lines_per_species"),
600 GIN(),
601 GIN_TYPE(),
602 GIN_DEFAULT(),
603 GIN_DESC()));
604
605 md_data_raw.push_back(create_mdrecord(
606 NAME("CallbackFunctionExecute"),
607 DESCRIPTION("Execute any code in Arts\n"),
608 AUTHORS("Richard Larsson"),
609 OUT(),
610 GOUT(),
611 GOUT_TYPE(),
612 GOUT_DESC(),
613 IN(),
614 GIN("function"),
615 GIN_TYPE("CallbackFunction"),
617 GIN_DESC("This will execute as \"function(current workspace);\""),
618 SETMETHOD(false),
619 AGENDAMETHOD(false),
620 USES_TEMPLATES(false),
621 PASSWORKSPACE(true),
622 PASSWSVNAMES(false)));
623
624 md_data_raw.push_back(create_mdrecord(
625 NAME("CheckUnique"),
627 "Checks that *abs_lines* contains only unique absorption lines\n"),
628 AUTHORS("Richard Larsson"),
629 OUT(),
630 GOUT(),
631 GOUT_TYPE(),
632 GOUT_DESC(),
633 IN("abs_lines"),
634 GIN(),
635 GIN_TYPE(),
636 GIN_DEFAULT(),
637 GIN_DESC()));
638
639 md_data_raw.push_back(create_mdrecord(
640 NAME("abs_linesReplaceLines"),
642 "Replace all lines in *abs_lines* that match with lines in replacement_lines.\n"
643 "\n"
644 "Each replacement_lines must match excatly a single line in *abs_lines*.\n"
645 "\n"
646 "The matching requires identical quantum number signatures to work\n"
647 "\n"
648 "Note that lines are identified by their quantum number identifier, and if the broadening or\n"
649 "compute data disagree between two bands, a new band is appended unless we can work around the issue.\n"
650 "This may cause *CheckUnique* to fail after running this method\n"),
651 AUTHORS("Richard Larsson"),
652 OUT("abs_lines"),
653 GOUT(),
654 GOUT_TYPE(),
655 GOUT_DESC(),
656 IN("abs_lines"),
657 GIN("replacing_lines"),
658 GIN_TYPE("ArrayOfAbsorptionLines"),
660 GIN_DESC("Line-array that replace lines in *abs_lines*.")));
661
662 md_data_raw.push_back(create_mdrecord(
663 NAME("abs_linesReplaceBands"),
665 "Replace all bands in *abs_lines* that match with bands in *replacing_bands*.\n"
666 "\n"
667 "Each *replacing_bands* must match excatly a single band in *abs_lines*.\n"
668 "\n"
669 "The matching requires identical quantum number signatures to work.\n"),
670 AUTHORS("Richard Larsson"),
671 OUT("abs_lines"),
672 GOUT(),
673 GOUT_TYPE(),
674 GOUT_DESC(),
675 IN("abs_lines"),
676 GIN("replacing_bands"),
677 GIN_TYPE("ArrayOfAbsorptionLines"),
679 GIN_DESC("Line-array that removes lines from *abs_lines*.")));
680
681 md_data_raw.push_back(create_mdrecord(
682 NAME("abs_linesDeleteBadF0"),
684 "Deletes all lines in *abs_lines* that have bad central frequencies\n"
685 "\n"
686 "If lower evaluates as true, deletes all lines with a frequency below f0.\n"
687 "Otherwise deletes all lines with a frequency above f0.\n"),
688 AUTHORS("Richard Larsson"),
689 OUT("abs_lines"),
690 GOUT(),
691 GOUT_TYPE(),
692 GOUT_DESC(),
693 IN("abs_lines"),
694 GIN("f0", "lower"),
695 GIN_TYPE("Numeric", "Index"),
696 GIN_DEFAULT(NODEF, "1"),
697 GIN_DESC("Target frequency",
698 "Lower or upper flag (eval as boolean)")));
699
700 md_data_raw.push_back(create_mdrecord(
701 NAME("abs_linesReadSpeciesSplitCatalog"),
702 DESCRIPTION("Reads a catalog of absorption lines files in a directory\n"),
703 AUTHORS("Richard Larsson"),
704 OUT("abs_lines"),
705 GOUT(),
706 GOUT_TYPE(),
707 GOUT_DESC(),
708 IN(),
709 GIN("basename", "robust"),
710 GIN_TYPE("String", "Index"),
711 GIN_DEFAULT(NODEF, "0"),
712 GIN_DESC("The path to the split catalog files",
713 "Flag to continue in case nothing is found [0 throws, 1 continues]")));
714
715 md_data_raw.push_back(create_mdrecord(
716 NAME("abs_lines_per_speciesReadSpeciesSplitCatalog"),
717 DESCRIPTION("See *abs_linesReadSpeciesSplitCatalog* but only for *abs_species*\n"),
718 AUTHORS("Richard Larsson"),
719 OUT("abs_lines_per_species"),
720 GOUT(),
721 GOUT_TYPE(),
722 GOUT_DESC(),
723 IN("abs_species"),
724 GIN("basename", "robust"),
725 GIN_TYPE("String", "Index"),
726 GIN_DEFAULT(NODEF, "0"),
727 GIN_DESC("The path to the split catalog files",
728 "Flag to continue in case nothing is found [0 throws, 1 continues]")));
729
730 md_data_raw.push_back(create_mdrecord(
731 NAME("abs_lines_per_speciesSetEmpty"),
732 DESCRIPTION("Empties *abs_lines_per_species* at the correct size.\n"),
733 AUTHORS("Richard Larsson"),
734 OUT("abs_lines_per_species"),
735 GOUT(),
736 GOUT_TYPE(),
737 GOUT_DESC(),
738 IN("abs_species"),
739 GIN(),
740 GIN_TYPE(),
741 GIN_DEFAULT(),
742 GIN_DESC()));
743
744 md_data_raw.push_back(
745 create_mdrecord(NAME("abs_linesEmptyBroadeningParameters"),
746 DESCRIPTION("Sets a broadening parameter to empty if it is effectively empty\n"),
747 AUTHORS("Richard Larsson"),
748 OUT("abs_lines"),
749 GOUT(),
750 GOUT_TYPE(),
751 GOUT_DESC(),
752 IN("abs_lines"),
753 GIN(),
754 GIN_TYPE(),
755 GIN_DEFAULT(),
756 GIN_DESC()));
757
758 md_data_raw.push_back(
759 create_mdrecord(NAME("abs_linesNormalization"),
760 DESCRIPTION(R"--(Sets normalization type for all lines
761
762Available options:
763 "VVH" : Van Vleck and Huber
764
765 "VVW" : Van Vleck and Weisskopf
766
767 "RQ" : Rosenkranz quadratic
768
769 "SFS" : Simple frequency scaling
770
771 "None" : No extra normalization
772
773See the theory guide for more details.
774)--"),
775 AUTHORS("Richard Larsson"),
776 OUT("abs_lines"),
777 GOUT(),
778 GOUT_TYPE(),
779 GOUT_DESC(),
780 IN("abs_lines"),
781 GIN("option"),
782 GIN_TYPE("String"),
784 GIN_DESC("Method of line normalizations")));
785
786 md_data_raw.push_back(
787 create_mdrecord(NAME("abs_lines_per_speciesNormalization"),
788 DESCRIPTION(R"--(Sets normalization type for all lines
789
790Available options:
791 "VVH" : Van Vleck and Huber
792
793 "VVW" : Van Vleck and Weisskopf
794
795 "RQ" : Rosenkranz quadratic
796
797 "SFS" : Simple frequency scaling
798
799 "None" : No extra normalization
800
801See the theory guide for more details.
802)--"),
803 AUTHORS("Richard Larsson"),
804 OUT("abs_lines_per_species"),
805 GOUT(),
806 GOUT_TYPE(),
807 GOUT_DESC(),
808 IN("abs_lines_per_species"),
809 GIN("option"),
810 GIN_TYPE("String"),
812 GIN_DESC("Method of line normalizations")));
813
814 md_data_raw.push_back(
815 create_mdrecord(NAME("abs_linesNormalizationMatch"),
816 DESCRIPTION(R"--(Sets normalization type for all matching lines
817
818Match is done with a quantum identifier
819
820Available options:
821 "VVH" : Van Vleck and Huber
822
823 "VVW" : Van Vleck and Weisskopf
824
825 "RQ" : Rosenkranz quadratic
826
827 "SFS" : Simple frequency scaling
828
829 "None" : No extra normalization
830
831See the theory guide for more details.
832)--"),
833 AUTHORS("Richard Larsson"),
834 OUT("abs_lines"),
835 GOUT(),
836 GOUT_TYPE(),
837 GOUT_DESC(),
838 IN("abs_lines"),
839 GIN("option", "ID"),
840 GIN_TYPE("String", "QuantumIdentifier"),
842 GIN_DESC("Method of line normalizations",
843 "ID of one or more bands")));
844
845 md_data_raw.push_back(
846 create_mdrecord(NAME("abs_lines_per_speciesNormalizationMatch"),
847 DESCRIPTION(R"--(Sets normalization type for all matching lines
848
849Match is done with a quantum identifier
850
851Available options:
852 "VVH" : Van Vleck and Huber
853
854 "VVW" : Van Vleck and Weisskopf
855
856 "RQ" : Rosenkranz quadratic
857
858 "SFS" : Simple frequency scaling
859
860 "None" : No extra normalization
861
862See the theory guide for more details.
863)--"),
864 AUTHORS("Richard Larsson"),
865 OUT("abs_lines_per_species"),
866 GOUT(),
867 GOUT_TYPE(),
868 GOUT_DESC(),
869 IN("abs_lines_per_species"),
870 GIN("option", "ID"),
871 GIN_TYPE("String", "QuantumIdentifier"),
873 GIN_DESC("Method of line normalizations",
874 "ID of one or more bands")));
875
876 md_data_raw.push_back(
877 create_mdrecord(NAME("abs_lines_per_speciesNormalizationSpecies"),
878 DESCRIPTION(R"--(Sets normalization type for all matching lines
879
880Match is done with a species tag
881
882Available options:
883 "VVH" : Van Vleck and Huber
884
885 "VVW" : Van Vleck and Weisskopf
886
887 "RQ" : Rosenkranz quadratic
888
889 "SFS" : Simple frequency scaling
890
891 "None" : No extra normalization
892
893See the theory guide for more details.
894)--"),
895 AUTHORS("Richard Larsson"),
896 OUT("abs_lines_per_species"),
897 GOUT(),
898 GOUT_TYPE(),
899 GOUT_DESC(),
900 IN("abs_lines_per_species", "abs_species"),
901 GIN("option", "species_tag"),
902 GIN_TYPE("String", "String"),
904 GIN_DESC("Method of line normalizations",
905 "The species tag from *abs_species* to change")));
906
907 md_data_raw.push_back(
908 create_mdrecord(NAME("abs_linesMirroring"),
909 DESCRIPTION(R"--(Sets mirroring type for all lines.
910
911Available options:
912 "None" : No mirrored line
913
914 "SameAsLineShape" : Mirrored line broadened by line shape
915
916 "Manual" : Manually mirrored line (be careful; allows all frequencies)
917
918 "Lorentz" : Mirrored line broadened by Lorentz
919
920Note that mirroring is never applied for DP line shape
921
922Also note that Lorentz profile is approached by most line shapes at high frequency offset.
923
924Also note that Manual settings are potentially dangerous as other frequency
925offsets might not work as hoped.
926)--"),
927 AUTHORS("Richard Larsson"),
928 OUT("abs_lines"),
929 GOUT(),
930 GOUT_TYPE(),
931 GOUT_DESC(),
932 IN("abs_lines"),
933 GIN("option"),
934 GIN_TYPE("String"),
936 GIN_DESC("Method of line mirroring")));
937
938 md_data_raw.push_back(
939 create_mdrecord(NAME("abs_lines_per_speciesMirroring"),
940 DESCRIPTION(R"--(Sets mirroring type for all lines.
941
942Available options:
943 "None" : No mirrored line
944
945 "SameAsLineShape" : Mirrored line broadened by line shape
946
947 "Manual" : Manually mirrored line (be careful; allows all frequencies)
948
949 "Lorentz" : Mirrored line broadened by Lorentz
950
951Note that mirroring is never applied for DP line shape
952
953Also note that Lorentz profile is approached by most line shapes at high frequency offset.
954
955Also note that Manual settings are potentially dangerous as other frequency
956offsets might not work as hoped.
957)--"),
958 AUTHORS("Richard Larsson"),
959 OUT("abs_lines_per_species"),
960 GOUT(),
961 GOUT_TYPE(),
962 GOUT_DESC(),
963 IN("abs_lines_per_species"),
964 GIN("option"),
965 GIN_TYPE("String"),
967 GIN_DESC("Method of line mirroring")));
968
969 md_data_raw.push_back(
970 create_mdrecord(NAME("abs_linesMirroringMatch"),
971 DESCRIPTION(R"--(Sets mirroring type for all matching lines.
972
973Match is done with a quantum identifier
974
975Available options:
976 "None" : No mirrored line
977
978 "SameAsLineShape" : Mirrored line broadened by line shape
979
980 "Manual" : Manually mirrored line (be careful; allows all frequencies)
981
982 "Lorentz" : Mirrored line broadened by Lorentz
983
984Note that mirroring is never applied for DP line shape
985
986Also note that Lorentz profile is approached by most line shapes at high frequency offset.
987
988Also note that Manual settings are potentially dangerous as other frequency
989offsets might not work as hoped.
990)--"),
991 AUTHORS("Richard Larsson"),
992 OUT("abs_lines"),
993 GOUT(),
994 GOUT_TYPE(),
995 GOUT_DESC(),
996 IN("abs_lines"),
997 GIN("option", "ID"),
998 GIN_TYPE("String", "QuantumIdentifier"),
1000 GIN_DESC("Method of line mirroring",
1001 "ID of one or more bands")));
1002
1003 md_data_raw.push_back(
1004 create_mdrecord(NAME("abs_lines_per_speciesMirroringMatch"),
1005 DESCRIPTION(R"--(Sets mirroring type for all matching lines.
1006
1007Match is done with a quantum identifier
1008
1009Available options:
1010 "None" : No mirrored line
1011
1012 "SameAsLineShape" : Mirrored line broadened by line shape
1013
1014 "Manual" : Manually mirrored line (be careful; allows all frequencies)
1015
1016 "Lorentz" : Mirrored line broadened by Lorentz
1017
1018Note that mirroring is never applied for DP line shape
1019
1020Also note that Lorentz profile is approached by most line shapes at high frequency offset.
1021
1022Also note that Manual settings are potentially dangerous as other frequency
1023offsets might not work as hoped.
1024)--"),
1025 AUTHORS("Richard Larsson"),
1026 OUT("abs_lines_per_species"),
1027 GOUT(),
1028 GOUT_TYPE(),
1029 GOUT_DESC(),
1030 IN("abs_lines_per_species"),
1031 GIN("option", "ID"),
1032 GIN_TYPE("String", "QuantumIdentifier"),
1034 GIN_DESC("Method of line mirroring",
1035 "ID of one or more bands")));
1036
1037 md_data_raw.push_back(
1038 create_mdrecord(NAME("abs_lines_per_speciesMirroringSpecies"),
1039 DESCRIPTION(R"--(Sets mirroring type for all matching lines.
1040
1041Match is done with a species tag
1042
1043Available options:
1044 "None" : No mirrored line
1045
1046 "SameAsLineShape" : Mirrored line broadened by line shape
1047
1048 "Manual" : Manually mirrored line (be careful; allows all frequencies)
1049
1050 "Lorentz" : Mirrored line broadened by Lorentz
1051
1052Note that mirroring is never applied for DP line shape
1053
1054Also note that Lorentz profile is approached by most line shapes at high frequency offset.
1055
1056Also note that Manual settings are potentially dangerous as other frequency
1057offsets might not work as hoped.
1058)--"),
1059 AUTHORS("Richard Larsson"),
1060 OUT("abs_lines_per_species"),
1061 GOUT(),
1062 GOUT_TYPE(),
1063 GOUT_DESC(),
1064 IN("abs_lines_per_species", "abs_species"),
1065 GIN("option", "species_tag"),
1066 GIN_TYPE("String", "String"),
1068 GIN_DESC("Method of line mirroring",
1069 "The species tag from *abs_species* to change")));
1070
1071 md_data_raw.push_back(
1072 create_mdrecord(NAME("abs_linesSort"),
1073 DESCRIPTION("Sorts first the lines then the bands by smallest first\n"),
1074 AUTHORS("Richard Larsson"),
1075 OUT("abs_lines"),
1076 GOUT(),
1077 GOUT_TYPE(),
1078 GOUT_DESC(),
1079 IN("abs_lines"),
1080 GIN("option"),
1081 GIN_TYPE("String"),
1082 GIN_DEFAULT("ByFrequency"),
1083 GIN_DESC("Sorting option")));
1084
1085 md_data_raw.push_back(
1086 create_mdrecord(NAME("abs_linesManualMirroring"),
1087 DESCRIPTION("Makes a copy of all lines at negative frequency setting them.\n"
1088 "to manual mirroring mode\n"),
1089 AUTHORS("Richard Larsson"),
1090 OUT("abs_lines"),
1091 GOUT(),
1092 GOUT_TYPE(),
1093 GOUT_DESC(),
1094 IN("abs_lines"),
1095 GIN(),
1096 GIN_TYPE(),
1097 GIN_DEFAULT(),
1098 GIN_DESC()));
1099
1100 md_data_raw.push_back(
1101 create_mdrecord(NAME("abs_lines_per_speciesManualMirroring"),
1102 DESCRIPTION("Makes a copy of all lines at negative frequency setting them.\n"
1103 "to manual mirroring mode\n"),
1104 AUTHORS("Richard Larsson"),
1105 OUT("abs_lines_per_species"),
1106 GOUT(),
1107 GOUT_TYPE(),
1108 GOUT_DESC(),
1109 IN("abs_lines_per_species"),
1110 GIN(),
1111 GIN_TYPE(),
1112 GIN_DEFAULT(),
1113 GIN_DESC()));
1114
1115 md_data_raw.push_back(
1116 create_mdrecord(NAME("abs_lines_per_speciesManualMirroringSpecies"),
1117 DESCRIPTION("Calls *abs_linesManualMirroring* for given species in *abs_species*\n"),
1118 AUTHORS("Richard Larsson"),
1119 OUT("abs_lines_per_species"),
1120 GOUT(),
1121 GOUT_TYPE(),
1122 GOUT_DESC(),
1123 IN("abs_lines_per_species", "abs_species"),
1124 GIN("species"),
1125 GIN_TYPE("ArrayOfSpeciesTag"),
1127 GIN_DESC("Species to mirror")));
1128
1129 md_data_raw.push_back(
1130 create_mdrecord(NAME("abs_linesPopulation"),
1131 DESCRIPTION(R"--(Sets population type for all lines.
1132
1133Available options:
1134 "LTE" : Assume band is in LTE
1135
1136 "NLTE" : Assume band is in NLTE and the upper-to-lower ratio is known
1137
1138 "VibTemps" : Assume band is in NLTE described by vibrational temperatures and LTE at other levels
1139
1140 "ByHITRANRosenkranzRelmat" : Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
1141
1142 "ByHITRANFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to HITRAN
1143
1144 "ByMakarovFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
1145
1146 "ByRovibLinearDipoleLineMixing" : Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
1147
1148You must have set *nlte_field* and/or its ilk to use the NLTE methods.
1149
1150You must have *abs_hitran_relmat_data* for the ByHITRANXX methods.
1151
1152You must have *ecs_data* for the other two relaxation matrix options
1153)--"),
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 population")));
1164
1165 md_data_raw.push_back(
1166 create_mdrecord(NAME("abs_lines_per_speciesPopulation"),
1167 DESCRIPTION(R"--(Sets population type for all lines.
1168
1169Available options:
1170 "LTE" : Assume band is in LTE
1171
1172 "NLTE" : Assume band is in NLTE and the upper-to-lower ratio is known
1173
1174 "VibTemps" : Assume band is in NLTE described by vibrational temperatures and LTE at other levels
1175
1176 "ByHITRANRosenkranzRelmat" : Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
1177
1178 "ByHITRANFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to HITRAN
1179
1180 "ByMakarovFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
1181
1182 "ByRovibLinearDipoleLineMixing" : Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
1183
1184You must have set *nlte_field* and/or its ilk to use the NLTE methods.
1185
1186You must have *abs_hitran_relmat_data* for the ByHITRANXX methods.
1187
1188You must have *ecs_data* for the other two relaxation matrix options
1189)--"),
1190 AUTHORS("Richard Larsson"),
1191 OUT("abs_lines_per_species"),
1192 GOUT(),
1193 GOUT_TYPE(),
1194 GOUT_DESC(),
1195 IN("abs_lines_per_species"),
1196 GIN("option"),
1197 GIN_TYPE("String"),
1199 GIN_DESC("Method of line population")));
1200
1201 md_data_raw.push_back(
1202 create_mdrecord(NAME("abs_linesPopulationMatch"),
1203 DESCRIPTION(R"--(Sets population type for all matching lines.
1204
1205Match is done with a quantum identifier
1206
1207Available options:
1208 "LTE" : Assume band is in LTE
1209
1210 "NLTE" : Assume band is in NLTE and the upper-to-lower ratio is known
1211
1212 "VibTemps" : Assume band is in NLTE described by vibrational temperatures and LTE at other levels
1213
1214 "ByHITRANRosenkranzRelmat" : Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
1215
1216 "ByHITRANFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to HITRAN
1217
1218 "ByMakarovFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
1219
1220 "ByRovibLinearDipoleLineMixing" : Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
1221
1222You must have set *nlte_field* and/or its ilk to use the NLTE methods.
1223
1224You must have *abs_hitran_relmat_data* for the ByHITRANXX methods.
1225
1226You must have *ecs_data* for the other two relaxation matrix options
1227)--"),
1228 AUTHORS("Richard Larsson"),
1229 OUT("abs_lines"),
1230 GOUT(),
1231 GOUT_TYPE(),
1232 GOUT_DESC(),
1233 IN("abs_lines"),
1234 GIN("option", "ID"),
1235 GIN_TYPE("String", "QuantumIdentifier"),
1237 GIN_DESC("Method of line population",
1238 "ID of one or more bands")));
1239
1240 md_data_raw.push_back(
1241 create_mdrecord(NAME("abs_lines_per_speciesPopulationMatch"),
1242 DESCRIPTION(R"--(Sets population type for all matching lines.
1243
1244Match is done with a quantum identifier
1245
1246Available options:
1247 "LTE" : Assume band is in LTE
1248
1249 "NLTE" : Assume band is in NLTE and the upper-to-lower ratio is known
1250
1251 "VibTemps" : Assume band is in NLTE described by vibrational temperatures and LTE at other levels
1252
1253 "ByHITRANRosenkranzRelmat" : Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
1254
1255 "ByHITRANFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to HITRAN
1256
1257 "ByMakarovFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
1258
1259 "ByRovibLinearDipoleLineMixing" : Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
1260
1261You must have set *nlte_field* and/or its ilk to use the NLTE methods.
1262
1263You must have *abs_hitran_relmat_data* for the ByHITRANXX methods.
1264
1265You must have *ecs_data* for the other two relaxation matrix options
1266)--"),
1267 AUTHORS("Richard Larsson"),
1268 OUT("abs_lines_per_species"),
1269 GOUT(),
1270 GOUT_TYPE(),
1271 GOUT_DESC(),
1272 IN("abs_lines_per_species"),
1273 GIN("option", "ID"),
1274 GIN_TYPE("String", "QuantumIdentifier"),
1276 GIN_DESC("Method of line population",
1277 "ID of one or more bands")));
1278
1279 md_data_raw.push_back(
1280 create_mdrecord(NAME("abs_lines_per_speciesPopulationSpecies"),
1281 DESCRIPTION(R"--(Sets population type for all matching lines.
1282
1283Match is done with a species tag
1284
1285Available options:
1286 "LTE" : Assume band is in LTE
1287
1288 "NLTE" : Assume band is in NLTE and the upper-to-lower ratio is known
1289
1290 "VibTemps" : Assume band is in NLTE described by vibrational temperatures and LTE at other levels
1291
1292 "ByHITRANRosenkranzRelmat" : Assume band needs to compute relaxation matrix to derive HITRAN Y-coefficients
1293
1294 "ByHITRANFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to HITRAN
1295
1296 "ByMakarovFullRelmat" : Assume band needs to compute and directly use the relaxation matrix according to Makarov et al 2020
1297
1298 "ByRovibLinearDipoleLineMixing" : Assume band needs to compute and directly use the relaxation matrix according to Hartmann, Boulet, Robert, 2008, 1st edition
1299
1300You must have set *nlte_field* and/or its ilk to use the NLTE methods.
1301
1302You must have *abs_hitran_relmat_data* for the ByHITRANXX methods.
1303
1304You must have *ecs_data* for the other two relaxation matrix options
1305)--"),
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", "species_tag"),
1313 GIN_TYPE("String", "String"),
1315 GIN_DESC("Method of line population",
1316 "The species tag from *abs_species* to change")));
1317
1318 md_data_raw.push_back(
1319 create_mdrecord(NAME("abs_linesLineShapeType"),
1320 DESCRIPTION(R"--(Sets shape calculations type for all lines.
1321
1322Available options:
1323 "DP" : Doppler profile
1324
1325 "LP" : Lorentz profile
1326
1327 "VP" : Voigt profile
1328
1329 "SDVP" : Speed-dependent Voigt profile
1330
1331 "HTP" : Hartman-Tran profile
1332
1333See the theory guide for more details.
1334)--"),
1335 AUTHORS("Richard Larsson"),
1336 OUT("abs_lines"),
1337 GOUT(),
1338 GOUT_TYPE(),
1339 GOUT_DESC(),
1340 IN("abs_lines"),
1341 GIN("option"),
1342 GIN_TYPE("String"),
1344 GIN_DESC("Method of line shape calculations")));
1345
1346 md_data_raw.push_back(
1347 create_mdrecord(NAME("abs_lines_per_speciesLineShapeType"),
1348 DESCRIPTION(R"--(Sets shape calculations type for all lines.
1349
1350Available options:
1351 "DP" : Doppler profile
1352
1353 "LP" : Lorentz profile
1354
1355 "VP" : Voigt profile
1356
1357 "SDVP" : Speed-dependent Voigt profile
1358
1359 "HTP" : Hartman-Tran profile
1360
1361See the theory guide for more details.
1362)--"),
1363 AUTHORS("Richard Larsson"),
1364 OUT("abs_lines_per_species"),
1365 GOUT(),
1366 GOUT_TYPE(),
1367 GOUT_DESC(),
1368 IN("abs_lines_per_species"),
1369 GIN("option"),
1370 GIN_TYPE("String"),
1372 GIN_DESC("Method of line shape calculations")));
1373
1374 md_data_raw.push_back(
1375 create_mdrecord(NAME("abs_linesLineShapeTypeMatch"),
1376 DESCRIPTION(R"--(Sets shape calculations type for all matching lines.
1377
1378Match is done with a quantum identifier
1379
1380Available options:
1381 "DP" : Doppler profile
1382
1383 "LP" : Lorentz profile
1384
1385 "VP" : Voigt profile
1386
1387 "SDVP" : Speed-dependent Voigt profile
1388
1389 "HTP" : Hartman-Tran profile
1390
1391See the theory guide for more details.
1392)--"),
1393 AUTHORS("Richard Larsson"),
1394 OUT("abs_lines"),
1395 GOUT(),
1396 GOUT_TYPE(),
1397 GOUT_DESC(),
1398 IN("abs_lines"),
1399 GIN("option", "ID"),
1400 GIN_TYPE("String", "QuantumIdentifier"),
1402 GIN_DESC("Method of line shape calculations",
1403 "ID of one or more bands")));
1404
1405 md_data_raw.push_back(
1406 create_mdrecord(NAME("abs_lines_per_speciesLineShapeTypeMatch"),
1407 DESCRIPTION(R"--(Sets shape calculations type for all matching lines.
1408
1409Match is done with a quantum identifier
1410
1411Available options:
1412 "DP" : Doppler profile
1413
1414 "LP" : Lorentz profile
1415
1416 "VP" : Voigt profile
1417
1418 "SDVP" : Speed-dependent Voigt profile
1419
1420 "HTP" : Hartman-Tran profile
1421
1422See the theory guide for more details.
1423)--"),
1424 AUTHORS("Richard Larsson"),
1425 OUT("abs_lines_per_species"),
1426 GOUT(),
1427 GOUT_TYPE(),
1428 GOUT_DESC(),
1429 IN("abs_lines_per_species"),
1430 GIN("option", "ID"),
1431 GIN_TYPE("String", "QuantumIdentifier"),
1433 GIN_DESC("Method of line shape calculations",
1434 "ID of one or more bands")));
1435
1436 md_data_raw.push_back(
1437 create_mdrecord(NAME("abs_lines_per_speciesLineShapeTypeSpecies"),
1438 DESCRIPTION(R"--(Sets shape calculations type for all matching lines.
1439
1440Match is done with a species tag
1441
1442Available options:
1443 "DP" : Doppler profile
1444
1445 "LP" : Lorentz profile
1446
1447 "VP" : Voigt profile
1448
1449 "SDVP" : Speed-dependent Voigt profile
1450
1451 "HTP" : Hartman-Tran profile
1452
1453See the theory guide for more details.
1454)--"),
1455 AUTHORS("Richard Larsson"),
1456 OUT("abs_lines_per_species"),
1457 GOUT(),
1458 GOUT_TYPE(),
1459 GOUT_DESC(),
1460 IN("abs_lines_per_species", "abs_species"),
1461 GIN("option", "species_tag"),
1462 GIN_TYPE("String", "String"),
1464 GIN_DESC("Method of line shape calculations",
1465 "The species tag from *abs_species* to change")));
1466
1467 md_data_raw.push_back(
1468 create_mdrecord(NAME("abs_linesCutoff"),
1469 DESCRIPTION(R"--(Sets cutoff type and magnitude for all lines.
1470
1471The line is cut off when this is active at the given frequency.
1472"The only non-zero range is from this range to its negative equivalent
1473
1474Available options:
1475 "None" : No cutoff
1476
1477 "ByLine" : Cutoff relative to a speed-independent shifted line center, highest frequency: F0+cutoff+D0
1478
1479For "ByLine", the negative frequency is at F0-cutoff-D0
1480)--"),
1481 AUTHORS("Richard Larsson"),
1482 OUT("abs_lines"),
1483 GOUT(),
1484 GOUT_TYPE(),
1485 GOUT_DESC(),
1486 IN("abs_lines"),
1487 GIN("option", "value"),
1488 GIN_TYPE("String", "Numeric"),
1490 GIN_DESC("Method of line shape calculations",
1491 "Value of cutoff")));
1492
1493 md_data_raw.push_back(
1494 create_mdrecord(NAME("abs_lines_per_speciesCutoff"),
1495 DESCRIPTION(R"--(Sets cutoff type and magnitude for all lines.
1496
1497The line is cut off when this is active at the given frequency.
1498"The only non-zero range is from this range to its negative equivalent
1499
1500Available options:
1501 "None" : No cutoff
1502
1503 "ByLine" : Cutoff relative to a speed-independent shifted line center, highest frequency: F0+cutoff+D0
1504
1505For "ByLine", the negative frequency is at F0-cutoff-D0
1506)--"),
1507 AUTHORS("Richard Larsson"),
1508 OUT("abs_lines_per_species"),
1509 GOUT(),
1510 GOUT_TYPE(),
1511 GOUT_DESC(),
1512 IN("abs_lines_per_species"),
1513 GIN("option", "value"),
1514 GIN_TYPE("String", "Numeric"),
1516 GIN_DESC("Method of line shape calculations",
1517 "Value of cutoff")));
1518
1519 md_data_raw.push_back(
1520 create_mdrecord(NAME("abs_linesCutoffMatch"),
1521 DESCRIPTION(R"--(Sets cutoff type and magnitude for all matching lines.
1522
1523Match is done with a quantum identifier
1524
1525The line is cut off when this is active at the given frequency.
1526"The only non-zero range is from this range to its negative equivalent
1527
1528Available options:
1529 "None" : No cutoff
1530
1531 "ByLine" : Cutoff relative to a speed-independent shifted line center, highest frequency: F0+cutoff+D0
1532
1533For "ByLine", the negative frequency is at F0-cutoff-D0
1534)--"),
1535 AUTHORS("Richard Larsson"),
1536 OUT("abs_lines"),
1537 GOUT(),
1538 GOUT_TYPE(),
1539 GOUT_DESC(),
1540 IN("abs_lines"),
1541 GIN("option", "value", "ID"),
1542 GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1544 GIN_DESC("Method of line shape calculations",
1545 "Value of cutoff",
1546 "ID of one or more bands")));
1547
1548 md_data_raw.push_back(
1549 create_mdrecord(NAME("abs_lines_per_speciesCutoffMatch"),
1550 DESCRIPTION(R"--(Sets cutoff type and magnitude for all matching lines.
1551
1552Match is done with a quantum identifier
1553
1554The line is cut off when this is active at the given frequency.
1555"The only non-zero range is from this range to its negative equivalent
1556
1557Available options:
1558 "None" : No cutoff
1559
1560 "ByLine" : Cutoff relative to a speed-independent shifted line center, highest frequency: F0+cutoff+D0
1561
1562For "ByLine", the negative frequency is at F0-cutoff-D0
1563)--"),
1564 AUTHORS("Richard Larsson"),
1565 OUT("abs_lines_per_species"),
1566 GOUT(),
1567 GOUT_TYPE(),
1568 GOUT_DESC(),
1569 IN("abs_lines_per_species"),
1570 GIN("option", "value", "ID"),
1571 GIN_TYPE("String", "Numeric", "QuantumIdentifier"),
1573 GIN_DESC("Method of line shape calculations",
1574 "Value of cutoff",
1575 "ID of one or more bands")));
1576
1577 md_data_raw.push_back(
1578 create_mdrecord(NAME("abs_lines_per_speciesCutoffSpecies"),
1579 DESCRIPTION(R"--(Sets cutoff type and magnitude for all matching lines.
1580
1581Match is done with a species tag
1582
1583The line is cut off when this is active at the given frequency.
1584"The only non-zero range is from this range to its negative equivalent
1585
1586Available options:
1587 "None" : No cutoff
1588
1589 "ByLine" : Cutoff relative to a speed-independent shifted line center, highest frequency: F0+cutoff+D0
1590
1591For "ByLine", the negative frequency is at F0-cutoff-D0
1592)--"),
1593 AUTHORS("Richard Larsson"),
1594 OUT("abs_lines_per_species"),
1595 GOUT(),
1596 GOUT_TYPE(),
1597 GOUT_DESC(),
1598 IN("abs_lines_per_species", "abs_species"),
1599 GIN("option", "value", "species_tag"),
1600 GIN_TYPE("String", "Numeric", "String"),
1602 GIN_DESC("Method of line shape calculations",
1603 "Value of cutoff",
1604 "The species tag from *abs_species* to change")));
1605
1606 md_data_raw.push_back(
1607 create_mdrecord(NAME("abs_linesLinemixingLimit"),
1608 DESCRIPTION("Sets line mixing limit for all lines.\n"
1609 "\n"
1610 "If value is less than 0, no limit is applied and line mixing is active.\n"
1611 "Otherwise, line mixing is inactive if the pressure is below the limit.\n"),
1612 AUTHORS("Richard Larsson"),
1613 OUT("abs_lines"),
1614 GOUT(),
1615 GOUT_TYPE(),
1616 GOUT_DESC(),
1617 IN("abs_lines"),
1618 GIN("value"),
1619 GIN_TYPE("Numeric"),
1621 GIN_DESC("Value of limit")));
1622
1623 md_data_raw.push_back(
1624 create_mdrecord(NAME("abs_lines_per_speciesLinemixingLimit"),
1625 DESCRIPTION("See *abs_linesLinemixingLimit*\n"),
1626 AUTHORS("Richard Larsson"),
1627 OUT("abs_lines_per_species"),
1628 GOUT(),
1629 GOUT_TYPE(),
1630 GOUT_DESC(),
1631 IN("abs_lines_per_species"),
1632 GIN("value"),
1633 GIN_TYPE("Numeric"),
1635 GIN_DESC("Value of limit")));
1636
1637 md_data_raw.push_back(
1638 create_mdrecord(NAME("abs_linesLinemixingLimitMatch"),
1639 DESCRIPTION("See *abs_linesLinemixingLimit* for values\n"
1640 "\n"
1641 "This function only acts on matches between the bands and input ID\n"),
1642 AUTHORS("Richard Larsson"),
1643 OUT("abs_lines"),
1644 GOUT(),
1645 GOUT_TYPE(),
1646 GOUT_DESC(),
1647 IN("abs_lines"),
1648 GIN("value","ID"),
1649 GIN_TYPE("Numeric", "QuantumIdentifier"),
1651 GIN_DESC("Value of limit",
1652 "ID of one or more bands")));
1653
1654 md_data_raw.push_back(
1655 create_mdrecord(NAME("abs_lines_per_speciesLinemixingLimitMatch"),
1656 DESCRIPTION("See *abs_linesLinemixingLimit* for values\n"
1657 "\n"
1658 "This function only acts on matches between the bands and input ID\n"),
1659 AUTHORS("Richard Larsson"),
1660 OUT("abs_lines_per_species"),
1661 GOUT(),
1662 GOUT_TYPE(),
1663 GOUT_DESC(),
1664 IN("abs_lines_per_species"),
1665 GIN("value","ID"),
1666 GIN_TYPE("Numeric", "QuantumIdentifier"),
1668 GIN_DESC("Value of limit",
1669 "ID of one or more bands")));
1670
1671 md_data_raw.push_back(
1672 create_mdrecord(NAME("abs_lines_per_speciesLinemixingLimitSpecies"),
1673 DESCRIPTION("See *abs_linesLinemixingLimit* but for single species\n"),
1674 AUTHORS("Richard Larsson"),
1675 OUT("abs_lines_per_species"),
1676 GOUT(),
1677 GOUT_TYPE(),
1678 GOUT_DESC(),
1679 IN("abs_lines_per_species", "abs_species"),
1680 GIN("value", "species_tag"),
1681 GIN_TYPE("Numeric", "String"),
1683 GIN_DESC("Value of limit",
1684 "The species tag from *abs_species* to change")));
1685
1686 md_data_raw.push_back(
1687 create_mdrecord(NAME("abs_linesT0"),
1688 DESCRIPTION("Sets reference temperature for all lines.\n"),
1689 AUTHORS("Richard Larsson"),
1690 OUT("abs_lines"),
1691 GOUT(),
1692 GOUT_TYPE(),
1693 GOUT_DESC(),
1694 IN("abs_lines"),
1695 GIN("value"),
1696 GIN_TYPE("Numeric"),
1698 GIN_DESC("Value of T0")));
1699
1700 md_data_raw.push_back(
1701 create_mdrecord(NAME("abs_lines_per_speciesT0"),
1702 DESCRIPTION("See *abs_linesT0*\n"),
1703 AUTHORS("Richard Larsson"),
1704 OUT("abs_lines_per_species"),
1705 GOUT(),
1706 GOUT_TYPE(),
1707 GOUT_DESC(),
1708 IN("abs_lines_per_species"),
1709 GIN("value"),
1710 GIN_TYPE("Numeric"),
1712 GIN_DESC("Value of T0")));
1713
1714 md_data_raw.push_back(
1715 create_mdrecord(NAME("abs_linesT0Match"),
1716 DESCRIPTION("Sets reference temperature\n"
1717 "\n"
1718 "This function only acts on matches between the bands and input ID\n"),
1719 AUTHORS("Richard Larsson"),
1720 OUT("abs_lines"),
1721 GOUT(),
1722 GOUT_TYPE(),
1723 GOUT_DESC(),
1724 IN("abs_lines"),
1725 GIN("value", "ID"),
1726 GIN_TYPE("Numeric", "QuantumIdentifier"),
1728 GIN_DESC("Value of T0",
1729 "ID of one or more bands")));
1730
1731 md_data_raw.push_back(
1732 create_mdrecord(NAME("abs_lines_per_speciesT0Match"),
1733 DESCRIPTION("Sets reference temperature\n"
1734 "\n"
1735 "This function only acts on matches between the bands and input ID\n"),
1736 AUTHORS("Richard Larsson"),
1737 OUT("abs_lines_per_species"),
1738 GOUT(),
1739 GOUT_TYPE(),
1740 GOUT_DESC(),
1741 IN("abs_lines_per_species"),
1742 GIN("value", "ID"),
1743 GIN_TYPE("Numeric", "QuantumIdentifier"),
1745 GIN_DESC("Value of T0",
1746 "ID of one or more bands")));
1747
1748 md_data_raw.push_back(
1749 create_mdrecord(NAME("abs_lines_per_speciesT0Species"),
1750 DESCRIPTION("See *abs_linesT0* but for single species\n"),
1751 AUTHORS("Richard Larsson"),
1752 OUT("abs_lines_per_species"),
1753 GOUT(),
1754 GOUT_TYPE(),
1755 GOUT_DESC(),
1756 IN("abs_lines_per_species", "abs_species"),
1757 GIN("value", "species_tag"),
1758 GIN_TYPE("Numeric", "String"),
1760 GIN_DESC("Value of T0",
1761 "The species tag from *abs_species* to change")));
1762
1763 md_data_raw.push_back(create_mdrecord(
1764 NAME("abs_linesChangeBaseParameterForMatchingLevel"),
1766 "Change parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1767 "Only works for these parameters:\n"
1768 "parameter_name = \"Statistical Weight\"\n"
1769 "parameter_name = \"Zeeman Coefficient\"\n"),
1770 AUTHORS("Richard Larsson"),
1771 OUT("abs_lines"),
1772 GOUT(),
1773 GOUT_TYPE(),
1774 GOUT_DESC(),
1775 IN("abs_lines"),
1776 GIN("QI", "parameter_name", "change", "relative"),
1777 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1778 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1779 GIN_DESC("Information to match the level.",
1780 "Name of parameter to be replaced",
1781 "Value with which to change matching level's value",
1782 "Flag for relative change (0 is absolute change)")));
1783
1784 md_data_raw.push_back(create_mdrecord(
1785 NAME("abs_linesChangeBaseParameterForMatchingLevels"),
1786 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1787 AUTHORS("Richard Larsson"),
1788 OUT("abs_lines"),
1789 GOUT(),
1790 GOUT_TYPE(),
1791 GOUT_DESC(),
1792 IN("abs_lines"),
1793 GIN("QI", "parameter_name", "change", "relative"),
1794 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1795 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1796 GIN_DESC("Information to match the level.",
1797 "Name of parameter to be replaced",
1798 "Value with which to change matching level's value",
1799 "Flag for relative change (0 is absolute change)")));
1800
1801 md_data_raw.push_back(create_mdrecord(
1802 NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevel"),
1803 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1804 AUTHORS("Richard Larsson"),
1805 OUT("abs_lines_per_species"),
1806 GOUT(),
1807 GOUT_TYPE(),
1808 GOUT_DESC(),
1809 IN("abs_lines_per_species"),
1810 GIN("QI", "parameter_name", "change", "relative"),
1811 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1812 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1813 GIN_DESC("Information to match the level.",
1814 "Name of parameter to be replaced",
1815 "Value with which to change matching level's value",
1816 "Flag for relative change (0 is absolute change)")));
1817
1818 md_data_raw.push_back(create_mdrecord(
1819 NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLevels"),
1820 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLevel*\n"),
1821 AUTHORS("Richard Larsson"),
1822 OUT("abs_lines_per_species"),
1823 GOUT(),
1824 GOUT_TYPE(),
1825 GOUT_DESC(),
1826 IN("abs_lines_per_species"),
1827 GIN("QI", "parameter_name", "change", "relative"),
1828 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector", "Index"),
1829 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1830 GIN_DESC("Information to match the level.",
1831 "Name of parameter to be replaced",
1832 "Value with which to change matching level's value",
1833 "Flag for relative change (0 is absolute change)")));
1834
1835 md_data_raw.push_back(create_mdrecord(
1836 NAME("abs_linesBaseParameterMatchingLevel"),
1838 "Set parameter of all levels in *abs_lines* that match with *QuantumIdentifier*.\n"
1839 "Only works for these parameters:\n"
1840 "parameter_name = \"Statistical Weight\"\n"
1841 "parameter_name = \"Zeeman Coefficient\"\n"),
1842 AUTHORS("Richard Larsson"),
1843 OUT("abs_lines"),
1844 GOUT(),
1845 GOUT_TYPE(),
1846 GOUT_DESC(),
1847 IN("abs_lines"),
1848 GIN("QI", "parameter_name", "change"),
1849 GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1851 GIN_DESC("Information to match the level.",
1852 "Name of parameter to be replaced",
1853 "Value with which to set matching level's value")));
1854
1855 md_data_raw.push_back(create_mdrecord(
1856 NAME("abs_linesBaseParameterMatchingLevels"),
1857 DESCRIPTION("See *abs_linesBaseParameterMatchingLevel*\n"),
1858 AUTHORS("Richard Larsson"),
1859 OUT("abs_lines"),
1860 GOUT(),
1861 GOUT_TYPE(),
1862 GOUT_DESC(),
1863 IN("abs_lines"),
1864 GIN("QI", "parameter_name", "change"),
1865 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1867 GIN_DESC("Information to match the level.",
1868 "Name of parameter to be replaced",
1869 "Value with which to set matching level's value")));
1870
1871 md_data_raw.push_back(create_mdrecord(
1872 NAME("abs_lines_per_speciesBaseParameterMatchingLevel"),
1873 DESCRIPTION("See *abs_linesBaseParameterMatchingLevel*\n"),
1874 AUTHORS("Richard Larsson"),
1875 OUT("abs_lines_per_species"),
1876 GOUT(),
1877 GOUT_TYPE(),
1878 GOUT_DESC(),
1879 IN("abs_lines_per_species"),
1880 GIN("QI", "parameter_name", "change"),
1881 GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1883 GIN_DESC("Information to match the level.",
1884 "Name of parameter to be replaced",
1885 "Value with which to set matching level's value")));
1886
1887 md_data_raw.push_back(create_mdrecord(
1888 NAME("abs_lines_per_speciesBaseParameterMatchingLevels"),
1889 DESCRIPTION("See *abs_linesBaseParameterMatchingLevel*\n"),
1890 AUTHORS("Richard Larsson"),
1891 OUT("abs_lines_per_species"),
1892 GOUT(),
1893 GOUT_TYPE(),
1894 GOUT_DESC(),
1895 IN("abs_lines_per_species"),
1896 GIN("QI", "parameter_name", "change"),
1897 GIN_TYPE("ArrayOfQuantumIdentifier", "String", "Vector"),
1899 GIN_DESC("Information to match the level.",
1900 "Name of parameter to be replaced",
1901 "Value with which to set matching level's value")));
1902
1903 md_data_raw.push_back(create_mdrecord(
1904 NAME("abs_linesChangeBaseParameterForMatchingLines"),
1906 "Change parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1907 "Only works for these parameters:\n"
1908 "parameter_name = \"Central Frequency\"\n"
1909 "parameter_name = \"Line Strength\"\n"
1910 "parameter_name = \"Lower State Energy\"\n"
1911 "parameter_name = \"Einstein Coefficient\"\n"
1912 "parameter_name = \"Lower Statistical Weight\"\n"
1913 "parameter_name = \"Upper Statistical Weight\"\n"
1914 "parameter_name = \"Lower Zeeman Coefficient\"\n"
1915 "parameter_name = \"Upper Zeeman Coefficient\"\n"),
1916 AUTHORS("Richard Larsson"),
1917 OUT("abs_lines"),
1918 GOUT(),
1919 GOUT_TYPE(),
1920 GOUT_DESC(),
1921 IN("abs_lines"),
1922 GIN("QI", "parameter_name", "change", "relative"),
1923 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1924 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1925 GIN_DESC("Information to match the line/band.",
1926 "Name of parameter to be replaced",
1927 "Value with which to change matching line's value",
1928 "Flag for relative change (0 is absolute change)")));
1929
1930 md_data_raw.push_back(create_mdrecord(
1931 NAME("abs_lines_per_speciesChangeBaseParameterForMatchingLines"),
1932 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines*\n"),
1933 AUTHORS("Richard Larsson"),
1934 OUT("abs_lines_per_species"),
1935 GOUT(),
1936 GOUT_TYPE(),
1937 GOUT_DESC(),
1938 IN("abs_lines_per_species"),
1939 GIN("QI", "parameter_name", "change", "relative"),
1940 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index"),
1941 GIN_DEFAULT(NODEF, NODEF, NODEF, "0"),
1942 GIN_DESC("Information to match the line/band.",
1943 "Name of parameter to be replaced",
1944 "Value with which to change matching line's value",
1945 "Flag for relative change (0 is absolute change)")));
1946
1947 md_data_raw.push_back(create_mdrecord(
1948 NAME("abs_lines_per_speciesChangeBaseParameterForSpecies"),
1949 DESCRIPTION("See *abs_linesChangeBaseParameterForMatchingLines* but for single species\n"),
1950 AUTHORS("Richard Larsson"),
1951 OUT("abs_lines_per_species"),
1952 GOUT(),
1953 GOUT_TYPE(),
1954 GOUT_DESC(),
1955 IN("abs_lines_per_species", "abs_species"),
1956 GIN("QI", "parameter_name", "change", "relative", "species_tag"),
1957 GIN_TYPE("QuantumIdentifier", "String", "Numeric", "Index", "String"),
1959 GIN_DESC("Information to match the line/band.",
1960 "Name of parameter to be replaced",
1961 "Value with which to change matching line's value",
1962 "Flag for relative change (0 is absolute change)",
1963 "The species tag from *abs_species* to change")));
1964
1965 md_data_raw.push_back(create_mdrecord(
1966 NAME("abs_linesBaseParameterMatchingLines"),
1968 "Set parameter of all lines in *abs_lines* that match with *QuantumIdentifier*.\n"
1969 "Only works for these parameters:\n"
1970 "parameter_name = \"Central Frequency\"\n"
1971 "parameter_name = \"Line Strength\"\n"
1972 "parameter_name = \"Lower State Energy\"\n"
1973 "parameter_name = \"Einstein Coefficient\"\n"
1974 "parameter_name = \"Lower Statistical Weight\"\n"
1975 "parameter_name = \"Upper Statistical Weight\"\n"
1976 "parameter_name = \"Lower Zeeman Coefficient\"\n"
1977 "parameter_name = \"Upper Zeeman Coefficient\"\n"),
1978 AUTHORS("Richard Larsson"),
1979 OUT("abs_lines"),
1980 GOUT(),
1981 GOUT_TYPE(),
1982 GOUT_DESC(),
1983 IN("abs_lines"),
1984 GIN("QI", "parameter_name", "change"),
1985 GIN_TYPE("QuantumIdentifier", "String", "Numeric"),
1987 GIN_DESC("Information to match the line/band.",
1988 "Name of parameter to be replaced",
1989 "Value with which to change matching line's value")));
1990
1991 md_data_raw.push_back(create_mdrecord(
1992 NAME("abs_linesLineShapeModelParametersMatchingLines"),
1993 DESCRIPTION("Sets line shape model data parameter in matching lines.\n"
1994 "\n"
1995 "The matching is done so that QI must be in the line identifier\n"
1996 "\n"
1997 "Acceptable parameter(s) are:\n"
1998 "\t\"G0\"\n"
1999 "\t\"D0\"\n"
2000 "\t\"G2\"\n"
2001 "\t\"D2\"\n"
2002 "\t\"FVC\"\n"
2003 "\t\"ETA\"\n"
2004 "\t\"Y\"\n"
2005 "\t\"G\"\n"
2006 "\t\"DV\"\n"
2007 "\n"
2008 "Acceptable temperaturemodel(s) are:\n"
2009 "\tNone,\n"
2010 "\t\"T0\"\n"
2011 "\t\"T1\"\n"
2012 "\t\"T2\"\n"
2013 "\t\"T3\"\n"
2014 "\t\"T4\"\n"
2015 "\t\"T5\"\n"
2016 "\t\"LM_AER\"\n"
2017 "\t\"DPL\"\n"
2018 "\n"
2019 "Acceptable species are:\n"
2020 "\t\"AIR\" (so long as it is the broadening species list)\n"
2021 "\t\"SELF\" (so long as it is the broadening species list)\n"
2022 "\tAny species in the line broadening species\n"
2023 "\n"
2024 "See the user guide for the meanings of all of these keywords\n"
2025 ),
2026 AUTHORS("Richard Larsson"),
2027 OUT("abs_lines"),
2028 GOUT(),
2029 GOUT_TYPE(),
2030 GOUT_DESC(),
2031 IN("abs_lines"),
2032 GIN("QI", "parameter", "species", "temperaturemodel", "new_values"),
2033 GIN_TYPE("QuantumIdentifier",
2034 "String",
2035 "String",
2036 "String",
2037 "Vector"),
2039 GIN_DESC("Information to match the line.",
2040 "Name of parameter to be replaced",
2041 "Species of parameter to be changed",
2042 "Temperature model for the new values",
2043 "Sets the values found")));
2044
2045 md_data_raw.push_back(create_mdrecord(
2046 NAME("abs_lines_per_speciesLineShapeModelParametersMatchingLines"),
2047 DESCRIPTION("See *abs_linesLineShapeModelParametersMatchingLines*\n"
2048 ),
2049 AUTHORS("Richard Larsson"),
2050 OUT("abs_lines_per_species"),
2051 GOUT(),
2052 GOUT_TYPE(),
2053 GOUT_DESC(),
2054 IN("abs_lines_per_species"),
2055 GIN("QI", "parameter", "species", "temperaturemodel", "new_values"),
2056 GIN_TYPE("QuantumIdentifier",
2057 "String",
2058 "String",
2059 "String",
2060 "Vector"),
2062 GIN_DESC("Information to match the line.",
2063 "Name of parameter to be replaced",
2064 "Species of parameter to be changed",
2065 "Temperature model for the new values",
2066 "Sets the values found")));
2067
2068 md_data_raw.push_back(create_mdrecord(
2069 NAME("abs_linesZeemanCoefficients"),
2070 DESCRIPTION("Sets the Zeeman coefficients of the lines by user input\n"
2071 "\n"
2072 "The matching is permissive, all in qid must just match. If there\n"
2073 "are multiple matches, the last match rules\n"),
2074 AUTHORS("Richard Larsson"),
2075 OUT("abs_lines"),
2076 GOUT(),
2077 GOUT_TYPE(),
2078 GOUT_DESC(),
2079 IN("abs_lines"),
2080 GIN("qid", "gs"),
2081 GIN_TYPE("ArrayOfQuantumIdentifier", "Vector"),
2083 GIN_DESC("Information to match an energy level of a/many lines.",
2084 "Corresponding value to set as Zeeman coefficient")));
2085
2086 md_data_raw.push_back(create_mdrecord(
2087 NAME("abs_lines_per_speciesZeemanCoefficients"),
2088 DESCRIPTION("See *abs_linesZeemanCoefficients*\n"),
2089 AUTHORS("Richard Larsson"),
2090 OUT("abs_lines_per_species"),
2091 GOUT(),
2092 GOUT_TYPE(),
2093 GOUT_DESC(),
2094 IN("abs_lines_per_species"),
2095 GIN("qid", "gs"),
2096 GIN_TYPE("ArrayOfQuantumIdentifier", "Vector"),
2098 GIN_DESC("Information to match an energy level of a/many lines.",
2099 "Corresponding value to set as Zeeman coefficient")));
2100
2101 md_data_raw.push_back(create_mdrecord(
2102 NAME("abs_linesCompact"),
2103 DESCRIPTION("Removes lines that are unimportant because of their\n"
2104 "cutoff frequency range\n"),
2105 AUTHORS("Stefan Buehler", "Richard Larsson"),
2106 OUT("abs_lines"),
2107 GOUT(),
2108 GOUT_TYPE(),
2109 GOUT_DESC(),
2110 IN("abs_lines", "f_grid"),
2111 GIN(),
2112 GIN_TYPE(),
2113 GIN_DEFAULT(),
2114 GIN_DESC()));
2115
2116 md_data_raw.push_back(create_mdrecord(
2117 NAME("abs_lines_per_speciesCompact"),
2118 DESCRIPTION("See *abs_linesCompact*\n"),
2119 AUTHORS("Stefan Buehler", "Richard Larsson"),
2120 OUT("abs_lines_per_species"),
2121 GOUT(),
2122 GOUT_TYPE(),
2123 GOUT_DESC(),
2124 IN("abs_lines_per_species", "f_grid"),
2125 GIN(),
2126 GIN_TYPE(),
2127 GIN_DEFAULT(),
2128 GIN_DESC()));
2129
2130 md_data_raw.push_back(create_mdrecord(
2131 NAME("abs_lines_per_speciesCreateFromLines"),
2133 "Split lines up into the different species.\n"
2134 "\n"
2135 "The order of the splitting will match the outer layer of *abs_species*\n"
2136 "There will be no respect for the internal layer of *abs_species*\n"),
2137 AUTHORS("Stefan Buehler"),
2138 OUT("abs_lines_per_species"),
2139 GOUT(),
2140 GOUT_TYPE(),
2141 GOUT_DESC(),
2142 IN("abs_lines", "abs_species"),
2143 GIN(),
2144 GIN_TYPE(),
2145 GIN_DEFAULT(),
2146 GIN_DESC()));
2147
2148 md_data_raw.push_back(create_mdrecord(
2149 NAME("abs_linesTurnOffLineMixing"),
2150 DESCRIPTION("Sets all line mixing parameters to emtpy.\n"),
2151 AUTHORS("Richard Larsson"),
2152 OUT("abs_lines"),
2153 GOUT(),
2154 GOUT_TYPE(),
2155 GOUT_DESC(),
2156 IN(),
2157 GIN(),
2158 GIN_TYPE(),
2159 GIN_DEFAULT(),
2160 GIN_DESC()));
2161
2162 md_data_raw.push_back(create_mdrecord(
2163 NAME("abs_lines_per_speciesTurnOffLineMixing"),
2164 DESCRIPTION("Sets all line mixing parameters to emtpy.\n"),
2165 AUTHORS("Richard Larsson"),
2166 OUT("abs_lines_per_species"),
2167 GOUT(),
2168 GOUT_TYPE(),
2169 GOUT_DESC(),
2170 IN(),
2171 GIN(),
2172 GIN_TYPE(),
2173 GIN_DEFAULT(),
2174 GIN_DESC()));
2175
2176 md_data_raw.push_back(create_mdrecord(
2177 NAME("abs_lookupAdapt"),
2179 "Adapts a gas absorption lookup table to the current calculation.\n"
2180 "\n"
2181 "The lookup table can contain more species and more frequencies than\n"
2182 "are needed for the current calculation. This method cuts down the\n"
2183 "table in memory, so that it contains just what is needed. Also, the\n"
2184 "species in the table are brought in the same order as the species in\n"
2185 "the current calculation.\n"
2186 "\n"
2187 "Of course, the method also performs quite a lot of checks on the\n"
2188 "table. If something is not ok, a runtime error is thrown.\n"
2189 "\n"
2190 "The method sets a flag *abs_lookup_is_adapted* to indicate that the\n"
2191 "table has been checked and that it is ok. Never set this by hand,\n"
2192 "always use this method to set it!\n"),
2193 AUTHORS("Stefan Buehler"),
2194 OUT("abs_lookup", "abs_lookup_is_adapted"),
2195 GOUT(),
2196 GOUT_TYPE(),
2197 GOUT_DESC(),
2198 IN("abs_lookup", "abs_species", "f_grid"),
2199 GIN(),
2200 GIN_TYPE(),
2201 GIN_DEFAULT(),
2202 GIN_DESC()));
2203
2204 md_data_raw.push_back(create_mdrecord(
2205 NAME("abs_lookupCalc"),
2207 "Creates a gas absorption lookup table.\n"
2208 "\n"
2209 "The lookup table stores absorption cross-sections as a function of\n"
2210 "pressure. Additionally, absorption can be stored as a function of\n"
2211 "temperature for temperature perturbations from a reference\n"
2212 "profile.\n"
2213 "\n"
2214 "Additionally, absorption can be stored as a function of water vapor\n"
2215 "VMR perturbations from a reference profile. The variable *abs_nls*\n"
2216 "specifies, for which species water vapor perturbations should be\n"
2217 "generated.\n"
2218 "\n"
2219 "Note, that the absorbing gas can be any gas, but the perturbing gas is\n"
2220 "always H2O.\n"),
2221 AUTHORS("Stefan Buehler"),
2222 OUT("abs_lookup", "abs_lookup_is_adapted"),
2223 GOUT(),
2224 GOUT_TYPE(),
2225 GOUT_DESC(),
2226 IN("abs_species",
2227 "abs_nls",
2228 "f_grid",
2229 "abs_p",
2230 "abs_vmrs",
2231 "abs_t",
2232 "abs_t_pert",
2233 "abs_nls_pert",
2234 "propmat_clearsky_agenda"),
2235 GIN("lowest_vmr"),
2236 GIN_TYPE("Numeric"),
2237 GIN_DEFAULT("1e-9"),
2238 GIN_DESC("Lowest possible VMR to compute absorption at")));
2239
2240 md_data_raw.push_back(create_mdrecord(
2241 NAME("abs_lookupInit"),
2243 "Creates an empty gas absorption lookup table.\n"
2244 "\n"
2245 "This is mainly there to help developers. For example, you can write\n"
2246 "the empty table to an XML file, to see the file format.\n"),
2247 AUTHORS("Stefan Buehler"),
2248 OUT("abs_lookup"),
2249 GOUT(),
2250 GOUT_TYPE(),
2251 GOUT_DESC(),
2252 IN(),
2253 GIN(),
2254 GIN_TYPE(),
2255 GIN_DEFAULT(),
2256 GIN_DESC()));
2257
2258 md_data_raw.push_back(create_mdrecord(
2259 NAME("abs_lookupSetup"),
2261 "Set up input parameters for abs_lookupCalc.\n"
2262 "\n"
2263 "More information can be found in the documentation for method\n"
2264 "*abs_lookupSetupBatch*\n"
2265 "\n"
2266 "Max and min values of H2O and temperature are adjusted to allow for\n"
2267 "numerical perturbations in Jacobian calculation.\n"
2268 "\n"
2269 "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
2270 "are used to make sure that there are enough points in *abs_nls_pert*\n"
2271 "and *abs_t_pert* for the chosen interpolation order.\n"
2272 "\n"
2273 "Note: For homogeneous 1D cases, it can be advantageous to calculate\n"
2274 "*abs_lookup* from the 1D atmosphere, and to expand the atmosphere\n"
2275 "to 3D only after that. This particularly if nonlinear species\n"
2276 "(i.e., H2O) are involved."
2277 "\n"
2278 "See also:\n"
2279 " *abs_lookupSetupBatch*\n"),
2280 AUTHORS("Stefan Buehler"),
2281 OUT("abs_p",
2282 "abs_t",
2283 "abs_t_pert",
2284 "abs_vmrs",
2285 "abs_nls",
2286 "abs_nls_pert"),
2287 GOUT(),
2288 GOUT_TYPE(),
2289 GOUT_DESC(),
2290 IN("atmosphere_dim",
2291 "p_grid",
2292 // "lat_grid",
2293 // "lon_grid",
2294 "t_field",
2295 "vmr_field",
2296 "atmfields_checked",
2297 "abs_species",
2298 "abs_p_interp_order",
2299 "abs_t_interp_order",
2300 "abs_nls_interp_order"),
2301 GIN("p_step", "t_step", "h2o_step"),
2302 GIN_TYPE("Numeric", "Numeric", "Numeric"),
2303 GIN_DEFAULT("0.05", "100", "100"),
2304 GIN_DESC(/* p_step */
2305 "Maximum step in log10(p[Pa]). If the pressure grid is "
2306 "coarser than this, additional points are added until each "
2307 "log step is smaller than this.",
2308 /* t_step */
2309 "The temperature variation grid step in Kelvin, "
2310 "for a 2D or 3D atmosphere. For a 1D atmosphere this "
2311 "parameter is not used.",
2312 /* h2o_step */
2313 "The H2O variation grid step [fractional], if "
2314 "H2O variations are done (which is determined automatically, "
2315 "based on abs_species and the atmospheric dimension). For a "
2316 "1D atmosphere this parameter is not used.")));
2317
2318 md_data_raw.push_back(create_mdrecord(
2319 NAME("abs_lookupSetupBatch"),
2321 "Set up input parameters for abs_lookupCalc for batch calculations.\n"
2322 "\n"
2323 "This method performs a similar task as *abs_lookupSetup*, with the\n"
2324 "difference that the lookup table setup is not for a single\n"
2325 "atmospheric state, but for a whole batch of them, stored in\n"
2326 "*batch_atm_fields_compact*.\n"
2327 "\n"
2328 "The method checks *abs_species* to decide which species require\n"
2329 "nonlinear treatment in the lookup table.\n"
2330 "\n"
2331 "The method also checks which range of pressures, temperatures, and\n"
2332 "VMRs occurs, and sets *abs_p*, *abs_t*, *abs_t_pert*, and *abs_vmrs*\n"
2333 "accordingly.\n"
2334 "\n"
2335 "If nonlinear species are present, *abs_nls* and *abs_nls_pert* are also\n"
2336 "generated.\n"
2337 "\n"
2338 "Max and min values of H2O and temperature are adjusted to allow for\n"
2339 "numerical perturbations in Jacobian calculation.\n"
2340 "\n"
2341 "The input variables *abs_nls_interp_order* and *abs_t_interp_order*\n"
2342 "are used to make sure that there are enough points in *abs_nls_pert*\n"
2343 "and *abs_t_pert* for the chosen interpolation order.\n"
2344 "\n"
2345 "The method checks each given field using *atmfields_checkedCalc*.\n"
2346 "If a field does not pass the check, a run-time error is thrown.\n"
2347 "To prevent this, the parameter *robust* can be set to one: Invalid \n"
2348 "atmospheres are skipped, but the run continues. This matches the \n"
2349 "robust behaviour of *ybatchCalc*.\n"
2350 "\n"
2351 "See also:\n"
2352 " *abs_lookupSetup*\n"),
2353 AUTHORS("Stefan Buehler"),
2354 OUT("abs_p",
2355 "abs_t",
2356 "abs_t_pert",
2357 "abs_vmrs",
2358 "abs_nls",
2359 "abs_nls_pert"),
2360 GOUT(),
2361 GOUT_TYPE(),
2362 GOUT_DESC(),
2363 IN("abs_species",
2364 "batch_atm_fields_compact",
2365 "abs_p_interp_order",
2366 "abs_t_interp_order",
2367 "abs_nls_interp_order",
2368 "atmosphere_dim"),
2369 GIN("p_step",
2370 "t_step",
2371 "h2o_step",
2372 "extremes",
2373 "robust",
2374 "check_gridnames"),
2375 GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Index", "Index"),
2376 GIN_DEFAULT("0.05", "20", "100", "[]", "0", "0"),
2377 GIN_DESC(/* p_step */
2378 "Grid step in log10(p[Pa]) (base 10 logarithm).",
2379 /* t_step */
2380 "The temperature variation grid step in Kelvin. The true "
2381 "step can become finer than this, if required by the "
2382 "interpolation order.",
2383 /* h2o_step */
2384 "The H2O variation grid step [fractional], if H2O variations "
2385 "are done (which is determined automatically, based on "
2386 "abs_species and the atmospheric dimension). As for T, the true "
2387 "step can turn out finer if required by the interpolation order.",
2388 /* extremes */
2389 "You can give here explicit extreme values to add to "
2390 "abs_t_pert and abs_nls_pert. The order is [t_pert_min, "
2391 "t_pert_max, nls_pert_min, nls_pert_max].",
2392 /* robust */
2393 "A flag with value 1 or 0. If set to one, the batch\n"
2394 "setup will continue, even if individual fields are invalid.\n"
2395 "This is consistent with the behaviour of *ybatchCalc*.",
2396 /* check_gridnames */
2397 "A flag with value 1 or 0. If set to one, the gridnames of \n"
2398 " every *atm_fields_compact* are checked.")));
2399
2400 md_data_raw.push_back(create_mdrecord(
2401 NAME("abs_lookupSetupWide"),
2403 "Set up input parameters for abs_lookupCalc for a wide range of\n"
2404 "atmospheric conditions.\n"
2405 "\n"
2406 "This method can be used to set up parameters for a lookup table that\n"
2407 "really covers all reasonable atmospheric conditions.\n"
2408 "\n"
2409 "Reference profiles of T and H2O will be constant, so that the\n"
2410 "different dimensions in the lookup table are actually \"orthogonal\",\n"
2411 "unlike the traditional case where we have pressure dependent reference\n"
2412 "profiles. This makes the table numerically somewhat more robust then\n"
2413 "the traditional ones, and it makes it straightforward to calculate the\n"
2414 "accuracy for the different interpolations with abs_lookupTestAccuracy.\n"
2415 "\n"
2416 "You can give min an max values for the atmospheric conditions. The\n"
2417 "default values are chosen such that they cover the value range over\n"
2418 "the complete Chevallier91L data set, and a bit more. The statistics\n"
2419 "of the Chevallier91L data are:\n"
2420 "\n"
2421 "min(p) / max(p) [Pa]: 1 / 104960\n"
2422 "min(T) / max(T) [K]: 158.21 / 320.39\n"
2423 "min(H2O) / max(H2O) [VMR]: -5.52e-07 / 0.049\n"),
2424 AUTHORS("Stefan Buehler"),
2425 OUT("abs_p",
2426 "abs_t",
2427 "abs_t_pert",
2428 "abs_vmrs",
2429 "abs_nls",
2430 "abs_nls_pert"),
2431 GOUT(),
2432 GOUT_TYPE(),
2433 GOUT_DESC(),
2434 IN("abs_species",
2435 "abs_p_interp_order",
2436 "abs_t_interp_order",
2437 "abs_nls_interp_order"),
2438 GIN("p_min", "p_max", "p_step", "t_min", "t_max", "h2o_min", "h2o_max"),
2439 GIN_TYPE("Numeric",
2440 "Numeric",
2441 "Numeric",
2442 "Numeric",
2443 "Numeric",
2444 "Numeric",
2445 "Numeric"),
2446 GIN_DEFAULT("0.5", "110000", "0.05", "100", "400", "0", "0.05"),
2447 GIN_DESC("Pressure grid minimum [Pa].",
2448 "Pressure grid maximum [Pa].",
2449 "Pressure grid step in log10(p[Pa]) (base 10 logarithm).",
2450 "Temperature grid minimum [K].",
2451 "Temperature grid maximum [K].",
2452 "Humidity grid minimum [fractional].",
2453 "Humidity grid maximum [fractional].")));
2454
2455 md_data_raw.push_back(create_mdrecord(
2456 NAME("abs_nlteFromRaw"),
2457 DESCRIPTION("Sets NLTE values manually\n"
2458 "\n"
2459 "Touch\n"),
2460 AUTHORS("Richard Larsson"),
2461 OUT("abs_nlte"),
2462 GOUT(),
2463 GOUT_TYPE(),
2464 GOUT_DESC(),
2465 IN("nlte_level_identifiers",
2466 "nlte_vibrational_energies"),
2467 GIN("data"),
2468 GIN_TYPE("Matrix"),
2470 GIN_DESC("Vibrational data [nlevels, np]")));
2471
2472 md_data_raw.push_back(create_mdrecord(
2473 NAME("abs_speciesAdd"),
2475 "Adds species tag groups to the list of absorption species.\n"
2476 "\n"
2477 "This WSM is similar to *abs_speciesSet*, the only difference is that\n"
2478 "this method appends species to an existing list of absorption species instead\n"
2479 "of creating the whole list.\n"
2480 "\n"
2481 "See *abs_speciesSet* for details on how tags are defined and examples of\n"
2482 "how to input them in the control file.\n"),
2483 AUTHORS("Stefan Buehler"),
2484 OUT("abs_species",
2485 "propmat_clearsky_agenda_checked"),
2486 GOUT(),
2487 GOUT_TYPE(),
2488 GOUT_DESC(),
2489 IN("abs_species"),
2490 GIN("species"),
2491 GIN_TYPE("ArrayOfString"),
2493 GIN_DESC("Specify one String for each tag group that you want to\n"
2494 "add. Inside the String, separate the tags by commas\n"
2495 "(plus optional blanks).\n")));
2496
2497 md_data_raw.push_back(create_mdrecord(
2498 NAME("abs_speciesAdd2"),
2500 "Adds a species tag group to the list of absorption species and\n"
2501 "jacobian quantities.\n"
2502 "\n"
2503 "The method is basically a combined call of *abs_speciesAdd* and\n"
2504 "*jacobianAddAbsSpecies*. In this way it is not needed to specify a\n"
2505 "tag group in two different places.\n"
2506 "\n"
2507 "Arguments exactly as for *jacobianAddAbsSpecies*. Note that this\n"
2508 "method only handles a single tag group, in contrast to\n"
2509 "*abs_speciesAdd*.\n"),
2510 AUTHORS("Patrick Eriksson"),
2511 OUT("abs_species",
2512 "jacobian_quantities",
2513 "jacobian_agenda",
2514 "propmat_clearsky_agenda_checked"),
2515 GOUT(),
2516 GOUT_TYPE(),
2517 GOUT_DESC(),
2518 IN("abs_species", "atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
2519 GIN("gin1", "gin2", "gin3", "species", "unit"),
2520 GIN_TYPE("Vector", "Vector", "Vector", "String", "String"),
2521 GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, "vmr"),
2522 GIN_DESC("Pressure retrieval grid.",
2523 "Latitude retrieval grid.",
2524 "Longitude retreival grid.",
2525 "The species tag of the retrieval quantity.",
2526 "Retrieval unit. See above."),
2527 SETMETHOD(false),
2528 AGENDAMETHOD(false),
2529 USES_TEMPLATES(false),
2530 PASSWORKSPACE(true)));
2531
2532 md_data_raw.push_back(create_mdrecord(
2533 NAME("abs_speciesDefineAllInScenario"),
2535 "Define one tag group for each species known to ARTS and included in an\n"
2536 "atmospheric scenario.\n"
2537 "\n"
2538 "You can use this as an alternative to *abs_speciesSet* if you want to make an\n"
2539 "absorption calculation that is as complete as possible. The method\n"
2540 "goes through all defined species and tries to open the VMR file. If\n"
2541 "this works the tag is included, otherwise it is skipped.\n"),
2542 AUTHORS("Stefan Buehler"),
2543 OUT("abs_species",
2544 "propmat_clearsky_agenda_checked"),
2545 GOUT(),
2546 GOUT_TYPE(),
2547 GOUT_DESC(),
2548 IN(),
2549 GIN("basename"),
2550 GIN_TYPE("String"),
2552 GIN_DESC(
2553 "The name and path of a particular atmospheric scenario.\n"
2554 "For example: /pool/lookup2/arts-data/atmosphere/fascod/tropical")));
2555
2556 md_data_raw.push_back(create_mdrecord(
2557 NAME("abs_speciesDefineAll"),
2558 DESCRIPTION("Sets *abs_species*[i][0] to all species in ARTS\n"),
2559 AUTHORS("Richard Larsson"),
2560 OUT("abs_species",
2561 "propmat_clearsky_agenda_checked"),
2562 GOUT(),
2563 GOUT_TYPE(),
2564 GOUT_DESC(),
2565 IN(),
2566 GIN(),
2567 GIN_TYPE(),
2568 GIN_DEFAULT(),
2569 GIN_DESC()));
2570
2571 md_data_raw.push_back(
2572 create_mdrecord(NAME("abs_speciesInit"),
2573 DESCRIPTION("Sets *abs_species* to be empty.\n"),
2574 AUTHORS("Stefan Buehler"),
2575 OUT("abs_species"),
2576 GOUT(),
2577 GOUT_TYPE(),
2578 GOUT_DESC(),
2579 IN(),
2580 GIN(),
2581 GIN_TYPE(),
2582 GIN_DEFAULT(),
2583 GIN_DESC()));
2584
2585 md_data_raw.push_back(create_mdrecord(
2586 NAME("abs_speciesSet"),
2588 "Set up a list of absorption species tag groups.\n"
2589 "\n"
2590 "Workspace variables like *abs_species* contain several tag\n"
2591 "groups. Each tag group contains one or more tags. This method converts\n"
2592 "descriptions of tag groups given in the keyword to the ARTS internal\n"
2593 "representation (an *ArrayOfArrayOfSpeciesTag*). A tag group selects\n"
2594 "spectral features which belong to the same species.\n"
2595 "\n"
2596 "A tag is defined in terms of the name of the species, isotopologue, and a\n"
2597 "range of frequencies. Species are named after the standard chemical\n"
2598 "names, e.g., \"O3\". Isotopologues are given by the last digit of the atomic\n"
2599 "weight, i.g., \"O3-668\" for the asymmetric ozone molecule including an\n"
2600 "oxygen 18 atom. Groups of transitions are specified by giving a lower\n"
2601 "and upper limit of a frequency range, e.g., \"O3-666-500e9-501e9\".\n"
2602 "\n"
2603 "To turn on Zeeman calculation for a species, \"-Z\" may be appended\n"
2604 "to its name: \"O2-Z\" or \"O2-Z-66\"\n"
2605 "\n"
2606 "The symbol \"*\" acts as a wild card. Furthermore, frequency range or\n"
2607 "frequency range and isotopologue may be omitted.\n"
2608 "\n"
2609 "Finally, instead of the isotopologue the special letter \"nl\" may be given,\n"
2610 "e.g., \"H2O-nl\". This means that no absorption at all is associated\n"
2611 "with this tag. (It is not quite clear if this feature is useful for\n"
2612 "anything right now.)\n"
2613 "\n"
2614 "Example:\n"
2615 "\n"
2616 " species = [ \"O3-666-500e9-501e9, O3-686\",\n"
2617 " \"O3\",\n"
2618 " \"H2O-PWR98\" ]\n"
2619 "\n"
2620 " The first tag group selects all O3-666 lines between 500 and\n"
2621 " 501 GHz plus all O3-686 lines. \n"
2622 "\n"
2623 " The second tag group selects all remaining O3 transitions.\n"
2624 "\n"
2625 " The third tag group selects H2O, with one of the complete\n"
2626 " absorption models (Rosenkranz 98). No spectrocopic line catalogue\n"
2627 " data will be used for that third tag group. For more available full\n"
2628 " absorption models see *propmat_clearskyAddPredefined*\n"
2629 "\n"
2630 " Note that order of tag groups in the species list matters. In our\n"
2631 " example, changing the order of the first two tag group will give\n"
2632 " different results: as \"O3\" already selects all O3 transitions,\n"
2633 " no lines will remain to be selected by the\n"
2634 " \"O3-666-500e9-501e9, O3-686\" tag.\n"
2635 "\n"
2636 "For CIA species the tag consists of the two involved species and\n"
2637 "a dataset index. CIA species can be defined for multiple regions\n"
2638 "The dataset index determines which region to use from the corresponding\n"
2639 "CIARecord in *abs_cia_data*.\n"
2640 "\n"
2641 "Example\n"
2642 "\n"
2643 "species = [ \"N2-CIA-N2-0, N2-CIA-N2-1\" ]\n"
2644 "\n"
2645 "For Hitran cross section species the tag consists of the species and\n"
2646 "the tagtype XFIT, e.g. CFC11-XFIT. The data for the species must be\n"
2647 "available in the *xsec_fit_data* variable."
2648 "\n"
2649 "*propmat_clearsky_agenda_checked* is set to be false.\n"),
2650 AUTHORS("Stefan Buehler"),
2651 OUT("abs_species",
2652 "propmat_clearsky_agenda_checked"),
2653 GOUT(),
2654 GOUT_TYPE(),
2655 GOUT_DESC(),
2656 IN(),
2657 GIN("species"),
2658 GIN_TYPE("ArrayOfString"),
2660 GIN_DESC("Specify one String for each tag group that you want to\n"
2661 "create. Inside the String, separate the tags by commas\n"
2662 "(plus optional blanks).\n")));
2663
2664 md_data_raw.push_back(create_mdrecord(
2665 NAME("abs_vecAddGas"),
2667 "Add gas absorption to first element of absorption vector.\n"
2668 "\n"
2669 "The task of this method is to sum up the gas absorption of the\n"
2670 "different gas species and add the result to the first element of the\n"
2671 "absorption vector.\n"),
2672 AUTHORS("Stefan Buehler"),
2673 OUT("abs_vec"),
2674 GOUT(),
2675 GOUT_TYPE(),
2676 GOUT_DESC(),
2677 IN("abs_vec", "propmat_clearsky"),
2678 GIN(),
2679 GIN_TYPE(),
2680 GIN_DEFAULT(),
2681 GIN_DESC()));
2682
2683 md_data_raw.push_back(create_mdrecord(
2684 NAME("propmat_clearsky_agendaGUI"),
2685 DESCRIPTION(R"--(Opens a GUI for running the propagation matrix agenda
2686
2687Note that this is not thread-safe and should be executed on the main workspace
2688
2689The values of all non-control flow are automatically loaded from the workspace
2690if they are defined. Otherwise some values are just selected
2691)--"
2692 ),
2693 AUTHORS("Richard Larsson"),
2694 OUT(),
2695 GOUT(),
2696 GOUT_TYPE(),
2697 GOUT_DESC(),
2698 IN("propmat_clearsky_agenda", "abs_species"),
2699 GIN("load"),
2700 GIN_TYPE("Index"),
2701 GIN_DEFAULT("1"),
2702 GIN_DESC("Load non-logical variables from workspace if true")));
2703
2704 md_data_raw.push_back(create_mdrecord(
2705 NAME("predefined_model_dataInit"),
2706 DESCRIPTION(R"--(Initialize the predefined model data
2707)--"),
2708 AUTHORS("Richard Larsson"),
2709 OUT("predefined_model_data"),
2710 GOUT(),
2711 GOUT_TYPE(),
2712 GOUT_DESC(),
2713 IN(),
2714 GIN(),
2715 GIN_TYPE(),
2716 GIN_DEFAULT(),
2717 GIN_DESC()));
2718
2719 md_data_raw.push_back(create_mdrecord(
2720 NAME("predefined_model_dataAddWaterMTCKD400"),
2721 DESCRIPTION(R"--(Sets the data for MT CKD 4.0 Water model
2722
2723Note that the vectors must have the same length, and that wavenumbers must be growing
2724at a constant rate. The minimum length is 4.
2725
2726Note also that as this is predefined model data, the units of the values of the vectors
2727must be as described by each vector.
2728)--"),
2729 AUTHORS("Richard Larsson"), OUT("predefined_model_data"), GOUT(),
2730 GOUT_TYPE(), GOUT_DESC(), IN("predefined_model_data"),
2731 GIN("ref_temp", "ref_press", "ref_h2o_vmr", "self_absco_ref",
2732 "for_absco_ref", "wavenumbers", "self_texp"),
2733 GIN_TYPE("Numeric", "Numeric", "Numeric", "Vector", "Vector", "Vector",
2734 "Vector"),
2736 GIN_DESC("Reference temperature", "Reference pressure",
2737 "Reference volume mixing ratio of water",
2738 "Self absorption [1/(cm-1 molecules/cm^2]",
2739 "Foreign absorption [1/(cm-1 molecules/cm^2)]",
2740 "Wavenumbers [cm-1]", "Self temperature exponent [-]")));
2741
2742 md_data_raw.push_back(create_mdrecord(
2743 NAME("propmat_clearskyAddPredefined"),
2744 DESCRIPTION(R"--(Adds all of the predefined models in *abs_species* to the propmat_clearsky
2745
2746Only supports temperature and wind speed derivatives
2747
2748Available models:
2749
2750 O2-MPM2020:
2751 60 GHz and 118 GHz lines only (no continua, no higher Hz line centers)
2752
2753 Dmitriy S. Makarov, Mikhail Yu. Tretyakov, Philip W. Rosenkranz, JQSRT 243, 2020, Revision of the
2754 60-GHz atmospheric oxygen absorption band models for practical use,
2755 https://doi.org/10.1016/j.jqsrt.2019.106798
2756
2757 H2O-ForeignContCKDMT350:
2758 Foreign continua. Expects H2O line center cutoff at 25 cm-1
2759
2760 CKD_MTv3.50 H2O foreign continuum from the FORTRAN77 code written by Atmospheric and Environmental Research Inc. (AER),
2761 Radiation and Climate Group 131 Hartwell Avenue Lexington, MA 02421, USA
2762 http://www.rtweb.aer.com/continuum_frame.html
2763
2764 H2O-SelfContCKDMT350:
2765 Self continua. Expects H2O line center cutoff at 25 cm-1
2766
2767 CKD_MTv3.50 H2O self continuum from the FORTRAN77 code written by Atmospheric and Environmental Research Inc. (AER),
2768 Radiation and Climate Group 131 Hartwell Avenue Lexington, MA 02421, USA
2769 http://www.rtweb.aer.com/continuum_frame.html
2770
2771 H2O-SelfContCKDMT400:
2772 Self continuum for water. General reference: Mlawer et al. (2012), doi:10.1098/rsta.2011.0295
2773
2774 Our code is reimplemented based on original Fortran90 code that is/was/will-be-made available via hitran.org
2775
2776 Note that this model comes with the copyright statement [1].
2777
2778 Note also that this model requires *predefined_model_data* to contain relevant data set either using
2779 *predefined_model_dataAddWaterMTCKD400* or via some file reading routine.
2780
2781 H2O-ForeignContCKDMT400:
2782 Foreign continuum for water. General reference: Mlawer et al. (2012), doi:10.1098/rsta.2011.0295
2783
2784 Our code is reimplemented based on original Fortran90 code that is/was/will-be-made available via hitran.org
2785
2786 Note that this model comes with the copyright statement [1].
2787
2788 Note also that this model requires *predefined_model_data* to contain relevant data set either using
2789 *predefined_model_dataAddWaterMTCKD400* or via some file reading routine.
2790
2791 H2O-ForeignContStandardType:
2792 Water microwave continua
2793
2794 P. W. Rosenkranz., Radio Science, 33(4), 919, 1998 and
2795 Radio Science, Vol. 34(4), 1025, 1999.
2796
2797 H2O-SelfContStandardType:
2798 Water microwave continua
2799
2800 P. W. Rosenkranz., Radio Science, 33(4), 919, 1998 and
2801 Radio Science, Vol. 34(4), 1025, 1999.
2802
2803 H2O-MPM89:
2804 Microwave water absorption model
2805
2806 H. J. Liebe, Int. J. Infrared and Millimeter Waves, 10(6), 1989, 631.
2807
2808 H2O-PWR98:
2809 Microwave water absorption model
2810
2811 P. W. Rosenkranz., Radio Science, 33(4), 919, 1998 and
2812 Radio Science, Vol. 34(4), 1025, 1999.
2813
2814 H2O-PWR2021:
2815 Microwave water absorption model developed by P.W. Rosenkranz.
2816
2817 Our code is reimplemented based on the Fortran code available at http://cetemps.aquila.infn.it/mwrnet/lblmrt_ns.html
2818
2819 H2O-PWR2022:
2820 Microwave water absorption model developed by P.W. Rosenkranz.
2821
2822 Our code is reimplemented based on the Fortran code available at http://cetemps.aquila.infn.it/mwrnet/lblmrt_ns.html
2823
2824 CO2-CKDMT252:
2825 MT CKD absorption for CO2
2826
2827 This absorption model is taken from the FORTRAN77 code of
2828 CKD_MT version 2.50 written by<br>
2829 Atmospheric and Environmental Research Inc. (AER),<br>
2830 Radiation and Climate Group<br>
2831 131 Hartwell Avenue<br>
2832 Lexington, MA 02421, USA<br>
2833 http://www.rtweb.aer.com/continuum_frame.html
2834
2835 O2-CIAfunCKDMT100:
2836 CIA for oxygen from MT CKD
2837
2838 F. Thibault, V. Menoux, R. Le Doucen, L. Rosenman,
2839 J.-M. Hartmann, Ch. Boulet,<br>
2840 Infrared collision-induced absorption by O2 near 6.4 microns for
2841 atmospheric applications: measurements and emprirical modeling,<br>
2842 Appl. Optics, 35, 5911-5917, (1996).
2843
2844 This absorption model is taken from the FORTRAN77 code of
2845 CKD_MT version 1.00 written by<br>
2846 Atmospheric and Environmental Research Inc. (AER),<br>
2847 Radiation and Climate Group<br>
2848 131 Hartwell Avenue<br>
2849 Lexington, MA 02421, USA<br>
2850 http://www.rtweb.aer.com/continuum_frame.html
2851
2852 O2-MPM89:
2853 Oxygen microwave absorption model
2854
2855 Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
2856 <i>Propagation modeling of moist air and suspended water/ice
2857 particles at frequencies below 1000 GHz</i>,<br>
2858 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
2859 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
2860
2861 O2-PWR98:
2862 Oxygen microwave absorption model
2863
2864 P.W. Rosenkranz, CHAP. 2 and appendix, in ATMOSPHERIC REMOTE SENSING
2865 BY MICROWAVE RADIOMETRY (M.A. Janssen, ed., 1993).
2866 H.J. Liebe et al, JQSRT V.48, PP.629-643 (1992).
2867 M.J. Schwartz, Ph.D. thesis, M.I.T. (1997).
2868 SUBMILLIMETER LINE INTENSITIES FROM HITRAN96.
2869
2870 O2-PWR2021:
2871 Oxygen microwave absorption model developed by P.W. Rosenkranz.
2872
2873 Our code is reimplemented based on the Fortran code available at http://cetemps.aquila.infn.it/mwrnet/lblmrt_ns.html
2874
2875 O2-PWR2022:
2876 Oxygen microwave absorption model developed by P.W. Rosenkranz.
2877
2878 Our code is reimplemented based on the Fortran code available at http://cetemps.aquila.infn.it/mwrnet/lblmrt_ns.html
2879
2880 O2-SelfContStandardType:
2881 Microwave continua term
2882
2883 Reference: P. W. Rosenkranz, Chapter 2, in M. A. Janssen, <br>
2884 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
2885 John Wiley & Sons, Inc., 1993.<br>
2886 <br>
2887 Reference: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
2888 <i>Propagation modeling of moist air and suspended water/ice
2889 particles at frequencies below 1000 GHz</i>,<br>
2890 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
2891 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
2892
2893 O2-TRE05:
2894 Oxygen microwave absorption model
2895
2896 References: H. J. Liebe and G. A. Hufford and M. G. Cotton,<br>
2897 <i>Propagation modeling of moist air and suspended water/ice
2898 particles at frequencies below 1000 GHz</i>,<br>
2899 AGARD 52nd Specialists Meeting of the Electromagnetic Wave
2900 Propagation Panel,<br> Palma de Mallorca, Spain, 1993, May 17-21
2901
2902 M.Yu. Tretyakov, M.A. Koshelev, V.V. Dorovskikh,
2903 D.S. Makarov, P.W. Rosenkranz; 60-GHz oxygen band: precise broadening and central frequencies
2904 of fine-structure lines, absolute absorption profile
2905 at atmospheric pressure, and revision of mixing coefficients
2906 doi:10.1016/j.jms.2004.11.011
2907
2908 O2-v0v0CKDMT100:
2909 MT CKD
2910
2911 CKD_MT 1.00 implementation of oxygen collision induced fundamental model of
2912 O2 continuum formulated by
2913 Mate et al. over the spectral region 7550-8486 cm-1:
2914 B. Mate, C. Lugez, G.T. Fraser, W.J. Lafferty,
2915 "Absolute Intensities for the O2 1.27 micron
2916 continuum absorption",
2917 J. Geophys. Res., 104, 30,585-30,590, 1999.
2918
2919 Also, refer to the paper "Observed Atmospheric
2920 Collision Induced Absorption in Near Infrared Oxygen Bands",
2921 Mlawer, Clough, Brown, Stephen, Landry, Goldman, & Murcray,
2922 Journal of Geophysical Research (1997).
2923
2924 This absorption model is taken from the FORTRAN77 code of
2925 CKD_MT version 1.00 written by<br>
2926 Atmospheric and Environmental Research Inc. (AER),<br>
2927 Radiation and Climate Group<br>
2928 131 Hartwell Avenue<br>
2929 Lexington, MA 02421, USA<br>
2930 http://www.rtweb.aer.com/continuum_frame.html<br>
2931 <br>
2932
2933 O2-v1v0CKDMT100:
2934 MT CKD
2935
2936 Mlawer, Clough, Brown, Stephen, Landry, Goldman, Murcray,<br>
2937 Observed Atmospheric Collision Induced Absorption in Near Infrared Oxygen Bands,<br>
2938 J. Geophys. Res., 103, D4, 3859-3863, 1998.
2939
2940 This absorption model is taken from the FORTRAN77 code of
2941 CKD_MT version 1.00 written by<br>
2942 Atmospheric and Environmental Research Inc. (AER),<br>
2943 Radiation and Climate Group<br>
2944 131 Hartwell Avenue<br>
2945 Lexington, MA 02421, USA<br>
2946 http://www.rtweb.aer.com/continuum_frame.html<br>
2947
2948 O2-visCKDMT252:
2949 MT CKD
2950
2951 O2 continuum formulated by Greenblatt et al. over the spectral region
2952 8797-29870 cm-1: "Absorption Coefficients of Oxygen Between
2953 330 and 1140 nm, G.D. Green blatt, J.J. Orlando, J.B. Burkholder,
2954 and A.R. Ravishabkara, J. Geophys. Res., 95, 18577-18582, 1990.
2955
2956 This absorption model is taken from the FORTRAN77 code of
2957 CKD_MT version 2.50 written by<br>
2958 Atmospheric and Environmental Research Inc. (AER),<br>
2959 Radiation and Climate Group<br>
2960 131 Hartwell Avenue<br>
2961 Lexington, MA 02421, USA<br>
2962 http://www.rtweb.aer.com/continuum_frame.html<br>
2963
2964 N2-CIAfunCKDMT252:
2965 MT CKD
2966
2967 Lafferty, W.J., A.M. Solodov,A. Weber, W.B. Olson and
2968 J._M. Hartmann,<br>
2969 Infrared collision-induced absorption by
2970 N2 near 4.3 microns for atmospheric applications:
2971 Measurements and emprirical modeling, <br>
2972 Appl. Optics, 35, 5911-5917, (1996)
2973
2974 This absorption model is taken from the FORTRAN77 code of
2975 CKD_MT version 1.00 written by<br>
2976 Atmospheric and Environmental Research Inc. (AER),<br>
2977 Radiation and Climate Group<br>
2978 131 Hartwell Avenue<br>
2979 Lexington, MA 02421, USA<br>
2980 http://www.rtweb.aer.com/continuum_frame.html
2981
2982 N2-CIArotCKDMT252:
2983 MT CKD
2984
2985 Borysow, A, and L. Frommhold,<br>
2986 Collision-induced rototranslational absorption spectra of N2-N2
2987 pairs for temperatures from 50 to 300 K,<br>
2988 The Astrophysical Journal, 311, 1043-1057, 1986.
2989
2990 This absorption model is taken from the FORTRAN77 code of
2991 CKD_MT version 1.00 written by<br>
2992 Atmospheric and Environmental Research Inc. (AER),<br>
2993 Radiation and Climate Group<br>
2994 131 Hartwell Avenue<br>
2995 Lexington, MA 02421, USA<br>
2996 http://www.rtweb.aer.com/continuum_frame.html
2997
2998 N2-SelfContStandardType:
2999 Microwave nitrogen absorption continua
3000
3001 Reference: P. W. Rosenkranz, Chapter 2, in M. A. Janssen, <br>
3002 <I>Atmospheric Remote Sensing by Microwave Radiometry</i>,<br>
3003 John Wiley & Sons, Inc., 1993.
3004
3005 N2-SelfContPWR2021:
3006 Microwave nitrogen absorption continua developed by P.W. Rosenkranz.
3007
3008 Note that this also includes O2-N2 and O2-O2 collision-induced absorption and is
3009 only applicable to Earth
3010
3011 Our code is reimplemented based on the Fortran code available at http://cetemps.aquila.infn.it/mwrnet/lblmrt_ns.html
3012
3013
3014 liquidcloud-ELL07:
3015 Water droplet absorption
3016
3017 W. J. Ellison, <br>
3018 <i>Permittivity of Pure Water, at Standard Atmospheric Pressure, over the
3019 Frequency Range 0-25 THz and Temperature Range 0-100C</i>,<br>
3020 J. Phys. Chem. Ref. Data, Vol. 36, No. 1, 2007
3021)--"),
3022 AUTHORS("Richard Larsson"),
3023 OUT("propmat_clearsky",
3024 "dpropmat_clearsky_dx"),
3025 GOUT(),
3026 GOUT_TYPE(),
3027 GOUT_DESC(),
3028 IN("propmat_clearsky",
3029 "dpropmat_clearsky_dx",
3030 "predefined_model_data",
3031 "abs_species",
3032 "select_abs_species",
3033 "jacobian_quantities",
3034 "f_grid",
3035 "rtp_pressure",
3036 "rtp_temperature",
3037 "rtp_vmr"),
3038 GIN(),
3039 GIN_TYPE(),
3040 GIN_DEFAULT(),
3041 GIN_DESC()));
3042
3043 md_data_raw.push_back(create_mdrecord(
3044 NAME("AgendaAppend"),
3046 "Append methods to an agenda.\n"
3047 "\n"
3048 "An agenda is used to store a list of methods that are meant to be\n"
3049 "executed sequentially.\n"
3050 "\n"
3051 "This method takes the methods given in the body (in the curly braces)\n"
3052 "and appends them to the agenda given by the output argument (in the round\n"
3053 "braces).\n"
3054 "\n"
3055 "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
3056 "check, whether the given methods use the right input WSVs and produce\n"
3057 "the right output WSVs.\n"),
3058 AUTHORS("Oliver Lemke"),
3059 OUT(),
3060 GOUT("out"),
3061 GOUT_TYPE("Agenda"),
3062 GOUT_DESC("Target agenda."),
3063 IN(),
3064 GIN("in"),
3065 GIN_TYPE("Agenda"),
3067 GIN_DESC("Source agenda."),
3068 SETMETHOD(false),
3069 AGENDAMETHOD(true),
3070 USES_TEMPLATES(false),
3071 PASSWORKSPACE(false),
3072 PASSWSVNAMES(true)));
3073
3074 md_data_raw.push_back(create_mdrecord(NAME("AgendaExecute"),
3075 DESCRIPTION("Execute an agenda.\n"),
3076 AUTHORS("Oliver Lemke"),
3077 OUT(),
3078 GOUT(),
3079 GOUT_TYPE(),
3080 GOUT_DESC(),
3081 IN(),
3082 GIN("a"),
3083 GIN_TYPE("Agenda"),
3085 GIN_DESC("Agenda to be executed."),
3086 SETMETHOD(false),
3087 AGENDAMETHOD(false)));
3088
3089 md_data_raw.push_back(create_mdrecord(
3090 NAME("AgendaExecuteExclusive"),
3092 "Execute an agenda exclusively.\n"
3093 "\n"
3094 "Only one call to *AgendaExecuteExclusive* is executed at a time.\n"
3095 "Other calls to this function are blocked until the current one\n"
3096 "finishes. WARNING: Can cause deadlocks! Use with care.\n"),
3097 AUTHORS("Oliver Lemke"),
3098 OUT(),
3099 GOUT(),
3100 GOUT_TYPE(),
3101 GOUT_DESC(),
3102 IN(),
3103 GIN("a"),
3104 GIN_TYPE("Agenda"),
3106 GIN_DESC("Agenda to be executed."),
3107 SETMETHOD(false),
3108 AGENDAMETHOD(false)));
3109
3110 md_data_raw.push_back(create_mdrecord(
3111 NAME("AgendaSet"),
3113 "Set up an agenda.\n"
3114 "\n"
3115 "An agenda is used to store a list of methods that are meant to be\n"
3116 "executed sequentially.\n"
3117 "\n"
3118 "This method takes the methods given in the body (in the curly braces)\n"
3119 "and puts them in the agenda given by the output argument (in the round\n"
3120 "braces).\n"
3121 "\n"
3122 "It also uses the agenda lookup data (defined in file agendas.cc) to\n"
3123 "check, whether the given methods use the right input WSVs and\n"
3124 "produce the right output WSVs.\n"),
3125 AUTHORS("Oliver Lemke"),
3126 OUT(),
3127 GOUT("out"),
3128 GOUT_TYPE("Agenda"),
3129 GOUT_DESC("The new agenda."),
3130 IN(),
3131 GIN(),
3132 GIN_TYPE(),
3133 GIN_DEFAULT(),
3134 GIN_DESC(),
3135 SETMETHOD(false),
3136 AGENDAMETHOD(true),
3137 USES_TEMPLATES(false),
3138 PASSWORKSPACE(false),
3139 PASSWSVNAMES(true)));
3140
3141 md_data_raw.push_back(create_mdrecord(
3142 NAME("AngularGridsSetFluxCalc"),
3144 "Sets the angular grids for the calculation of radiation fluxes. \n"
3145 "\n"
3146 "This method sets the angular grids for the radiation fluxes type\n"
3147 "calculations and calculates the integration weights *za_grid_weights*\n"
3148 "for the zenith angle integration. For down- und up-looking geometries\n"
3149 "it suffices to use the default values of N_za_grid and N_aa_grid.\n"
3150 "From N_aa_grid an equally spaced grid is created and stored in the\n"
3151 "WSV *aa_grid*.\n"
3152 "Depending on the desired za_grid_type *za_grid* will be\n"
3153 "equally spaced ('linear') or unequally ('linear_mu','double_gauss')\n"
3154 "Important, N_za_grid must be an even number because for the \n"
3155 "integration over each hemisphere N_za_grid / 2 zenith angles are needed.\n"
3156 "\n"
3157 "Possible zenith angle grid types are:\n"
3158 "double_gauss: The zenith grid and the integration weights are set according\n"
3159 " to a gauss-legendre integration for each hemispheres.\n"
3160 "linear: Equally space grid between 0 deg and 180 deg including the poles\n"
3161 "linear_mu: Similar to 'linear' but equally spaced for cos(180 deg) to cos(0 deg),\n"
3162 " which results a unequally spaced angular grid\n"
3163
3164 ),
3165 AUTHORS("Manfred Brath"),
3166 OUT("za_grid", "aa_grid", "za_grid_weights"),
3167 GOUT(),
3168 GOUT_TYPE(),
3169 GOUT_DESC(),
3170 IN(),
3171 GIN("N_za_grid", "N_aa_grid", "za_grid_type"),
3172 GIN_TYPE("Index", "Index", "String"),
3173 GIN_DEFAULT("2", "1", "linear_mu"),
3174 GIN_DESC("Number of zenith angles",
3175 "Number of azimuth angles",
3176 "Zenith angle grid type")));
3177
3178 md_data_raw.push_back(create_mdrecord(
3179 NAME("ArrayOfAgendaAppend"),
3180 DESCRIPTION("Set up an agenda and append it to the array of agendas.\n"
3181 "\n"
3182 "See *AgendaSet* for details.\n"),
3183 AUTHORS("Oliver Lemke"),
3184 OUT(),
3185 GOUT("out"),
3186 GOUT_TYPE("ArrayOfAgenda"),
3187 GOUT_DESC("The new agenda."),
3188 IN(),
3189 GIN(),
3190 GIN_TYPE(),
3191 GIN_DEFAULT(),
3192 GIN_DESC(),
3193 SETMETHOD(false),
3194 AGENDAMETHOD(true),
3195 USES_TEMPLATES(false),
3196 PASSWORKSPACE(false),
3197 PASSWSVNAMES(true)));
3198
3199 md_data_raw.push_back(
3200 create_mdrecord(NAME("ArrayOfAgendaExecute"),
3201 DESCRIPTION("Execute an agenda from an ArrayOfAgenda.\n"),
3202 AUTHORS("Oliver Lemke"),
3203 OUT(),
3204 GOUT(),
3205 GOUT_TYPE(),
3206 GOUT_DESC(),
3207 IN("agenda_array_index"),
3208 GIN("agendas"),
3209 GIN_TYPE("ArrayOfAgenda"),
3211 GIN_DESC("Array of agendas."),
3212 SETMETHOD(false),
3213 AGENDAMETHOD(false)));
3214
3215 md_data_raw.push_back(create_mdrecord(
3216 NAME("AntennaMultiBeamsToPencilBeams"),
3218 "Maps a multi-beam case to a matching pencil beam case.\n"
3219 "\n"
3220 "Cases with overlapping beams are most efficiently handled by\n"
3221 "letting *antenna_dlos* have several rows. That is, there are\n"
3222 "multiple beams for each measurement block. The drawback is that\n"
3223 "many variables must be adjusted if the corresponding pencil beam\n"
3224 "spectra shall be calculated. This method makes this adjustment.\n"
3225 "That is, if you have a control file for a multiple beam case and\n"
3226 "for some reason want to avoid the antenna weighting, you add this\n"
3227 "method before *sensor_responseInit*, and remove the call of\n"
3228 "*sensor_responseAntenna* and you will get the matching pencil beam\n"
3229 "spectra.\n"),
3230 AUTHORS("Patrick Eriksson"),
3231 OUT("sensor_pos",
3232 "sensor_los",
3233 "antenna_dlos",
3234 "antenna_dim",
3235 "mblock_dlos"),
3236 GOUT(),
3237 GOUT_TYPE(),
3238 GOUT_DESC(),
3239 IN("sensor_pos",
3240 "sensor_los",
3241 "antenna_dlos",
3242 "antenna_dim",
3243 "mblock_dlos",
3244 "atmosphere_dim"),
3245 GIN(),
3246 GIN_TYPE(),
3247 GIN_DEFAULT(),
3248 GIN_DESC()));
3249
3250 md_data_raw.push_back(create_mdrecord(
3251 NAME("AntennaOff"),
3253 "Sets some antenna related variables\n"
3254 "\n"
3255 "Use this method to set *antenna_dim* and *mblock_dlos* to\n"
3256 "suitable values (1 and [0], respectively) for cases when a\n"
3257 "sensor is included, but the antenna pattern is neglected.\n"),
3258 AUTHORS("Patrick Eriksson"),
3259 OUT("antenna_dim", "mblock_dlos"),
3260 GOUT(),
3261 GOUT_TYPE(),
3262 GOUT_DESC(),
3263 IN(),
3264 GIN(),
3265 GIN_TYPE(),
3266 GIN_DEFAULT(),
3267 GIN_DESC()));
3268
3269 md_data_raw.push_back(create_mdrecord(
3270 NAME("antenna_responseGaussian"),
3272 "Sets up a Gaussian antenna response.\n"
3273 "\n"
3274 "This method works as *antenna_responseGaussianConstant* but allows\n"
3275 "to inlude a frequency variation of the antenna width. Here the FWHM\n"
3276 "is specified at a set of frequencies. These frequencies will also be\n"
3277 "the frequency grid of *antenna_response*.\n"
3278 "\n"
3279 "If *grid_width* is set to <=0, the grid width will be twice the max\n"
3280 "value in *fwhm*.\n"),
3281 AUTHORS("Patrick Eriksson"),
3282 OUT("antenna_response"),
3283 GOUT(),
3284 GOUT_TYPE(),
3285 GOUT_DESC(),
3286 IN(),
3287 GIN("f_points", "fwhm", "grid_width", "grid_npoints", "do_2d"),
3288 GIN_TYPE("Vector", "Vector", "Numeric", "Index", "Index"),
3289 GIN_DEFAULT(NODEF, NODEF, "-1.0", "21", "0"),
3290 GIN_DESC("Frequencies at which FWHM is defined.",
3291 "Full width at half-maximum of the Gaussian function.",
3292 "Full width of grid (negative value gives 2*fwhm).",
3293 "Number of points to represent the grid, see above.",
3294 "Set to 1 to create a 2D antenna pattern.")));
3295
3296 md_data_raw.push_back(create_mdrecord(
3297 NAME("antenna_responseGaussianConstant"),
3299 "Sets up a Gaussian antenna response, with no frequency variation.\n"
3300 "\n"
3301 "The method assumes that the response is the same for all\n"
3302 "frequencies and polarisations, and that it can be modelled\n"
3303 "as Gaussian. The width of the Gaussian is specified by its\n"
3304 "full width at half maximum (FWHM).\n"
3305 "\n"
3306 "The grid generated has *grid_npoints* equidistant values, with\n"
3307 "the first one at -grid_width/2 and the last one at grid_width/2.\n"
3308 "\n"
3309 "If *grid_width* is set to <= 0, a default of twice the FWMH is\n"
3310 "applied. This gives a coverage of about 98\% of the response.\n"
3311 "\n"
3312 "The default for *grid_npoints* is 21. When the grid width is 2*FWHM,\n"
3313 "that default value gives an error < 0.001 of the integrated response\n"
3314 "using trapezoidal integration. *grid_npoints* must be > 1.\n"
3315 "\n"
3316 "If the 2D option is selected (*do_2d*), a circular antenna is\n"
3317 "assumed. The same grid and FWHM is applied in both dimensions.\n"
3318 "\n"
3319 "If the grid has a sufficiently high width the integral of the\n"
3320 "response is 1. Otherwise the integral is smaller than 1. That\n"
3321 "is, no normalisation is applied.\n"),
3322 AUTHORS("Patrick Eriksson"),
3323 OUT("antenna_response"),
3324 GOUT(),
3325 GOUT_TYPE(),
3326 GOUT_DESC(),
3327 IN(),
3328 GIN("fwhm", "grid_width", "grid_npoints", "do_2d"),
3329 GIN_TYPE("Numeric", "Numeric", "Index", "Index"),
3330 GIN_DEFAULT(NODEF, "-1.0", "21", "0"),
3331 GIN_DESC("Full width at half-maximum of the Gaussian function.",
3332 "Full width of grid (negative value gives 2*fwhm).",
3333 "Number of points to represent the grid, see above.",
3334 "Set to 1 to create a 2D antenna pattern.")));
3335
3336 md_data_raw.push_back(create_mdrecord(
3337 NAME("antenna_responseGaussianEffectiveSize"),
3339 "Sets up Gaussian antenna responses.\n"
3340 "\n"
3341 "Similar to *antenna_responseGaussianConstant* but allows to set up\n"
3342 "responses that varies with frequency. That is, the method assumes\n"
3343 "that the response is the same for all polarisations, and that it\n"
3344 "can be modelled as a Gaussian function varying with frequency.\n"
3345 "\n"
3346 "The full width at half maximum (FWHM in radians) is calculated as:\n"
3347 " fwhm = lambda / leff\n"
3348 "where lambda is the wavelength and *leff* is the effective size of\n"
3349 "the antenna. Normally, *leff* is smaller than the physical antenna\n"
3350 "size.\n"
3351 "\n"
3352 "Antenna responses are created for *nf* frequencies spanning the\n"
3353 "range [*fstart*,*fstop*], with a logarithmic spacing. That is, the\n"
3354 "frequency grid of the responses is taken from *VectorNLogSpace*.\n"
3355 "\n"
3356 "The responses have a common angular grid. The parameters to define\n"
3357 "the grid are the same as for *antenna_responseGaussianConstant*. If\n"
3358 "*grid_width* is <= 0, it is set to twice the FWHM at the lowest\n"
3359 "frequency.\n"),
3360 AUTHORS("Patrick Eriksson"),
3361 OUT("antenna_response"),
3362 GOUT(),
3363 GOUT_TYPE(),
3364 GOUT_DESC(),
3365 IN(),
3366 GIN("leff", "grid_width", "grid_npoints", "nf", "fstart", "fstop", "do_2d"),
3367 GIN_TYPE("Numeric",
3368 "Numeric",
3369 "Index",
3370 "Index",
3371 "Numeric",
3372 "Numeric",
3373 "Index"),
3374 GIN_DEFAULT(NODEF, "-1.0", "21", NODEF, NODEF, NODEF, "0"),
3375 GIN_DESC("Effective size of the antenna,",
3376 "Full width of grid.",
3377 "Number of points to represent the grid.",
3378 "Number of points in frequency grid (must be >= 2)",
3379 "Start point of frequency grid",
3380 "End point of frequency grid",
3381 "Set to 1 to create a 2D antenna pattern.")));
3382
3383 md_data_raw.push_back(create_mdrecord(
3384 NAME("Append"),
3386 "Append one workspace variable to another.\n"
3387 "\n"
3388 "This method can append an array to another array of the same type,\n"
3389 "e.g. ArrayOfIndex to ArrayOfIndex. Or a single element to an array\n"
3390 "such as a Tensor3 to an ArrayOfTensor3.\n"
3391 "\n"
3392 "Appending two vectors or a numeric to a vector works as for array\n"
3393 "variables.\n"
3394 "\n"
3395 "Both another matrix or a vector can be appended to a matrix. In\n"
3396 "addition, for matrices, the 'append dimension' can be selected.\n"
3397 "The third argument, *dimension*, indicates how to append, where\n"
3398 "\"leading\" means to append row-wise, and \"trailing\" means\n"
3399 "column-wise.\n"
3400 "\n"
3401 "Other types (TensorX) are currently only implemented for\n"
3402 "appending to the leading dimension.\n"
3403 "\n"
3404 "This method is not implemented for all types, just for those that\n"
3405 "were thought or found to be useful. (See variable list below.).\n"),
3406 AUTHORS("Stefan Buehler, Oliver Lemke"),
3407 OUT(),
3408 GOUT("out"),
3409 GOUT_TYPE(("Vector, Vector,"
3410 "Matrix, Matrix,"
3411 "Tensor3, Tensor3,"
3412 "Tensor4, Tensor4,"
3413 "String, " +
3414 ARRAY_GROUPS + ", " + ARRAY_GROUPS_WITH_BASETYPE)
3415 .c_str()),
3416 GOUT_DESC("The variable to append to."),
3417 IN(),
3418 GIN("in", "dimension"),
3419 GIN_TYPE(("Numeric, Vector,"
3420 "Matrix, Vector,"
3421 "Matrix, Tensor3,"
3422 "Tensor3, Tensor4,"
3423 "String, " +
3424 ARRAY_GROUPS + "," + GROUPS_WITH_ARRAY_TYPE).c_str(),
3425 "String"),
3426 GIN_DEFAULT(NODEF, "leading"),
3427 GIN_DESC(
3428 "The variable to append.",
3429 "Where to append. Could be either the \"leading\" or \"trailing\" dimension."),
3430 SETMETHOD(false),
3431 AGENDAMETHOD(false),
3432 USES_TEMPLATES(true),
3433 PASSWORKSPACE(false),
3434 PASSWSVNAMES(true)));
3435
3436 md_data_raw.push_back(create_mdrecord(
3437 NAME("ArrayOfGriddedFieldGetNames"),
3438 DESCRIPTION("Get the names of all GriddedFields stored in an Array.\n"
3439 "\n"
3440 "See *GriddedFieldGetName*.\n"),
3441 AUTHORS("Lukas Kluft"),
3442 OUT(),
3443 GOUT("names"),
3444 GOUT_TYPE("ArrayOfString"),
3445 GOUT_DESC("Names of the GriddedFields in the ArrayOfGriddedField."),
3446 IN(),
3447 GIN("griddedfields"),
3448 GIN_TYPE("ArrayOfGriddedField1, ArrayOfGriddedField2,"
3449 "ArrayOfGriddedField3, ArrayOfGriddedField4"),
3451 GIN_DESC("Array of GriddedFields."),
3452 SETMETHOD(false),
3453 AGENDAMETHOD(false),
3454 USES_TEMPLATES(true)));
3455
3456 md_data_raw.push_back(create_mdrecord(
3457 NAME("ArrayOfIndexLinSpace"),
3459 "Initializes an ArrayOfIndex with linear spacing.\n"
3460 "\n"
3461 "The first element equals always the start value, and the spacing\n"
3462 "equals always the step value, but the last value can deviate from\n"
3463 "the stop value. *step* can be both positive and negative.\n"
3464 "\n"
3465 "The created array is [start, start+step, start+2*step, ...]\n "),
3466 AUTHORS("Oliver Lemke"),
3467 OUT(),
3468 GOUT("out"),
3469 GOUT_TYPE("ArrayOfIndex"),
3470 GOUT_DESC("Output array."),
3471 IN(),
3472 GIN("start", "stop", "step"),
3473 GIN_TYPE("Index", "Index", "Index"),
3475 GIN_DESC("Start value.",
3476 "Maximum/minimum value of the end value",
3477 "Spacing of the array.")));
3478
3479 md_data_raw.push_back(create_mdrecord(
3480 NAME("ArrayOfIndexSetConstant"),
3481 DESCRIPTION("Creates an ArrayOfIndex of length *nelem*, with all values\n"
3482 "identical.\n"),
3483 AUTHORS("Patrick Eriksson"),
3484 OUT(),
3485 GOUT("out"),
3486 GOUT_TYPE("ArrayOfIndex"),
3487 GOUT_DESC("Variable to initialize."),
3488 IN("nelem"),
3489 GIN("value"),
3490 GIN_TYPE("Index"),
3492 GIN_DESC("Array value.."),
3493 SETMETHOD(true)));
3494
3495 md_data_raw.push_back(create_mdrecord(
3496 NAME("ArrayOfTimeNLinSpace"),
3498 "Creates a time array with length *nelem*, equally spaced between the\n"
3499 "given end values.\n"
3500 "\n"
3501 "The length (*nelem*) must be larger than 1.\n"),
3502 AUTHORS("Richard Larsson"),
3503 OUT(),
3504 GOUT("out"),
3505 GOUT_TYPE("ArrayOfTime"),
3506 GOUT_DESC("Variable to initialize."),
3507 IN("nelem"),
3508 GIN("start", "stop"),
3509 GIN_TYPE("String", "String"),
3511 GIN_DESC("Start value.", "End value.")));
3512
3513 md_data_raw.push_back(create_mdrecord(
3514 NAME("ArrayOfTimeSetConstant"),
3516 "Creates an ArrayOfTime and sets all elements to the specified value.\n"
3517 "\n"
3518 "The vector length is determined by *nelem*.\n"),
3519 AUTHORS("Patrick Eriksson"),
3520 OUT(),
3521 GOUT("out"),
3522 GOUT_TYPE("ArrayOfTime"),
3523 GOUT_DESC("Variable to initialize."),
3524 IN("nelem"),
3525 GIN("value"),
3526 GIN_TYPE("Time"),
3528 GIN_DESC("Time value.")));
3529
3530 md_data_raw.push_back(create_mdrecord(
3531 NAME("Arts"),
3533 "Runs the agenda that is specified inside the curly braces. ARTS\n"
3534 "controlfiles must define this method. It is executed automatically\n"
3535 "when ARTS is run on the controlfile and cannot be called by the user.\n"
3536 "This methods was used for Arts 1 controlfiles and is now obsolete.\n"
3537 "See *Arts2*\n"),
3538 AUTHORS("Stefan Buehler"),
3539 OUT(),
3540 GOUT(),
3541 GOUT_TYPE(),
3542 GOUT_DESC(),
3543 IN(),
3544 GIN(),
3545 GIN_TYPE(),
3546 GIN_DEFAULT(),
3547 GIN_DESC(),
3548 SETMETHOD(false),
3549 AGENDAMETHOD(true)));
3550
3551 md_data_raw.push_back(create_mdrecord(
3552 NAME("Arts2"),
3554 "Runs the agenda that is specified inside the curly braces. ARTS\n"
3555 "controlfiles must define this method. It is executed automatically\n"
3556 "when ARTS is run on the controlfile and cannot be called by the user.\n"),
3557 AUTHORS("Oliver Lemke"),
3558 OUT(),
3559 GOUT(),
3560 GOUT_TYPE(),
3561 GOUT_DESC(),
3562 IN(),
3563 GIN(),
3564 GIN_TYPE(),
3565 GIN_DEFAULT(),
3566 GIN_DESC(),
3567 SETMETHOD(false),
3568 AGENDAMETHOD(true)));
3569
3570 md_data_raw.push_back(create_mdrecord(
3571 NAME("AtmFieldPerturb"),
3573 "Adds a perturbation to an atmospheric field.\n"
3574 "\n"
3575 "The shape and position of the perturbation follow the retrieval grids.\n"
3576 "That is, the shape of the perturbation has a traingular shape, \n"
3577 "with breake points at the retrieval grid points. The position is\n"
3578 "given as an index. This index matches the column in the Jacobian\n"
3579 "for the selected grid position.\n"
3580 "\n"
3581 "If the retrieval grids fully match the atmospheric grids, you can\n"
3582 "use *AtmFieldPerturbAtmGrids*, that is faster. The description of\n"
3583 "that method can help to understand this method.\n"),
3584 AUTHORS("Patrick Eriksson"),
3585 OUT(),
3586 GOUT("perturbed_field"),
3587 GOUT_TYPE("Tensor3"),
3588 GOUT_DESC("Perturbed/modified field."),
3589 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3590 GIN("original_field",
3591 "p_ret_grid",
3592 "lat_ret_grid",
3593 "lon_ret_grid",
3594 "pert_index",
3595 "pert_size",
3596 "pert_mode"),
3597 GIN_TYPE("Tensor3",
3598 "Vector",
3599 "Vector",
3600 "Vector",
3601 "Index",
3602 "Numeric",
3603 "String"),
3604 GIN_DEFAULT(NODEF, NODEF, NODEF, NODEF, NODEF, NODEF, "absolute"),
3605 GIN_DESC("Original field, e.g. *t_field*.",
3606 "Pressure retrieval grid.",
3607 "Latitude retrieval grid.",
3608 "Longitude retrieval grid.",
3609 "Index of position where the perturbation shall be performed.",
3610 "Size of perturbation.",
3611 "Type of perturbation, "
3612 "absolute"
3613 " or "
3614 "relative"
3615 ".")));
3616
3617 md_data_raw.push_back(create_mdrecord(
3618 NAME("AtmFieldPerturbAtmGrids"),
3620 "As *AtmFieldPerturb*, but perturbation follows the atmospheric grids.\n"
3621 "\n"
3622 "The method effectively performs this\n"
3623 " perturbed_field = original_field\n"
3624 " perturbed_field(p_index,lat_index,lon_index) += pert_size\n"
3625 "if not *pert_mode* is set to "
3626 "relative"
3627 " when this is done\n"
3628 " perturbed_field = original_field\n"
3629 " perturbed_field(p_index,lat_index,lon_index) *= 1*pert_size\n"
3630 "where p_index etc. are derived from *pert_index*.\n"),
3631 AUTHORS("Patrick Eriksson"),
3632 OUT(),
3633 GOUT("perturbed_field"),
3634 GOUT_TYPE("Tensor3"),
3635 GOUT_DESC("Perturbed/modified field."),
3636 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
3637 GIN("original_field", "pert_index", "pert_size", "pert_mode"),
3638 GIN_TYPE("Tensor3", "Index", "Numeric", "String"),
3639 GIN_DEFAULT(NODEF, NODEF, NODEF, "absolute"),
3640 GIN_DESC("Original field, e.g. *t_field*.",
3641 "Index of position where the perturbation shall be performed.",
3642 "Size of perturbation.",
3643 "Type of perturbation, "
3644 "absolute"
3645 " or "
3646 "relative"
3647 ".")));
3648
3649 md_data_raw.push_back(create_mdrecord(
3650 NAME("AtmFieldPRegrid"),
3652 "Interpolates the input field along the pressure dimension from\n"
3653 "*p_grid_old* to to *p_grid_new*.\n"
3654 "\n"
3655 "Extrapolation is allowed within the common 0.5grid-step margin.\n"
3656 "in and out fields can be the same variable.\n"),
3657 AUTHORS("Jana Mendrok"),
3658 OUT(),
3659 GOUT("out"),
3660 GOUT_TYPE("Tensor3, Tensor4"),
3661 GOUT_DESC("Regridded atmospheric field."),
3662 IN(),
3663 GIN("in", "p_grid_new", "p_grid_old", "interp_order"),
3664 GIN_TYPE("Tensor3, Tensor4", "Vector", "Vector", "Index"),
3665 GIN_DEFAULT(NODEF, NODEF, NODEF, "1"),
3666 GIN_DESC("Input atmospheric field.",
3667 "Pressure grid to regrid to",
3668 "Pressure grid of input field",
3669 "Interpolation order.")));
3670
3671 md_data_raw.push_back(create_mdrecord(
3672 NAME("AtmFieldsCalc"),
3674 "Interpolation of raw atmospheric T, z, VMR, and NLTE T/r fields to\n"
3675 "calculation grids.\n"
3676 "\n"
3677 "An atmospheric scenario includes the following data for each\n"
3678 "position (pressure, latitude, longitude) in the atmosphere:\n"
3679 " 1. temperature field\n"
3680 " 2. the corresponding altitude field\n"
3681 " 3. vmr fields for the gaseous species\n"
3682 "This method interpolates the fields of raw data (*t_field_raw*,\n"
3683 "*z_field_raw*, *vmr_field_raw*) which can be stored on arbitrary\n"
3684 "grids to the calculation grids (*p_grid*, *lat_grid*, *lon_grid*).\n"
3685 "If *nlte_field_raw* is empty, it is assumed to be so because LTE is\n"
3686 "assumed by the user and *nlte_field* will be empty.\n"
3687 "\n"
3688 "Internally, *AtmFieldsCalc* applies *GriddedFieldPRegrid* and\n"
3689 "*GriddedFieldLatLonRegrid*. Generally, 'half-grid-step' extrapolation\n"
3690 "is allowed and applied. However, if *vmr_zeropadding*=1 then VMRs at\n"
3691 "*p_grid* levels exceeding the raw VMRs' pressure grid are set to 0\n"
3692 "(applying the *vmr_zeropadding* option of *GriddedFieldPRegrid*).\n"
3693 "\n"
3694 "Default is to just accept obtained VMRs. If you want to enforce\n"
3695 "that all VMR created are >= 0, set *vmr_nonegative* to 1. Negative\n"
3696 "values are then set 0. Beside being present in input data, negative\n"
3697 "VMR can be generated from the interpolation if *interp_order* is\n"
3698 "above 1.\n"),
3699 AUTHORS("Claudia Emde", "Stefan Buehler"),
3700 OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3701 GOUT(),
3702 GOUT_TYPE(),
3703 GOUT_DESC(),
3704 IN("p_grid",
3705 "lat_grid",
3706 "lon_grid",
3707 "t_field_raw",
3708 "z_field_raw",
3709 "vmr_field_raw",
3710 "nlte_field_raw",
3711 "nlte_level_identifiers",
3712 "nlte_vibrational_energies",
3713 "atmosphere_dim"),
3714 GIN("interp_order",
3715 "vmr_zeropadding",
3716 "vmr_nonegative",
3717 "nlte_when_negative"),
3718 GIN_TYPE("Index", "Index", "Index", "Index"),
3719 GIN_DEFAULT("1", "0", "0", "0"),
3720 GIN_DESC("Interpolation order (1=linear interpolation).",
3721 "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3722 "If set to 1, negative VMRs are set to 0.",
3723 "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3724
3725 md_data_raw.push_back(create_mdrecord(
3726 NAME("AtmFieldsCalcExpand1D"),
3728 "Interpolation of 1D raw atmospheric fields to create 2D or 3D\n"
3729 "homogeneous atmospheric fields.\n"
3730 "\n"
3731 "The method works as *AtmFieldsCalc*, but accepts only raw 1D\n"
3732 "atmospheres. The raw atmosphere is interpolated to *p_grid* and\n"
3733 "the obtained values are applied for all latitudes, and also\n"
3734 "longitudes for 3D, to create a homogeneous atmosphere.\n"
3735 "\n"
3736 "The method deals only with the atmospheric fields, and to create\n"
3737 "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3738 "ellipsoid is set to be a sphere.\n"),
3739 AUTHORS("Patrick Eriksson", "Claudia Emde", "Stefan Buehler"),
3740 OUT("t_field", "z_field", "vmr_field", "nlte_field"),
3741 GOUT(),
3742 GOUT_TYPE(),
3743 GOUT_DESC(),
3744 IN("p_grid",
3745 "lat_grid",
3746 "lon_grid",
3747 "t_field_raw",
3748 "z_field_raw",
3749 "vmr_field_raw",
3750 "nlte_field_raw",
3751 "nlte_level_identifiers",
3752 "nlte_vibrational_energies",
3753 "atmosphere_dim"),
3754 GIN("interp_order",
3755 "vmr_zeropadding",
3756 "vmr_nonegative",
3757 "nlte_when_negative"),
3758 GIN_TYPE("Index", "Index", "Index", "Index"),
3759 GIN_DEFAULT("1", "0", "0", "0"),
3760 GIN_DESC("Interpolation order (1=linear interpolation).",
3761 "Pad VMRs with zeroes to fit the pressure grid if necessary.",
3762 "If set to 1, negative VMRs are set to 0.",
3763 "-1: Skip step. 0: Negative is 0. Else: Negative is t.")));
3764
3765 md_data_raw.push_back(create_mdrecord(
3766 NAME("AtmFieldsExpand1D"),
3768 "Maps a 1D case to 2D or 3D homogeneous atmospheric fields.\n"
3769 "\n"
3770 "This method takes a 1D atmospheric case and converts it to the\n"
3771 "corresponding case for 2D or 3D. The atmospheric fields (t_field,\n"
3772 "z_field and vmr_field) must be 1D and match *p_grid*. The size of\n"
3773 "the new data is determined by *atmosphere_dim*, *lat_grid* and\n"
3774 "*lon_grid*. That is, these later variables have been changed since\n"
3775 "the original fields were created.\n"
3776 "\n"
3777 "The method deals only with the atmospheric fields, and to create\n"
3778 "a true 2D or 3D version of a 1D case, a demand is also that the\n"
3779 "ellipsoid is set to be a sphere.\n"),
3780 AUTHORS("Patrick Eriksson"),
3781 OUT("t_field", "z_field", "vmr_field"),
3782 GOUT(),
3783 GOUT_TYPE(),
3784 GOUT_DESC(),
3785 IN("t_field",
3786 "z_field",
3787 "vmr_field",
3788 "p_grid",
3789 "lat_grid",
3790 "lon_grid",
3791 "atmosphere_dim"),
3792 GIN("chk_vmr_nan"),
3793 GIN_TYPE("Index"),
3794 GIN_DEFAULT("1"),
3795 GIN_DESC(
3796 "Flag to determine if a search for NaN shall be performed or not.")));
3797
3798 md_data_raw.push_back(create_mdrecord(
3799 NAME("AtmFieldsExtract1D"),
3801 "Converts 2D or 3D homogeneous atmospheric fields to a 1D case.\n"
3802 "\n"
3803 "The method extracts data for given latitude and longitude index\n"
3804 "to create a 1D atmosphere. *AtmosphereSet1D* is called to set\n"
3805 "output values of *atmosphere_dim*, *lat_grid* and *lon_grid*.\n"
3806 "Nothing is done if *atmosphere_dim* alöready is 1.\n"),
3807 AUTHORS("Patrick Eriksson"),
3808 OUT("atmosphere_dim",
3809 "lat_grid",
3810 "lon_grid",
3811 "t_field",
3812 "z_field",
3813 "vmr_field"),
3814 GOUT(),
3815 GOUT_TYPE(),
3816 GOUT_DESC(),
3817 IN("atmosphere_dim",
3818 "lat_grid",
3819 "lon_grid",
3820 "t_field",
3821 "z_field",
3822 "vmr_field"),
3823 GIN("ilat", "ilon"),
3824 GIN_TYPE("Index", "Index"),
3825 GIN_DEFAULT("0", "0"),
3826 GIN_DESC("Pick data having this latitude index (0-based).",
3827 "Pick data having this longitude index (0-based).")));
3828
3829 md_data_raw.push_back(create_mdrecord(
3830 NAME("AtmFieldsRefinePgrid"),
3832 "Refines the pressure grid and regrids the clearsky atmospheric\n"
3833 "fields accordingly.\n"
3834 "\n"
3835 "This method is, e.g., used for absorption lookup table testing. It\n"
3836 "can also be used to refine the *p_grid* and atmospheric fields from\n"
3837 "compact state atmospheres.\n"
3838 "\n"
3839 "It adds additional vertical grid points to the atmospheric fields, by\n"
3840 "interpolating them in the usual ARTS way (linear in log pressure).\n"
3841 "\n"
3842 "How fine the new grid will be is determined by the keyword parameter\n"
3843 "p_step. The definition of p_step, and the default interpolation\n"
3844 "behavior, is consistent with *abs_lookupSetup* and\n"
3845 "*abs_lookupSetupBatch* (new points are added between the original\n"
3846 "ones, so that the spacing is always below p_step.)\n"
3847 "\n"
3848 "Internally, *AtmFieldsRefinePgrid* applies *p_gridRefine* and\n"
3849 "*AtmFieldPRegrid* to the clearsky atmospheric fields (T, z, vmr).\n"
3850 "\n"
3851 "Atmospheric field related check WSV are reset to 0 (unchecked),\n"
3852 "i.e., the corresponding checkedCalc methods have to be performed\n"
3853 "(again) before *yCalc* or similar methods can be executed.\n"),
3854 AUTHORS("Stefan Buehler"),
3855 OUT("p_grid",
3856 "t_field",
3857 "z_field",
3858 "vmr_field",
3859 "atmfields_checked",
3860 "atmgeom_checked",
3861 "cloudbox_checked"),
3862 GOUT(),
3863 GOUT_TYPE(),
3864 GOUT_DESC(),
3865 IN("p_grid",
3866 "lat_grid",
3867 "lon_grid",
3868 "t_field",
3869 "z_field",
3870 "vmr_field",
3871 "atmosphere_dim"),
3872 GIN("p_step", "interp_order"),
3873 GIN_TYPE("Numeric", "Index"),
3874 GIN_DEFAULT(NODEF, "1"),
3875 GIN_DESC("Maximum step in log(p[Pa]) (natural logarithm, as always). If\n"
3876 "the pressure grid is coarser than this, additional points\n"
3877 "are added until each log step is smaller than this.\n",
3878 "Interpolation order.")));
3879
3880 md_data_raw.push_back(create_mdrecord(
3881 NAME("AtmFieldsAndParticleBulkPropFieldFromCompact"),
3883 "Extract pressure grid and atmospheric fields from\n"
3884 "*atm_fields_compact*.\n"
3885 "\n"
3886 "An atmospheric scenario includes the following data for each\n"
3887 "position (pressure, latitude, longitude) in the atmosphere:\n"
3888 " 1. temperature field\n"
3889 " 2. the corresponding altitude field\n"
3890 " 3. vmr fields for the gaseous species\n"
3891 " 4. scattering species fields\n"
3892 "\n"
3893 "This method splits up the data found in *atm_fields_compact* to\n"
3894 "p_grid, lat_grid, lon_grid, vmr_field, particle_bulkprop_field,\n"
3895 "and particle_bulkprop_names.\n"
3896 "See documentation of *atm_fields_compact* for a definition of the\n"
3897 "data.\n"
3898 "\n"
3899 "Compact states are characterized by having all atmospheric fields\n"
3900 "already given on identical grids. That is, no interpolation needs\n"
3901 "to be and is performed. Keyword *p_min* allows to remove atmospheric\n"
3902 "levels with pressures lower than the given value (default: no\n"
3903 "removal). This reduces computational burden and is useful when\n"
3904 "upper atmospheric contributions are negligible.\n"
3905 "\n"
3906 "Possible future extensions: Add a keyword parameter to refine the\n"
3907 "pressure grid if it is too coarse. Or a version that interpolates\n"
3908 "onto given grids, instead of using and returning the original grids.\n"),
3909 AUTHORS("Jana Mendrok, Manfred Brath"),
3910 OUT("p_grid",
3911 "lat_grid",
3912 "lon_grid",
3913 "t_field",
3914 "z_field",
3915 "vmr_field",
3916 "particle_bulkprop_field",
3917 "particle_bulkprop_names"),
3918 GOUT(),
3919 GOUT_TYPE(),
3920 GOUT_DESC(),
3921 IN("abs_species", "atm_fields_compact", "atmosphere_dim"),
3922 GIN("delim", "p_min", "check_gridnames"),
3923 GIN_TYPE("String", "Numeric", "Index"),
3924 GIN_DEFAULT("-", "0", "0"),
3925 GIN_DESC(/* delim */
3926 "Delimiter string of *scat_species* elements.",
3927 /* p_min */
3928 "Minimum-pressure level to consider (for TOA).",
3929 /* check_gridnames */
3930 "A flag with value 1 or 0. If set to one, the gridnames of \n"
3931 " the *atm_fields_compact* are checked.")));
3932
3933 md_data_raw.push_back(create_mdrecord(
3934 NAME("atmfields_checkedCalc"),
3936 "Checks consistency of (clear sky) atmospheric fields.\n"
3937 "\n"
3938 "The following WSVs are treated: *p_grid*, *lat_grid*, *lon_grid*,\n"
3939 "*t_field*, *vmr_field*, wind_u/v/w_field and mag_u/v/w_field.\n"
3940 "\n"
3941 "If any of the variables above is changed, then this method shall be\n"
3942 "called again (no automatic check that this is fulfilled!).\n"
3943 "\n"
3944 "The tests include that:\n"
3945 " 1. Atmospheric grids (p/lat/lon_grid) are OK with respect to\n"
3946 " *atmosphere_dim* (and vmr_field also regarding *abs_species*).\n"
3947 " 2. Atmospheric fields have sizes consistent with the atmospheric\n"
3948 " grids.\n"
3949 " 3. *abs_f_interp_order* is not zero if any wind is nonzero.\n"
3950 " 4. All values in *t_field* are > 0.\n"
3951 "\n"
3952 "Default is that values in *vmr_field* are demanded to be >= 0\n"
3953 "(ie. zero allowed, in contrast to *t_field*), but this\n"
3954 "requirement can be removed by the *negative_vmr_ok* argument.\n"
3955 "\n"
3956 "If any test fails, there is an error. Otherwise,\n"
3957 "*atmfields_checked* is set to 1.\n"
3958 "\n"
3959 "The cloudbox is covered by *cloudbox_checked*, *z_field* is\n"
3960 "part of the checks done around *atmgeom_checked*.\n"),
3961 AUTHORS("Patrick Eriksson"),
3962 OUT("atmfields_checked"),
3963 GOUT(),
3964 GOUT_TYPE(),
3965 GOUT_DESC(),
3966 IN("atmosphere_dim",
3967 "p_grid",
3968 "lat_grid",
3969 "lon_grid",
3970 "abs_species",
3971 "t_field",
3972 "vmr_field",
3973 "wind_u_field",
3974 "wind_v_field",
3975 "wind_w_field",
3976 "mag_u_field",
3977 "mag_v_field",
3978 "mag_w_field",
3979 "abs_f_interp_order"),
3980 GIN("negative_vmr_ok"),
3981 GIN_TYPE("Index"),
3982 GIN_DEFAULT("0"),
3983 GIN_DESC("Flag whether to accept vmr_field < 0."
3984 )));
3985
3986 md_data_raw.push_back(create_mdrecord(
3987 NAME("atmgeom_checkedCalc"),
3989 "Checks consistency of geometric considerations of the atmosphere.\n"
3990 "\n"
3991 "The following WSVs are checked: *z_field*, *refellipsoid*, *z_surface*,\n"
3992 "*lat_true* and *lon_true*. If any of the variables above is changed,\n"
3993 "then this method shall be called again (no automatic check that this is\n"
3994 "fulfilled!).\n"
3995 "\n"
3996 "The tests include that:\n"
3997 " 1. *refellipsoid* has correct size, and that eccentricity is\n"
3998 " set to zero if 1D atmosphere.\n"
3999 " 2. *z_field* and *z_surface* have sizes consistent with the\n"
4000 " atmospheric grids.\n"
4001 " 3. There is no gap between *z_surface* and *z_field*.\n"
4002 " 4. A rough search of maximum gradient of the altitude of the pressure\n"
4003 " level closest to 500 hPa is made. If this value exceeds the GIN\n"
4004 " *max500hpa_gradient* an error is issued. Please note that the unit\n"
4005 " of this GIN is m per 100km. For normal conditions on Earth, large\n"
4006 " scale gradients of the 500 hPa level is in the order of 20m/100km.\n"
4007 "\n"
4008 "*lat_true* and *lon_true* are allowed to be empty.\n"
4009 "\n"
4010 "If any test fails, there is an error. Otherwise, *atmgeom_checked*\n"
4011 "is set to 1.\n"
4012 "\n"
4013 "See further *atmgeom_checkedCalc*.\n"),
4014 AUTHORS("Patrick Eriksson"),
4015 OUT("atmgeom_checked"),
4016 GOUT(),
4017 GOUT_TYPE(),
4018 GOUT_DESC(),
4019 IN("atmosphere_dim",
4020 "p_grid",
4021 "lat_grid",
4022 "lon_grid",
4023 "z_field",
4024 "refellipsoid",
4025 "z_surface",
4026 "lat_true",
4027 "lon_true"),
4028 GIN("max500hpa_gradient"),
4029 GIN_TYPE("Numeric"),
4030 GIN_DEFAULT("500"),
4031 GIN_DESC("The maximum allowed gradient of 500 hPa pressure level [m/100km].")));
4032
4033 md_data_raw.push_back(create_mdrecord(
4034 NAME("AtmosphereSet1D"),
4036 "Sets the atmospheric dimension to 1D.\n"
4037 "\n"
4038 "Sets *atmosphere_dim* to 1, and the latitude and longitude grids\n"
4039 "are set to be empty.\n"),
4040 AUTHORS("Patrick Eriksson"),
4041 OUT("atmosphere_dim", "lat_grid", "lon_grid"),
4042 GOUT(),
4043 GOUT_TYPE(),
4044 GOUT_DESC(),
4045 IN(),
4046 GIN(),
4047 GIN_TYPE(),
4048 GIN_DEFAULT(),
4049 GIN_DESC()));
4050
4051 md_data_raw.push_back(create_mdrecord(
4052 NAME("AtmosphereSet2D"),
4054 "Sets the atmospheric dimension to be 2D.\n"
4055 "\n"
4056 "Sets *atmosphere_dim* to 2 and the longitude grid to be empty.\n"),
4057 AUTHORS("Patrick Eriksson"),
4058 OUT("atmosphere_dim", "lon_grid"),
4059 GOUT(),
4060 GOUT_TYPE(),
4061 GOUT_DESC(),
4062 IN(),
4063 GIN(),
4064 GIN_TYPE(),
4065 GIN_DEFAULT(),
4066 GIN_DESC()));
4067
4068 md_data_raw.push_back(create_mdrecord(
4069 NAME("AtmosphereSet3D"),
4071 "Sets the atmospheric dimension to 3D.\n"
4072 "\n"
4073 "Sets *atmosphere_dim* to 3, and *lat_true* and *lon_true* are\n"
4074 "set to be empty.\n"),
4075 AUTHORS("Patrick Eriksson"),
4076 OUT("atmosphere_dim", "lat_true", "lon_true"),
4077 GOUT(),
4078 GOUT_TYPE(),
4079 GOUT_DESC(),
4080 IN(),
4081 GIN(),
4082 GIN_TYPE(),
4083 GIN_DEFAULT(),
4084 GIN_DESC()));
4085
4086 md_data_raw.push_back(create_mdrecord(
4087 NAME("AtmRawRead"),
4089 "Reads atmospheric data from a scenario.\n"
4090 "\n"
4091 "An atmospheric scenario includes the following data for each\n"
4092 "position (pressure, latitude, longitude) in the atmosphere:\n"
4093 " 1. temperature field\n"
4094 " 2. the corresponding altitude field\n"
4095 " 3. vmr fields for the absorption species\n"
4096 "The vmr fields read are governed by the species given in\n"
4097 "*abs_species*. Beside gaseous species, these can also contain\n"
4098 "purely absorbing particulate matter. In the latter case the\n"
4099 "profiles are supposed to provide the mass content (unit kg/m3) for\n"
4100 "clouds and precipitation rate (unit kg/m2/s) for precipitation\n"
4101 "instead of the vmr.\n"
4102 "\n"
4103 "The data is stored in different files. This methods reads all\n"
4104 "files and creates the variables *t_field_raw*, *z_field_raw* and\n"
4105 "*vmr_field_raw*. *nlte_field_raw* is set to empty.\n"
4106 "\n"
4107 "Files in a scenarios should be named matching the pattern of:\n"
4108 "basename.speciesname.xml\n (for temperature and altitude the\n"
4109 "expected 'speciesname' are 't' and'z', respectivly)."
4110 "\n"
4111 "The files can be anywhere, but they must all be in the same\n"
4112 "directory, selected by 'basename'. The files are chosen by the\n"
4113 "species name. If you have more than one tag group for the same\n"
4114 "species, the same profile will be used.\n"),
4115 AUTHORS("Claudia Emde"),
4116 OUT("t_field_raw",
4117 "z_field_raw",
4118 "vmr_field_raw",
4119 "nlte_field_raw",
4120 "nlte_level_identifiers",
4121 "nlte_vibrational_energies"),
4122 GOUT(),
4123 GOUT_TYPE(),
4124 GOUT_DESC(),
4125 IN("abs_species"),
4126 GIN("basename"),
4127 GIN_TYPE("String"),
4129 GIN_DESC("Name of scenario, probably including the full path. For "
4130 "example: \"/smiles_local/arts-data/atmosphere/fascod/"
4131 "tropical\"")));
4132
4133 md_data_raw.push_back(create_mdrecord(
4134 NAME("AtmWithNLTERawRead"),
4136 "Reads atmospheric data from a scenario.\n"
4137 "\n"
4138 "An atmospheric scenario includes the following data for each\n"
4139 "position (pressure, latitude, longitude) in the atmosphere:\n"
4140 " 1. temperature field\n"
4141 " 2. the corresponding altitude field\n"
4142 " 3. vmr fields for the gaseous species\n"
4143 " 4. Non-LTE temperature fields and matching identifiers\n"
4144 "The data is stored in different files. This method reads all\n"
4145 "files and creates the variables *t_field_raw*, *z_field_raw*,\n"
4146 "*vmr_field_raw*, *nlte_field_raw*, and *nlte_level_identifiers*.\n"
4147 "\n"
4148 "Files in a scenarios should be named matching the pattern of:\n"
4149 "tropical.H2O.xml\n"
4150 "\n"
4151 "The files can be anywhere, but they must be all in the same\n"
4152 "directory, selected by 'basename'. The files are chosen by the\n"
4153 "species name. If you have more than one tag group for the same\n"
4154 "species, the same profile will be used.\n"),
4155 AUTHORS("Claudia Emde", "Richard Larsson"),
4156 OUT("t_field_raw",
4157 "z_field_raw",
4158 "vmr_field_raw",
4159 "nlte_field_raw",
4160 "nlte_level_identifiers",
4161 "nlte_vibrational_energies"),
4162 GOUT(),
4163 GOUT_TYPE(),
4164 GOUT_DESC(),
4165 IN("abs_species"),
4166 GIN("basename", "expect_vibrational_energies"),
4167 GIN_TYPE("String", "Index"),
4168 GIN_DEFAULT(NODEF, "0"),
4169 GIN_DESC("Name of scenario, probably including the full path. For "
4170 "example: \"/smiles_local/arts-data/atmosphere/fascod/"
4171 "tropical\"",
4172 "Should ev.xml be read?")));
4173
4174 md_data_raw.push_back(create_mdrecord(
4175 NAME("atm_fields_compactAddConstant"),
4177 "Adds a constant field to atm_fields_compact.\n"
4178 "\n"
4179 "This is handy, e.g., for nitrogen or oxygen. The constant value can\n"
4180 "be appended or prepended as an additional field to the already\n"
4181 "existing collection of fields. All dimensions (pressure, latitude,\n"
4182 "longitude) are filled up, so this works for 1D, 2D, or 3D\n"
4183 "atmospheres.\n"
4184 "\n"
4185 "The passed *name* of the field has to be in accordance with the\n"
4186 "tagging structure described for *atm_fields_compact*.\n"
4187 "\n"
4188 "A list of condensibles can be optionally specified if the VMR of\n"
4189 "the added species is assuming dry air. The VMR of the added species\n"
4190 "is then scaled down by the sum of the condensibles' VMR:\n"
4191 "VMR * (1 - VMR_sum_of_condensibles).\n"
4192 "For Earth this should be set to [\"abs_species-H2O\"]\n"),
4193 AUTHORS("Stefan Buehler, Oliver Lemke"),
4194 OUT("atm_fields_compact"),
4195 GOUT(),
4196 GOUT_TYPE(),
4197 GOUT_DESC(),
4198 IN("atm_fields_compact"),
4199 GIN("name", "value", "prepend", "condensibles"),
4200 GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
4201 GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
4202 GIN_DESC(
4203 "Name of additional atmospheric field, with constant value.",
4204 "Constant value of additional field.",
4205 "0 = Append to the end, 1 = insert at the beginning.",
4206 "List of condensibles used to scale down the VMR of the added species.")));
4207
4208 md_data_raw.push_back(create_mdrecord(
4209 NAME("atm_fields_compactAddSpecies"),
4211 "Adds a field to atm_fields_compact, with interpolation.\n"
4212 "\n"
4213 "This method appends or prepends a *GriddedField3* to *atm_fields_compact*.\n"
4214 "The *GriddedField3* is interpolated upon the grid of\n"
4215 "*atm_fields_compact*. A typical use case for this method may be to\n"
4216 "add a climatology of some gas when this gas is needed for radiative\n"
4217 "transfer calculations, but not yet present in *atm_fields_compact*.\n"
4218 "One case where this happens is when using the Chevalier91L dataset\n"
4219 "for infrared simulations.\n"
4220 "\n"
4221 "The grids in *atm_fields_compact* must fully encompass the grids in\n"
4222 "the *GriddedField3* to be added, for interpolation to succeed. If\n"
4223 "this is not the case, a RuntimeError is thrown.\n"
4224 "\n"
4225 "The passed *name* of the field has to be in accordance with the\n"
4226 "tagging structure described for *atm_fields_compact*.\n"),
4227 AUTHORS("Gerrit Holl"),
4228 OUT("atm_fields_compact"),
4229 GOUT(),
4230 GOUT_TYPE(),
4231 GOUT_DESC(),
4232 IN("atm_fields_compact"),
4233 GIN("name", "value", "prepend"),
4234 GIN_TYPE("String", "GriddedField3", "Index"),
4235 GIN_DEFAULT(NODEF, NODEF, "0"),
4236 GIN_DESC("Name of additional atmospheric field.",
4237 "Value of additional atmospheric field.",
4238 "0 = Append to the end, 1 = insert at the beginning.")));
4239
4240 md_data_raw.push_back(create_mdrecord(
4241 NAME("atm_fields_compactCleanup"),
4243 "Removes unrealistically small or erroneous data from\n"
4244 "*atm_fields_compact* (or other GriddedField4 data)\n"
4245 "\n"
4246 "This WSM checks if the data in *atm_fields_compact* contains\n"
4247 "values smaller than the given *threshold*. In this case, these\n"
4248 "values will be set to zero.\n"
4249 "\n"
4250 "The method should be applied if *atm_fields_compact* contains\n"
4251 "unrealistically small or erroneous data (NWP/GCM model data\n"
4252 "occassionally contains negative values, which are numerical\n"
4253 "artefacts rather than physical values.)\n"),
4254 AUTHORS("Jana Mendrok"),
4255 OUT("atm_fields_compact"),
4256 GOUT(),
4257 GOUT_TYPE(),
4258 GOUT_DESC(),
4259 IN("atm_fields_compact"),
4260 GIN("threshold"),
4261 GIN_TYPE("Numeric"),
4263 GIN_DESC(
4264 "Threshold below which *atm_fields_compact* values are set to zero.")));
4265
4266 md_data_raw.push_back(create_mdrecord(
4267 NAME("atm_fields_compactCreateFromField"),
4269 "Initiates *atm_fields_compact* from a field.\n"
4270 "\n"
4271 "*atm_fields_compact* will have the same size and grids as the GriddedField3,\n"
4272 "but with one dimension as length 1.\n"),
4273 AUTHORS("Richard Larsson"),
4274 OUT("atm_fields_compact"),
4275 GOUT(),
4276 GOUT_TYPE(),
4277 GOUT_DESC(),
4278 IN(),
4279 GIN("name", "field"),
4280 GIN_TYPE("String", "GriddedField3"),
4282 GIN_DESC("Name atmospheric field.", "The atmospheric field.")));
4283
4284 md_data_raw.push_back(create_mdrecord(
4285 NAME("atm_fields_compactFromMatrix"),
4287 "Sets *atm_fields_compact* from 1D fields given in form of a matrix.\n"
4288 "\n"
4289 "For batch calculations it is handy to store atmospheric\n"
4290 "profiles in an array of matrix. We take such a matrix, and create\n"
4291 "*atm_fields_compact* from it.\n"
4292 "\n"
4293 "The matrix must contain one row for each pressure level.\n"
4294 "\n"
4295 "Not all fields contained in the matrix must be selected into\n"
4296 "*atm_fields_compact*, but the selection must at least contain\n"
4297 "fields of pressure, temperature, altitude and one absorption\n"
4298 "species.\n"
4299 "The matrix can contain some additional fields which are not\n"
4300 "directly used by ARTS for calculations but can be required for\n"
4301 "further processing, e.g. wind speed and direction. These fields do\n"
4302 "not need to be transfered into the *atm_fields_compact* variable.\n"
4303 "\n"
4304 "Selection of fields into *atm_fields_compact* works by providing a\n"
4305 "field name tag in *field_names* for the selected fields, while\n"
4306 "unselected fields are tagged by 'ignore'. Order of tags in\n"
4307 "*field_names* is strictly taken as corresponding to column order in\n"
4308 "the matrix.\n"
4309 "The pressure fields are by convention the first column of the\n"
4310 "matrix, hence must not be tagged. That is, there must be given one\n"
4311 "field name tag less than matrix columns.\n"
4312 "\n"
4313 "For detailed tagging conventions see *atm_fields_compact*.\n"
4314 "\n"
4315 "Works only for *atmosphere_dim==1.*\n"),
4316 AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4317 OUT("atm_fields_compact"),
4318 GOUT(),
4319 GOUT_TYPE(),
4320 GOUT_DESC(),
4321 IN("atmosphere_dim"),
4322 GIN("gin1", "field_names"),
4323 GIN_TYPE("Matrix", "ArrayOfString"),
4325 GIN_DESC("One atmosphere matrix from batch input ArrayOfMatrix.",
4326 "Order/names of atmospheric fields.")));
4327
4328 md_data_raw.push_back(create_mdrecord(
4329 NAME("backend_channel_responseFlat"),
4331 "Sets up a rectangular channel response.\n"
4332 "\n"
4333 "The method assumes that all channels have the same response.\n"
4334 "\n"
4335 "The response of the backend channels is hee assumed to be constant\n"
4336 "inside the resolution width, and zero outside.\n"),
4337 AUTHORS("Patrick Eriksson"),
4338 OUT("backend_channel_response"),
4339 GOUT(),
4340 GOUT_TYPE(),
4341 GOUT_DESC(),
4342 IN(),
4343 GIN("resolution"),
4344 GIN_TYPE("Numeric"),
4346 GIN_DESC("The spectrometer resolution.")));
4347
4348 md_data_raw.push_back(create_mdrecord(
4349 NAME("backend_channel_responseGaussian"),
4351 "Sets up a Gaussian backend channel response.\n"
4352 "\n"
4353 "The method assumes that all channels have the same response.\n"
4354 "\n"
4355 "This method works as *backend_channel_responseGaussianConstant*\n"
4356 "but handles the case where the response of each channel must be\n"
4357 "described. Here the FWHM is specified for each *f_backend*.\n"
4358 "\n"
4359 "The GINs *fwhm* and *grid_npoints* work in the same way as for\n"
4360 "*antenna_responseGaussianConstant*. A negative *grid_width*\n"
4361 "gives a grid that is twice the FWHM of each channel.\n"),
4362 AUTHORS("Patrick Eriksson, Oliver Lemke"),
4363 OUT("backend_channel_response"),
4364 GOUT(),
4365 GOUT_TYPE(),
4366 GOUT_DESC(),
4367 IN("f_backend"),
4368 GIN("fwhm", "grid_width", "grid_npoints"),
4369 GIN_TYPE("Vector", "Numeric", "Index"),
4370 GIN_DEFAULT(NODEF, "-1.0", "21"),
4371 GIN_DESC("Full width at half-maximum of the Gaussian function.",
4372 "Full width of grid.",
4373 "Number of points to represent the grid.")));
4374
4375 md_data_raw.push_back(create_mdrecord(
4376 NAME("backend_channel_responseGaussianConstant"),
4378 "Sets up a single Gaussian backend channel response.\n"
4379 "\n"
4380 "The method assumes that all channels have the same response.\n"
4381 "\n"
4382 "The GINs *fwhm* and *grid_npoints* work in the same way as for\n"
4383 "*antenna_responseGaussianConstant*. A negative *grid_width*\n"
4384 "gives a grid that is twice the FWHM.\n"),
4385 AUTHORS("Patrick Eriksson, Oliver Lemke"),
4386 OUT("backend_channel_response"),
4387 GOUT(),
4388 GOUT_TYPE(),
4389 GOUT_DESC(),
4390 IN(),
4391 GIN("fwhm", "grid_width", "grid_npoints"),
4392 GIN_TYPE("Numeric", "Numeric", "Index"),
4393 GIN_DEFAULT(NODEF, "-1.0", "21"),
4394 GIN_DESC("Full width at half-maximum of the Gaussian function.",
4395 "Full width of grid.",
4396 "Number of points to represent the grid.")));
4397
4398 md_data_raw.push_back(create_mdrecord(
4399 NAME("batch_atm_fields_compactAddConstant"),
4400 DESCRIPTION("Adds a constant field to batch_atm_fields_compact.\n"
4401 "\n"
4402 "Applies *atm_fields_compactAddConstant* to each batch.\n"
4403 "The format is equal to that WSM.\n"),
4404 AUTHORS("Gerrit Holl"),
4405 OUT("batch_atm_fields_compact"),
4406 GOUT(),
4407 GOUT_TYPE(),
4408 GOUT_DESC(),
4409 IN("batch_atm_fields_compact"),
4410 GIN("name", "value", "prepend", "condensibles"),
4411 GIN_TYPE("String", "Numeric", "Index", "ArrayOfString"),
4412 GIN_DEFAULT(NODEF, NODEF, "0", "[]"),
4413 GIN_DESC(
4414 "Name of additional atmospheric field, with constant value.",
4415 "Constant value of additional field.",
4416 "0 = Append to the end, 1 = insert at the beginning.",
4417 "List of condensibles used to scale down the VMR of the added species.")));
4418
4419 md_data_raw.push_back(create_mdrecord(
4420 NAME("batch_atm_fields_compactAddSpecies"),
4422 "Adds a field to *batch_atm_fields_compact*, with interpolation.\n"
4423 "\n"
4424 "This method appends or prepends a *GriddedField3* to each *atm_fields_compact*.\n"
4425 "in *batch_atm_fields_compact*. For details, see *atm_fields_compactAddSpecies*.\n"),
4426 AUTHORS("Gerrit Holl"),
4427 OUT("batch_atm_fields_compact"),
4428 GOUT(),
4429 GOUT_TYPE(),
4430 GOUT_DESC(),
4431 IN("batch_atm_fields_compact"),
4432 GIN("name", "value", "prepend"),
4433 GIN_TYPE("String", "GriddedField3", "Index"),
4434 GIN_DEFAULT(NODEF, NODEF, "0"),
4435 GIN_DESC(
4436 "Name of additional atmospheric field. Use, e.g., vmr_ch4 for methane VMR",
4437 "Value of additional atmospheric field.",
4438 "0 = Append to the end, 1 = insert at the beginning.")));
4439
4440 md_data_raw.push_back(create_mdrecord(
4441 NAME("batch_atm_fields_compactCleanup"),
4443 "Removes unrealistically small or erroneous data from each data field\n"
4444 "of *batch_atm_fields_compact* (or other AerrayOfGriddedField4 data)\n"
4445 "\n"
4446 "This WSM checks if the data in *batch_atm_fields_compact* contains\n"
4447 "values smaller than the given *threshold*. In this case, these\n"
4448 "values will be set to zero.\n"
4449 "\n"
4450 "The method should be applied if *batch_atm_fields_compact* contains\n"
4451 "unrealistically small or erroneous data (NWP/GCM model data\n"
4452 "occassionally contains negative values, which are numerical\n"
4453 "artefacts rather than physical values.)\n"),
4454 AUTHORS("Jana Mendrok"),
4455 OUT("batch_atm_fields_compact"),
4456 GOUT(),
4457 GOUT_TYPE(),
4458 GOUT_DESC(),
4459 IN("batch_atm_fields_compact"),
4460 GIN("threshold"),
4461 GIN_TYPE("Numeric"),
4463 GIN_DESC(
4464 "Threshold below which *atm_fields_compact* values are set to zero.")));
4465
4466 md_data_raw.push_back(create_mdrecord(
4467 NAME("batch_atm_fields_compactFromArrayOfMatrix"),
4469 "Expand batch of 1D atmospheric state matrices to batch_atm_fields_compact.\n"
4470 "\n"
4471 "This is used to handle 1D batch cases, e.g. from NWP/GCM model like\n"
4472 "the Chevallier91L data set, stored in a matrix (it is preferred,\n"
4473 "though, to immediatedly store the model fields as\n"
4474 "*ArrayOfGriddedField4* and use *ReadXML* to load them directly into\n"
4475 "*batch_atm_fields_compact*).\n"
4476 "\n"
4477 "Works only for *atmosphere_dim==1.*\n"
4478 "\n"
4479 "See *atm_fields_compactFromMatrix* for basic documentation.\n"
4480 "\n"
4481 "See *batch_atm_fields_compactAddConstant* and\n"
4482 "batch_atm_fields_compactAddSpecies* for adding additional fields.\n"),
4483 AUTHORS("Stefan Buehler", "Daniel Kreyling", "Jana Mendrok"),
4484 OUT("batch_atm_fields_compact"),
4485 GOUT(),
4486 GOUT_TYPE(),
4487 GOUT_DESC(),
4488 IN("atmosphere_dim"),
4489 GIN("atmospheres_fields", "field_names"),
4490 GIN_TYPE("ArrayOfMatrix", "ArrayOfString"),
4492 GIN_DESC("Batch of atmospheres stored in one array of matrix",
4493 "Order/names of atmospheric fields.")));
4494
4495 md_data_raw.push_back(create_mdrecord(
4496 NAME("CIAInfo"),
4498 "Display information about the given CIA tags.\n"
4499 "The CIA tags shown are in the same format as needed by *abs_speciesSet*.\n"),
4500 AUTHORS("Oliver Lemke"),
4501 OUT(),
4502 GOUT(),
4503 GOUT_TYPE(),
4504 GOUT_DESC(),
4505 IN(),
4506 GIN("catalogpath", "cia_tags"),
4507 GIN_TYPE("String", "ArrayOfString"),
4509 GIN_DESC("Path to the CIA catalog directory.",
4510 "Array of CIA tags to view, e.g. [ \"N2-N2\", \"H2-H2\" ]")));
4511
4512 md_data_raw.push_back(create_mdrecord(
4513 NAME("CIARecordReadFromFile"),
4514 DESCRIPTION("Reads CIARecord from Hitran-style file.\n"),
4515 AUTHORS("Richard Larsson"),
4516 OUT(),
4517 GOUT("cia_record"),
4518 GOUT_TYPE("CIARecord"),
4519 GOUT_DESC("CIARecord type variable for input and output."),
4520 IN(),
4521 GIN("species_tag", "filename"),
4522 GIN_TYPE("String", "String"),
4524 GIN_DESC("SpeciesTag string to associate with this CIARecord. See "
4525 "*abs_speciesSet* for correct format.",
4526 "Filename of HITRAN CIA data file.")));
4527
4528 md_data_raw.push_back(create_mdrecord(
4529 NAME("cloudboxOff"),
4531 "Deactivates the cloud box.\n"
4532 "\n"
4533 "Use this method if no scattering calculations shall be performed.\n"
4534 "\n"
4535 "The function sets *cloudbox_on* to 0, *cloudbox_limits*,\n"
4536 "*pnd_field*, *scat_data*, *scat_data_raw*, *iy_cloudbox_agenda*\n"
4537 "and *particle_masses* to be empty and sizes *dpnd_field_dx* to be\n"
4538 "consitent with *jacobian_quantities*.\n"),
4539 AUTHORS("Patrick Eriksson"),
4540 OUT("cloudbox_on",
4541 "ppath_inside_cloudbox_do",
4542 "cloudbox_limits",
4543 "iy_cloudbox_agenda",
4544 "pnd_field",
4545 "dpnd_field_dx",
4546 "scat_species",
4547 "scat_data",
4548 "scat_data_raw",
4549 "scat_data_checked",
4550 "particle_masses"),
4551 GOUT(),
4552 GOUT_TYPE(),
4553 GOUT_DESC(),
4554 IN("jacobian_quantities"),
4555 GIN(),
4556 GIN_TYPE(),
4557 GIN_DEFAULT(),
4558 GIN_DESC(),
4559 SETMETHOD(false),
4560 AGENDAMETHOD(false),
4561 USES_TEMPLATES(false),
4562 PASSWORKSPACE(true),
4563 PASSWSVNAMES(false)));
4564
4565 md_data_raw.push_back(create_mdrecord(
4566 NAME("cloudboxSetAutomatically"),
4568 "Sets the cloud box to encompass the cloud given by the entries\n"
4569 "in *particle_field*.\n"
4570 "\n"
4571 "This WSM handles one *Tensor4* type *particle_field* at a time. It can\n"
4572 "be used to determine the cloudbox from *particle_bulkprop_field*\n"
4573 "\n"
4574 "The function must be called before executing any WSM that applies\n"
4575 "*cloudbox_limits*.\n"
4576 "\n"
4577 "The function iterates over all 3D fields in *particle_field* (which\n"
4578 "might correspond to different particle bulk properties as in\n"
4579 "*particle_bulkprop_field*). Each field is searched for the first\n"
4580 "and last pressure index, where the value is unequal to zero. This\n"
4581 "index is then copied to *cloudbox_limits*.\n"
4582 "If *particle_field* is empty, the cloudbox is switched off\n"
4583 "(*cloudbox_on*=0).\n"
4584 "\n"
4585 "Additionaly the lower cloudbox_limit is altered by *cloudbox_margin*.\n"
4586 "The margin is given as a height difference in meters and transformed\n"
4587 "into a pressure (via isothermal barometric height formula). This\n"
4588 "alteration is to ensure covering photons that leave the cloud, but\n"
4589 "reenter through a limb path.\n"
4590 "If *cloudbox_margin* is set to -1 (default), the cloudbox will extend\n"
4591 "to the surface. Hence, the lower cloudbox_limit is set to 0 (index\n"
4592 "of first pressure level).\n"
4593 "*cloudbox_margin* will be applied on each call of the WSM.\n"
4594 "\n"
4595 "Works only for *atmosphere_dim==1.*\n"),
4596 AUTHORS("Jana Mendrok, Daniel Kreyling"),
4597 OUT("cloudbox_on", "cloudbox_limits"),
4598 GOUT(),
4599 GOUT_TYPE(),
4600 GOUT_DESC(),
4601 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4602 GIN("particle_field", "cloudbox_margin"),
4603 GIN_TYPE("Tensor4", "Numeric"),
4604 GIN_DEFAULT(NODEF, "-1"),
4605 GIN_DESC("A collection of particle property fields (e.g."
4606 " *particle_bulkprop_field*).",
4607 "Minimum distance [m] between lowest 'cloudy' level and"
4608 " cloudbox lower limit. If set to *-1* (default), the"
4609 " cloudbox lower limit is fixed to 0, i.e., corresponds to"
4610 " the lowest atmospheric level (or the surface).")));
4611
4612 md_data_raw.push_back(create_mdrecord(
4613 NAME("cloudboxSetFullAtm"),
4615 "Sets the cloudbox to cover the full atmosphere.\n"
4616 "\n"
4617 "The cloudbox is always set to fully span the atmosphere vertically.\n"
4618 "\n"
4619 "For the latitide and longitide dimensions, default is to leave room\n"
4620 "between the cloudbox an the end of the atmosphere in these dimensions.\n"
4621 "This is required for some scattering solvers (MC and DOIT). In other\n"
4622 "cases it can be OK to let the cloudbox to fill the atmosphere fully\n"
4623 "also in latitude and longitude. This is triggered by setting the GIN\n"
4624 "fullfull to 1.\n"),
4625 AUTHORS("Claudia Emde, Jana Mendrok, Patrick Eriksson"),
4626 OUT("cloudbox_on", "cloudbox_limits"),
4627 GOUT(),
4628 GOUT_TYPE(),
4629 GOUT_DESC(),
4630 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4631 GIN("fullfull"),
4632 GIN_TYPE("Index"),
4633 GIN_DEFAULT("0"),
4634 GIN_DESC("Flag to let cloudbox reach ends of lat and lon grids.")));
4635
4636 md_data_raw.push_back(create_mdrecord(
4637 NAME("cloudboxSetManually"),
4639 "Sets the cloud box to encompass the given positions.\n"
4640 "\n"
4641 "The function sets *cloudbox_on* to 1 and sets *cloudbox_limits*\n"
4642 "following the given pressure, latitude and longitude positions.\n"
4643 "The index limits in *cloudbox_limits* are selected to give the\n"
4644 "smallest possible cloud box that encompass the given points.\n"
4645 "\n"
4646 "The points must be given in the same order as used in\n"
4647 "*cloudbox_limits*. That means that the first keyword argument\n"
4648 "shall be a higher pressure than argument two, while the latitude\n"
4649 "and longitude points are given in increasing order. Positions\n"
4650 "given for dimensions not used by the selected atmospheric\n"
4651 "dimensionality are ignored.\n"
4652 "\n"
4653 "The given pressure points can be outside the range of *p_grid*.\n"
4654 "The pressure limit is then set to the end point of *p_grid*.\n"
4655 "The given latitude and longitude points must be inside the range\n"
4656 "of the corresponding grid. In addition, the latitude and longitude\n"
4657 "points cannot be inside the outermost grid ranges as the latitude\n"
4658 "and longitude limits in *cloudbox_limits* are not allowed to be\n"
4659 "grid end points.\n"),
4660 AUTHORS("Patrick Eriksson"),
4661 OUT("cloudbox_on", "cloudbox_limits"),
4662 GOUT(),
4663 GOUT_TYPE(),
4664 GOUT_DESC(),
4665 IN("atmosphere_dim", "p_grid", "lat_grid", "lon_grid"),
4666 GIN("p1", "p2", "lat1", "lat2", "lon1", "lon2"),
4667 GIN_TYPE(
4668 "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4670 GIN_DESC("Upper pressure point.",
4671 "Lower pressure point.",
4672 "Lower latitude point.",
4673 "Upper latitude point.",
4674 "Lower longitude point.",
4675 "Upper longitude point.")));
4676
4677 md_data_raw.push_back(create_mdrecord(
4678 NAME("cloudboxSetManuallyAltitude"),
4680 "Sets the cloud box to encompass the given positions.\n"
4681 "\n"
4682 "As *cloudboxSetManually* but uses altitudes instead of pressure.\n"
4683 "The given altitude points can be outside the range of *z_field*.\n"
4684 "The altitude limit is then set to the end point of *p_grid*.\n"),
4685 AUTHORS("Claudia Emde"),
4686 OUT("cloudbox_on", "cloudbox_limits"),
4687 GOUT(),
4688 GOUT_TYPE(),
4689 GOUT_DESC(),
4690 IN("atmosphere_dim", "z_field", "lat_grid", "lon_grid"),
4691 GIN("z1", "z2", "lat1", "lat2", "lon1", "lon2"),
4692 GIN_TYPE(
4693 "Numeric", "Numeric", "Numeric", "Numeric", "Numeric", "Numeric"),
4695 GIN_DESC("Lower altitude point.",
4696 "Upper altitude point.",
4697 "Lower latitude point.",
4698 "Upper latitude point.",
4699 "Lower longitude point.",
4700 "Upper longitude point.")));
4701
4702 md_data_raw.push_back(create_mdrecord(
4703 NAME("cloudbox_checkedCalc"),
4705 "Checks consistency and validity of the cloudbox governing variables.\n"
4706 "\n"
4707 "The following WSVs are treated: *cloudbox_on*, *cloudbox_limits*,\n"
4708 "*pnd_field*, *scat_data*, *scat_species*, *abs_species*, *particle_masses*\n"
4709 "*particle_bulkprop_field*, *particle_bulkprop_names* and wind_u/v/w_field.\n"
4710 "\n"
4711 "If any of these variables is changed, then this method shall be\n"
4712 "called again (no automatic check that this is fulfilled!).\n"
4713 "\n"
4714 "The main checks are if the cloudbox limits are OK with respect to\n"
4715 "the atmospheric dimensionality and the limits of the atmosphere,\n"
4716 "and that the scattering element variables *pnd_field* and\n"
4717 "*scat_data* match in size.\n"
4718 "\n"
4719 "Default is to demand that there is a margin between the cloudbox\n"
4720 "and the ends of latitide and longitude grids. Such margins are\n"
4721 "required by MC and DOIT/3D, but are not needed for e.g. IBA.\n"
4722 "If the margins not are a demand, set GIN demand_latlon_margin to 0.\n"
4723 "\n"
4724 "Further checks on *scat_data* are performed in *scat_data_checkedCalc*\n"
4725 "\n"
4726 "*scat_species* and *particle_masses* must either be empty or have a\n"
4727 "size that matches the other data. If non-empty, some check of these\n"
4728 "variables are performed.\n"
4729 "\n"
4730 "If any test fails, there is an error. Otherwise, *cloudbox_checked*\n"
4731 "is set to 1.\n"),
4732 AUTHORS("Patrick Eriksson, Jana Mendrok"),
4733 OUT("cloudbox_checked"),
4734 GOUT(),
4735 GOUT_TYPE(),
4736 GOUT_DESC(),
4737 IN("atmfields_checked",
4738 "atmosphere_dim",
4739 "p_grid",
4740 "lat_grid",
4741 "lon_grid",
4742 "z_field",
4743 "z_surface",
4744 "wind_u_field",
4745 "wind_v_field",
4746 "wind_w_field",
4747 "cloudbox_on",
4748 "cloudbox_limits",
4749 "pnd_field",
4750 "dpnd_field_dx",
4751 "jacobian_quantities",
4752 "scat_data",
4753 "scat_species",
4754 "particle_masses",
4755 "abs_species"),
4756 GIN("demand_latlon_margin", "negative_pnd_ok"),
4757 GIN_TYPE("Index", "Index"),
4758 GIN_DEFAULT("1", "0"),
4759 GIN_DESC("Flag to demand margin or not w.r.t. to ends of lat/lon grids.",
4760 "Flag whether to accept pnd_field < 0.")));
4761
4762 md_data_raw.push_back(create_mdrecord(
4763 NAME("cloudbox_field_monoIterate"),
4765 "Iterative solution of the VRTE (DOIT method).\n"
4766 "\n"
4767 "A solution for the RTE with scattering is found using the\n"
4768 "DOIT method:\n"
4769 " 1. Calculate scattering integral using *doit_scat_field_agenda*.\n"
4770 " 2. Calculate RT with fixed scattered field using\n"
4771 " *doit_rte_agenda*.\n"
4772 " 3. Convergence test using *doit_conv_test_agenda*.\n"
4773 "\n"
4774 "Note: The atmospheric dimensionality *atmosphere_dim* can be\n"
4775 " either 1 or 3. To these dimensions the method adapts\n"
4776 " automatically. 2D scattering calculations are not\n"
4777 " supported.\n"),
4778 AUTHORS("Claudia Emde, Jakob Doerr"),
4779 OUT("cloudbox_field_mono"),
4780 GOUT(),
4781 GOUT_TYPE(),
4782 GOUT_DESC(),
4783 IN("cloudbox_field_mono",
4784 "doit_scat_field_agenda",
4785 "doit_rte_agenda",
4786 "doit_conv_test_agenda"),
4787 GIN("accelerated"),
4788 GIN_TYPE("Index"),
4789 GIN_DEFAULT("0"),
4790 GIN_DESC(
4791 "Index wether to accelerate only the intensity (1) or the whole Stokes Vector (4)")));
4792
4793 md_data_raw.push_back(create_mdrecord(
4794 NAME("cloudbox_fieldCrop"),
4796 "Extracts a part of an existing *cloudbox_field*.\n"
4797 "\n"
4798 "The cropping is defined by defining new cloudbox limits. Note that\n"
4799 "*new_limit0* is an index with respect to *p_grid*, etc.\n"
4800 "\n"
4801 "The following must be valid:\n"
4802 " new_limit0 >= cloudbox_limits[0]\n"
4803 " new_limit1 <= cloudbox_limits[1]\n"
4804 " new_limit2 >= cloudbox_limits[2]\n"
4805 " new_limit3 <= cloudbox_limits[3]\n"
4806 " new_limit4 >= cloudbox_limits[4]\n"
4807 " new_limit5 <= cloudbox_limits[5]\n"
4808 "\n"
4809 "Indexes for dimensions not used are ignored.\n"),
4810 AUTHORS("Patrick Eriksson"),
4811 OUT("cloudbox_field", "cloudbox_limits"),
4812 GOUT(),
4813 GOUT_TYPE(),
4814 GOUT_DESC(),
4815 IN("atmosphere_dim", "cloudbox_on", "cloudbox_limits", "cloudbox_field"),
4816 GIN("new_limit0",
4817 "new_limit1",
4818 "new_limit2",
4819 "new_limit3",
4820 "new_limit4",
4821 "new_limit5"),
4822 GIN_TYPE("Index", "Index", "Index", "Index", "Index", "Index"),
4823 GIN_DEFAULT("0", "0", "0", "0", "0", "0"),
4824 GIN_DESC("New value for cloudbox_limits[0].",
4825 "New value for cloudbox_limits[1].",
4826 "New value for cloudbox_limits[2].",
4827 "New value for cloudbox_limits[3].",
4828 "New value for cloudbox_limits[4].",
4829 "New value for cloudbox_limits[5].")));
4830
4831 md_data_raw.push_back(create_mdrecord(
4832 NAME("cloudbox_fieldInterp2Azimuth"),
4834 "Interpolate a *cloudbox_field* with azimuthal dependency to a *cloudbox_field*"
4835 "with a specific azimuth angle.\n"
4836 "\n"
4837 "Intended use: Call directly after DisortCalc if sun is present and yCalc should be\n"
4838 "should be run afterwards."
4839 "\n"
4840 "In ARTS a 1D atmosphere cannot have a azimuth dependency, but if a \n"
4841 "collimated source like a sun is present even a 1D atmosphere has an \n"
4842 "azimuth dependency. To overcome this constraint, the user must set an \n"
4843 "additional local sensor line of sight azimuth angle for the true\n"
4844 "geopgraphical location of the atmosphere. For this angle the \n"
4845 "*cloudbox_field* with azimuthal dependency is interpolated to a \n"
4846 "*cloudbox_field* without azimuthal dependency\n"),
4847 AUTHORS("Manfred Brath"),
4848 OUT("cloudbox_field"),
4849 GOUT(),
4850 GOUT_TYPE(),
4851 GOUT_DESC(),
4852 IN("cloudbox_field","cloudbox_on", "aa_grid"),
4853 GIN("local_los_azimuth_angle","aa_interp_order"),
4854 GIN_TYPE("Numeric","Index"),
4855 GIN_DEFAULT(NODEF,"1"),
4856 GIN_DESC("Local line of sight azimuth angle",
4857 "Azimuth angle interpolation order.")));
4858
4859 md_data_raw.push_back(create_mdrecord(
4860 NAME("cloudbox_fieldSetFromPrecalc"),
4862 "Sets the initial cloudbox intensity field *cloudbox_field* from a\n"
4863 "precalculated field.\n"
4864 "\n"
4865 "This method sets the (monochromatic) first guess radiation field\n"
4866 "inside the cloudbox from a precalculated *cloudbox_field_precalc*,\n"
4867 "e.g., from the solution of a similar atmospheric scenario. The\n"
4868 "dimensions of *cloudbox_field_precalc* have to be consistent with\n"
4869 "the DOIT setup in terms of frequencies, pressure levels inside the\n"
4870 "cloudbox, polar angles used as well as the stokes dimension.\n"
4871 "Incoming field on the cloudbox boundaries is adapted to the actual\n"
4872 "clearsky incoming field as, e.g., calculated by *DoitGetIncoming*.\n"),
4873 AUTHORS("Jana Mendrok"),
4874 OUT("cloudbox_field"),
4875 GOUT(),
4876 GOUT_TYPE(),
4877 GOUT_DESC(),
4878 IN("cloudbox_field",
4879 "za_grid",
4880 "f_grid",
4881 "atmosphere_dim",
4882 "stokes_dim",
4883 "cloudbox_limits",
4884 "doit_is_initialized"),
4885 GIN("cloudbox_field_precalc"),
4886 GIN_TYPE("Tensor7"),
4888 GIN_DESC("Precalculated radiation field (of type *cloudbox_field*)")));
4889
4890 md_data_raw.push_back(create_mdrecord(
4891 NAME("cloudbox_fieldSetClearsky"),
4893 "Interpolate clearsky field on all gridpoints in cloudbox.\n"
4894 "\n"
4895 "This method uses a linear 1D/3D interpolation scheme to obtain the\n"
4896 "radiation field on all grid points inside the cloud box from the\n"
4897 "clear sky field on the cloudbox boundary. This radiation field\n"
4898 "is taken as the first guess radiation field in the DOIT module.\n"
4899 "\n"
4900 "Set the *all_frequencies* to 1 if the clearsky field shall be used\n"
4901 "as initial field for all frequencies. Set it to 0 if the clear sky\n"
4902 "field shall be used only for the first frequency in *f_grid*. For\n"
4903 "later frequencies, *cloudbox_field* of the previous frequency is then\n"
4904 "used.\n"),
4905 AUTHORS("Sreerekha T.R. and Claudia Emde"),
4906 OUT("cloudbox_field"),
4907 GOUT(),
4908 GOUT_TYPE(),
4909 GOUT_DESC(),
4910 IN("cloudbox_field",
4911 "p_grid",
4912 "lat_grid",
4913 "lon_grid",
4914 "cloudbox_limits",
4915 "atmosphere_dim",
4916 "cloudbox_on",
4917 "doit_is_initialized"),
4918 GIN("all_frequencies"),
4919 GIN_TYPE("Index"),
4920 GIN_DEFAULT("1"),
4921 GIN_DESC("See above.")));
4922
4923 md_data_raw.push_back(create_mdrecord(
4924 NAME("cloudbox_field_monoSetConst"),
4926 "This method sets the initial field inside the cloudbox to a\n"
4927 "constant value. The method works only for monochromatic\n"
4928 "calculations (number of elements in f_grid=1).\n"
4929 "\n"
4930 "The user can specify a value for each Stokes dimension in the\n"
4931 "control file by *value*.\n"),
4932 AUTHORS("Claudia Emde"),
4933 OUT("cloudbox_field_mono"),
493