ARTS 2.5.4 (git: 4c0d3b4d)
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
66extern const Numeric SPEED_OF_LIGHT;
67
68/*===========================================================================
69 === The functions (in alphabetical order)
70 ===========================================================================*/
71
72/* Workspace method: Doxygen documentation will be auto-generated */
73void INCLUDE(const Verbosity&) {}
74
75/* Workspace method: Doxygen documentation will be auto-generated */
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 */
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 << "}";
109 SWITCH_OUTPUT(level, os.str());
110}
111
112/* Workspace method: Doxygen documentation will be auto-generated */
113void 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 }
124 SWITCH_OUTPUT(level, os.str());
125}
126
127/* Workspace method: Doxygen documentation will be auto-generated */
128void Print( // WS Generic Input:
129 const ArrayOfCIARecord& cia_data,
130 // Keywords:
131 const Index& level,
132 const Verbosity& verbosity) {
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 */
154void 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 }
165 SWITCH_OUTPUT(level, os.str());
166}
167
168/* Workspace method: Doxygen documentation will be auto-generated */
169void Print( // WS Generic Input:
170 const Ppath& x,
171 // Keywords:
172 const Index& level,
173 const Verbosity& verbosity) {
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 */
220void Print( // WS Generic Input:
221 const ArrayOfPpath& x,
222 // Keywords:
223 const Index& level,
224 const Verbosity& verbosity) {
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
236void Print( // WS Generic Input:
237 const Timer& timer,
238 // Keywords:
239 const Index& level,
240 const Verbosity& verbosity) {
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 ARTS_USER_ERROR_IF ((clktck = sysconf(_SC_CLK_TCK)) < 0,
257 "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
286void 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 */
296void Print( // WS Generic Input:
297 const TessemNN& x,
298 // Keywords:
299 const Index& level,
300 const Verbosity& verbosity) {
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 */
309void 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 }
334 SWITCH_OUTPUT(level, os.str());
335}
336
337/* Workspace method: Doxygen documentation will be auto-generated */
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
355void timerStart( // WS Output
356 Timer& timer,
357 const Verbosity&) {
358 ARTS_USER_ERROR_IF ((timer.realtime_start = times(&timer.cputime_start)) == (clock_t)-1,
359 "Timer error: Unable to get current CPU time");
360
361 timer.running = true;
362 timer.finished = false;
363}
364#else
365void timerStart( // WS Output
366 Timer& /*starttime*/,
367 const Verbosity&) {
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
375void timerStop( // WS Input
376 Timer& timer,
377 const Verbosity&) {
379 "Timer error: Unable to stop timer that's not running.");
380
381 ARTS_USER_ERROR_IF ((timer.realtime_end = times(&(timer.cputime_end))) == (clock_t)-1,
382 "Timer error: Unable to get current CPU time");
383
384 timer.running = false;
385 timer.finished = true;
386}
387#else
388void timerStop( // WS Input
389 const Timer&,
390 const Verbosity&) {
392 "Timer error: ARTS was compiled without POSIX support, thus timer\nfunctions are not available.");
393}
394#endif
395
396/* Workspace method: Doxygen documentation will be auto-generated */
397void Error(const String& msg, const Verbosity& verbosity) {
399 ARTS_USER_ERROR ( msg);
400}
401
402/* Workspace method: Doxygen documentation will be auto-generated */
403void Exit(const Verbosity& verbosity) {
405 out1 << " Forced exit.\n";
406 arts_exit(EXIT_SUCCESS);
407}
408
409/* Workspace method: Doxygen documentation will be auto-generated */
411 const ArrayOfAgenda& test_agenda_array,
412 const Index& index,
413 const Verbosity&) {
414 ostringstream os;
415 os << " Local value of iy_unit, agenda #" << index << " of "
416 << test_agenda_array.nelem();
417 test_agenda_arrayExecute(ws, index, os.str(), test_agenda_array);
418}
419
420void Test(const Verbosity&) {
421 Numeric za, aa, dza_new, daa_new;
422 const Numeric za0 = 67, aa0 = 12, dza = 9, daa = 11;
423 add_za_aa(za, aa, za0, aa0, dza, daa);
424 cout << za << " " << aa << endl;
425 diff_za_aa(dza_new, daa_new, za0, aa0, za, aa);
426 cout << dza_new << " " << daa_new << endl;
427}
428
429/* Workspace method: Doxygen documentation will be auto-generated */
430void verbosityInit( // WS Output:
431 Verbosity& verbosity) {
433
437}
438
439/* Workspace method: Doxygen documentation will be auto-generated */
440void verbositySet( // WS Output:
441 Verbosity& verbosity,
442 // WS Generic Input:
443 const Index& agenda,
444 const Index& screen,
445 const Index& file) {
446 verbosity.set_agenda_verbosity(agenda);
447 verbosity.set_screen_verbosity(screen);
448 verbosity.set_file_verbosity(file);
449}
450
451/* Workspace method: Doxygen documentation will be auto-generated */
452void verbositySetAgenda( // WS Output:
453 Verbosity& verbosity,
454 // WS Generic Input:
455 const Index& level) {
456 verbosity.set_agenda_verbosity(level);
457}
458
459/* Workspace method: Doxygen documentation will be auto-generated */
460void verbositySetFile( // WS Output:
461 Verbosity& verbosity,
462 // WS Generic Input:
463 const Index& level) {
464 verbosity.set_file_verbosity(level);
465}
466
467/* Workspace method: Doxygen documentation will be auto-generated */
468void verbositySetScreen( // WS Output:
469 Verbosity& verbosity,
470 // WS Generic Input:
471 const Index& level) {
472 verbosity.set_screen_verbosity(level);
473}
474
475/* Workspace method: Doxygen documentation will be auto-generated */
476void GetEnvironmentVariable( // WS Generic Output:
477 String& str,
478 // WS Generic Input:
479 const String& envvar,
480 const Verbosity& /* verbosity */) {
481 char* cstr;
482 cstr = std::getenv(envvar.c_str());
483 ARTS_USER_ERROR_IF (cstr == NULL,
484 "Environment variable ", envvar, " does not exist.")
485 str = cstr != NULL ? String(cstr) : "";
486}
487
488/* Workspace method: Doxygen documentation will be auto-generated */
489void GetNumberOfThreads(Index& nthreads, const Verbosity& /* verbosity */) {
490 nthreads = arts_omp_get_max_threads();
491}
492
493/* Workspace method: Doxygen documentation will be auto-generated */
494void GetEnvironmentVariable( // WS Generic Output:
495 Index& i,
496 // WS Generic Input:
497 const String& envvar,
498 const Verbosity& /* verbosity */) {
499 char* cstr;
500 cstr = std::getenv(envvar.c_str());
501 ARTS_USER_ERROR_IF (cstr == NULL || std::strlen(cstr) == 0,
502 "Environment variable ", envvar, " "
503 "is empty or does not exist.")
504 std::istringstream is(cstr);
505 is >> i;
506 ARTS_USER_ERROR_IF (!is.eof(),
507 "Cannot convert environment variable ", envvar, " "
508 "to Index: ", cstr)
509}
510
511/* Workspace method: Doxygen documentation will be auto-generated */
512#ifdef _OPENMP
513void SetNumberOfThreads(const Index& nthreads,
514 const Verbosity& /* verbosity */) {
515 omp_set_num_threads((int)nthreads);
516}
517#else
518void SetNumberOfThreads(const Index& /* nthreads */,
519 const Verbosity& verbosity) {
521 out1 << "No OpenMP support. Can't change number of threads.\n";
522}
523#endif
This file contains the definition of Array.
void arts_exit(int status)
This is the exit function of ARTS.
Definition: arts.cc:42
The global header file for ARTS.
int arts_omp_get_max_threads()
Wrapper for omp_get_max_threads.
Definition: arts_omp.cc:46
void test_agenda_arrayExecute(Workspace &ws, const Index agenda_array_index, const String &iy_unit, const ArrayOfAgenda &input_agenda_array)
Definition: auto_md.cc:25332
The Agenda class.
Definition: agenda_class.h:51
void print(ostream &os, const String &indent) const
Print an agenda.
String name() const
Agenda name.
This can be used to make arrays out of anything.
Definition: array.h:108
Index nelem() const ARTS_NOEXCEPT
Number of elements.
Definition: array.h:197
Index nelem() const noexcept
Returns the number of elements.
Definition: matpackI.h:541
The Vector class.
Definition: matpackI.h:908
Index get_screen_verbosity() const
Definition: messages.h:66
Index get_agenda_verbosity() const
Definition: messages.h:65
void set_screen_verbosity(Index v)
Definition: messages.h:71
void set_agenda_verbosity(Index v)
Definition: messages.h:70
Index get_file_verbosity() const
Definition: messages.h:67
void set_file_verbosity(Index v)
Definition: messages.h:72
Workspace class.
Definition: workspace_ng.h:40
bool is_initialized(Index i) const
Checks existence of the given WSV.
Definition: workspace_ng.h:118
Index depth(Index i)
Return scoping level of the given WSV.
Definition: workspace_ng.h:123
Index nelem() const
Get the number of workspace variables.
Definition: workspace_ng.h:162
#define _U_
Definition: config.h:180
#define ARTS_USER_ERROR(...)
Definition: debug.h:150
#define ARTS_USER_ERROR_IF(condition,...)
Definition: debug.h:134
This file contains functions that are adapted from FASTEM code which is used to calculate surface emi...
void GetEnvironmentVariable(String &str, const String &envvar, const Verbosity &)
WORKSPACE METHOD: GetEnvironmentVariable.
Definition: m_general.cc:476
void GetNumberOfThreads(Index &nthreads, const Verbosity &)
WORKSPACE METHOD: GetNumberOfThreads.
Definition: m_general.cc:489
void Test(const Verbosity &)
WORKSPACE METHOD: Test.
Definition: m_general.cc:420
void verbositySetAgenda(Verbosity &verbosity, const Index &level)
WORKSPACE METHOD: verbositySetAgenda.
Definition: m_general.cc:452
void SetNumberOfThreads(const Index &, const Verbosity &verbosity)
WORKSPACE METHOD: SetNumberOfThreads.
Definition: m_general.cc:518
void INCLUDE(const Verbosity &)
WORKSPACE METHOD: INCLUDE.
Definition: m_general.cc:73
void verbosityInit(Verbosity &verbosity)
WORKSPACE METHOD: verbosityInit.
Definition: m_general.cc:430
void TestArrayOfAgenda(Workspace &ws, const ArrayOfAgenda &test_agenda_array, const Index &index, const Verbosity &)
WORKSPACE METHOD: TestArrayOfAgenda.
Definition: m_general.cc:410
void timerStart(Timer &, const Verbosity &)
WORKSPACE METHOD: timerStart.
Definition: m_general.cc:365
void Error(const String &msg, const Verbosity &verbosity)
WORKSPACE METHOD: Error.
Definition: m_general.cc:397
void timerStop(const Timer &, const Verbosity &)
Definition: m_general.cc:388
const Numeric SPEED_OF_LIGHT
void Exit(const Verbosity &verbosity)
WORKSPACE METHOD: Exit.
Definition: m_general.cc:403
void verbositySet(Verbosity &verbosity, const Index &agenda, const Index &screen, const Index &file)
WORKSPACE METHOD: verbositySet.
Definition: m_general.cc:440
void verbositySetFile(Verbosity &verbosity, const Index &level)
WORKSPACE METHOD: verbositySetFile.
Definition: m_general.cc:460
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
void verbositySetScreen(Verbosity &verbosity, const Index &level)
WORKSPACE METHOD: verbositySetScreen.
Definition: m_general.cc:468
void PrintWorkspace(Workspace &ws, const Index &only_allocated, const Index &level, const Verbosity &verbosity)
Definition: m_general.cc:309
void Print(Workspace &ws, const Agenda &x, const Index &level, const Verbosity &verbosity)
Definition: m_general.cc:76
Template functions for general supergeneric ws methods.
#define SWITCH_OUTPUT(x, y)
Definition: m_general.h:44
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
Verbosity verbosity_at_launch
The global message verbosity settings:
Definition: messages.cc:34
Declarations having to do with the four output streams.
#define CREATE_OUT1
Definition: messages.h:205
#define CREATE_OUTS
Definition: messages.h:209
#define CREATE_OUT0
Definition: messages.h:204
This file contains the definition of String, the ARTS string class.
my_basic_string< char > String
The String type for ARTS.
Definition: mystring.h:287
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:429
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:391
Sensor modelling functions.
The structure to describe a propagation path and releated quantities.
Definition: ppath_struct.h:17
Matrix los
Line-of-sight at each ppath point.
Definition: ppath_struct.h:35
ArrayOfGridPos gp_lon
Index position with respect to the longitude grid.
Definition: ppath_struct.h:55
String background
Radiative background.
Definition: ppath_struct.h:25
Index np
Number of points describing the ppath.
Definition: ppath_struct.h:21
Matrix pos
The distance between start pos and the last position in pos.
Definition: ppath_struct.h:33
ArrayOfGridPos gp_lat
Index position with respect to the latitude grid.
Definition: ppath_struct.h:53
Numeric end_lstep
The distance between end pos and the first position in pos.
Definition: ppath_struct.h:45
Vector start_pos
Start position.
Definition: ppath_struct.h:27
Vector lstep
The length between ppath points.
Definition: ppath_struct.h:39
Numeric start_lstep
Length between sensor and atmospheric boundary.
Definition: ppath_struct.h:31
Numeric constant
The propagation path constant (only used for 1D)
Definition: ppath_struct.h:23
Vector r
Radius of each ppath point.
Definition: ppath_struct.h:37
ArrayOfGridPos gp_p
Index position with respect to the pressure grid.
Definition: ppath_struct.h:51
Vector ngroup
The group index of refraction.
Definition: ppath_struct.h:49
Index dim
Atmospheric dimensionality.
Definition: ppath_struct.h:19
Vector end_pos
End position.
Definition: ppath_struct.h:41
Vector start_los
Start line-of-sight.
Definition: ppath_struct.h:29
Vector nreal
The real part of the refractive index at each path position.
Definition: ppath_struct.h:47
Vector end_los
End line-of-sight.
Definition: ppath_struct.h:43
Index nb_outputs
Definition: tessem.h:35
Index nb_inputs
Definition: tessem.h:34
Index nb_cache
Definition: tessem.h:36
bool running
Definition: timer_struct.h:9
bool finished
Definition: timer_struct.h:10
This file contains functions that are adapted from TESSEM code which is used to calculate surface emi...
This file contains the Workspace class.
void PrintWsvName(OutputStream &outstream, Index i)
Print WSV name to output stream.
Definition: workspace_ng.h:183
Auxiliary header stuff related to workspace variable groups.