ARTS 2.5.11 (git: 725533f0)
m_disort.cc
Go to the documentation of this file.
1
14/*===========================================================================
15 === External declarations
16 ===========================================================================*/
17
18#include <cmath>
19#include <stdexcept>
20#include "array.h"
21#include "auto_md.h"
22#include "disort.h"
23#include "m_general.h"
24#include "math_funcs.h"
25#include "messages.h"
26 #include "geodetic.h"
27
28/* Workspace method: Doxygen documentation will be auto-generated */
30 // WS Output:
31 Tensor7& cloudbox_field,
32 ArrayOfMatrix& disort_aux,
33 // WS Input
34 const Index& atmfields_checked,
35 const Index& atmgeom_checked,
36 const Index& scat_data_checked,
37 const Index& cloudbox_checked,
38 const Index& cloudbox_on,
39 const ArrayOfIndex& cloudbox_limits,
40 const Agenda& propmat_clearsky_agenda,
41 const Agenda& gas_scattering_agenda,
42 const Index& atmosphere_dim,
43 const Tensor4& pnd_field,
44 const Tensor3& t_field,
45 const Tensor3& z_field,
46 const Tensor4& vmr_field,
47 const Vector& p_grid,
48 const Vector& lat_true,
49 const Vector& lon_true,
50 const Vector& refellipsoid,
52 const ArrayOfSun& suns,
53 const Vector& f_grid,
54 const Vector& za_grid,
55 const Vector& aa_grid,
56 const Index& stokes_dim,
57 const Matrix& z_surface,
58 const Numeric& surface_skin_t,
59 const Vector& surface_scalar_reflectivity,
60 const Index& gas_scattering_do,
61 const Index& suns_do,
62 const ArrayOfString& disort_aux_vars,
63 const Index& nstreams,
64 const Index& Npfct,
65 const Index& only_tro,
66 const Index& cdisort_quiet,
67 const Index& emission,
68 const Index& intensity_correction,
69 const Verbosity& verbosity) {
70 // Don't do anything if there's no cloudbox defined.
71 if (!cloudbox_on) {
73 out0 << " Cloudbox is off, DISORT calculation will be skipped.\n";
74 return;
75 }
76
77 check_disort_input(cloudbox_on,
78 atmfields_checked,
79 atmgeom_checked,
80 cloudbox_checked,
81 scat_data_checked,
82 atmosphere_dim,
83 stokes_dim,
84 cloudbox_limits,
85 scat_data,
86 za_grid,
87 nstreams);
88
89 //Check for number of suns
90 ARTS_USER_ERROR_IF(suns.nelem() > 1,
91 "The simulation setup contains ",
92 suns.nelem(),
93 " suns. \n"
94 "Disort can handle only one sun.")
95
96 //Check for aa_grid
97 ARTS_USER_ERROR_IF(aa_grid.nelem() == 0,
98 "aa_grid has a size of 0.\n",
99 "aa_grid must have at least a size of one.")
100
101 //allocate Varibale for direct (sun) source
102 Vector sun_rte_los;
103 Vector sun_pos(3);
104 Vector cloudboxtop_pos(3);
105 Index sun_on = suns_do;
106 Numeric scale_factor;
107 Index N_aa=aa_grid.nelem();
108
109 if (sun_on){
110
111 Vector lon_grid{lon_true[0] - 0.1, lon_true[0] + 0.1};
112 Vector lat_grid{lat_true[0] - 0.1, lat_true[0] + 0.1};
113
114 //Position of sun
115 sun_pos = {suns[0].distance, suns[0].latitude, suns[0].longitude};
116
117 // Position of top of cloudbox
118 cloudboxtop_pos = {
119 z_field(cloudbox_limits[1], 0, 0), lat_true[0], lon_true[0]};
120
121 // calculate local position of sun at top of cloudbox
123 3,
124 lat_grid,
125 lon_grid,
126 refellipsoid,
127 cloudboxtop_pos,
128 sun_pos,
129 verbosity);
130
131 //FIXME: IF we want to be correct and include refraction, we must calculate the
132 // local position of sun via ppathFromRtePos2. The question is, is this needed,
133 // because DISORT does not handle refraction at all.
134
135 // Check if sun is above horizon, if not switch it off
136 if (sun_rte_los[0] >= 90) {
137 sun_on = 0;
138
139 //set number of azimuth angle to 1
140 N_aa = 1;
141
143 out0 << "Sun is below the horizon\n";
144 out0 << "Sun is ignored.\n";
145 out0 << "cloudbox_field will have no azimuthal dependency!\n";
146 }
147
148 //get the cloudbox top distance to earth center.
149 Numeric R_TOA = refell2r(refellipsoid,
150 lat_true[0]) +
151 cloudboxtop_pos[0];
152
153 //get the distance between sun and cloudbox top
154 Numeric R_Sun2CloudboxTop;
155 distance3D(R_Sun2CloudboxTop,
156 R_TOA,
157 lat_true[0],
158 lon_true[0],
159 sun_pos[0],
160 sun_pos[1],
161 sun_pos[2]);
162
163 // Geometric scaling factor, scales the sun spectral irradiance at the surface
164 // of the sun to the spectral irradiance of the sun at cloubbox top.
165 scale_factor=suns[0].radius*suns[0].radius/
166 (suns[0].radius*suns[0].radius+R_Sun2CloudboxTop*R_Sun2CloudboxTop);
167
168
169
170 } else {
172 out3 << "Disort calculation encountered aa_grid size larger than 1 in a case when it\n";
173 out3 << "does not use aa_grid. Calculations are performed as if there is no aa_grid.\n";
174
175 // set number of azimuth angle to 1
176 N_aa = 1;
177 }
178
179 init_ifield(cloudbox_field,
180 f_grid,
181 cloudbox_limits,
182 za_grid.nelem(),
183 N_aa,
184 stokes_dim);
185
186
187 Vector albedo(f_grid.nelem(), 0.);
188 Numeric btemp;
189
191 albedo, btemp, f_grid, surface_skin_t, surface_scalar_reflectivity);
192
193 run_cdisort(ws,
194 cloudbox_field,
195 disort_aux,
196 f_grid,
197 p_grid,
198 z_field(joker, 0, 0),
199 z_surface(0, 0),
200 t_field(joker, 0, 0),
201 vmr_field(joker, joker, 0, 0),
202 pnd_field(joker, joker, 0, 0),
203 scat_data,
204 suns,
205 propmat_clearsky_agenda,
206 gas_scattering_agenda,
207 cloudbox_limits,
208 btemp,
209 albedo,
210 za_grid,
211 aa_grid,
212 sun_rte_los,
213 gas_scattering_do,
214 sun_on,
215 disort_aux_vars,
216 scale_factor,
217 nstreams,
218 Npfct,
219 only_tro,
220 cdisort_quiet,
221 emission,
222 intensity_correction,
223 verbosity);
224}
225
226
227/* Workspace method: Doxygen documentation will be auto-generated */
229 // WS Output:
230 Tensor7& cloudbox_field,
231 ArrayOfMatrix& disort_aux,
232 // WS Input
233 const Index& atmfields_checked,
234 const Index& atmgeom_checked,
235 const Index& scat_data_checked,
236 const Index& cloudbox_checked,
237 const Index& cloudbox_on,
238 const ArrayOfIndex& cloudbox_limits,
239 const Agenda& propmat_clearsky_agenda,
240 const Agenda& surface_rtprop_agenda,
241 const Agenda& gas_scattering_agenda,
242 const Index& atmosphere_dim,
243 const Tensor4& pnd_field,
244 const Tensor3& t_field,
245 const Tensor3& z_field,
246 const Tensor4& vmr_field,
247 const Vector& p_grid,
248 const Vector& lat_true,
249 const Vector& lon_true,
250 const Vector& refellipsoid,
251 const ArrayOfArrayOfSingleScatteringData& scat_data,
252 const ArrayOfSun& suns,
253 const Vector& f_grid,
254 const Vector& za_grid,
255 const Vector& aa_grid,
256 const Index& stokes_dim,
257 const Matrix& z_surface,
258 const Index& gas_scattering_do,
259 const Index& suns_do,
260 const ArrayOfString& disort_aux_vars,
261 const Index& nstreams,
262 const Index& Npfct,
263 const Index& only_tro,
264 const Index& cdisort_quiet,
265 const Index& emission,
266 const Index& intensity_correction,
267 const Numeric& inc_angle,
268 const Verbosity& verbosity) {
269
270 // Don't do anything if there's no cloudbox defined.
271 if (!cloudbox_on) {
273 out0 << " Cloudbox is off, DISORT calculation will be skipped.\n";
274 return;
275 }
276
277 check_disort_input(cloudbox_on,
278 atmfields_checked,
279 atmgeom_checked,
280 cloudbox_checked,
281 scat_data_checked,
282 atmosphere_dim,
283 stokes_dim,
284 cloudbox_limits,
285 scat_data,
286 za_grid,
287 nstreams);
288
289 //Check for number of suns
290 ARTS_USER_ERROR_IF(suns.nelem() > 1,
291 "The simulation setup contains ",
292 suns.nelem(),
293 " suns. \n"
294 "Disort can handle only one sun.")
295
296 //Check for aa_grid
297 ARTS_USER_ERROR_IF(aa_grid.nelem() == 0,
298 "aa_grid has a size of 0.\n",
299 "aa_grid must have at least a size of one.")
300
301 //allocate Varibale for direct (sun) source
302 Vector sun_rte_los;
303 Vector sun_pos(3);
304 Vector cloudboxtop_pos(3);
305 Index sun_on = suns_do;
306 Numeric scale_factor;
307 Index N_aa=aa_grid.nelem();
308
309 if (sun_on){
310
311 Vector lon_grid{lon_true[0] - 0.1, lon_true[0] + 0.1};
312 Vector lat_grid{lat_true[0] - 0.1, lat_true[0] + 0.1};
313
314 //Position of sun
315 sun_pos = {suns[0].distance, suns[0].latitude, suns[0].longitude};
316
317 // Position of top of cloudbox
318 cloudboxtop_pos = {
319 z_field(cloudbox_limits[1], 0, 0), lat_true[0], lon_true[0]};
320
321 // calculate local position of sun at top of cloudbox
323 3,
324 lat_grid,
325 lon_grid,
326 refellipsoid,
327 cloudboxtop_pos,
328 sun_pos,
329 verbosity);
330
331 //FIXME: IF we want to be correct and include refraction, we must calculate the
332 // local position of sun via ppathFromRtePos2. The question is, is this needed,
333 // because DISORT does not handle refraction at all.
334
335 // Check if sun is above horizon, if not switch it off
336 if (sun_rte_los[0] >= 90) {
337 sun_on = 0;
338
339 // set number of azimuth angle to 1
340 N_aa = 1;
341
343 out0 << "Sun is below the horizon\n";
344 out0 << "Sun is ignored.\n";
345 out0 << "cloudbox_field will have no azimuthal dependency!\n";
346
347 }
348
349 //get the cloudbox top distance to earth center.
350 Numeric R_TOA = refell2r(refellipsoid,
351 lat_true[0]) +
352 cloudboxtop_pos[0];
353
354 //get the distance between sun and cloudbox top
355 Numeric R_Sun2CloudboxTop;
356 distance3D(R_Sun2CloudboxTop,
357 R_TOA,
358 lat_true[0],
359 lon_true[0],
360 sun_pos[0],
361 sun_pos[1],
362 sun_pos[2]);
363
364 // Geometric scaling factor, scales the sun spectral irradiance at the surface
365 // of the sun to the spectral irradiance of the sun at cloubbox top.
366 scale_factor=suns[0].radius*suns[0].radius/
367 (suns[0].radius*suns[0].radius+R_Sun2CloudboxTop*R_Sun2CloudboxTop);
368
369
370
371 } else {
373 out3 << "Disort calculation encountered aa_grid size larger than 1 in a case when it\n";
374 out3 << "does not use aa_grid. Calculations are performed as if there is no aa_grid.\n";
375
376 // set number of azimuth angle to 1
377 N_aa = 1;
378 }
379
380 init_ifield(cloudbox_field,
381 f_grid,
382 cloudbox_limits,
383 za_grid.nelem(),
384 N_aa,
385 stokes_dim);
386
387
388 Vector albedo(f_grid.nelem(), 0.);
389 Numeric btemp;
390
391 if (inc_angle<0 || inc_angle>90) {
393 albedo,
394 btemp,
395 surface_rtprop_agenda,
396 f_grid,
397 za_grid,
398 z_surface(0,0),
399 verbosity);
400 } else {
402 albedo,
403 btemp,
404 surface_rtprop_agenda,
405 f_grid,
406 z_surface(0,0),
407 inc_angle);
408 }
409
410 run_cdisort(ws,
411 cloudbox_field,
412 disort_aux,
413 f_grid,
414 p_grid,
415 z_field(joker, 0, 0),
416 z_surface(0, 0),
417 t_field(joker, 0, 0),
418 vmr_field(joker, joker, 0, 0),
419 pnd_field(joker, joker, 0, 0),
420 scat_data,
421 suns,
422 propmat_clearsky_agenda,
423 gas_scattering_agenda,
424 cloudbox_limits,
425 btemp,
426 albedo,
427 za_grid,
428 aa_grid,
429 sun_rte_los,
430 gas_scattering_do,
431 sun_on,
432 disort_aux_vars,
433 scale_factor,
434 nstreams,
435 Npfct,
436 only_tro,
437 cdisort_quiet,
438 emission,
439 intensity_correction,
440 verbosity);
441}
442
443
444/* Workspace method: Doxygen documentation will be auto-generated */
446 // WS Output:
447 Tensor7& spectral_radiance_field,
448 ArrayOfMatrix& disort_aux,
449 // WS Input
450 const Index& atmfields_checked,
451 const Index& atmgeom_checked,
452 const Agenda& propmat_clearsky_agenda,
453 const Agenda& gas_scattering_agenda,
454 const Index& atmosphere_dim,
455 const Tensor3& t_field,
456 const Tensor3& z_field,
457 const Tensor4& vmr_field,
458 const Vector& p_grid,
459 const Vector& lat_true,
460 const Vector& lon_true,
461 const Vector& refellipsoid,
462 const ArrayOfSun& suns,
463 const Vector& f_grid,
464 const Vector& za_grid,
465 const Vector& aa_grid,
466 const Index& stokes_dim,
467 const Matrix& z_surface,
468 const Numeric& surface_skin_t,
469 const Vector& surface_scalar_reflectivity,
470 const Index& gas_scattering_do,
471 const Index& suns_do,
472 const ArrayOfString& disort_aux_vars,
473 const Index& nstreams,
474 const Index& cdisort_quiet,
475 const Index& emission,
476 const Index& intensity_correction,
477 const Verbosity& verbosity) {
478
479 if (atmosphere_dim != 1)
480 throw runtime_error(
481 "For running DISORT, atmospheric dimensionality "
482 "must be 1.\n");
483
484 // Set cloudbox to cover complete atmosphere
485 Index cloudbox_on;
486 ArrayOfIndex cloudbox_limits;
487 const Index cloudbox_checked = 1;
488 //
489 cloudboxSetFullAtm(cloudbox_on,
490 cloudbox_limits,
491 atmosphere_dim,
492 p_grid,
493 Vector(0),
494 Vector(0),
495 0.,
496 verbosity);
497
498 // Create data matching no particles
499 Tensor4 pnd_field;
500 ArrayOfTensor4 dpnd_field_dx;
502 const Index scat_data_checked = 1;
503 //
504 pnd_fieldZero(pnd_field,
505 dpnd_field_dx,
506 scat_data,
507 atmosphere_dim,
508 f_grid,
509 cloudbox_limits,
511 verbosity);
512
513 Matrix optical_depth_dummy;
514
516 // WS Output:
517 spectral_radiance_field,
518 disort_aux,
519 // WS Input
520 atmfields_checked,
521 atmgeom_checked,
522 scat_data_checked,
523 cloudbox_checked,
524 cloudbox_on,
525 cloudbox_limits,
526 propmat_clearsky_agenda,
527 gas_scattering_agenda,
528 atmosphere_dim,
529 pnd_field,
530 t_field,
531 z_field,
532 vmr_field,
533 p_grid,
534 lat_true,
535 lon_true,
536 refellipsoid,
537 scat_data,
538 suns,
539 f_grid,
540 za_grid,
541 aa_grid,
542 stokes_dim,
543 z_surface,
544 surface_skin_t,
545 surface_scalar_reflectivity,
546 gas_scattering_do,
547 suns_do,
548 disort_aux_vars,
549 nstreams,
550 181,
551 cdisort_quiet,
552 0,
553 emission,
554 intensity_correction,
555 verbosity);
556
557}
558
559/* Workspace method: Doxygen documentation will be auto-generated */
561 // WS Output:
562 Tensor5& spectral_irradiance_field,
563 ArrayOfMatrix& disort_aux,
564 // WS Input
565 const Index& atmfields_checked,
566 const Index& atmgeom_checked,
567 const Index& scat_data_checked,
568 const Agenda& propmat_clearsky_agenda,
569 const Agenda& gas_scattering_agenda,
570 const Index& atmosphere_dim,
571 const Tensor4& pnd_field,
572 const Tensor3& t_field,
573 const Tensor3& z_field,
574 const Tensor4& vmr_field,
575 const Vector& p_grid,
576 const Vector& lat_true,
577 const Vector& lon_true,
578 const Vector& refellipsoid,
579 const ArrayOfArrayOfSingleScatteringData& scat_data,
580 const ArrayOfSun& suns,
581 const Vector& f_grid,
582 const Index& stokes_dim,
583 const Matrix& z_surface,
584 const Numeric& surface_skin_t,
585 const Vector& surface_scalar_reflectivity,
586 const Index& gas_scattering_do,
587 const Index& suns_do,
588 const ArrayOfString& disort_aux_vars,
589 const Index& nstreams,
590 const Index& Npfct,
591 const Index& only_tro,
592 const Index& cdisort_quiet,
593 const Index& emission,
594 const Index& intensity_correction,
595 const Verbosity& verbosity) {
596
597 // Set cloudbox to cover complete atmosphere
598 Index cloudbox_on;
599 ArrayOfIndex cloudbox_limits;
600 cloudboxSetFullAtm(cloudbox_on,
601 cloudbox_limits,
602 atmosphere_dim,
603 p_grid,
604 Vector(0),
605 Vector(0),
606 0.,
607 verbosity);
608
609 const Index Nf = f_grid.nelem();
610 const Index Np_cloud = cloudbox_limits[1] - cloudbox_limits[0] + 1;
611
612 check_disort_irradiance_input(atmfields_checked,
613 atmgeom_checked,
614 scat_data_checked,
615 atmosphere_dim,
616 stokes_dim,
617 scat_data,
618 nstreams);
619
620 //Check for number of suns
621 ARTS_USER_ERROR_IF(suns.nelem() > 1,
622 "The simulation setup contains ",
623 suns.nelem(),
624 " suns. \n"
625 "Disort can handle only one sun.")
626
627 //allocate Varibale for direct (sun) source
628 Vector sun_rte_los;
629 Vector sun_pos(3);
630 Vector cloudboxtop_pos(3);
631 Index sun_on = suns_do;
632 Numeric scale_factor;
633
634 spectral_irradiance_field.resize(Nf, Np_cloud, 1, 1, 2);
635 spectral_irradiance_field = NAN;
636
637 if (sun_on){
638
639 Vector lon_grid{lon_true[0] - 0.1, lon_true[0] + 0.1};
640 Vector lat_grid{lat_true[0] - 0.1, lat_true[0] + 0.1};
641
642 //Position of sun
643 sun_pos = {suns[0].distance, suns[0].latitude, suns[0].longitude};
644
645 // Position of top of cloudbox
646 cloudboxtop_pos = {
647 z_field(cloudbox_limits[1], 0, 0), lat_true[0], lon_true[0]};
648
649 // calculate local position of sun at top of cloudbox
651 3,
652 lat_grid,
653 lon_grid,
654 refellipsoid,
655 cloudboxtop_pos,
656 sun_pos,
657 verbosity);
658
659 //FIXME: IF we want to be correct and include refraction, we must calculate the
660 // local position of sun via ppathFromRtePos2. The question is, is this needed,
661 // because DISORT does not handle refraction at all.
662
663 // Check if sun is above horizon, if not switch it off
664 if (sun_rte_los[0] >= 90) {
665 sun_on = 0;
666
668 out0 << "Sun is below the horizon\n";
669 out0 << "Sun is ignored.\n";
670 }
671
672 //get the cloudbox top distance to earth center.
673 Numeric R_TOA = refell2r(refellipsoid,
674 lat_true[0]) +
675 cloudboxtop_pos[0];
676
677 //get the distance between sun and cloudbox top
678 Numeric R_Sun2CloudboxTop;
679 distance3D(R_Sun2CloudboxTop,
680 R_TOA,
681 lat_true[0],
682 lon_true[0],
683 sun_pos[0],
684 sun_pos[1],
685 sun_pos[2]);
686
687 // Geometric scaling factor, scales the sun spectral irradiance at the surface
688 // of the sun to the spectral irradiance of the sun at cloubbox top.
689 scale_factor=suns[0].radius*suns[0].radius/
690 (suns[0].radius*suns[0].radius+R_Sun2CloudboxTop*R_Sun2CloudboxTop);
691
692 }
693
694 Vector albedo(f_grid.nelem(), 0.);
695 Numeric btemp;
696
698 albedo, btemp, f_grid, surface_skin_t, surface_scalar_reflectivity);
699
701 spectral_irradiance_field,
702 disort_aux,
703 f_grid,
704 p_grid,
705 z_field(joker, 0, 0),
706 z_surface(0, 0),
707 t_field(joker, 0, 0),
708 vmr_field(joker, joker, 0, 0),
709 pnd_field(joker, joker, 0, 0),
710 scat_data,
711 suns,
712 propmat_clearsky_agenda,
713 gas_scattering_agenda,
714 cloudbox_limits,
715 btemp,
716 albedo,
717 sun_rte_los,
718 gas_scattering_do,
719 sun_on,
720 disort_aux_vars,
721 scale_factor,
722 nstreams,
723 Npfct,
724 only_tro,
725 cdisort_quiet,
726 emission,
727 intensity_correction,
728 verbosity);
729}
This file contains the definition of Array.
The Agenda class.
Index nelem() const ARTS_NOEXCEPT
Definition array.h:75
Workspace class.
#define ARTS_USER_ERROR_IF(condition,...)
Definition debug.h:137
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:1836
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 ArrayOfSun &suns, 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 sun_rte_los, const Index &gas_scattering_do, const Index &suns_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 sun source.
Definition disort.cc:932
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 ArrayOfSun &suns, 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 sun_rte_los, const Index &gas_scattering_do, const Index &suns_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 sun source.
Definition disort.cc:1371
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:286
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:2016
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:202
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:76
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:269
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:652
Numeric refell2r(ConstVectorView refellipsoid, const Numeric &lat)
refell2r
Definition geodetic.cc:1248
Array< RetrievalQuantity > ArrayOfRetrievalQuantity
Definition jacobian.h:529
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.
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.
void spectral_irradiance_fieldDisort(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 ArrayOfSun &suns, 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 &suns_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: spectral_irradiance_fieldDisort.
Definition m_disort.cc:560
void cloudbox_fieldDisortWithARTSSurface(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 ArrayOfSun &suns, 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 &suns_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: cloudbox_fieldDisortWithARTSSurface.
Definition m_disort.cc:228
void cloudbox_fieldDisort(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 ArrayOfSun &suns, 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 &suns_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: cloudbox_fieldDisort.
Definition m_disort.cc:29
void spectral_radiance_fieldDisortClearsky(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 ArrayOfSun &suns, 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 &suns_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: spectral_radiance_fieldDisortClearsky.
Definition m_disort.cc:445
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:2040
Declarations having to do with the four output streams.
#define CREATE_OUT3
Definition messages.h:189
#define CREATE_OUT0
Definition messages.h:186