72 const Agenda& ppath_agenda,
74 const Index& atmgeom_checked,
79 const Index& cloudbox_on,
80 const Index& cloudbox_checked,
81 const Index& ppath_inside_cloudbox_do,
89 if( atmgeom_checked != 1 )
90 throw runtime_error(
"The atmospheric geometry must be flagged to have " 91 "passed a consistency check (atmgeom_checked=1)." );
92 if( cloudbox_checked != 1 )
93 throw runtime_error(
"The cloudbox must be flagged to have " 94 "passed a consistency check (cloudbox_checked=1)." );
97 cloudbox_on, ppath_inside_cloudbox_do, t_field, z_field,
98 vmr_field, f_grid, ppath_agenda );
109 const Agenda& ppath_step_agenda,
110 const Index& atmosphere_dim,
118 const Vector& refellipsoid,
128 if( atmosphere_dim == 2 )
129 throw runtime_error(
"2D atmospheres not yet handled. Support for negative" 130 " zenith angles needed. Remind me (Patrick) to fix this." );
136 lon_grid, refellipsoid, rte_pos, rte_pos2, verbosity );
140 lon_grid, rte_pos ) + rte_pos[0];
142 lon_grid, rte_pos2 ) + rte_pos2[0];
146 Numeric l12, lat1=0, x1, y1=0, z1;
147 if( atmosphere_dim <= 2 )
149 if( atmosphere_dim == 2 )
150 { lat1 = rte_pos[1]; }
157 r2, rte_pos2[1], rte_pos2[2] );
158 sph2cart( x1, y1, z1, r1, rte_pos[1], rte_pos[2] );
180 const Index maxiter=99;
181 Vector t_za(maxiter,-999), t_dza(maxiter,-999);
193 ppath_calc( ws, ppt, ppath_step_agenda, atmosphere_dim, p_grid, lat_grid,
194 lon_grid, t_field, z_field, vmr_field,
196 rte_pos, rte_los, ppath_lraytrace, 0, verbosity );
204 while( lip >= l12 && ip > 0 )
207 if( atmosphere_dim <= 2 )
210 {
distance3D( lip, r1, rte_pos[1], rte_pos[2],
211 ppt.
r[ip], ppt.
pos(ip,1), ppt.
pos(ip,2) ); }
223 za_new = rte_los[0] - 1;
224 za_upp_limit = rte_los[0];
234 if( atmosphere_dim <= 2 )
246 posc[0] = rc -
pos2refell_r( atmosphere_dim, refellipsoid,
247 lat_grid, lon_grid, posc );
253 poslos2cart( xip, yip, zip, dxip, dyip, dzip, ppt.
r[ip],
254 ppt.
pos(ip,1), ppt.
pos(ip,2),
255 ppt.
los(ip,0), ppt.
los(ip,1) );
260 dxip, dyip, dzip, x1, y1, z1, l12 );
261 cart2sph( rc, latc, lonc, xc, yc, zc, ppt.
pos(ip,1),
262 ppt.
pos(ip,2), ppt.
los(ip,0), ppt.
los(ip,1) );
265 posc[0] = rc -
pos2refell_r( atmosphere_dim, refellipsoid,
266 lat_grid, lon_grid, posc );
270 lat_grid, lon_grid, refellipsoid, rte_pos, posc, verbosity );
272 dza = los[0] - rte_los_geom[0];
276 t_za[it] = rte_los[0];
285 if( dza > 0 && rte_los[0] < za_upp_limit )
286 { za_upp_limit = rte_los[0]; }
287 else if( dza < 0 && rte_los[0] > za_low_limit )
288 { za_low_limit = rte_los[0]; }
292 if(
abs(dza) <= za_accuracy )
296 else if( za_upp_limit - za_low_limit <= za_accuracy/10 )
298 if(
max(t_dza) < -10*za_accuracy )
301 out3 <<
" Ground intersection determined !!!\n";
307 out3 <<
" Zenith angle search range closed !!!\n";
314 if( ntries >= maxiter )
317 out3 <<
" Too many iterations !!!\n";
323 { za_new = rte_los[0] - dza; }
329 const Index i0 = it - nfit + 1;
335 if( atmosphere_dim == 3 )
336 { daa = los[1] - rte_los_geom[1]; }
344 abs(za_new-rte_los[0]) < 0.99*za_accuracy ||
345 za_new <= za_low_limit ||
346 za_new >= za_upp_limit )
348 rte_los[0] = (za_low_limit+za_upp_limit)/2;
353 if( atmosphere_dim == 3 )
354 { rte_los[1] -= daa; }
363 ppath_lraytrace /= pplrt_factor;
365 if( ppath_lraytrace >= pplrt_lowest )
367 out2 <<
" Re-start with ppath_lraytrace = " << ppath_lraytrace;
369 ppath_step_agenda, atmosphere_dim,
370 p_grid, lat_grid, lon_grid, t_field, z_field,
371 vmr_field, f_grid, refellipsoid,
372 z_surface, rte_pos, rte_pos2, za_accuracy,
373 pplrt_factor, pplrt_lowest, verbosity );
399 if( atmosphere_dim <= 2 )
415 if( atmosphere_dim <= 2 )
418 ppt.
pos(ip,1), ppt.
los(ip,0) ); }
421 xc, yc, zc, dxip, dyip, dzip,
423 ppt.
pos(ip,1), ppt.
pos(ip,2),
424 ppt.
los(ip,0), ppt.
los(ip,1) ); }
433 const Index i = ip+1;
434 if( atmosphere_dim <= 2 )
437 ppt.
pos(ip,1), ppt.
los(ip,0) ); }
440 ppath.
los(i,0), ppath.
los(i,1), xc, yc, zc,
443 ppt.
pos(ip,1), ppt.
pos(ip,2),
444 ppt.
los(ip,0), ppt.
los(ip,1) ); }
451 assert( ll < ppt.
lstep[i-1] );
459 atmosphere_dim, p_grid, lat_grid, lon_grid, z_field,
460 ppath.
pos(i,
Range(0,atmosphere_dim)) );
461 if( atmosphere_dim >= 2 )
464 if( atmosphere_dim == 3 )
481 const Agenda& ppath_step_agenda,
482 const Index& ppath_inside_cloudbox_do,
483 const Index& atmosphere_dim,
491 const Vector& refellipsoid,
493 const Index& cloudbox_on,
497 const Numeric& ppath_lraytrace,
500 ppath_calc( ws, ppath, ppath_step_agenda, atmosphere_dim, p_grid, lat_grid,
501 lon_grid, t_field, z_field, vmr_field, f_grid,
502 refellipsoid, z_surface, cloudbox_on, cloudbox_limits, rte_pos,
503 rte_los, ppath_lraytrace, ppath_inside_cloudbox_do, verbosity );
513 const Index& atmosphere_dim,
517 const Vector& refellipsoid,
530 if( atmosphere_dim == 1 )
532 refellipsoid, z_surface(0,0), ppath_lmax ); }
534 else if( atmosphere_dim == 2 )
537 z_surface(
joker,0), ppath_lmax ); }
539 else if( atmosphere_dim == 3 )
541 z_field, refellipsoid, z_surface, ppath_lmax ); }
544 {
throw runtime_error(
"The atmospheric dimensionality must be 1-3." );}
549 assert( ppath_step.
np == 1 );
550 ppath_step.
nreal[0] = 1;
562 const Agenda& refr_index_air_agenda,
563 const Index& atmosphere_dim,
570 const Vector& refellipsoid,
574 const Numeric& ppath_lraytrace,
579 assert( ppath_lraytrace > 0 );
585 if( atmosphere_dim == 1 )
588 z_field, t_field, vmr_field,
589 f_grid, refellipsoid, z_surface(0,0),
590 ppath_lmax, refr_index_air_agenda,
591 "linear_basic", ppath_lraytrace );
593 else if( atmosphere_dim == 2 )
596 z_field, t_field, vmr_field,
597 f_grid, refellipsoid, z_surface(
joker,0),
598 ppath_lmax, refr_index_air_agenda,
599 "linear_basic", ppath_lraytrace );
601 else if( atmosphere_dim == 3 )
604 z_field, t_field, vmr_field,
605 f_grid, refellipsoid, z_surface,
606 ppath_lmax, refr_index_air_agenda,
607 "linear_basic", ppath_lraytrace );
610 {
throw runtime_error(
"The atmospheric dimensionality must be 1-3." );}
615 assert( ppath_step.
np == 1 );
616 if( atmosphere_dim == 1 )
618 refr_index_air_agenda, p_grid, refellipsoid,
619 z_field, t_field, vmr_field,
620 f_grid, ppath_step.
r[0] );
622 else if( atmosphere_dim == 2 )
624 refr_index_air_agenda, p_grid, lat_grid,
625 refellipsoid, z_field, t_field, vmr_field,
626 f_grid, ppath_step.
r[0],
627 ppath_step.
pos(0,1) );
631 refr_index_air_agenda, p_grid, lat_grid, lon_grid,
632 refellipsoid, z_field, t_field, vmr_field,
633 f_grid, ppath_step.
r[0],
634 ppath_step.
pos(0,1), ppath_step.
pos(0,2) );
645 const Index& atmosphere_dim,
653 if( atmosphere_dim == 1 )
669 const Index& atmosphere_dim,
672 const Vector& refellipsoid,
683 lon_grid, rte_pos ) + rte_pos[0];
685 lon_grid, rte_pos2 ) + rte_pos2[0];
688 Numeric lat1, lon1=0, x1, y1=0, z1;
692 if( atmosphere_dim == 1 )
697 pol2cart( x2, z2, r2, rte_pos2[1] );
699 else if( atmosphere_dim == 2 )
703 pol2cart( x2, z2, r2, rte_pos2[1] );
709 sph2cart( x1, y1, z1, r1, lat1, lon1 );
710 sph2cart( x2, y2, z2, r2, rte_pos2[1], rte_pos2[2] );
716 los2xyz( za, aa, r1, lat1, lon1, x1, y1, z1, x2, y2, z2 );
718 if( atmosphere_dim == 3 )
728 if( atmosphere_dim == 2 && aa < 0 )
729 { rte_los[0] = -za; }
739 const Index& atmosphere_dim,
748 rte_pos.
resize(atmosphere_dim);
750 if( atmosphere_dim >= 2 )
751 { rte_pos[1] = lat; }
752 if( atmosphere_dim == 3 )
753 { rte_pos[2] = lon; }
762 const Index& atmosphere_dim,
771 throw runtime_error(
"The input *ppath* is empty." );
773 throw runtime_error(
"Internal inconsistency in *ppath* (size of data " 774 "does not match np)." );
776 rte_pos = ppath.
pos(np-1,
Range(0,atmosphere_dim));
777 if( atmosphere_dim < 3 )
778 { rte_los = ppath.
los(np-1,
Range(0,1)); }
780 { rte_los = ppath.
los(np-1,
Range(0,2)); }
799 tan_pos = sqrt( -1 );
803 tan_pos[0] = ppath.
pos(it,0);
804 tan_pos[1] = ppath.
pos(it,1);
806 { tan_pos[2] = ppath.
pos(it,2); }
826 os <<
"Lowest altitude found at the end of the propagation path.\n" 827 <<
"This indicates that the tangent point is either above the\n" 828 <<
"top-of-the-atmosphere or below the planet's surface.";
832 os <<
"Tangent point position:\n-----------------------\n" 833 <<
" z = " << ppath.
pos(it,0)/1e3 <<
" km\n" 834 <<
" lat = " << ppath.
pos(it,1) <<
" deg";
836 os <<
"\n lon: " << ppath.
pos(it,2) <<
" deg";
850 const Agenda& refr_index_air_agenda,
856 const Vector& refellipsoid,
857 const Index& atmosphere_dim,
859 const Vector& ztan_vector,
862 if( atmosphere_dim != 1 ) {
863 throw runtime_error(
"The function can only be used for 1D atmospheres." );
866 if( ztan_vector.
nelem() != sensor_pos.
nrows() ) {
868 os <<
"The number of altitudes in true tangent altitude vector must\n" 869 <<
"match the number of positions in *sensor_pos*.";
870 throw runtime_error( os.str() );
877 Numeric refr_index_air, refr_index_air_group;
882 if( ztan_vector[i] > sensor_pos(i,0) )
885 os <<
"Invalid observation geometry: sensor (at z=" << sensor_pos(i,0)
886 <<
"m) is located below the requested tangent altitude (tanh=" 887 << ztan_vector[i] <<
"m)";
888 throw runtime_error( os.str() );
893 refr_index_air_agenda, p_grid, refellipsoid[0],
894 z_field, t_field, vmr_field, f_grid,
895 ztan_vector[i] + refellipsoid[0] );
898 za_vector[i] = 180 -
RAD2DEG* asin( refr_index_air *
899 (refellipsoid[0] + ztan_vector[i]) /
900 (refellipsoid[0] + sensor_pos(i,0)) );
913 const Vector& refellipsoid,
914 const Index& atmosphere_dim,
915 const Vector& ztan_vector,
918 if( atmosphere_dim != 1 ) {
919 throw runtime_error(
"The function can only be used for 1D atmospheres." );
924 if( ztan_vector.
nelem() != npos )
927 os <<
"The number of altitudes in the geometric tangent altitude vector\n" 928 <<
"must match the number of positions in *sensor_pos*.";
929 throw runtime_error( os.str() );
934 for(
Index i=0; i<npos; i++ )
936 if( ztan_vector[i] > sensor_pos(i,0) )
939 os <<
"Invalid observation geometry: sensor (at z=" << sensor_pos(i,0)
940 <<
"m) is located below the requested tangent altitude (tanh=" 941 << ztan_vector[i] <<
"m)";
942 throw runtime_error( os.str() );
947 refellipsoid[0] + sensor_pos(i,0) );
955 const String& file_format,
959 const Index& file_index,
963 Ppath ppath_partial = ppath;
967 ppath_partial.
gp_p = empty_gp;
968 ppath_partial.
gp_lat = empty_gp;
969 ppath_partial.
gp_lon = empty_gp;
979 WriteXML( file_format, ppath_partial, filename, 0,
980 "ppath",
"",
"", verbosity );
INDEX Index
The type to use for all integer numbers and indices.
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.
void TangentPointPrint(const Ppath &ppath, const Index &level, const Verbosity &verbosity)
WORKSPACE METHOD: TangentPointPrint.
void ppath_agendaExecute(Workspace &ws, Ppath &ppath, const Numeric ppath_lraytrace, const Vector &rte_pos, const Vector &rte_los, const Vector &rte_pos2, const Index cloudbox_on, const Index ppath_inside_cloudbox_do, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &f_grid, const Agenda &input_agenda)
void get_refr_index_2d(Workspace &ws, Numeric &refr_index_air, Numeric &refr_index_air_group, const Agenda &refr_index_air_agenda, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView refellipsoid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, const Numeric &r, const Numeric &lat)
get_refr_index_2d
void los2xyz(Numeric &za, Numeric &aa, const Numeric &r1, const Numeric &lat1, const Numeric &lon1, const Numeric &x1, const Numeric &y1, const Numeric &z1, const Numeric &x2, const Numeric &y2, const Numeric &z2)
los2xyz
void distance2D(Numeric &l, const Numeric &r1, const Numeric &lat1, const Numeric &r2, const Numeric &lat2)
distance2D
void get_refr_index_3d(Workspace &ws, Numeric &refr_index_air, Numeric &refr_index_air_group, const Agenda &refr_index_air_agenda, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstVectorView refellipsoid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, const Numeric &r, const Numeric &lat, const Numeric &lon)
Numeric geompath_za_at_r(const Numeric &ppc, const Numeric &a_za, const Numeric &r)
geompath_za_at_r
void pol2cart(Numeric &x, Numeric &z, const Numeric &r, const Numeric &lat)
pol2cart
Declarations having to do with the four output streams.
void ppath_copy(Ppath &ppath1, const Ppath &ppath2, const Index &ncopy)
ppath_copy
void line_circle_intersect(Numeric &x, Numeric &z, const Numeric &xl, const Numeric &zl, const Numeric &dx, const Numeric &dz, const Numeric &xc, const Numeric &zc, const Numeric &r)
geomtanpoint2d
void ppath_step_refr_2d(Workspace &ws, Ppath &ppath, ConstVectorView p_grid, ConstVectorView lat_grid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, ConstVectorView refellipsoid, ConstVectorView z_surface, const Numeric &lmax, const Agenda &refr_index_air_agenda, const String &rtrace_method, const Numeric &lraytrace)
ppath_step_refr_2d
void ppathCalc(Workspace &ws, Ppath &ppath, const Agenda &ppath_agenda, const Numeric &ppath_lraytrace, const Index &atmgeom_checked, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &f_grid, const Index &cloudbox_on, const Index &cloudbox_checked, const Index &ppath_inside_cloudbox_do, const Vector &rte_pos, const Vector &rte_los, const Vector &rte_pos2, const Verbosity &)
WORKSPACE METHOD: ppathCalc.
Linear algebra functions.
void ppath_step_geom_3d(Ppath &ppath, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstMatrixView z_surface, const Numeric &lmax)
ppath_step_geom_3d
void rte_posSet(Vector &rte_pos, const Index &atmosphere_dim, const Numeric &z, const Numeric &lat, const Numeric &lon, const Verbosity &)
WORKSPACE METHOD: rte_posSet.
void ppathFromRtePos2(Workspace &ws, Ppath &ppath, Vector &rte_los, Numeric &ppath_lraytrace, const Agenda &ppath_step_agenda, const Index &atmosphere_dim, 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 Vector &f_grid, const Vector &refellipsoid, const Matrix &z_surface, const Vector &rte_pos, const Vector &rte_pos2, const Numeric &za_accuracy, const Numeric &pplrt_factor, const Numeric &pplrt_lowest, const Verbosity &verbosity)
WORKSPACE METHOD: ppathFromRtePos2.
cmplx FADDEEVA() w(cmplx z, double relerr)
This file contains basic functions to handle XML data files.
void get_refr_index_1d(Workspace &ws, Numeric &refr_index_air, Numeric &refr_index_air_group, const Agenda &refr_index_air_agenda, ConstVectorView p_grid, ConstVectorView refellipsoid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, const Numeric &r)
get_refr_index_1d
Index nelem() const
Returns the number of elements.
Structure to store a grid position.
void ppath_stepRefractionBasic(Workspace &ws, Ppath &ppath_step, const Agenda &refr_index_air_agenda, 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 Vector &refellipsoid, const Matrix &z_surface, const Vector &f_grid, const Numeric &ppath_lmax, const Numeric &ppath_lraytrace, const Verbosity &)
WORKSPACE METHOD: ppath_stepRefractionBasic.
Array< Index > ArrayOfIndex
An array of Index.
void ppath_stepGeometric(Ppath &ppath_step, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Vector &refellipsoid, const Matrix &z_surface, const Numeric &ppath_lmax, const Verbosity &)
WORKSPACE METHOD: ppath_stepGeometric.
Index ppath_what_background(const Ppath &ppath)
ppath_what_background
void filename_xml_with_index(String &filename, const Index &file_index, const String &varname)
Gives the default filename, with file index, for the XML formats.
The implementation for String, the ARTS string class.
Index ncols() const
Returns the number of columns.
void ppath_set_background(Ppath &ppath, const Index &case_nr)
ppath_set_background
The global header file for ARTS.
void ppath_init_structure(Ppath &ppath, const Index &atmosphere_dim, const Index &np)
ppath_init_structure
void cart2poslos(Numeric &r, Numeric &lat, Numeric &za, const Numeric &x, const Numeric &z, const Numeric &dx, const Numeric &dz, const Numeric &ppc, const Numeric &lat0, const Numeric &za0)
cart2poslos
void ppathWriteXMLPartial(const String &file_format, const Ppath &ppath, const String &f, const Index &file_index, const Verbosity &verbosity)
WORKSPACE METHOD: ppathWriteXMLPartial.
void find_tanpoint(Index &it, const Ppath ppath)
find_tanpoint
NUMERIC Numeric
The type to use for all floating point numbers.
void distance3D(Numeric &l, const Numeric &r1, const Numeric &lat1, const Numeric &lon1, const Numeric &r2, const Numeric &lat2, const Numeric &lon2)
distance3D
void gridpos_copy(GridPos &gp_new, const GridPos &gp_old)
gridpos_copy
Header file for special_interp.cc.
Propagation path structure and functions.
void ppath_step_geom_2d(Ppath &ppath, ConstVectorView lat_grid, ConstMatrixView z_field, ConstVectorView refellipsoid, ConstVectorView z_surface, const Numeric &lmax)
ppath_step_geom_2d
void ppath_step_geom_1d(Ppath &ppath, ConstVectorView z_field, ConstVectorView refellipsoid, const Numeric &z_surface, const Numeric &lmax)
ppath_step_geom_1d
This can be used to make arrays out of anything.
void ppathStepByStep(Workspace &ws, Ppath &ppath, const Agenda &ppath_step_agenda, const Index &ppath_inside_cloudbox_do, const Index &atmosphere_dim, 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 Vector &f_grid, const Vector &refellipsoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Vector &rte_pos, const Vector &rte_los, const Numeric &ppath_lraytrace, const Verbosity &verbosity)
WORKSPACE METHOD: ppathStepByStep.
void rte_pos_losMoveToStartOfPpath(Vector &rte_pos, Vector &rte_los, const Index &atmosphere_dim, const Ppath &ppath, const Verbosity &)
WORKSPACE METHOD: rte_pos_losMoveToStartOfPpath.
void ppath_step_refr_1d(Workspace &ws, Ppath &ppath, ConstVectorView p_grid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, ConstVectorView refellipsoid, const Numeric &z_surface, const Numeric &lmax, const Agenda &refr_index_air_agenda, const String &rtrace_method, const Numeric &lraytrace)
ppath_step_refr_1d
void rte_pos2gridpos(GridPos &gp_p, GridPos &gp_lat, GridPos &gp_lon, const Index &atmosphere_dim, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView rte_pos)
rte_pos2gridpos
void cart2pol(Numeric &r, Numeric &lat, const Numeric &x, const Numeric &z, const Numeric &lat0, const Numeric &za0)
cart2pol
void resize(Index n)
Assignment operator from VectorView.
Workspace methods and template functions for supergeneric XML IO.
void TangentPointExtract(Vector &tan_pos, const Ppath &ppath, const Verbosity &)
WORKSPACE METHOD: TangentPointExtract.
void VectorZtanToZaRefr1D(Workspace &ws, Vector &za_vector, const Agenda &refr_index_air_agenda, const Matrix &sensor_pos, const Vector &p_grid, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &refellipsoid, const Index &atmosphere_dim, const Vector &f_grid, const Vector &ztan_vector, const Verbosity &)
WORKSPACE METHOD: VectorZtanToZaRefr1D.
void cart2sph(Numeric &r, Numeric &lat, Numeric &lon, const Numeric &x, const Numeric &y, const Numeric &z, const Numeric &lat0, const Numeric &lon0, const Numeric &za0, const Numeric &aa0)
cart2sph
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 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &f_grid, const Vector &refellipsoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Vector &rte_pos, const Vector &rte_los, const Numeric &ppath_lraytrace, const bool &ppath_inside_cloudbox_do, const Verbosity &verbosity)
ppath_calc
void WriteXML(Workspace &ws, const String &file_format, const Agenda &v, const String &f, const Index &no_clobber, const String &v_name, const String &f_name, const String &no_clobber_name, const Verbosity &verbosity)
The structure to describe a propagation path and releated quantities.
void linreg(Vector &p, ConstVectorView x, ConstVectorView y)
void sph2cart(Numeric &x, Numeric &y, Numeric &z, const Numeric &r, const Numeric &lat, const Numeric &lon)
sph2cart
void ppath_step_refr_3d(Workspace &ws, Ppath &ppath, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, ConstVectorView refellipsoid, ConstMatrixView z_surface, const Numeric &lmax, const Agenda &refr_index_air_agenda, const String &rtrace_method, const Numeric &lraytrace)
ppath_step_refr_3d
void poslos2cart(Numeric &x, Numeric &z, Numeric &dx, Numeric &dz, const Numeric &r, const Numeric &lat, const Numeric &za)
poslos2cart
#define SWITCH_OUTPUT(x, y)
Index nrows() const
Returns the number of rows.
void line_sphere_intersect(Numeric &x, Numeric &y, Numeric &z, const Numeric &xl, const Numeric &yl, const Numeric &zl, const Numeric &dx, const Numeric &dy, const Numeric &dz, const Numeric &xc, const Numeric &yc, const Numeric &zc, const Numeric &r)
geomtanpoint
void rte_losSet(Vector &rte_los, const Index &atmosphere_dim, const Numeric &za, const Numeric &aa, const Verbosity &)
WORKSPACE METHOD: rte_losSet.
void VectorZtanToZa1D(Vector &za_vector, const Matrix &sensor_pos, const Vector &refellipsoid, const Index &atmosphere_dim, const Vector &ztan_vector, const Verbosity &)
WORKSPACE METHOD: VectorZtanToZa1D.
Numeric pos2refell_r(const Index &atmosphere_dim, ConstVectorView refellipsoid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstVectorView rte_pos)
pos2refell_r