ARTS  2.4.0(git:4fb77825)
m_general.cc
Go to the documentation of this file.
1 /* Copyright (C) 2002-2012
2  Patrick Eriksson <Patrick.Eriksson@chalmers.se>
3  Stefan Buehler <sbuehler@ltu.se>
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License as published by the
7  Free Software Foundation; either version 2, or (at your option) any
8  later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18  USA. */
19 
20 /*===========================================================================
21  === File description
22  ===========================================================================*/
23 
37 /*===========================================================================
38  === External declarations
39  ===========================================================================*/
40 
41 #include "arts.h"
42 
43 #include <cstdlib>
44 #include <stdexcept>
45 #ifdef TIME_SUPPORT
46 #include <unistd.h>
47 #endif
48 
49 #include "array.h"
50 #include "check_input.h"
51 #include "m_general.h"
52 #include "messages.h"
53 #include "mystring.h"
54 
55 #include "math_funcs.h"
56 #include "wsv_aux.h"
57 
58 #include "auto_md.h"
59 #include "workspace_ng.h"
60 
61 #include "sensor.h"
62 
63 #include "fastem.h"
64 #include "tessem.h"
65 
66 extern const Numeric SPEED_OF_LIGHT;
67 
68 /*===========================================================================
69  === The functions (in alphabetical order)
70  ===========================================================================*/
71 
72 /* Workspace method: Doxygen documentation will be auto-generated */
73 void INCLUDE(const Verbosity&) {}
74 
75 /* Workspace method: Doxygen documentation will be auto-generated */
76 void Print(Workspace& ws _U_,
77  // WS Generic Input:
78  const Agenda& x,
79  // Keywords:
80  const Index& level,
81  const Verbosity& verbosity) {
82  ostringstream os;
83  os << " " << x.name() << " {\n";
84  x.print(os, " ");
85  os << " "
86  << "}";
88  SWITCH_OUTPUT(level, os.str());
89 }
90 
91 /* Workspace method: Doxygen documentation will be auto-generated */
92 void Print(Workspace& ws _U_,
93  // WS Generic Input:
94  const ArrayOfAgenda& x,
95  // Keywords:
96  const Index& level,
97  const Verbosity& verbosity) {
98  ostringstream os;
99  os << " " << x.nelem() << " agendas: {\n";
100  for (Index i = 0; i < x.nelem(); i++) {
101  os << " " << x[i].name() << ": {\n";
102  x[i].print(os, " ");
103  os << " "
104  << "}\n";
105  }
106  os << " "
107  << "}";
108  CREATE_OUTS;
109  SWITCH_OUTPUT(level, os.str());
110 }
111 
112 /* Workspace method: Doxygen documentation will be auto-generated */
113 void Print( // WS Generic Input:
114  const ArrayOfGridPos& x,
115  // Keywords:
116  const Index& level,
117  const Verbosity& verbosity) {
118  ostringstream os;
119  for (Index i = 0; i < x.nelem(); i++) {
120  if (i) os << '\n';
121  os << " " << x[i].idx << " " << x[i].fd[0] << " " << x[i].fd[1];
122  }
123  CREATE_OUTS;
124  SWITCH_OUTPUT(level, os.str());
125 }
126 
127 /* Workspace method: Doxygen documentation will be auto-generated */
128 void Print( // WS Generic Input:
129  const ArrayOfCIARecord& cia_data,
130  // Keywords:
131  const Index& level,
132  const Verbosity& verbosity) {
133  CREATE_OUTS;
134 
135  ostringstream os;
136  os << " CIA tag; Spectral range [cm-1]; Temp range [K]; # of sets\n";
137  for (Index i = 0; i < cia_data.nelem(); i++)
138  for (Index j = 0; j < cia_data[i].DatasetCount(); j++) {
139  Vector temp_grid = cia_data[i].TemperatureGrid(j);
140  Vector freq_grid = cia_data[i].FrequencyGrid(j);
141 
142  os << setprecision(2) << std::fixed << " " << cia_data[i].MoleculeName(0)
143  << "-CIA-" << cia_data[i].MoleculeName(1) << "-" << j << "; "
144  << freq_grid[0] / 100. / SPEED_OF_LIGHT << " - "
145  << freq_grid[freq_grid.nelem() - 1] / 100. / SPEED_OF_LIGHT
146  << std::fixed << "; " << temp_grid[0] << " - "
147  << temp_grid[temp_grid.nelem() - 1] << "; " << temp_grid.nelem()
148  << "\n";
149  }
150  SWITCH_OUTPUT(level, os.str());
151 }
152 
153 /* Workspace method: Doxygen documentation will be auto-generated */
154 void Print( // WS Generic Input:
155  const ArrayOfString& x,
156  // Keywords:
157  const Index& level,
158  const Verbosity& verbosity) {
159  ostringstream os;
160  for (Index i = 0; i < x.nelem(); i++) {
161  if (i) os << '\n';
162  os << " " << x[i];
163  }
164  CREATE_OUTS;
165  SWITCH_OUTPUT(level, os.str());
166 }
167 
168 /* Workspace method: Doxygen documentation will be auto-generated */
169 void Print( // WS Generic Input:
170  const Ppath& x,
171  // Keywords:
172  const Index& level,
173  const Verbosity& verbosity) {
174  CREATE_OUTS;
175  SWITCH_OUTPUT(level, "dim: ");
176  Print(x.dim, level, verbosity);
177  SWITCH_OUTPUT(level, "np: ");
178  Print(x.np, level, verbosity);
179  SWITCH_OUTPUT(level, "constant: ");
180  Print(x.constant, level, verbosity);
181  SWITCH_OUTPUT(level, "background: ");
182  Print(x.background, level, verbosity);
183  SWITCH_OUTPUT(level, "start_pos: ");
184  Print(x.start_pos, level, verbosity);
185  SWITCH_OUTPUT(level, "start_los: ");
186  Print(x.start_los, level, verbosity);
187  SWITCH_OUTPUT(level, "start_lstep: ");
188  Print(x.start_lstep, level, verbosity);
189  SWITCH_OUTPUT(level, "pos: ");
190  Print(x.pos, level, verbosity);
191  SWITCH_OUTPUT(level, "los: ");
192  Print(x.los, level, verbosity);
193  SWITCH_OUTPUT(level, "r: ");
194  Print(x.r, level, verbosity);
195  SWITCH_OUTPUT(level, "lstep: ");
196  Print(x.lstep, level, verbosity);
197  SWITCH_OUTPUT(level, "end_pos: ");
198  Print(x.end_pos, level, verbosity);
199  SWITCH_OUTPUT(level, "end_los: ");
200  Print(x.end_los, level, verbosity);
201  SWITCH_OUTPUT(level, "end_lstep: ");
202  Print(x.end_lstep, level, verbosity);
203  SWITCH_OUTPUT(level, "nreal: ");
204  Print(x.nreal, level, verbosity);
205  SWITCH_OUTPUT(level, "ngroup: ");
206  Print(x.ngroup, level, verbosity);
207  SWITCH_OUTPUT(level, "gp_p: ");
208  Print(x.gp_p, level, verbosity);
209  if (x.dim >= 2) {
210  SWITCH_OUTPUT(level, "gp_lat: ");
211  Print(x.gp_lat, level, verbosity);
212  }
213  if (x.dim == 3) {
214  SWITCH_OUTPUT(level, "gp_lon: ");
215  Print(x.gp_lon, level, verbosity);
216  }
217 }
218 
219 /* Workspace method: Doxygen documentation will be auto-generated */
220 void Print( // WS Generic Input:
221  const ArrayOfPpath& x,
222  // Keywords:
223  const Index& level,
224  const Verbosity& verbosity) {
225  CREATE_OUTS;
226  for (Index i = 0; i < x.nelem(); i++) {
227  ostringstream os;
228  os << "Ppath element " << i << ": ";
229  SWITCH_OUTPUT(level, os.str());
230  Print(x[i], level, verbosity);
231  }
232 }
233 
234 /* Workspace method: Doxygen documentation will be auto-generated */
235 #ifdef TIME_SUPPORT
236 void Print( // WS Generic Input:
237  const Timer& timer,
238  // Keywords:
239  const Index& level,
240  const Verbosity& verbosity) {
241  CREATE_OUTS;
242 
243  if (!timer.finished) {
245  level,
246  "Timer error: Nothing to output. Use timerStart/timerStop first.");
247  return;
248  }
249 
250  ostringstream os;
251  os.setf(ios::showpoint | ios::fixed);
252 
253  static long clktck = 0;
254 
255  if (clktck == 0)
256  if ((clktck = sysconf(_SC_CLK_TCK)) < 0)
257  throw runtime_error("Timer error: Unable to determine CPU clock ticks");
258 
259  os << " * CPU time total: " << setprecision(2)
260  << (Numeric)(
261  (timer.cputime_end.tms_stime - timer.cputime_start.tms_stime) +
262  (timer.cputime_end.tms_utime - timer.cputime_start.tms_utime)) /
263  (Numeric)clktck;
264 
265  os << " user: " << setprecision(2)
266  << (Numeric)(timer.cputime_end.tms_utime - timer.cputime_start.tms_utime) /
267  (Numeric)clktck;
268 
269  os << " system: " << setprecision(2)
270  << (Numeric)(timer.cputime_end.tms_stime - timer.cputime_start.tms_stime) /
271  (Numeric)clktck;
272 
273  os << "\n real: " << setprecision(2)
274  << (Numeric)(timer.realtime_end - timer.realtime_start) / (Numeric)clktck;
275 
276  os << " " << setprecision(2)
277  << (Numeric)(
278  (timer.cputime_end.tms_stime - timer.cputime_start.tms_stime) +
279  (timer.cputime_end.tms_utime - timer.cputime_start.tms_utime)) /
280  (Numeric)(timer.realtime_end - timer.realtime_start) * 100.
281  << "%CPU\n";
282 
283  SWITCH_OUTPUT(level, os.str());
284 }
285 #else
286 void Print( // WS Generic Input:
287  const Timer&,
288  // Keywords:
289  const Index& level,
290  const Verbosity& verbosity) {
291  SWITCH_OUTPUT(level, "Timer error: ARTS was compiled without timer support");
292 }
293 #endif
294 
295 /* Workspace method: Doxygen documentation will be auto-generated */
296 void Print( // WS Generic Input:
297  const TessemNN& x,
298  // Keywords:
299  const Index& level,
300  const Verbosity& verbosity) {
301  CREATE_OUTS;
302  ostringstream os;
303  os << "TessemNN size: Inputs = " << x.nb_inputs
304  << ", Outputs = " << x.nb_outputs << ", Cache = " << x.nb_cache;
305  SWITCH_OUTPUT(level, os.str());
306 }
307 
308 /* Workspace method: Doxygen documentation will be auto-generated */
309 void PrintWorkspace( // Workspace reference
310  Workspace& ws,
311  // Keywords:
312  const Index& only_allocated,
313  const Index& level,
314  const Verbosity& verbosity) {
315  ostringstream os;
316 
317  if (only_allocated)
318  os << " Allocated workspace variables: \n";
319  else
320  os << " Workspace variables: \n";
321  for (Index i = 0; i < ws.nelem(); i++) {
322  if (!only_allocated) {
323  os << " ";
324  PrintWsvName(os, i);
325  if (ws.is_initialized(i)) os << ws.depth(i);
326  os << "\n";
327  } else if (ws.is_initialized(i)) {
328  os << " ";
329  PrintWsvName(os, i);
330  os << ws.depth(i) << "\n";
331  }
332  }
333  CREATE_OUTS;
334  SWITCH_OUTPUT(level, os.str());
335 }
336 
337 /* Workspace method: Doxygen documentation will be auto-generated */
338 void StringJoin(String& out,
339  const String& in1,
340  const String& in2,
341  const String& in3,
342  const String& in4,
343  const String& in5,
344  const String& in6,
345  const String& in7,
346  const String& in8,
347  const String& in9,
348  const String& in10,
349  const Verbosity&) {
350  out = in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + in10;
351 }
352 
353 /* Workspace method: Doxygen documentation will be auto-generated */
354 #ifdef TIME_SUPPORT
355 void timerStart( // WS Output
356  Timer& timer,
357  const Verbosity&) {
358  if ((timer.realtime_start = times(&timer.cputime_start)) == (clock_t)-1)
359  throw runtime_error("Timer error: Unable to get current CPU time");
360 
361  timer.running = true;
362  timer.finished = false;
363 }
364 #else
365 void timerStart( // WS Output
366  Timer& /*starttime*/,
367  const Verbosity&) {
368  throw runtime_error(
369  "Timer error: ARTS was compiled without POSIX support, thus timer\nfunctions are not available.");
370 }
371 #endif
372 
373 /* Workspace method: Doxygen documentation will be auto-generated */
374 #ifdef TIME_SUPPORT
375 void timerStop( // WS Input
376  Timer& timer,
377  const Verbosity&) {
378  if (!timer.running)
379  throw runtime_error(
380  "Timer error: Unable to stop timer that's not running.");
381 
382  if ((timer.realtime_end = times(&(timer.cputime_end))) == (clock_t)-1)
383  throw runtime_error("Timer error: Unable to get current CPU time");
384 
385  timer.running = false;
386  timer.finished = true;
387 }
388 #else
389 void timerStop( // WS Input
390  const Timer&,
391  const Verbosity&) {
392  throw runtime_error(
393  "Timer error: ARTS was compiled without POSIX support, thus timer\nfunctions are not available.");
394 }
395 #endif
396 
397 /* Workspace method: Doxygen documentation will be auto-generated */
398 void Error(const String& msg, const Verbosity& verbosity) {
399  CREATE_OUT0;
400  throw runtime_error(msg);
401 }
402 
403 /* Workspace method: Doxygen documentation will be auto-generated */
404 void Exit(const Verbosity& verbosity) {
405  CREATE_OUT1;
406  out1 << " Forced exit.\n";
407  arts_exit(EXIT_SUCCESS);
408 }
409 
410 /* Workspace method: Doxygen documentation will be auto-generated */
413  const Index& index,
414  const Verbosity&) {
415  ostringstream os;
416  os << " Local value of iy_unit, agenda #" << index << " of "
417  << test_agenda_array.nelem();
418  test_agenda_arrayExecute(ws, index, os.str(), test_agenda_array);
419 }
420 
421 void Test(const Verbosity&) {
422  Numeric za, aa, dza_new, daa_new;
423  const Numeric za0 = 67, aa0 = 12, dza = 9, daa = 11;
424  add_za_aa(za, aa, za0, aa0, dza, daa);
425  cout << za << " " << aa << endl;
426  diff_za_aa(dza_new, daa_new, za0, aa0, za, aa);
427  cout << dza_new << " " << daa_new << endl;
428 }
429 
430 /* Workspace method: Doxygen documentation will be auto-generated */
431 void verbosityInit( // WS Output:
432  Verbosity& verbosity) {
434 
435  verbosity.set_screen_verbosity(verbosity_at_launch.get_screen_verbosity());
436  verbosity.set_agenda_verbosity(verbosity_at_launch.get_agenda_verbosity());
437  verbosity.set_file_verbosity(verbosity_at_launch.get_file_verbosity());
438 }
439 
440 /* Workspace method: Doxygen documentation will be auto-generated */
441 void verbositySet( // WS Output:
443  // WS Generic Input:
444  const Index& agenda,
445  const Index& screen,
446  const Index& file) {
447  verbosity.set_agenda_verbosity(agenda);
448  verbosity.set_screen_verbosity(screen);
449  verbosity.set_file_verbosity(file);
450 }
451 
452 /* Workspace method: Doxygen documentation will be auto-generated */
453 void verbositySetAgenda( // WS Output:
455  // WS Generic Input:
456  const Index& level) {
457  verbosity.set_agenda_verbosity(level);
458 }
459 
460 /* Workspace method: Doxygen documentation will be auto-generated */
461 void verbositySetFile( // WS Output:
463  // WS Generic Input:
464  const Index& level) {
465  verbosity.set_file_verbosity(level);
466 }
467 
468 /* Workspace method: Doxygen documentation will be auto-generated */
469 void verbositySetScreen( // WS Output:
471  // WS Generic Input:
472  const Index& level) {
473  verbosity.set_screen_verbosity(level);
474 }
475 
476 /* Workspace method: Doxygen documentation will be auto-generated */
477 void GetEnvironmentVariable( // WS Generic Output:
478  String& str,
479  // WS Generic Input:
480  const String& envvar,
481  const Verbosity& /* verbosity */) {
482  char* cstr;
483  cstr = std::getenv(envvar.c_str());
484  if (cstr == NULL) {
485  std::ostringstream os;
486  os << "Environment variable " << envvar << " does not exist.";
487  throw std::runtime_error(os.str());
488  }
489  str = cstr != NULL ? String(cstr) : "";
490 }
491 
492 /* Workspace method: Doxygen documentation will be auto-generated */
493 void GetNumberOfThreads(Index& nthreads, const Verbosity& /* verbosity */) {
494  nthreads = arts_omp_get_max_threads();
495 }
496 
497 /* Workspace method: Doxygen documentation will be auto-generated */
498 void GetEnvironmentVariable( // WS Generic Output:
499  Index& i,
500  // WS Generic Input:
501  const String& envvar,
502  const Verbosity& /* verbosity */) {
503  char* cstr;
504  cstr = std::getenv(envvar.c_str());
505  if (cstr == NULL || std::strlen(cstr) == 0) {
506  std::ostringstream os;
507  os << "Environment variable " << envvar << " is empty or does not exist.";
508  throw std::runtime_error(os.str());
509  }
510  std::istringstream is(cstr);
511  is >> i;
512  if (!is.eof()) {
513  ostringstream os;
514  os << "Cannot convert environment variable " << envvar
515  << " to Index: " << cstr;
516  throw std::runtime_error(os.str());
517  }
518 }
519 
520 /* Workspace method: Doxygen documentation will be auto-generated */
521 #ifdef _OPENMP
522 void SetNumberOfThreads(const Index& nthreads,
523  const Verbosity& /* verbosity */) {
524  omp_set_num_threads((int)nthreads);
525 }
526 #else
527 void SetNumberOfThreads(const Index& /* nthreads */,
528  const Verbosity& verbosity) {
529  CREATE_OUT1;
530  out1 << "No OpenMP support. Can't change number of threads.\n";
531 }
532 #endif
timerStart
void timerStart(Timer &, const Verbosity &)
WORKSPACE METHOD: timerStart.
Definition: m_general.cc:365
Exit
void Exit(const Verbosity &verbosity)
WORKSPACE METHOD: Exit.
Definition: m_general.cc:404
SetNumberOfThreads
void SetNumberOfThreads(const Index &, const Verbosity &verbosity)
WORKSPACE METHOD: SetNumberOfThreads.
Definition: m_general.cc:527
Print
void Print(Workspace &ws, const Agenda &x, const Index &level, const Verbosity &verbosity)
Definition: m_general.cc:76
auto_md.h
add_za_aa
void add_za_aa(Numeric &za, Numeric &aa, const Numeric &za0, const Numeric &aa0, const Numeric &dza, const Numeric &daa)
Adds up zenith and azimuth angles.
Definition: ppath.cc:406
verbositySetFile
void verbositySetFile(Verbosity &verbosity, const Index &level)
WORKSPACE METHOD: verbositySetFile.
Definition: m_general.cc:461
ARTS::Var::verbosity
Verbosity verbosity(Workspace &ws) noexcept
Definition: autoarts.h:7112
ARTS::Var::timer
Timer timer(Workspace &ws) noexcept
Definition: autoarts.h:7064
arts_omp_get_max_threads
int arts_omp_get_max_threads()
Wrapper for omp_get_max_threads.
Definition: arts_omp.cc:46
SWITCH_OUTPUT
#define SWITCH_OUTPUT(x, y)
Definition: m_general.h:46
TessemNN
Definition: tessem.h:33
ARTS::Var::test_agenda_array
ArrayOfAgenda test_agenda_array(Workspace &ws) noexcept
Definition: autoarts.h:7036
array.h
This file contains the definition of Array.
ARTS::Var::Vector::pos
std::size_t pos() const noexcept
Definition: autoarts.h:1678
Ppath
The structure to describe a propagation path and releated quantities.
Definition: ppath.h:48
CREATE_OUT1
#define CREATE_OUT1
Definition: messages.h:205
Agenda
The Agenda class.
Definition: agenda_class.h:44
Timer
Definition: m_general.h:68
Array
This can be used to make arrays out of anything.
Definition: array.h:108
verbositySetAgenda
void verbositySetAgenda(Verbosity &verbosity, const Index &level)
WORKSPACE METHOD: verbositySetAgenda.
Definition: m_general.cc:453
GetNumberOfThreads
void GetNumberOfThreads(Index &nthreads, const Verbosity &)
WORKSPACE METHOD: GetNumberOfThreads.
Definition: m_general.cc:493
sensor.h
Sensor modelling functions.
tessem.h
This file contains functions that are adapted from TESSEM code which is used to calculate surface emi...
CREATE_OUT0
#define CREATE_OUT0
Definition: messages.h:204
messages.h
Declarations having to do with the four output streams.
_U_
#define _U_
Definition: config.h:183
my_basic_string< char >
verbositySetScreen
void verbositySetScreen(Verbosity &verbosity, const Index &level)
WORKSPACE METHOD: verbositySetScreen.
Definition: m_general.cc:469
timerStop
void timerStop(const Timer &, const Verbosity &)
Definition: m_general.cc:389
ConstVectorView::nelem
Index nelem() const
Returns the number of elements.
Definition: matpackI.cc:51
SPEED_OF_LIGHT
const Numeric SPEED_OF_LIGHT
Numeric
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
Verbosity
Definition: messages.h:49
fastem.h
This file contains functions that are adapted from FASTEM code which is used to calculate surface emi...
verbosity_at_launch
Verbosity verbosity_at_launch
The global message verbosity settings:
Definition: messages.cc:34
Verbosity::get_agenda_verbosity
Index get_agenda_verbosity() const
Definition: messages.h:65
verbositySet
void verbositySet(Verbosity &verbosity, const Index &agenda, const Index &screen, const Index &file)
WORKSPACE METHOD: verbositySet.
Definition: m_general.cc:441
test_agenda_arrayExecute
void test_agenda_arrayExecute(Workspace &ws, const Index agenda_array_index, const String &iy_unit, const ArrayOfAgenda &input_agenda_array)
Definition: auto_md.cc:25217
math_funcs.h
Workspace::nelem
Index nelem()
Get the number of workspace variables.
Definition: workspace_ng.h:162
INCLUDE
void INCLUDE(const Verbosity &)
WORKSPACE METHOD: INCLUDE.
Definition: m_general.cc:73
Workspace::depth
Index depth(Index i)
Return scoping level of the given WSV.
Definition: workspace_ng.h:123
PrintWsvName
void PrintWsvName(OutputStream &outstream, Index i)
Print WSV name to output stream.
Definition: workspace_ng.h:180
PrintWorkspace
void PrintWorkspace(Workspace &ws, const Index &only_allocated, const Index &level, const Verbosity &verbosity)
Definition: m_general.cc:309
Error
void Error(const String &msg, const Verbosity &verbosity)
WORKSPACE METHOD: Error.
Definition: m_general.cc:398
workspace_ng.h
This file contains the Workspace class.
TestArrayOfAgenda
void TestArrayOfAgenda(Workspace &ws, const ArrayOfAgenda &test_agenda_array, const Index &index, const Verbosity &)
WORKSPACE METHOD: TestArrayOfAgenda.
Definition: m_general.cc:411
String
my_basic_string< char > String
The String type for ARTS.
Definition: mystring.h:280
Test
void Test(const Verbosity &)
WORKSPACE METHOD: Test.
Definition: m_general.cc:421
Workspace
Workspace class.
Definition: workspace_ng.h:40
ARTS::Var::Vector::name
const Group::String & name() const noexcept
Definition: autoarts.h:1681
Verbosity::get_screen_verbosity
Index get_screen_verbosity() const
Definition: messages.h:66
Workspace::is_initialized
bool is_initialized(Index i)
Checks existence of the given WSV.
Definition: workspace_ng.h:118
Verbosity::get_file_verbosity
Index get_file_verbosity() const
Definition: messages.h:67
diff_za_aa
void diff_za_aa(Numeric &dza, Numeric &daa, const Numeric &za0, const Numeric &aa0, const Numeric &za, const Numeric &aa)
Takes the difference of zenith and azimuth angles.
Definition: ppath.cc:444
ARTS::Var::x
Vector x(Workspace &ws) noexcept
Definition: autoarts.h:7346
Index
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
verbosityInit
void verbosityInit(Verbosity &verbosity)
WORKSPACE METHOD: verbosityInit.
Definition: m_general.cc:431
arts_exit
void arts_exit(int status)
This is the exit function of ARTS.
Definition: arts.cc:42
check_input.h
Vector
The Vector class.
Definition: matpackI.h:860
GetEnvironmentVariable
void GetEnvironmentVariable(String &str, const String &envvar, const Verbosity &)
WORKSPACE METHOD: GetEnvironmentVariable.
Definition: m_general.cc:477
StringJoin
void StringJoin(String &out, const String &in1, const String &in2, const String &in3, const String &in4, const String &in5, const String &in6, const String &in7, const String &in8, const String &in9, const String &in10, const Verbosity &)
WORKSPACE METHOD: StringJoin.
Definition: m_general.cc:338
Array::nelem
Index nelem() const
Number of elements.
Definition: array.h:195
wsv_aux.h
Auxiliary header stuff related to workspace variable groups.
mystring.h
This file contains the definition of String, the ARTS string class.
CREATE_OUTS
#define CREATE_OUTS
Definition: messages.h:209
arts.h
The global header file for ARTS.
m_general.h
Template functions for general supergeneric ws methods.