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