ARTS  2.0.49
m_fos.cc
Go to the documentation of this file.
1 /* Copyright (C) 2010
2  Patrick Eriksson <patrick.eriksson@chalmers.se>
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License as published by the
6  Free Software Foundation; either version 2, or (at your option) any
7  later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17  USA. */
18 
19 
20 
21 /*===========================================================================
22  === File description
23  ===========================================================================*/
24 
38 /*===========================================================================
39  === External declarations
40  ===========================================================================*/
41 
42 #include <cmath>
43 #include <stdexcept>
44 #include "arts.h"
45 #include "arts_omp.h"
46 #include "auto_md.h"
47 #include "montecarlo.h"
48 #include "rte.h"
49 #include "special_interp.h"
50 
51 extern const Numeric DEG2RAD;
52 extern const Numeric RAD2DEG;
53 extern const Numeric PI;
54 
55 
56 
57 
58 
59 /*===========================================================================
60  === The functions (in alphabetical order)
61  ===========================================================================*/
62 
63 /* Workspace method: Doxygen documentation will be auto-generated */
65  Tensor3& fos_y,
66  Matrix& iy_error,
67  Index& iy_error_type,
68  Matrix& iy_aux,
69  ArrayOfTensor3& diy_dx,
70  const Vector& rte_pos,
71  const Index& atmosphere_dim,
72  const Vector& p_grid,
73  const Vector& lat_grid,
74  const Vector& lon_grid,
75  const Tensor3& z_field,
76  const Tensor3& t_field,
77  const Tensor4& vmr_field,
78  const Matrix& r_geoid,
79  const Matrix& z_surface,
80  const Index& cloudbox_on,
81  const ArrayOfIndex& cloudbox_limits,
82  const Index& stokes_dim,
83  const Vector& f_grid,
84  const Agenda& ppath_step_agenda,
85  const Agenda& emission_agenda,
86  const Agenda& abs_scalar_gas_agenda,
87  const Agenda& iy_clearsky_agenda,
88  const Tensor3& iy_transmission,
89  const Tensor4& pnd_field,
90  const ArrayOfSingleScatteringData& scat_data_raw,
91  const Agenda& opt_prop_gas_agenda,
92  const Agenda& fos_y_agenda,
93  const Matrix& fos_angles,
94  const Index& use_mean_scat_data,
95  const Index& fos_n,
96  const Index& fos_i,
97  const Verbosity& verbosity)
98 {
99  // Angles inside these ranges are considered to be equal for 1D and 2D
100  const Numeric dza = 0.01;
101  const Numeric daa = 1;
102 
103  const Index jacobian_do = 0;
104 
105  const Index nfosa = fos_angles.nrows();
106  Matrix tmp;
107 
108  fos_y.resize(nfosa,f_grid.nelem(),stokes_dim);
109 
110  if( fos_i == fos_n-1 )
111  {
112  if( atmosphere_dim == 1 )
113  {
114  for( Index ia=0; ia<nfosa; ia++ )
115  {
116  // To use already calculated data we demand that difference
117  // in za is < dza
118  Index ihit = -1;
119  //
120  for( Index it=ia-1; it>=0 && ihit<0; it-- )
121  {
122  if( fabs( fos_angles(ia,0) - fos_angles(it,0) ) < dza )
123  { ihit = it; }
124  }
125 
126  if( ihit >= 0 )
127  {
128  fos_y(ia,joker,joker) = fos_y(ihit,joker,joker);
129  }
130  else
131  {
132  iy_clearsky_agendaExecute( ws, tmp, iy_error, iy_error_type,
133  iy_aux, diy_dx, 0,
134  iy_transmission,
135  rte_pos, fos_angles(ia,Range(0,1)),
136  0, jacobian_do, p_grid,
137  lat_grid, lon_grid, t_field,
138  z_field, vmr_field,
139  iy_clearsky_agenda );
140  fos_y(ia,joker,joker) = tmp;
141  }
142  }
143 
144  }
145  else if( atmosphere_dim == 2 )
146  {
147  Vector rte_los(1);
148 
149  for( Index ia=0; ia<nfosa; ia++ )
150  {
151  // To use already calculated data we demand that difference
152  // in za is < dza, and aa is mirrored with respect to the
153  // orbit plane (aa(it) = -aa(ia)).
154  Index ihit = -1;
155  //
156  for( Index it=ia-1; it>=0 && ihit<0; it-- )
157  {
158  if( fabs( fos_angles(ia,0) - fos_angles(it,0) ) < dza )
159  {
160  if( fabs( fos_angles(ia,1) + fos_angles(it,1) ) < daa )
161  { ihit = it; }
162  }
163  }
164 
165  if( ihit >= 0 )
166  {
167  fos_y(ia,joker,joker) = fos_y(ihit,joker,joker);
168  }
169  else
170  {
171  // LOS
172  if( fabs(fos_angles(ia,1)) <= 90 )
173  { rte_los[0] = fos_angles(ia,0); }
174  else
175  { rte_los[0] = -fos_angles(ia,0); }
176 
177  // Create stretched latitude grid
178  //
179  Vector lat_stretched( lat_grid.nelem() );
180  //
181  // No strect needed for zenith, nadir and aa= 0 or +-180
182  if( fos_angles(ia,0) > 0 && fabs(fos_angles(ia,0)) < 180 &&
183  fos_angles(ia,1) != 0 && fabs(fos_angles(ia,1)) < 180 )
184  {
185  // Stretch factor (a max of 100 is applied)
186  const Numeric stretch = max( 100.0,
187  1.0/fabs(cos(DEG2RAD*fos_angles(ia,1))) );
188  const Numeric lat0 = rte_pos[1];
189  for( Index i=0; i<lat_grid.nelem(); i++ )
190  {
191  lat_stretched[i] = lat0 + stretch*(lat_grid[i]-lat0);
192  }
193  }
194  else
195  { lat_stretched = lat_grid; }
196 
197  iy_clearsky_agendaExecute( ws, tmp, iy_error, iy_error_type,
198  iy_aux, diy_dx, 0,
199  iy_transmission,
200  rte_pos, rte_los,
201  0, jacobian_do, p_grid,
202  lat_stretched, lon_grid, t_field,
203  z_field, vmr_field,
204  iy_clearsky_agenda );
205  fos_y(ia,joker,joker) = tmp;
206  }
207  }
208 
209  }
210  else if( atmosphere_dim == 3 )
211  {
212  for( Index ia=0; ia<nfosa; ia++ )
213  {
214  iy_clearsky_agendaExecute( ws, tmp, iy_error, iy_error_type,
215  iy_aux, diy_dx, 0,
216  iy_transmission,
217  rte_pos, fos_angles(ia,Range(0,2)),
218  0, jacobian_do, p_grid,
219  lat_grid, lon_grid, t_field,
220  z_field, vmr_field,
221  iy_clearsky_agenda );
222  fos_y(ia,joker,joker) = tmp;
223  }
224  }
225  }
226  else
227  {
228  // The azimuth information is lost for 1D and 2D. Then not possible to
229  // handle the latitude stretching for 2D. In fact, the latitude grid
230  // should be compressed for many angle combinations!
231  if( atmosphere_dim == 2 )
232  throw runtime_error(
233  "For atmosphere_dim = 2, only single scattering can be used." );
234 
235  Index nlos = 1 + (atmosphere_dim==3);
236 
237  for( Index ia=0; ia<nfosa; ia++ )
238  {
239  iyFOS( ws, tmp, iy_error, iy_error_type, iy_aux, diy_dx,
240  iy_transmission, rte_pos, fos_angles(ia,Range(0,nlos)),
241  jacobian_do, atmosphere_dim, p_grid, lat_grid, lon_grid,
242  z_field, t_field, vmr_field, r_geoid, z_surface,
243  cloudbox_on, cloudbox_limits, stokes_dim, f_grid,
244  ppath_step_agenda, emission_agenda,
245  abs_scalar_gas_agenda, iy_clearsky_agenda,
246  pnd_field, scat_data_raw, opt_prop_gas_agenda, fos_y_agenda,
247  fos_angles, use_mean_scat_data, fos_n, fos_i+1, verbosity);
248 
249  fos_y(ia,joker,joker) = tmp;
250  }
251  }
252 }
253 
254 
255 
256 /* Workspace method: Doxygen documentation will be auto-generated */
257 void iyFOS(Workspace& ws,
258  Matrix& iy,
259  Matrix& iy_error,
260  Index& iy_error_type,
261  Matrix& iy_aux,
262  ArrayOfTensor3& diy_dx,
263  const Tensor3& iy_transmission,
264  const Vector& rte_pos,
265  const Vector& rte_los,
266  const Index& jacobian_do,
267  const Index& atmosphere_dim,
268  const Vector& p_grid,
269  const Vector& lat_grid,
270  const Vector& lon_grid,
271  const Tensor3& z_field,
272  const Tensor3& t_field,
273  const Tensor4& vmr_field,
274  const Matrix& r_geoid,
275  const Matrix& z_surface,
276  const Index& cloudbox_on,
277  const ArrayOfIndex& cloudbox_limits,
278  const Index& stokes_dim,
279  const Vector& f_grid,
280  const Agenda& ppath_step_agenda,
281  const Agenda& emission_agenda,
282  const Agenda& abs_scalar_gas_agenda,
283  const Agenda& iy_clearsky_agenda,
284  const Tensor4& pnd_field,
285  const ArrayOfSingleScatteringData& scat_data_raw,
286  const Agenda& opt_prop_gas_agenda,
287  const Agenda& fos_y_agenda,
288  const Matrix& fos_angles,
289  const Index& use_mean_scat_data,
290  const Index& fos_n,
291  const Index& fos_i,
292  const Verbosity& verbosity)
293 {
294  // Input checks
295  if( jacobian_do )
296  throw runtime_error(
297  "This method does not yet provide any jacobians (jacobian_do must be 0)" );
298  if( !cloudbox_on )
299  throw runtime_error( "The cloudbox must be defined to use this method." );
300  if( fos_angles.ncols() != 3 )
301  throw runtime_error( "The WSV *fos_angles* must have three columns." );
302  if( max(fos_angles) <= PI )
303  throw runtime_error(
304  "The WSV *fos_angles* shall be in degrees (not radians)." );
305  if( min(fos_angles(joker,0))<0 || max(fos_angles(joker,0))>180 )
306  throw runtime_error(
307  "The zenith angles in *fos_angles* shall be inside [0,180]." );
308  if( min(fos_angles(joker,1))<-180 || max(fos_angles(joker,1))>180 )
309  throw runtime_error(
310  "The azimuth angles in *fos_angles* shall be inside [-180,180]." );
311  if( fos_angles(joker,2).sum() < 6 || fos_angles(joker,2).sum() > 20 )
312  throw runtime_error(
313  "The sum of integration weights in *fos_angles* shall be inside [2,20]." );
314  if( fos_n < 0 )
315  throw runtime_error( "The WSV *fos_n* must be >= 0." );
316  if( fos_i < 0 )
317  throw runtime_error( "The WSV *fos_i* must be >= 0." );
318 
319  // Determine ppath through the cloudbox
320  //
321  Ppath ppath;
322  //
323  ppath_calc( ws, ppath, ppath_step_agenda, atmosphere_dim, p_grid,
324  lat_grid, lon_grid, z_field, r_geoid, z_surface,
325  cloudbox_on, cloudbox_limits, rte_pos, rte_los, 0,
326  verbosity );
327 
328  // Check radiative background
329  const Index bkgr = ppath_what_background( ppath );
330  if( bkgr == 2 )
331  throw runtime_error( "Observations where (unscattered) propagation path "
332  "hits the surface inside the cloudbox are not yet "
333  "handled by this method." );
334  assert( bkgr == 3 );
335 
336  // Get atmospheric and RT quantities for each ppath point/step (inside box)
337  //
338  // If np = 1, we only need to determine the radiative background
339  //
340  // "atmvars"
341  Vector ppath_p, ppath_t, ppath_wind_u, ppath_wind_v, ppath_wind_w;
342  Matrix ppath_vmr, ppath_pnd;
343  // "rtvars"
344  Matrix ppath_emission, ppath_tau;
345  Tensor3 wind_field_dummy(0,0,0), iy_trans_new;
346  Tensor3 ppath_asp_abs_vec, ppath_pnd_abs_vec, total_transmission;
347  Tensor4 ppath_asp_ext_mat, ppath_pnd_ext_mat, ppath_transmission;
349  //
350  const Index np = ppath.np;
351  //
352  if( np > 1 )
353  {
354  // Get pressure, temperature and VMRs
355  get_ppath_atmvars( ppath_p, ppath_t, ppath_vmr,
356  ppath_wind_u, ppath_wind_v, ppath_wind_w,
357  ppath, atmosphere_dim, p_grid, t_field, vmr_field,
358  wind_field_dummy, wind_field_dummy, wind_field_dummy );
359 
360  // Particle number densities
361  get_ppath_pnd( ppath_pnd,
362  ppath, atmosphere_dim, cloudbox_limits, pnd_field );
363 
364  // Absorption and optical thickness for each step
365  get_ppath_cloudrtvars( ws, ppath_asp_abs_vec, ppath_asp_ext_mat,
366  ppath_pnd_abs_vec, ppath_pnd_ext_mat, ppath_transmission,
367  total_transmission, ppath_emission, scat_data,
368  abs_scalar_gas_agenda, emission_agenda, opt_prop_gas_agenda,
369  ppath, ppath_p, ppath_t, ppath_vmr, ppath_wind_u,
370  ppath_wind_v, ppath_wind_w, ppath_pnd, use_mean_scat_data,
371  scat_data_raw, stokes_dim, f_grid, atmosphere_dim, 1,
372  verbosity);
373  }
374  else // Just in case, should not happen
375  { assert( 0 ); }
376 
377  // iy_transmission
378  //
379  iy_transmission_mult( iy_trans_new, iy_transmission, total_transmission );
380 
381  // Get iy for unscattered direction
382  //
383  // Note that the Ppath positions (ppath.pos) for 1D have one column more
384  // than expected by most functions. Only the first atmosphere_dim values
385  // shall be copied.
386  //
387  Vector rte_pos2;
388  {
389  Vector rte_los2;
390  rte_pos2 = ppath.pos(ppath.np-1,Range(0,atmosphere_dim));
391  rte_los2 = ppath.los(ppath.np-1,joker);
392  //
393  iy_clearsky_agendaExecute( ws, iy, iy_error, iy_error_type,
394  iy_aux, diy_dx, 0, iy_trans_new,
395  rte_pos2, rte_los2, 0, jacobian_do,
396  p_grid, lat_grid, lon_grid, t_field,
397  z_field, vmr_field, iy_clearsky_agenda );
398  }
399 
400  // RT for part inside cloudbox
401  //
402  if( np > 1 )
403  {
404  // General variables
405  const Index nf = f_grid.nelem();
406  const Index nfosa = fos_angles.nrows(); // Number of FOS angles
407  Matrix s1(nf,stokes_dim); // Scattering source term
408  Matrix s2(nf,stokes_dim,0.0);
409 
410  // Help variables for handling of *use_mean_scat_data*
411  Index nfs, ivf;
412  //
413  if( use_mean_scat_data )
414  { nfs = 1; ivf = 0; }
415  else
416  { nfs = nf; ivf = 1; }
417 
418  // Loop ppath steps
419  for( Index ip=np-1; ip>=0; ip-- )
420  {
421  // Update scattering source term (new 1 is old 2)
422  s1 = s2;
423 
424  // Scattering source term (is zero if no particles)
425  if( max(ppath_pnd(joker,ip)) < 1e-3 )
426  {
427  s2 = 0.0;
428  }
429  else
430  {
431  // Determine incoming radiation (here Y, WSV equals fos_y)
432  Tensor3 Y;
433  fos_y_agendaExecute( ws, Y, rte_pos2, fos_angles, fos_n, fos_i,
434  fos_y_agenda );
435 
436 
437  // Direction of outgoing scattered radiation (which is reversed
438  // to LOS). Note that this rte_los2 is only used for extracting
439  // scattering properties.
440  Vector rte_los2;
441  mirror_los( rte_los2, ppath.los(ip,joker), atmosphere_dim );
442 
443  // Determine phase matrix for fov_angles
444  Tensor4 P( nfosa, nfs, stokes_dim, stokes_dim );
445  Matrix P1( stokes_dim, stokes_dim );
446  //
447  for( Index ia=0; ia<nfosa; ia++ )
448  {
449  for( Index iv=0; iv<nfs; iv++ )
450  {
451  pha_mat_singleCalc( P1, rte_los2[0], rte_los2[1],
452  fos_angles(ia,0), fos_angles(ia,1),
453  scat_data[iv], stokes_dim,
454  ppath_pnd(joker,ip), ppath_t[ip],
455  verbosity );
456  P(ia,iv,joker,joker) = P1;
457  }
458  }
459 
460  // Scattering source term
461  s2 = 0.0;
462  for( Index iv=0; iv<nf; iv++ )
463  {
464  Vector sp(stokes_dim);
465  for( Index ia=0; ia<nfosa; ia++ )
466  {
467  mult( sp, P(ia,iv*ivf,joker,joker), Y(ia,iv,joker) );
468  sp *= fos_angles(ia,2);
469  s2(iv,joker) += sp;
470  }
471  }
472  }
473 
474  // RT of ppath step (nothing to do when at upper point)
475  if( ip < np-1 )
476  {
477  // Loop frequencies
478  for( Index iv=0; iv<nf; iv++ )
479  {
480  // Calculate average of absorption, extinction etc.
481  Matrix ext_mat( stokes_dim, stokes_dim,0 );
482  Vector abs_vec(stokes_dim,0.0);
483  Vector s(stokes_dim,0.0);
484  Numeric b = 0.5 * ( ppath_emission(iv,ip) +
485  ppath_emission(iv,ip+1) );
486  for( Index is1=0; is1<stokes_dim; is1++ )
487  {
488  s[is1] = 0.5 * ( s1(iv,is1) + s2(iv,is1) );
489  abs_vec[is1] = 0.5 * (
490  ppath_asp_abs_vec(iv,is1,ip+1) +
491  ppath_asp_abs_vec(iv,is1,ip) +
492  ppath_pnd_abs_vec(iv,is1,ip+1) +
493  ppath_pnd_abs_vec(iv,is1,ip) );
494  for( Index is2=0; is2<stokes_dim; is2++ )
495  {
496  ext_mat(is1,is2) = 0.5 * (
497  ppath_asp_ext_mat(iv,is1,is2,ip+1) +
498  ppath_asp_ext_mat(iv,is1,is2,ip) +
499  ppath_pnd_ext_mat(iv,is1,is2,ip+1) +
500  ppath_pnd_ext_mat(iv,is1,is2,ip) );
501  }
502  }
503 
504  // RT for step
505  Matrix trans_mat(stokes_dim,stokes_dim);
506  //
507  rte_step_std( iy(iv,joker), trans_mat, ext_mat, abs_vec,
508  s, ppath.l_step[ip], b );
509  }
510  }
511  }
512  }
513 }
514 
Matrix
The Matrix class.
Definition: matpackI.h:767
ppath_calc
void ppath_calc(Workspace &ws, Ppath &ppath, const Agenda &ppath_step_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Matrix &r_geoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Vector &rte_pos, const Vector &rte_los, const bool &outside_cloudbox, const Verbosity &verbosity)
ppath_calc
Definition: ppath.cc:6171
iy_clearsky_agendaExecute
void iy_clearsky_agendaExecute(Workspace &ws, Matrix &iy, Matrix &iy_error, Index &iy_error_type, Matrix &iy_aux, ArrayOfTensor3 &diy_dx, const Index iy_agenda_call1, const Tensor3 &iy_transmission, const Vector &rte_pos, const Vector &rte_los, const Index cloudbox_on, const Index jacobian_do, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Agenda &input_agenda)
Definition: auto_md.cc:9483
iy_transmission_mult
void iy_transmission_mult(Tensor3 &iy_trans_new, ConstTensor3View iy_transmission, ConstTensor3View trans)
iy_transmission_mult
Definition: rte.cc:929
fos_yStandard
void fos_yStandard(Workspace &ws, Tensor3 &fos_y, Matrix &iy_error, Index &iy_error_type, Matrix &iy_aux, ArrayOfTensor3 &diy_dx, const Vector &rte_pos, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Tensor3 &t_field, const Tensor4 &vmr_field, const Matrix &r_geoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Index &stokes_dim, const Vector &f_grid, const Agenda &ppath_step_agenda, const Agenda &emission_agenda, const Agenda &abs_scalar_gas_agenda, const Agenda &iy_clearsky_agenda, const Tensor3 &iy_transmission, const Tensor4 &pnd_field, const ArrayOfSingleScatteringData &scat_data_raw, const Agenda &opt_prop_gas_agenda, const Agenda &fos_y_agenda, const Matrix &fos_angles, const Index &use_mean_scat_data, const Index &fos_n, const Index &fos_i, const Verbosity &verbosity)
Definition: m_fos.cc:64
auto_md.h
rte_step_std
void rte_step_std(VectorView stokes_vec, MatrixView trans_mat, ConstMatrixView ext_mat_av, ConstVectorView abs_vec_av, ConstVectorView sca_vec_av, const Numeric &l_step, const Numeric &rte_planck_value)
rte_step_std
Definition: rte.cc:1092
Tensor3
The Tensor3 class.
Definition: matpackIII.h:340
joker
const Joker joker
get_ppath_cloudrtvars
void get_ppath_cloudrtvars(Workspace &ws, Tensor3 &ppath_asp_abs_vec, Tensor4 &ppath_asp_ext_mat, Tensor3 &ppath_pnd_abs_vec, Tensor4 &ppath_pnd_ext_mat, Tensor4 &ppath_transmission, Tensor3 &total_transmission, Matrix &ppath_emission, Array< ArrayOfSingleScatteringData > &scat_data, const Agenda &abs_scalar_gas_agenda, const Agenda &emission_agenda, const Agenda &opt_prop_gas_agenda, const Ppath &ppath, ConstVectorView ppath_p, ConstVectorView ppath_t, ConstMatrixView ppath_vmr, ConstVectorView ppath_wind_u, ConstVectorView ppath_wind_v, ConstVectorView ppath_wind_w, ConstMatrixView ppath_pnd, const Index &use_mean_scat_data, const ArrayOfSingleScatteringData &scat_data_raw, const Index &stokes_dim, ConstVectorView f_grid, const Index &atmosphere_dim, const Index &emission_do, const Verbosity &verbosity)
get_ppath_cloudrtvars
Definition: rte.cc:672
get_ppath_atmvars
void get_ppath_atmvars(Vector &ppath_p, Vector &ppath_t, Matrix &ppath_vmr, Vector &ppath_wind_u, Vector &ppath_wind_v, Vector &ppath_wind_w, const Ppath &ppath, const Index &atmosphere_dim, ConstVectorView p_grid, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstTensor3View wind_u_field, ConstTensor3View wind_v_field, ConstTensor3View wind_w_field)
get_ppath_atmvars
Definition: rte.cc:383
DEG2RAD
const Numeric DEG2RAD
ConstMatrixView::nrows
Index nrows() const
Returns the number of rows.
Definition: matpackI.cc:796
montecarlo.h
Tensor4
The Tensor4 class.
Definition: matpackIV.h:375
Ppath
The structure to describe a propagation path and releated quantities.
Definition: ppath.h:59
Tensor3::resize
void resize(Index p, Index r, Index c)
Resize function.
Definition: matpackIII.cc:863
Agenda
The Agenda class.
Definition: agenda_class.h:44
iyFOS
void iyFOS(Workspace &ws, Matrix &iy, Matrix &iy_error, Index &iy_error_type, Matrix &iy_aux, ArrayOfTensor3 &diy_dx, const Tensor3 &iy_transmission, const Vector &rte_pos, const Vector &rte_los, const Index &jacobian_do, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Tensor3 &t_field, const Tensor4 &vmr_field, const Matrix &r_geoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Index &stokes_dim, const Vector &f_grid, const Agenda &ppath_step_agenda, const Agenda &emission_agenda, const Agenda &abs_scalar_gas_agenda, const Agenda &iy_clearsky_agenda, const Tensor4 &pnd_field, const ArrayOfSingleScatteringData &scat_data_raw, const Agenda &opt_prop_gas_agenda, const Agenda &fos_y_agenda, const Matrix &fos_angles, const Index &use_mean_scat_data, const Index &fos_n, const Index &fos_i, const Verbosity &verbosity)
Definition: m_fos.cc:257
Array
This can be used to make arrays out of anything.
Definition: array.h:103
mult
void mult(VectorView y, const ConstMatrixView &M, const ConstVectorView &x)
Matrix Vector multiplication.
Definition: matpackI.cc:1607
ConstMatrixView::ncols
Index ncols() const
Returns the number of columns.
Definition: matpackI.cc:802
Ppath::los
Matrix los
Definition: ppath.h:69
Ppath::np
Index np
Definition: ppath.h:61
ConstVectorView::nelem
Index nelem() const
Returns the number of elements.
Definition: matpackI.cc:175
Numeric
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
Verbosity
Definition: messages.h:50
Ppath::l_step
Vector l_step
Definition: ppath.h:65
RAD2DEG
const Numeric RAD2DEG
PI
const Numeric PI
max
#define max(a, b)
Definition: continua.cc:13097
Range
The range class.
Definition: matpackI.h:148
get_ppath_pnd
void get_ppath_pnd(Matrix &ppath_pnd, const Ppath &ppath, const Index &atmosphere_dim, const ArrayOfIndex &cloudbox_limits, ConstTensor4View pnd_field)
get_ppath_pnd
Definition: rte.cc:479
mirror_los
void mirror_los(Vector &los_mirrored, ConstVectorView los, const Index &atmosphere_dim)
mirror_los
Definition: rte.cc:1016
min
#define min(a, b)
Definition: continua.cc:13096
rte.h
Declaration of functions in rte.cc.
Workspace
Workspace class.
Definition: workspace_ng.h:47
special_interp.h
Header file for special_interp.cc.
Index
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
ppath_what_background
Index ppath_what_background(const Ppath &ppath)
ppath_what_background
Definition: ppath.cc:2561
Vector
The Vector class.
Definition: matpackI.h:555
arts_omp.h
Header file for helper functions for OpenMP.
pha_mat_singleCalc
void pha_mat_singleCalc(MatrixView Z, const Numeric za_sca, const Numeric aa_sca, const Numeric za_inc, const Numeric aa_inc, const ArrayOfSingleScatteringData &scat_data_mono, const Index stokes_dim, ConstVectorView pnd_vec, const Numeric rte_temperature, const Verbosity &verbosity)
pha_mat_singleCalc
Definition: montecarlo.cc:1456
Ppath::pos
Matrix pos
Definition: ppath.h:63
arts.h
The global header file for ARTS.