ARTS 2.5.4 (git: 31ce4f0e)
m_disort.cc
Go to the documentation of this file.
1/* Copyright (C) 2006-2012 Claudia Emde <claudia.emde@dlr.de>
2
3 This program is free software; you can redistribute it and/or modify it
4 under the terms of the GNU General Public License as published by the
5 Free Software Foundation; either version 2, or (at your option) any
6 later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software
15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16 USA.
17*/
18
32/*===========================================================================
33 === External declarations
34 ===========================================================================*/
35
36#include <cmath>
37#include <stdexcept>
38#include "array.h"
39#include "auto_md.h"
40#include "disort.h"
41#include "m_general.h"
42#include "math_funcs.h"
43#include "messages.h"
44 #include "geodetic.h"
45
46/* Workspace method: Doxygen documentation will be auto-generated */
48 // WS Output:
49 Tensor7& cloudbox_field,
50 ArrayOfMatrix& disort_aux,
51 // WS Input
52 const Index& atmfields_checked,
53 const Index& atmgeom_checked,
54 const Index& scat_data_checked,
55 const Index& cloudbox_checked,
56 const Index& cloudbox_on,
57 const ArrayOfIndex& cloudbox_limits,
58 const Agenda& propmat_clearsky_agenda,
59 const Agenda& gas_scattering_agenda,
60 const Index& atmosphere_dim,
61 const Tensor4& pnd_field,
62 const Tensor3& t_field,
63 const Tensor3& z_field,
64 const Tensor4& vmr_field,
65 const Vector& p_grid,
66 const Vector& lat_true,
67 const Vector& lon_true,
68 const Vector& refellipsoid,
70 const ArrayOfStar& stars,
71 const Vector& f_grid,
72 const Vector& za_grid,
73 const Vector& aa_grid,
74 const Index& stokes_dim,
75 const Matrix& z_surface,
76 const Numeric& surface_skin_t,
77 const Vector& surface_scalar_reflectivity,
78 const Index& gas_scattering_do,
79 const Index& stars_do,
80 const ArrayOfString& disort_aux_vars,
81 const Index& nstreams,
82 const Index& Npfct,
83 const Index& only_tro,
84 const Index& cdisort_quiet,
85 const Index& emission,
86 const Index& intensity_correction,
87 const Verbosity& verbosity) {
88 // Don't do anything if there's no cloudbox defined.
89 if (!cloudbox_on) {
91 out0 << " Cloudbox is off, DISORT calculation will be skipped.\n";
92 return;
93 }
94
95 check_disort_input(cloudbox_on,
96 atmfields_checked,
97 atmgeom_checked,
98 cloudbox_checked,
99 scat_data_checked,
100 atmosphere_dim,
101 stokes_dim,
102 cloudbox_limits,
103 scat_data,
104 za_grid,
105 nstreams);
106
107 //Check for number of stars
108 ARTS_USER_ERROR_IF(stars.nelem() > 1,
109 "The simulation setup contains ",
110 stars.nelem(),
111 " stars. \n"
112 "Disort can handle only one star.")
113
114 //allocate Varibale for direct (star) source
115 Vector star_rte_los;
116 Vector star_pos(3);
117 Vector cloudboxtop_pos(3);
118 Index star_on = stars_do;
119 Numeric scale_factor;
120
121 if (star_on){
122
123 Vector lon_grid{lon_true[0] - 0.1, lon_true[0] + 0.1};
124 Vector lat_grid{lat_true[0] - 0.1, lat_true[0] + 0.1};
125
126 //Position of star
127 star_pos = {stars[0].distance, stars[0].latitude, stars[0].longitude};
128
129 // Position of top of cloudbox
130 cloudboxtop_pos = {
131 z_field(cloudbox_limits[1], 0, 0), lat_true[0], lon_true[0]};
132
133 // calculate local position of sun at top of cloudbox
135 3,
136 lat_grid,
137 lon_grid,
138 refellipsoid,
139 cloudboxtop_pos,
140 star_pos,
141 verbosity);
142
143 //FIXME: IF we want to be correct and include refraction, we must calculate the
144 // local position of sun via ppathFromRtePos2. The question is, is this needed,
145 // because DISORT does not handle refraction at all.
146
147 // Check if sun is above horizon, if not switch it off
148 if (star_rte_los[0] >= 90) {
149 star_on = 0;
150
152 out0 << "Star is below the horizon\n";
153 out0 << "Star is ignored.\n";
154 }
155
156 init_ifield(cloudbox_field,
157 f_grid,
158 cloudbox_limits,
159 za_grid.nelem(),
160 aa_grid.nelem(),
161 stokes_dim);
162
163 //get the cloudbox top distance to earth center.
164 Numeric R_TOA = refell2r(refellipsoid,
165 lat_true[0]) +
166 cloudboxtop_pos[0];
167
168 //get the distance between sun and cloudbox top
169 Numeric R_Star2CloudboxTop;
170 distance3D(R_Star2CloudboxTop,
171 R_TOA,
172 lat_true[0],
173 lon_true[0],
174 star_pos[0],
175 star_pos[1],
176 star_pos[2]);
177
178 // Geometric scaling factor, scales the star spectral irradiance at the surface
179 // of the star to the spectral irradiance of the star at cloubbox top.
180 scale_factor=stars[0].radius*stars[0].radius/
181 (stars[0].radius*stars[0].radius+R_Star2CloudboxTop*R_Star2CloudboxTop);
182
183
184
185 } else {
187 out3 << "Disort calculation encountered aa_grid size larger than 1 in a case when it\n";
188 out3 << "does not use aa_grid. Calculations are performed as if there is no aa_grid.\n";
189
190 init_ifield(cloudbox_field,
191 f_grid,
192 cloudbox_limits,
193 za_grid.nelem(),
194 1,
195 stokes_dim);
196 }
197
198 Vector albedo(f_grid.nelem(), 0.);
199 Numeric btemp;
200
202 albedo, btemp, f_grid, surface_skin_t, surface_scalar_reflectivity);
203
204 run_cdisort(ws,
205 cloudbox_field,
206 disort_aux,
207 f_grid,
208 p_grid,
209 z_field(joker, 0, 0),
210 z_surface(0, 0),
211 t_field(joker, 0, 0),
212 vmr_field(joker, joker, 0, 0),
213 pnd_field(joker, joker, 0, 0),
214 scat_data,
215 stars,
216 propmat_clearsky_agenda,
217 gas_scattering_agenda,
218 cloudbox_limits,
219 btemp,
220 albedo,
221 za_grid,
222 aa_grid,
223 star_rte_los,
224 gas_scattering_do,
225 star_on,
226 disort_aux_vars,
227 scale_factor,
228 nstreams,
229 Npfct,
230 only_tro,
231 cdisort_quiet,
232 emission,
233 intensity_correction,
234 verbosity);
235}
236
237
238/* Workspace method: Doxygen documentation will be auto-generated */
240 // WS Output:
241 Tensor7& cloudbox_field,
242 ArrayOfMatrix& disort_aux,
243 // WS Input
244 const Index& atmfields_checked,
245 const Index& atmgeom_checked,
246 const Index& scat_data_checked,
247 const Index& cloudbox_checked,
248 const Index& cloudbox_on,
249 const ArrayOfIndex& cloudbox_limits,
250 const Agenda& propmat_clearsky_agenda,
251 const Agenda& surface_rtprop_agenda,
252 const Agenda& gas_scattering_agenda,
253 const Index& atmosphere_dim,
254 const Tensor4& pnd_field,
255 const Tensor3& t_field,
256 const Tensor3& z_field,
257 const Tensor4& vmr_field,
258 const Vector& p_grid,
259 const Vector& lat_true,
260 const Vector& lon_true,
261 const Vector& refellipsoid,
262 const ArrayOfArrayOfSingleScatteringData& scat_data,
263 const ArrayOfStar& stars,
264 const Vector& f_grid,
265 const Vector& za_grid,
266 const Vector& aa_grid,
267 const Index& stokes_dim,
268 const Matrix& z_surface,
269 const Index& gas_scattering_do,
270 const Index& stars_do,
271 const ArrayOfString& disort_aux_vars,
272 const Index& nstreams,
273 const Index& Npfct,
274 const Index& only_tro,
275 const Index& cdisort_quiet,
276 const Index& emission,
277 const Index& intensity_correction,
278 const Numeric& inc_angle,
279 const Verbosity& verbosity) {
280
281 // Don't do anything if there's no cloudbox defined.
282 if (!cloudbox_on) {
284 out0 << " Cloudbox is off, DISORT calculation will be skipped.\n";
285 return;
286 }
287
288 check_disort_input(cloudbox_on,
289 atmfields_checked,
290 atmgeom_checked,
291 cloudbox_checked,
292 scat_data_checked,
293 atmosphere_dim,
294 stokes_dim,
295 cloudbox_limits,
296 scat_data,
297 za_grid,
298 nstreams);
299
300 //Check for number of stars
301 ARTS_USER_ERROR_IF(stars.nelem() > 1,
302 "The simulation setup contains ",
303 stars.nelem(),
304 " stars. \n"
305 "Disort can handle only one star.")
306
307 //allocate Varibale for direct (star) source
308 Vector star_rte_los;
309 Vector star_pos(3);
310 Vector cloudboxtop_pos(3);
311 Index star_on = stars_do;
312 Numeric scale_factor;
313
314 if (star_on){
315
316 Vector lon_grid{lon_true[0] - 0.1, lon_true[0] + 0.1};
317 Vector lat_grid{lat_true[0] - 0.1, lat_true[0] + 0.1};
318
319 //Position of star
320 star_pos = {stars[0].distance, stars[0].latitude, stars[0].longitude};
321
322 // Position of top of cloudbox
323 cloudboxtop_pos = {
324 z_field(cloudbox_limits[1], 0, 0), lat_true[0], lon_true[0]};
325
326 // calculate local position of sun at top of cloudbox
328 3,
329 lat_grid,
330 lon_grid,
331 refellipsoid,
332 cloudboxtop_pos,
333 star_pos,
334 verbosity);
335
336 //FIXME: IF we want to be correct and include refraction, we must calculate the
337 // local position of sun via ppathFromRtePos2. The question is, is this needed,
338 // because DISORT does not handle refraction at all.
339
340 // Check if sun is above horizon, if not switch it off
341 if (star_rte_los[0] >= 90) {
342 star_on = 0;
343
345 out0 << "Star is below the horizon\n";
346 out0 << "Star is ignored.\n";
347 }
348
349 init_ifield(cloudbox_field,
350 f_grid,
351 cloudbox_limits,
352 za_grid.nelem(),
353 aa_grid.nelem(),
354 stokes_dim);
355
356 //get the cloudbox top distance to earth center.
357 Numeric R_TOA = refell2r(refellipsoid,
358 lat_true[0]) +
359 cloudboxtop_pos[0];
360
361 //get the distance between sun and cloudbox top
362 Numeric R_Star2CloudboxTop;
363 distance3D(R_Star2CloudboxTop,
364 R_TOA,
365 lat_true[0],
366 lon_true[0],
367 star_pos[0],
368 star_pos[1],
369 star_pos[2]);
370
371 // Geometric scaling factor, scales the star spectral irradiance at the surface
372 // of the star to the spectral irradiance of the star at cloubbox top.
373 scale_factor=stars[0].radius*stars[0].radius/
374 (stars[0].radius*stars[0].radius+R_Star2CloudboxTop*R_Star2CloudboxTop);
375
376
377
378 } else {
380 out3 << "Disort calculation encountered aa_grid size larger than 1 in a case when it\n";
381 out3 << "does not use aa_grid. Calculations are performed as if there is no aa_grid.\n";
382
383 init_ifield(cloudbox_field,
384 f_grid,
385 cloudbox_limits,
386 za_grid.nelem(),
387 1,
388 stokes_dim);
389 }
390
391 Vector albedo(f_grid.nelem(), 0.);
392 Numeric btemp;
393
394 if (inc_angle<0 || inc_angle>90) {
396 albedo,
397 btemp,
398 surface_rtprop_agenda,
399 f_grid,
400 za_grid,
401 z_surface(0,0),
402 verbosity);
403 } else {
405 albedo,
406 btemp,
407 surface_rtprop_agenda,
408 f_grid,
409 z_surface(0,0),
410 inc_angle);
411 }
412
413 run_cdisort(ws,
414 cloudbox_field,
415 disort_aux,
416 f_grid,
417 p_grid,
418 z_field(joker, 0, 0),
419 z_surface(0, 0),
420 t_field(joker, 0, 0),
421 vmr_field(joker, joker, 0, 0),
422 pnd_field(joker, joker, 0, 0),
423 scat_data,
424 stars,
425 propmat_clearsky_agenda,
426 gas_scattering_agenda,
427 cloudbox_limits,
428 btemp,
429 albedo,
430 za_grid,
431 aa_grid,
432 star_rte_los,
433 gas_scattering_do,
434 star_on,
435 disort_aux_vars,
436 scale_factor,
437 nstreams,
438 Npfct,
439 only_tro,
440 cdisort_quiet,
441 emission,
442 intensity_correction,
443 verbosity);
444}
445
446
447/* Workspace method: Doxygen documentation will be auto-generated */
449 // WS Output:
450 Tensor7& spectral_radiance_field,
451 ArrayOfMatrix& disort_aux,
452 // WS Input
453 const Index& atmfields_checked,
454 const Index& atmgeom_checked,
455 const Agenda& propmat_clearsky_agenda,
456 const Agenda& gas_scattering_agenda,
457 const Index& atmosphere_dim,
458 const Tensor3& t_field,
459 const Tensor3& z_field,
460 const Tensor4& vmr_field,
461 const Vector& p_grid,
462 const Vector& lat_true,
463 const Vector& lon_true,
464 const Vector& refellipsoid,
465 const ArrayOfStar& stars,
466 const Vector& f_grid,
467 const Vector& za_grid,
468 const Vector& aa_grid,
469 const Index& stokes_dim,
470 const Matrix& z_surface,
471 const Numeric& surface_skin_t,
472 const Vector& surface_scalar_reflectivity,
473 const Index& gas_scattering_do,
474 const Index& stars_do,
475 const ArrayOfString& disort_aux_vars,
476 const Index& nstreams,
477 const Index& cdisort_quiet,
478 const Index& emission,
479 const Index& intensity_correction,
480 const Verbosity& verbosity) {
481
482 if (atmosphere_dim != 1)
483 throw runtime_error(
484 "For running DISORT, atmospheric dimensionality "
485 "must be 1.\n");
486
487 // Set cloudbox to cover complete atmosphere
488 Index cloudbox_on;
489 ArrayOfIndex cloudbox_limits;
490 const Index cloudbox_checked = 1;
491 //
492 cloudboxSetFullAtm(cloudbox_on,
493 cloudbox_limits,
494 atmosphere_dim,
495 p_grid,
496 Vector(0),
497 Vector(0),
498 0.,
499 verbosity);
500
501 // Create data matching no particles
502 Tensor4 pnd_field;
503 ArrayOfTensor4 dpnd_field_dx;
505 const Index scat_data_checked = 1;
506 //
507 pnd_fieldZero(pnd_field,
508 dpnd_field_dx,
509 scat_data,
510 atmosphere_dim,
511 f_grid,
512 cloudbox_limits,
514 verbosity);
515
516 Matrix optical_depth_dummy;
517
518 DisortCalc(ws,
519 // WS Output:
520 spectral_radiance_field,
521 disort_aux,
522 // WS Input
523 atmfields_checked,
524 atmgeom_checked,
525 scat_data_checked,
526 cloudbox_checked,
527 cloudbox_on,
528 cloudbox_limits,
529 propmat_clearsky_agenda,
530 gas_scattering_agenda,
531 atmosphere_dim,
532 pnd_field,
533 t_field,
534 z_field,
535 vmr_field,
536 p_grid,
537 lat_true,
538 lon_true,
539 refellipsoid,
540 scat_data,
541 stars,
542 f_grid,
543 za_grid,
544 aa_grid,
545 stokes_dim,
546 z_surface,
547 surface_skin_t,
548 surface_scalar_reflectivity,
549 gas_scattering_do,
550 stars_do,
551 disort_aux_vars,
552 nstreams,
553 181,
554 cdisort_quiet,
555 0,
556 emission,
557 intensity_correction,
558 verbosity);
559
560}
561
562/* Workspace method: Doxygen documentation will be auto-generated */
564 // WS Output:
565 Tensor5& spectral_irradiance_field,
566 ArrayOfMatrix& disort_aux,
567 // WS Input
568 const Index& atmfields_checked,
569 const Index& atmgeom_checked,
570 const Index& scat_data_checked,
571 const Agenda& propmat_clearsky_agenda,
572 const Agenda& gas_scattering_agenda,
573 const Index& atmosphere_dim,
574 const Tensor4& pnd_field,
575 const Tensor3& t_field,
576 const Tensor3& z_field,
577 const Tensor4& vmr_field,
578 const Vector& p_grid,
579 const Vector& lat_true,
580 const Vector& lon_true,
581 const Vector& refellipsoid,
582 const ArrayOfArrayOfSingleScatteringData& scat_data,
583 const ArrayOfStar& stars,
584 const Vector& f_grid,
585 const Index& stokes_dim,
586 const Matrix& z_surface,
587 const Numeric& surface_skin_t,
588 const Vector& surface_scalar_reflectivity,
589 const Index& gas_scattering_do,
590 const Index& stars_do,
591 const ArrayOfString& disort_aux_vars,
592 const Index& nstreams,
593 const Index& Npfct,
594 const Index& only_tro,
595 const Index& cdisort_quiet,
596 const Index& emission,
597 const Index& intensity_correction,
598 const Verbosity& verbosity) {
599
600 // Set cloudbox to cover complete atmosphere
601 Index cloudbox_on;
602 ArrayOfIndex cloudbox_limits;
603 cloudboxSetFullAtm(cloudbox_on,
604 cloudbox_limits,
605 atmosphere_dim,
606 p_grid,
607 Vector(0),
608 Vector(0),
609 0.,
610 verbosity);
611
612 const Index Nf = f_grid.nelem();
613 const Index Np_cloud = cloudbox_limits[1] - cloudbox_limits[0] + 1;
614
615 check_disort_irradiance_input(atmfields_checked,
616 atmgeom_checked,
617 scat_data_checked,
618 atmosphere_dim,
619 stokes_dim,
620 scat_data,
621 nstreams);
622
623 //Check for number of stars
624 ARTS_USER_ERROR_IF(stars.nelem() > 1,
625 "The simulation setup contains ",
626 stars.nelem(),
627 " stars. \n"
628 "Disort can handle only one star.")
629
630 //allocate Varibale for direct (star) source
631 Vector star_rte_los;
632 Vector star_pos(3);
633 Vector cloudboxtop_pos(3);
634 Index star_on = stars_do;
635 Numeric scale_factor;
636
637 spectral_irradiance_field.resize(Nf, Np_cloud, 1, 1, 2);
638 spectral_irradiance_field = NAN;
639
640 if (star_on){
641
642 Vector lon_grid{lon_true[0] - 0.1, lon_true[0] + 0.1};
643 Vector lat_grid{lat_true[0] - 0.1, lat_true[0] + 0.1};
644
645 //Position of star
646 star_pos = {stars[0].distance, stars[0].latitude, stars[0].longitude};
647
648 // Position of top of cloudbox
649 cloudboxtop_pos = {
650 z_field(cloudbox_limits[1], 0, 0), lat_true[0], lon_true[0]};
651
652 // calculate local position of sun at top of cloudbox
654 3,
655 lat_grid,
656 lon_grid,
657 refellipsoid,
658 cloudboxtop_pos,
659 star_pos,
660 verbosity);
661
662 //FIXME: IF we want to be correct and include refraction, we must calculate the
663 // local position of sun via ppathFromRtePos2. The question is, is this needed,
664 // because DISORT does not handle refraction at all.
665
666 // Check if sun is above horizon, if not switch it off
667 if (star_rte_los[0] >= 90) {
668 star_on = 0;
669
671 out0 << "Star is below the horizon\n";
672 out0 << "Star is ignored.\n";
673 }
674
675 //get the cloudbox top distance to earth center.
676 Numeric R_TOA = refell2r(refellipsoid,
677 lat_true[0]) +
678 cloudboxtop_pos[0];
679
680 //get the distance between sun and cloudbox top
681 Numeric R_Star2CloudboxTop;
682 distance3D(R_Star2CloudboxTop,
683 R_TOA,
684 lat_true[0],
685 lon_true[0],
686 star_pos[0],
687 star_pos[1],
688 star_pos[2]);
689
690 // Geometric scaling factor, scales the star spectral irradiance at the surface
691 // of the star to the spectral irradiance of the star at cloubbox top.
692 scale_factor=stars[0].radius*stars[0].radius/
693 (stars[0].radius*stars[0].radius+R_Star2CloudboxTop*R_Star2CloudboxTop);
694
695 }
696
697 Vector albedo(f_grid.nelem(), 0.);
698 Numeric btemp;
699
701 albedo, btemp, f_grid, surface_skin_t, surface_scalar_reflectivity);
702
704 spectral_irradiance_field,
705 disort_aux,
706 f_grid,
707 p_grid,
708 z_field(joker, 0, 0),
709 z_surface(0, 0),
710 t_field(joker, 0, 0),
711 vmr_field(joker, joker, 0, 0),
712 pnd_field(joker, joker, 0, 0),
713 scat_data,
714 stars,
715 propmat_clearsky_agenda,
716 gas_scattering_agenda,
717 cloudbox_limits,
718 btemp,
719 albedo,
720 star_rte_los,
721 gas_scattering_do,
722 star_on,
723 disort_aux_vars,
724 scale_factor,
725 nstreams,
726 Npfct,
727 only_tro,
728 cdisort_quiet,
729 emission,
730 intensity_correction,
731 verbosity);
732}
This file contains the definition of Array.
The Agenda class.
Definition: agenda_class.h:69
This can be used to make arrays out of anything.
Definition: array.h:48
Index nelem() const ARTS_NOEXCEPT
Definition: array.h:92
Index nelem() const noexcept
Returns the number of elements.
Definition: matpackI.h:536
The Matrix class.
Definition: matpackI.h:1261
The Tensor3 class.
Definition: matpackIII.h:346
The Tensor4 class.
Definition: matpackIV.h:429
The Tensor5 class.
Definition: matpackV.h:516
void resize(Index s, Index b, Index p, Index r, Index c)
Resize function.
Definition: matpackV.cc:1741
The Tensor7 class.
Definition: matpackVII.h:2399
The Vector class.
Definition: matpackI.h:899
Workspace class.
Definition: workspace_ng.h:53
#define ARTS_USER_ERROR_IF(condition,...)
Definition: debug.h:134
void surf_albedoCalc(Workspace &ws, VectorView albedo, Numeric &btemp, const Agenda &surface_rtprop_agenda, ConstVectorView f_grid, ConstVectorView scat_za_grid, const Numeric &surf_alt, const Verbosity &verbosity)
surf_albedoCalc
Definition: disort.cc:1685
void get_disortsurf_props(Vector &albedo, Numeric &btemp, ConstVectorView f_grid, const Numeric &surface_skin_t, ConstVectorView surface_scalar_reflectivity)
get_disortsurf_props.
Definition: disort.cc:296
void surf_albedoCalcSingleAngle(Workspace &ws, VectorView albedo, Numeric &btemp, const Agenda &surface_rtprop_agenda, ConstVectorView f_grid, const Numeric &surf_alt, const Numeric &inc_angle)
surf_albedoCalcSingleAngle
Definition: disort.cc:1865
void check_disort_irradiance_input(const Index &atmfields_checked, const Index &atmgeom_checked, const Index &scat_data_checked, const Index &atmosphere_dim, const Index &stokes_dim, const ArrayOfArrayOfSingleScatteringData &scat_data, const Index &nstreams)
check_disort_input.
Definition: disort.cc:212
void check_disort_input(const Index &cloudbox_on, const Index &atmfields_checked, const Index &atmgeom_checked, const Index &cloudbox_checked, const Index &scat_data_checked, const Index &atmosphere_dim, const Index &stokes_dim, const ArrayOfIndex &cloudbox_limits, const ArrayOfArrayOfSingleScatteringData &scat_data, ConstVectorView za_grid, const Index &nstreams)
check_disort_input.
Definition: disort.cc:86
void init_ifield(Tensor7 &cloudbox_field, const Vector &f_grid, const ArrayOfIndex &cloudbox_limits, const Index &n_za, const Index &n_aa, const Index &stokes_dim)
init_ifield.
Definition: disort.cc:279
void run_cdisort_flux(Workspace &ws, Tensor5 &spectral_irradiance_field, ArrayOfMatrix &disort_aux, ConstVectorView f_grid, ConstVectorView p_grid, ConstVectorView z_profile, const Numeric &z_surface, ConstVectorView t_profile, ConstMatrixView vmr_profiles, ConstMatrixView pnd_profiles, const ArrayOfArrayOfSingleScatteringData &scat_data, const ArrayOfStar &stars, const Agenda &propmat_clearsky_agenda, const Agenda &gas_scattering_agenda, const ArrayOfIndex &cloudbox_limits, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, ConstVectorView star_rte_los, const Index &gas_scattering_do, const Index &stars_do, const ArrayOfString &disort_aux_vars, const Numeric &scale_factor, const Index &nstreams, const Index &Npfct, const Index &only_tro, const Index &quiet, const Index &emission, const Index &intensity_correction, const Verbosity &verbosity)
Calculate spectral_irradiance_field with Disort including a star source.
Definition: disort.cc:1303
void run_cdisort(Workspace &ws, Tensor7 &cloudbox_field, ArrayOfMatrix &disort_aux, ConstVectorView f_grid, ConstVectorView p_grid, ConstVectorView z_profile, const Numeric &z_surface, ConstVectorView t_profile, ConstMatrixView vmr_profiles, ConstMatrixView pnd_profiles, const ArrayOfArrayOfSingleScatteringData &scat_data, const ArrayOfStar &stars, const Agenda &propmat_clearsky_agenda, const Agenda &gas_scattering_agenda, const ArrayOfIndex &cloudbox_limits, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, ConstVectorView za_grid, ConstVectorView aa_grid, ConstVectorView star_rte_los, const Index &gas_scattering_do, const Index &stars_do, const ArrayOfString &disort_aux_vars, const Numeric &scale_factor, const Index &nstreams, const Index &Npfct, const Index &only_tro, const Index &quiet, const Index &emission, const Index &intensity_correction, const Verbosity &verbosity)
Calculate doit_i_field with Disort including a star source.
Definition: disort.cc:938
Functions for disort interface.
void distance3D(Numeric &l, const Numeric &r1, const Numeric &lat1, const Numeric &lon1, const Numeric &r2, const Numeric &lat2, const Numeric &lon2)
distance3D
Definition: geodetic.cc:670
Numeric refell2r(ConstVectorView refellipsoid, const Numeric &lat)
refell2r
Definition: geodetic.cc:1266
Array< RetrievalQuantity > ArrayOfRetrievalQuantity
Definition: jacobian.h:539
void cloudboxSetFullAtm(Index &cloudbox_on, ArrayOfIndex &cloudbox_limits, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Index &fullfull, const Verbosity &)
WORKSPACE METHOD: cloudboxSetFullAtm.
Definition: m_cloudbox.cc:264
void pnd_fieldZero(Tensor4 &pnd_field, ArrayOfTensor4 &dpnd_field_dx, ArrayOfArrayOfSingleScatteringData &scat_data, const Index &atmosphere_dim, const Vector &f_grid, const ArrayOfIndex &cloudbox_limits, const ArrayOfRetrievalQuantity &jacobian_quantities, const Verbosity &)
WORKSPACE METHOD: pnd_fieldZero.
Definition: m_cloudbox.cc:1867
void DisortCalc(Workspace &ws, Tensor7 &cloudbox_field, ArrayOfMatrix &disort_aux, const Index &atmfields_checked, const Index &atmgeom_checked, const Index &scat_data_checked, const Index &cloudbox_checked, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Agenda &propmat_clearsky_agenda, const Agenda &gas_scattering_agenda, const Index &atmosphere_dim, const Tensor4 &pnd_field, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &p_grid, const Vector &lat_true, const Vector &lon_true, const Vector &refellipsoid, const ArrayOfArrayOfSingleScatteringData &scat_data, const ArrayOfStar &stars, const Vector &f_grid, const Vector &za_grid, const Vector &aa_grid, const Index &stokes_dim, const Matrix &z_surface, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, const Index &gas_scattering_do, const Index &stars_do, const ArrayOfString &disort_aux_vars, const Index &nstreams, const Index &Npfct, const Index &only_tro, const Index &cdisort_quiet, const Index &emission, const Index &intensity_correction, const Verbosity &verbosity)
WORKSPACE METHOD: DisortCalc.
Definition: m_disort.cc:47
void DisortCalcClearsky(Workspace &ws, Tensor7 &spectral_radiance_field, ArrayOfMatrix &disort_aux, const Index &atmfields_checked, const Index &atmgeom_checked, const Agenda &propmat_clearsky_agenda, const Agenda &gas_scattering_agenda, const Index &atmosphere_dim, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &p_grid, const Vector &lat_true, const Vector &lon_true, const Vector &refellipsoid, const ArrayOfStar &stars, const Vector &f_grid, const Vector &za_grid, const Vector &aa_grid, const Index &stokes_dim, const Matrix &z_surface, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, const Index &gas_scattering_do, const Index &stars_do, const ArrayOfString &disort_aux_vars, const Index &nstreams, const Index &cdisort_quiet, const Index &emission, const Index &intensity_correction, const Verbosity &verbosity)
WORKSPACE METHOD: DisortCalcClearsky.
Definition: m_disort.cc:448
void DisortCalcWithARTSSurface(Workspace &ws, Tensor7 &cloudbox_field, ArrayOfMatrix &disort_aux, const Index &atmfields_checked, const Index &atmgeom_checked, const Index &scat_data_checked, const Index &cloudbox_checked, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Agenda &propmat_clearsky_agenda, const Agenda &surface_rtprop_agenda, const Agenda &gas_scattering_agenda, const Index &atmosphere_dim, const Tensor4 &pnd_field, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &p_grid, const Vector &lat_true, const Vector &lon_true, const Vector &refellipsoid, const ArrayOfArrayOfSingleScatteringData &scat_data, const ArrayOfStar &stars, const Vector &f_grid, const Vector &za_grid, const Vector &aa_grid, const Index &stokes_dim, const Matrix &z_surface, const Index &gas_scattering_do, const Index &stars_do, const ArrayOfString &disort_aux_vars, const Index &nstreams, const Index &Npfct, const Index &only_tro, const Index &cdisort_quiet, const Index &emission, const Index &intensity_correction, const Numeric &inc_angle, const Verbosity &verbosity)
WORKSPACE METHOD: DisortCalcWithARTSSurface.
Definition: m_disort.cc:239
void DisortCalcIrradiance(Workspace &ws, Tensor5 &spectral_irradiance_field, ArrayOfMatrix &disort_aux, const Index &atmfields_checked, const Index &atmgeom_checked, const Index &scat_data_checked, const Agenda &propmat_clearsky_agenda, const Agenda &gas_scattering_agenda, const Index &atmosphere_dim, const Tensor4 &pnd_field, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &p_grid, const Vector &lat_true, const Vector &lon_true, const Vector &refellipsoid, const ArrayOfArrayOfSingleScatteringData &scat_data, const ArrayOfStar &stars, const Vector &f_grid, const Index &stokes_dim, const Matrix &z_surface, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, const Index &gas_scattering_do, const Index &stars_do, const ArrayOfString &disort_aux_vars, const Index &nstreams, const Index &Npfct, const Index &only_tro, const Index &cdisort_quiet, const Index &emission, const Index &intensity_correction, const Verbosity &verbosity)
WORKSPACE METHOD: DisortCalcIrradiance.
Definition: m_disort.cc:563
Template functions for general supergeneric ws methods.
void rte_losGeometricFromRtePosToRtePos2(Vector &rte_los, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Vector &refellipsoid, const Vector &rte_pos, const Vector &rte_pos2, const Verbosity &)
WORKSPACE METHOD: rte_losGeometricFromRtePosToRtePos2.
Definition: m_ppath.cc:1909
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
const Joker joker
Declarations having to do with the four output streams.
#define CREATE_OUT3
Definition: messages.h:206
#define CREATE_OUT0
Definition: messages.h:203
invlib::Vector< ArtsVector > Vector
invlib wrapper type for ARTS vectors.
Definition: oem.h:31